From df1a60421ea1119cbbbd143ef288d294851baaac Mon Sep 17 00:00:00 2001 From: Prismo <93129268+prism0x@users.noreply.github.com> Date: Sat, 19 Mar 2022 14:02:25 +0100 Subject: [PATCH 001/555] Add example PolygonOnAxes (#2610) * Added example to examples.rst * Minor * Update docs/source/examples.rst Co-authored-by: Benjamin Hackl * Update docs/source/examples.rst Co-authored-by: Benjamin Hackl * Update docs/source/examples.rst Co-authored-by: Benjamin Hackl * Removed wait()s Co-authored-by: Benjamin Hackl --- docs/source/examples.rst | 58 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/docs/source/examples.rst b/docs/source/examples.rst index d787c7111d..79ed27a9c4 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -407,6 +407,64 @@ Plotting with Manim self.add(ax, labels, curve_1, curve_2, line_1, line_2, riemann_area, area) +.. manim:: PolygonOnAxes + :ref_classes: Axes Polygon + + class PolygonOnAxes(Scene): + def get_rectangle_corners(self, bottom_left, top_right): + return [ + (top_right[0], top_right[1]), + (bottom_left[0], top_right[1]), + (bottom_left[0], bottom_left[0]), + (top_right[0], bottom_left[0]), + ] + + def construct(self): + ax = Axes( + x_range=[0, 10], + y_range=[0, 10], + x_length=6, + y_length=6, + axis_config={"include_tip": False}, + ) + + t = ValueTracker(5) + k = 25 + + graph = ax.plot( + lambda x: k / x, + color=YELLOW_D, + x_range=[k / 10, 10.0, 0.01], + use_smoothing=False, + ) + + def get_rectangle(): + polygon = Polygon( + *[ + ax.c2p(*i) + for i in self.get_rectangle_corners( + (0, 0), (t.get_value(), k / t.get_value()) + ) + ] + ) + polygon.stroke_width = 1 + polygon.set_fill(BLUE, opacity=0.5) + polygon.set_stroke(YELLOW_B) + return polygon + + polygon = always_redraw(get_rectangle) + + dot = Dot() + dot.add_updater(lambda x: x.move_to(ax.c2p(t.get_value(), k / t.get_value()))) + dot.set_z_index(10) + + self.add(ax, graph, dot) + self.play(Create(polygon)) + self.play(t.animate.set_value(10)) + self.play(t.animate.set_value(k / 10)) + self.play(t.animate.set_value(5)) + + .. manim:: HeatDiagramPlot :save_last_frame: :ref_modules: manim.mobject.coordinate_systems From ef8a9198f43679abb2140b20fe6b814e08fe834d Mon Sep 17 00:00:00 2001 From: Darylgolden Date: Sun, 20 Mar 2022 01:14:57 +0800 Subject: [PATCH 002/555] Run tests on Linux-aarch64 (#2561) * try self-hosted runners * skip test_force_window_opengl_render_with_format on linux arm * remove debug stuff * pre-commit Co-authored-by: Naveen M K --- .github/workflows/ci.yml | 47 +++++++++++++++++++ .../opengl/test_opengl_renderer.py | 4 ++ 2 files changed, 51 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1562099233..554ebcb269 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,53 @@ on: - main jobs: + test-arm: + runs-on: self-hosted + env: + DISPLAY: :0 + PYTEST_ADDOPTS: "--color=yes" # colors in pytest + strategy: + fail-fast: false + matrix: + python: ['3.7.12', '3.10.2'] + steps: + - name: Checkout the repository + uses: actions/checkout@v2 + + - name: Check Runner + run: | + which latex + which ffmpeg + latex --version + ffmpeg -version + which python + python --version + + - name: Activate Python ${{ matrix.python }} + run: | + echo "/root/.pyenv/versions/${{ matrix.python }}/bin:/root/.poetry/bin:$PATH" > $GITHUB_PATH + + - name: Show Python Version + run: | + python --version --version + + - name: Install Manim + run: | + poetry install -E webgl_renderer + + - name: Run tests + run: | + poetry run pytest + + - name: Run module doctests + run: | + poetry run pytest --cov-append --doctest-modules --ignore-glob="*opengl*" manim + + - name: Run doctests in rst files + run: | + cd docs && pip install -r requirements.txt && poetry run make doctest O=-tskip-manim + + test: runs-on: ${{ matrix.os }} env: diff --git a/tests/test_scene_rendering/opengl/test_opengl_renderer.py b/tests/test_scene_rendering/opengl/test_opengl_renderer.py index 188bbb58a3..6f6f7e8b59 100644 --- a/tests/test_scene_rendering/opengl/test_opengl_renderer.py +++ b/tests/test_scene_rendering/opengl/test_opengl_renderer.py @@ -1,5 +1,6 @@ from __future__ import annotations +import platform from unittest.mock import Mock import pytest @@ -35,6 +36,9 @@ def test_force_window_opengl_render_with_movies( renderer.window.close() +@pytest.mark.skipif( + platform.processor() == "aarch64", reason="Fails on Linux-ARM runners" +) def test_force_window_opengl_render_with_format( using_temp_opengl_config, force_window_config_pngs, From c9fe05cd5eb403e276707fba7176b3b9a48cca76 Mon Sep 17 00:00:00 2001 From: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> Date: Mon, 21 Mar 2022 21:03:02 +0530 Subject: [PATCH 003/555] Improve Example (#2619) Co-authored-by: Naveen M K --- manim/mobject/mobject.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index b2ababb994..63869698ab 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -2221,11 +2221,9 @@ def construct(self): class ArrangeInGrid(Scene): def construct(self): - #Add some numbered boxes: - np.random.seed(3) boxes = VGroup(*[ - Rectangle(WHITE, np.random.random()+.5, np.random.random()+.5).add(Text(str(i+1)).scale(0.5)) - for i in range(22) + Rectangle(WHITE, 0.5, 0.5).add(Text(str(i+1)).scale(0.5)) + for i in range(24) ]) self.add(boxes) @@ -2233,7 +2231,8 @@ def construct(self): buff=(0.25,0.5), col_alignments="lccccr", row_alignments="uccd", - col_widths=[2, *[None]*4, 2], + col_widths=[1, *[None]*4, 1], + row_heights=[1, None, None, 1], flow_order="dr" ) From cecb2f87f910a2f2d53d4c06a41320ef66663ad1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 22 Mar 2022 10:03:00 +0800 Subject: [PATCH 004/555] [pre-commit.ci] pre-commit autoupdate (#2631) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-mypy: v0.940 → v0.941](https://github.com/pre-commit/mirrors-mypy/compare/v0.940...v0.941) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 032c6143b4..987a11a5de 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -56,7 +56,7 @@ repos: flake8-docstrings==1.6.0, flake8-rst-docstrings==0.2.3, flake8-pytest-style==1.5.0, flake8-simplify==0.14.1, flake8-comprehensions>=3.6.1] - repo: https://github.com/pre-commit/mirrors-mypy - rev: 'v0.940' + rev: 'v0.941' hooks: - id: mypy additional_dependencies: [types-decorator, types-docutils, types-requests, types-setuptools] From cddd47ca53fc9b7fc460cab9c9dc42f6bce00f9b Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Thu, 24 Mar 2022 08:39:24 +0530 Subject: [PATCH 005/555] Remove WebGL renderer (#2630) * Remove WebGL renderer Fixes https://github.com/ManimCommunity/manim/issues/2629 * Remove occurence of webgl_renderer in CI config * Fix Dockerfile * Remove reference to webgl renderer in config docs * Update poetry lock file * Remove some scripts related to webgl * Don't use rich 12.0 version * Ignore rich 12.0.0 * Fix dependency, it was wrong previously --- .github/workflows/ci.yml | 4 +- docker/Dockerfile | 2 +- docs/source/tutorials/configuration.rst | 7 +- manim/__init__.py | 2 - manim/_config/default.cfg | 8 +- manim/_config/utils.py | 33 +- manim/camera/webgl_camera.py | 35 - manim/cli/render/commands.py | 24 - manim/cli/render/render_options.py | 14 +- manim/constants.py | 7 - manim/grpc/__init__.py | 0 manim/grpc/gen/__init__.py | 8 - manim/grpc/gen/frameserver_pb2.py | 1638 ----------------------- manim/grpc/gen/frameserver_pb2_grpc.py | 171 --- manim/grpc/gen/renderserver_pb2.py | 376 ------ manim/grpc/gen/renderserver_pb2_grpc.py | 81 -- manim/grpc/impl/__init__.py | 0 manim/grpc/impl/frame_server_impl.py | 409 ------ manim/grpc/proto/frameserver.proto | 114 -- manim/grpc/proto/renderserver.proto | 28 - manim/renderer/webgl_renderer.py | 67 - poetry.lock | 1031 +++++++------- pyproject.toml | 5 +- scripts/simple_cors_http_server.py | 19 - scripts/update_protos.py | 19 - 25 files changed, 470 insertions(+), 3632 deletions(-) delete mode 100644 manim/camera/webgl_camera.py delete mode 100644 manim/grpc/__init__.py delete mode 100644 manim/grpc/gen/__init__.py delete mode 100644 manim/grpc/gen/frameserver_pb2.py delete mode 100644 manim/grpc/gen/frameserver_pb2_grpc.py delete mode 100644 manim/grpc/gen/renderserver_pb2.py delete mode 100644 manim/grpc/gen/renderserver_pb2_grpc.py delete mode 100644 manim/grpc/impl/__init__.py delete mode 100644 manim/grpc/impl/frame_server_impl.py delete mode 100644 manim/grpc/proto/frameserver.proto delete mode 100644 manim/grpc/proto/renderserver.proto delete mode 100644 manim/renderer/webgl_renderer.py delete mode 100755 scripts/simple_cors_http_server.py delete mode 100755 scripts/update_protos.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 554ebcb269..7760788203 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: - name: Install Manim run: | - poetry install -E webgl_renderer + poetry install - name: Run tests run: | @@ -202,7 +202,7 @@ jobs: - name: Install manim run: | poetry config experimental.new-installer false - poetry install -E webgl_renderer + poetry install - name: Run tests run: | diff --git a/docker/Dockerfile b/docker/Dockerfile index 309c4cd15b..0661546b9c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -30,7 +30,7 @@ RUN wget -O /tmp/install-tl-unx.tar.gz http://mirror.ctan.org/systems/texlive/tl # clone and build manim COPY . /opt/manim WORKDIR /opt/manim -RUN pip install --no-cache .[jupyterlab,webgl_renderer] +RUN pip install --no-cache .[jupyterlab] RUN pip install -r docs/requirements.txt diff --git a/docs/source/tutorials/configuration.rst b/docs/source/tutorials/configuration.rst index be219b1bce..22d9ad9822 100644 --- a/docs/source/tutorials/configuration.rst +++ b/docs/source/tutorials/configuration.rst @@ -360,7 +360,6 @@ A list of all config options 'progress_bar', 'quality', 'right_side', 'save_as_gif', 'save_last_frame', 'save_pngs', 'scene_names', 'show_in_file_browser', 'sound', 'tex_dir', 'tex_template', 'tex_template_file', 'text_dir', 'top', 'transparent', - 'upto_animation_number', 'use_opengl_renderer', 'use_webgl_renderer', - 'verbosity', 'video_dir', 'webgl_renderer_path', 'window_position', - 'window_monitor', 'window_size', 'write_all', 'write_to_movie', 'enable_wireframe', - 'force_window'] + 'upto_animation_number', 'use_opengl_renderer', 'verbosity', 'video_dir', + 'window_position', 'window_monitor', 'window_size', 'write_all', 'write_to_movie', + 'enable_wireframe', 'force_window'] diff --git a/manim/__init__.py b/manim/__init__.py index 2ddf5ac301..a3fafb7314 100644 --- a/manim/__init__.py +++ b/manim/__init__.py @@ -27,8 +27,6 @@ config.renderer = parsed_renderer elif arg == "--use_opengl_renderer": config.renderer = "opengl" - elif arg == "--use_webgl_renderer": - config.renderer = "webgl" # many scripts depend on this -> has to be loaded first from .utils.commands import * # isort:skip diff --git a/manim/_config/default.cfg b/manim/_config/default.cfg index eb48df5cde..1d70cb9f08 100644 --- a/manim/_config/default.cfg +++ b/manim/_config/default.cfg @@ -93,15 +93,9 @@ tex_dir = {media_dir}/Tex text_dir = {media_dir}/texts partial_movie_dir = {video_dir}/partial_movie_files/{scene_name} -# --renderer [cairo|opengl|webgl] +# --renderer [cairo|opengl] renderer = cairo -# --use_webgl_renderer -use_webgl_renderer = False - -# --webgl_renderer_path -webgl_renderer_path = - # --use_opengl_renderer use_opengl_renderer = False diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 823d1ad41b..ee7e9a6407 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -255,7 +255,6 @@ class MyScene(Scene): "input_file", "media_embed", "media_width", - "webgl_renderer_path", "log_dir", "log_to_file", "max_files_cached", @@ -282,7 +281,6 @@ class MyScene(Scene): "upto_animation_number", "renderer", "use_opengl_renderer", - "use_webgl_renderer", "enable_gui", "gui_location", "use_projection_fill_shaders", @@ -537,7 +535,6 @@ def digest_parser(self, parser: configparser.ConfigParser) -> ManimConfig: "flush_cache", "custom_folders", "use_opengl_renderer", - "use_webgl_renderer", "enable_gui", "fullscreen", "use_projection_fill_shaders", @@ -577,7 +574,6 @@ def digest_parser(self, parser: configparser.ConfigParser) -> ManimConfig: "movie_file_extension", "background_color", "renderer", - "webgl_renderer_path", "window_position", ]: setattr(self, key, parser["CLI"].get(key, fallback="", raw=True)) @@ -710,7 +706,6 @@ def digest_args(self, args: argparse.Namespace) -> ManimConfig: "renderer", "background_color", "use_opengl_renderer", - "use_webgl_renderer", "enable_gui", "fullscreen", "use_projection_fill_shaders", @@ -1181,7 +1176,7 @@ def dry_run(self, val: bool) -> None: @property def renderer(self): - """Renderer: "cairo", "opengl", "webgl""" + """Renderer: "cairo", "opengl""" return self._d["renderer"] @renderer.setter @@ -1221,7 +1216,7 @@ def renderer(self, val: str) -> None: self._set_from_list( "renderer", val, - ["cairo", "opengl", "webgl"], + ["cairo", "opengl"], ) @property @@ -1236,31 +1231,9 @@ def use_opengl_renderer(self, val: bool) -> None: self._set_from_list( "renderer", "opengl", - ["cairo", "opengl", "webgl"], + ["cairo", "opengl"], ) - @property - def use_webgl_renderer(self): - """Whether or not to use WebGL renderer.""" - return self._d["use_webgl_renderer"] - - @use_webgl_renderer.setter - def use_webgl_renderer(self, val: bool) -> None: - self._d["use_webgl_renderer"] = val - if val: - self._set_from_list( - "webgl", - "renderer", - ["cairo", "opengl", "webgl"], - ) - self["disable_caching"] = True - - webgl_renderer_path = property( - lambda self: self._d["webgl_renderer_path"], - lambda self, val: self._d.__setitem__("webgl_renderer_path", val), - doc="Path to WebGL renderer.", - ) - media_dir = property( lambda self: self._d["media_dir"], lambda self, val: self._set_dir("media_dir", val), diff --git a/manim/camera/webgl_camera.py b/manim/camera/webgl_camera.py deleted file mode 100644 index adf4203d2e..0000000000 --- a/manim/camera/webgl_camera.py +++ /dev/null @@ -1,35 +0,0 @@ -from __future__ import annotations - -import copy - -from .camera import Camera - - -class WebGLCamera(Camera): - def __init__(self, **kwargs): - super().__init__(self, **kwargs) - self.serialized_frame = [] - self.pixel_array = None - - def display_multiple_non_background_colored_vmobjects(self, vmobjects, _): - for vmobject in vmobjects: - # TODO: Store a proto instead of JSON. - needs_redraw = False - point_hash = hash(tuple(vmobject.points.flatten())) - if vmobject.point_hash != point_hash: - vmobject.point_hash = point_hash - needs_redraw = True - self.serialized_frame.append( - { - "points": vmobject.points.tolist(), - "style": vmobject.get_style(simple=True), - "id": id(vmobject), - "needs_redraw": needs_redraw, - }, - ) - - def reset(self): - self.serialized_frame = [] - - def set_frame_to_background(self, background): - self.serialized_frame = copy.deepcopy(background) diff --git a/manim/cli/render/commands.py b/manim/cli/render/commands.py index f06344dbec..96a7943e58 100644 --- a/manim/cli/render/commands.py +++ b/manim/cli/render/commands.py @@ -50,16 +50,6 @@ def render( ) args["renderer"] = "opengl" - if args["use_webgl_renderer"]: - logger.warning( - "--use_webgl_renderer is deprecated, please use --renderer=webgl instead!", - ) - args["renderer"] = "webgl" - - if args["use_webgl_renderer"] and args["use_opengl_renderer"]: - logger.warning("You may select only one renderer!") - sys.exit() - if args["save_as_gif"]: logger.warning("--save_as_gif is deprecated, please use --format=gif instead!") args["format"] = "gif" @@ -120,20 +110,6 @@ def __repr__(self): except Exception: error_console.print_exception() sys.exit(1) - elif config.renderer == "webgl": - try: - from manim.grpc.impl import frame_server_impl - - server = frame_server_impl.get(file) - server.start() - server.wait_for_termination() - except ModuleNotFoundError: - console.print( - "Dependencies for the WebGL render are missing. Run " - "pip install manim[webgl_renderer] to install them.", - ) - error_console.print_exception() - sys.exit(1) else: for SceneClass in scene_classes_from_file(file): try: diff --git a/manim/cli/render/render_options.py b/manim/cli/render/render_options.py index 4bc67f8336..9b99e62722 100644 --- a/manim/cli/render/render_options.py +++ b/manim/cli/render/render_options.py @@ -95,7 +95,7 @@ def validate_resolution(ctx, param, value): ), option( "--renderer", - type=click.Choice(["cairo", "opengl", "webgl"], case_sensitive=False), + type=click.Choice(["cairo", "opengl"], case_sensitive=False), help="Select a renderer for your Scene.", default=None, ), @@ -105,18 +105,6 @@ def validate_resolution(ctx, param, value): help="Render scenes using OpenGL (Deprecated).", default=None, ), - option( - "--use_webgl_renderer", - is_flag=True, - help="Render scenes using the WebGL frontend (Deprecated).", - default=None, - ), - option( - "--webgl_renderer_path", - default=None, - type=click.Path(), - help="The path to the WebGL frontend.", - ), option( "-g", "--save_pngs", diff --git a/manim/constants.py b/manim/constants.py index 4f0b8e258b..6efde3b858 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -67,7 +67,6 @@ "GIF_FILE_EXTENSION", "FFMPEG_VERBOSITY_MAP", "VERBOSITY_CHOICES", - "WEBGL_RENDERER_INFO", "QUALITIES", "DEFAULT_QUALITY", "DEFAULT_QUALITY_SHORT", @@ -216,12 +215,6 @@ "CRITICAL": "fatal", } VERBOSITY_CHOICES = FFMPEG_VERBOSITY_MAP.keys() -WEBGL_RENDERER_INFO: str = ( - "The Electron frontend to Manim is hosted at " - "https://github.com/ManimCommunity/manim-renderer. After cloning and building it, " - "you can either start it prior to running Manim or specify the path to the " - "executable with the --webgl_renderer_path flag." -) # Video qualities QUALITIES: dict[str, dict[str, str | int | None]] = { diff --git a/manim/grpc/__init__.py b/manim/grpc/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/manim/grpc/gen/__init__.py b/manim/grpc/gen/__init__.py deleted file mode 100644 index 9eeae2a7ff..0000000000 --- a/manim/grpc/gen/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# https://github.com/protocolbuffers/protobuf/issues/1491#issuecomment-547504972 - -from __future__ import annotations - -import sys -from pathlib import Path - -sys.path.append(str(Path(__file__).parent)) diff --git a/manim/grpc/gen/frameserver_pb2.py b/manim/grpc/gen/frameserver_pb2.py deleted file mode 100644 index 571eba3459..0000000000 --- a/manim/grpc/gen/frameserver_pb2.py +++ /dev/null @@ -1,1638 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: frameserver.proto -"""Generated protocol buffer code.""" -from __future__ import annotations - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database - -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="frameserver.proto", - package="frameserver", - syntax="proto3", - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x11\x66rameserver.proto\x12\x0b\x66rameserver"I\n\x16\x46\x65tchSceneDataResponse\x12!\n\x05scene\x18\x01 \x01(\x0b\x32\x12.frameserver.Scene\x12\x0c\n\x04path\x18\x02 \x01(\t"[\n\x05Scene\x12\x0c\n\x04name\x18\x01 \x01(\t\x12*\n\nanimations\x18\x02 \x03(\x0b\x32\x16.frameserver.Animation\x12\x18\n\x10\x62\x61\x63kground_color\x18\x03 \x01(\t"\xfd\x02\n\tAnimation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x64uration\x18\x02 \x01(\x02\x12\x17\n\x0f\x65\x61sing_function\x18\x03 \x01(\t\x12G\n\x14\x61ttribute_tween_data\x18\x04 \x03(\x0b\x32).frameserver.Animation.AttributeTweenData\x12\x43\n\x12mobject_tween_data\x18\x05 \x03(\x0b\x32\'.frameserver.Animation.MobjectTweenData\x12\x1d\n\x15\x66lickered_mobject_ids\x18\x06 \x03(\t\x1aM\n\x12\x41ttributeTweenData\x12\x11\n\tattribute\x18\x01 \x01(\t\x12\x12\n\nstart_data\x18\x02 \x03(\x02\x12\x10\n\x08\x65nd_data\x18\x03 \x03(\x02\x1a;\n\x10MobjectTweenData\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1b\n\x13root_mobject_offset\x18\x02 \x03(\x02"(\n\x07Updater\x12\x1d\n\x15\x66lickered_mobject_ids\x18\x01 \x03(\t"k\n\x0c\x46rameRequest\x12\x11\n\tend_index\x18\x01 \x01(\x05\x12\x15\n\rfirst_request\x18\x02 \x01(\x08\x12\x17\n\x0f\x61nimation_index\x18\x03 \x01(\x05\x12\x18\n\x10\x61nimation_offset\x18\x04 \x01(\x02"u\n\x05Style\x12\x12\n\nfill_color\x18\x01 \x01(\t\x12\x14\n\x0c\x66ill_opacity\x18\x02 \x01(\x02\x12\x14\n\x0cstroke_color\x18\x03 \x01(\t\x12\x16\n\x0estroke_opacity\x18\x04 \x01(\x02\x12\x14\n\x0cstroke_width\x18\x05 \x01(\x02"(\n\x05Point\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02"\xb4\x02\n\x0bMobjectData\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x05style\x18\x02 \x01(\x0b\x32\x12.frameserver.Style\x12\x32\n\x04type\x18\x03 \x01(\x0e\x32$.frameserver.MobjectData.MobjectType\x12:\n\x17vectorized_mobject_data\x18\x04 \x01(\x0b\x32\x19.frameserver.VMobjectData\x12\x39\n\x12image_mobject_data\x18\x05 \x01(\x0b\x32\x1d.frameserver.ImageMobjectData\x12\x1b\n\x13root_mobject_offset\x18\x06 \x03(\x02".\n\x0bMobjectType\x12\x0c\n\x08VMOBJECT\x10\x00\x12\x11\n\rIMAGE_MOBJECT\x10\x01"H\n\x0cVMobjectData\x12"\n\x06points\x18\x01 \x03(\x0b\x32\x12.frameserver.Point\x12\x14\n\x0cneeds_redraw\x18\x02 \x01(\x08"c\n\x10ImageMobjectData\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0e\n\x06height\x18\x02 \x01(\x02\x12\r\n\x05width\x18\x03 \x01(\x02\x12"\n\x06\x63\x65nter\x18\x04 \x01(\x0b\x32\x12.frameserver.Point"l\n\tFrameData\x12\x0e\n\x06remove\x18\x01 \x03(\t\x12%\n\x03\x61\x64\x64\x18\x02 \x03(\x0b\x32\x18.frameserver.MobjectData\x12(\n\x06update\x18\x03 \x03(\x0b\x32\x18.frameserver.MobjectData"\xfa\x01\n\rFrameResponse\x12*\n\nframe_data\x18\x01 \x01(\x0b\x32\x16.frameserver.FrameData\x12\x16\n\x0escene_finished\x18\x02 \x01(\x08\x12*\n\nanimations\x18\x03 \x03(\x0b\x32\x16.frameserver.Animation\x12&\n\x08updaters\x18\x04 \x03(\x0b\x32\x14.frameserver.Updater\x12\x17\n\x0f\x61nimation_index\x18\x05 \x01(\x05\x12\x18\n\x10\x61nimation_offset\x18\x06 \x01(\x02\x12\x1e\n\x16\x61ll_animations_tweened\x18\x07 \x01(\x08"\x0e\n\x0c\x45mptyRequest"\x0f\n\rEmptyResponse2\xf0\x01\n\x0b\x46rameServer\x12G\n\x0eGetFrameAtTime\x12\x19.frameserver.FrameRequest\x1a\x1a.frameserver.FrameResponse\x12P\n\x0e\x46\x65tchSceneData\x12\x19.frameserver.EmptyRequest\x1a#.frameserver.FetchSceneDataResponse\x12\x46\n\rScriptUpdated\x12\x19.frameserver.EmptyRequest\x1a\x1a.frameserver.EmptyResponseb\x06proto3', -) - - -_MOBJECTDATA_MOBJECTTYPE = _descriptor.EnumDescriptor( - name="MobjectType", - full_name="frameserver.MobjectData.MobjectType", - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name="VMOBJECT", - index=0, - number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.EnumValueDescriptor( - name="IMAGE_MOBJECT", - index=1, - number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key, - ), - ], - containing_type=None, - serialized_options=None, - serialized_start=1161, - serialized_end=1207, -) -_sym_db.RegisterEnumDescriptor(_MOBJECTDATA_MOBJECTTYPE) - - -_FETCHSCENEDATARESPONSE = _descriptor.Descriptor( - name="FetchSceneDataResponse", - full_name="frameserver.FetchSceneDataResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="scene", - full_name="frameserver.FetchSceneDataResponse.scene", - index=0, - number=1, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="path", - full_name="frameserver.FetchSceneDataResponse.path", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=34, - serialized_end=107, -) - - -_SCENE = _descriptor.Descriptor( - name="Scene", - full_name="frameserver.Scene", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="frameserver.Scene.name", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="animations", - full_name="frameserver.Scene.animations", - index=1, - number=2, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="background_color", - full_name="frameserver.Scene.background_color", - index=2, - number=3, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=109, - serialized_end=200, -) - - -_ANIMATION_ATTRIBUTETWEENDATA = _descriptor.Descriptor( - name="AttributeTweenData", - full_name="frameserver.Animation.AttributeTweenData", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="attribute", - full_name="frameserver.Animation.AttributeTweenData.attribute", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="start_data", - full_name="frameserver.Animation.AttributeTweenData.start_data", - index=1, - number=2, - type=2, - cpp_type=6, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="end_data", - full_name="frameserver.Animation.AttributeTweenData.end_data", - index=2, - number=3, - type=2, - cpp_type=6, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=446, - serialized_end=523, -) - -_ANIMATION_MOBJECTTWEENDATA = _descriptor.Descriptor( - name="MobjectTweenData", - full_name="frameserver.Animation.MobjectTweenData", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="id", - full_name="frameserver.Animation.MobjectTweenData.id", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="root_mobject_offset", - full_name="frameserver.Animation.MobjectTweenData.root_mobject_offset", - index=1, - number=2, - type=2, - cpp_type=6, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=525, - serialized_end=584, -) - -_ANIMATION = _descriptor.Descriptor( - name="Animation", - full_name="frameserver.Animation", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="frameserver.Animation.name", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="duration", - full_name="frameserver.Animation.duration", - index=1, - number=2, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="easing_function", - full_name="frameserver.Animation.easing_function", - index=2, - number=3, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="attribute_tween_data", - full_name="frameserver.Animation.attribute_tween_data", - index=3, - number=4, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="mobject_tween_data", - full_name="frameserver.Animation.mobject_tween_data", - index=4, - number=5, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="flickered_mobject_ids", - full_name="frameserver.Animation.flickered_mobject_ids", - index=5, - number=6, - type=9, - cpp_type=9, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[ - _ANIMATION_ATTRIBUTETWEENDATA, - _ANIMATION_MOBJECTTWEENDATA, - ], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=203, - serialized_end=584, -) - - -_UPDATER = _descriptor.Descriptor( - name="Updater", - full_name="frameserver.Updater", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="flickered_mobject_ids", - full_name="frameserver.Updater.flickered_mobject_ids", - index=0, - number=1, - type=9, - cpp_type=9, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=586, - serialized_end=626, -) - - -_FRAMEREQUEST = _descriptor.Descriptor( - name="FrameRequest", - full_name="frameserver.FrameRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="end_index", - full_name="frameserver.FrameRequest.end_index", - index=0, - number=1, - type=5, - cpp_type=1, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="first_request", - full_name="frameserver.FrameRequest.first_request", - index=1, - number=2, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="animation_index", - full_name="frameserver.FrameRequest.animation_index", - index=2, - number=3, - type=5, - cpp_type=1, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="animation_offset", - full_name="frameserver.FrameRequest.animation_offset", - index=3, - number=4, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=628, - serialized_end=735, -) - - -_STYLE = _descriptor.Descriptor( - name="Style", - full_name="frameserver.Style", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="fill_color", - full_name="frameserver.Style.fill_color", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="fill_opacity", - full_name="frameserver.Style.fill_opacity", - index=1, - number=2, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="stroke_color", - full_name="frameserver.Style.stroke_color", - index=2, - number=3, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="stroke_opacity", - full_name="frameserver.Style.stroke_opacity", - index=3, - number=4, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="stroke_width", - full_name="frameserver.Style.stroke_width", - index=4, - number=5, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=737, - serialized_end=854, -) - - -_POINT = _descriptor.Descriptor( - name="Point", - full_name="frameserver.Point", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="x", - full_name="frameserver.Point.x", - index=0, - number=1, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="y", - full_name="frameserver.Point.y", - index=1, - number=2, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="z", - full_name="frameserver.Point.z", - index=2, - number=3, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=856, - serialized_end=896, -) - - -_MOBJECTDATA = _descriptor.Descriptor( - name="MobjectData", - full_name="frameserver.MobjectData", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="id", - full_name="frameserver.MobjectData.id", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="style", - full_name="frameserver.MobjectData.style", - index=1, - number=2, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="type", - full_name="frameserver.MobjectData.type", - index=2, - number=3, - type=14, - cpp_type=8, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="vectorized_mobject_data", - full_name="frameserver.MobjectData.vectorized_mobject_data", - index=3, - number=4, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="image_mobject_data", - full_name="frameserver.MobjectData.image_mobject_data", - index=4, - number=5, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="root_mobject_offset", - full_name="frameserver.MobjectData.root_mobject_offset", - index=5, - number=6, - type=2, - cpp_type=6, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[ - _MOBJECTDATA_MOBJECTTYPE, - ], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=899, - serialized_end=1207, -) - - -_VMOBJECTDATA = _descriptor.Descriptor( - name="VMobjectData", - full_name="frameserver.VMobjectData", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="points", - full_name="frameserver.VMobjectData.points", - index=0, - number=1, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="needs_redraw", - full_name="frameserver.VMobjectData.needs_redraw", - index=1, - number=2, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1209, - serialized_end=1281, -) - - -_IMAGEMOBJECTDATA = _descriptor.Descriptor( - name="ImageMobjectData", - full_name="frameserver.ImageMobjectData", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="path", - full_name="frameserver.ImageMobjectData.path", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="height", - full_name="frameserver.ImageMobjectData.height", - index=1, - number=2, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="width", - full_name="frameserver.ImageMobjectData.width", - index=2, - number=3, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="center", - full_name="frameserver.ImageMobjectData.center", - index=3, - number=4, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1283, - serialized_end=1382, -) - - -_FRAMEDATA = _descriptor.Descriptor( - name="FrameData", - full_name="frameserver.FrameData", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="remove", - full_name="frameserver.FrameData.remove", - index=0, - number=1, - type=9, - cpp_type=9, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="add", - full_name="frameserver.FrameData.add", - index=1, - number=2, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="update", - full_name="frameserver.FrameData.update", - index=2, - number=3, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1384, - serialized_end=1492, -) - - -_FRAMERESPONSE = _descriptor.Descriptor( - name="FrameResponse", - full_name="frameserver.FrameResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="frame_data", - full_name="frameserver.FrameResponse.frame_data", - index=0, - number=1, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="scene_finished", - full_name="frameserver.FrameResponse.scene_finished", - index=1, - number=2, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="animations", - full_name="frameserver.FrameResponse.animations", - index=2, - number=3, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="updaters", - full_name="frameserver.FrameResponse.updaters", - index=3, - number=4, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="animation_index", - full_name="frameserver.FrameResponse.animation_index", - index=4, - number=5, - type=5, - cpp_type=1, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="animation_offset", - full_name="frameserver.FrameResponse.animation_offset", - index=5, - number=6, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="all_animations_tweened", - full_name="frameserver.FrameResponse.all_animations_tweened", - index=6, - number=7, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1495, - serialized_end=1745, -) - - -_EMPTYREQUEST = _descriptor.Descriptor( - name="EmptyRequest", - full_name="frameserver.EmptyRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1747, - serialized_end=1761, -) - - -_EMPTYRESPONSE = _descriptor.Descriptor( - name="EmptyResponse", - full_name="frameserver.EmptyResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=1763, - serialized_end=1778, -) - -_FETCHSCENEDATARESPONSE.fields_by_name["scene"].message_type = _SCENE -_SCENE.fields_by_name["animations"].message_type = _ANIMATION -_ANIMATION_ATTRIBUTETWEENDATA.containing_type = _ANIMATION -_ANIMATION_MOBJECTTWEENDATA.containing_type = _ANIMATION -_ANIMATION.fields_by_name[ - "attribute_tween_data" -].message_type = _ANIMATION_ATTRIBUTETWEENDATA -_ANIMATION.fields_by_name[ - "mobject_tween_data" -].message_type = _ANIMATION_MOBJECTTWEENDATA -_MOBJECTDATA.fields_by_name["style"].message_type = _STYLE -_MOBJECTDATA.fields_by_name["type"].enum_type = _MOBJECTDATA_MOBJECTTYPE -_MOBJECTDATA.fields_by_name["vectorized_mobject_data"].message_type = _VMOBJECTDATA -_MOBJECTDATA.fields_by_name["image_mobject_data"].message_type = _IMAGEMOBJECTDATA -_MOBJECTDATA_MOBJECTTYPE.containing_type = _MOBJECTDATA -_VMOBJECTDATA.fields_by_name["points"].message_type = _POINT -_IMAGEMOBJECTDATA.fields_by_name["center"].message_type = _POINT -_FRAMEDATA.fields_by_name["add"].message_type = _MOBJECTDATA -_FRAMEDATA.fields_by_name["update"].message_type = _MOBJECTDATA -_FRAMERESPONSE.fields_by_name["frame_data"].message_type = _FRAMEDATA -_FRAMERESPONSE.fields_by_name["animations"].message_type = _ANIMATION -_FRAMERESPONSE.fields_by_name["updaters"].message_type = _UPDATER -DESCRIPTOR.message_types_by_name["FetchSceneDataResponse"] = _FETCHSCENEDATARESPONSE -DESCRIPTOR.message_types_by_name["Scene"] = _SCENE -DESCRIPTOR.message_types_by_name["Animation"] = _ANIMATION -DESCRIPTOR.message_types_by_name["Updater"] = _UPDATER -DESCRIPTOR.message_types_by_name["FrameRequest"] = _FRAMEREQUEST -DESCRIPTOR.message_types_by_name["Style"] = _STYLE -DESCRIPTOR.message_types_by_name["Point"] = _POINT -DESCRIPTOR.message_types_by_name["MobjectData"] = _MOBJECTDATA -DESCRIPTOR.message_types_by_name["VMobjectData"] = _VMOBJECTDATA -DESCRIPTOR.message_types_by_name["ImageMobjectData"] = _IMAGEMOBJECTDATA -DESCRIPTOR.message_types_by_name["FrameData"] = _FRAMEDATA -DESCRIPTOR.message_types_by_name["FrameResponse"] = _FRAMERESPONSE -DESCRIPTOR.message_types_by_name["EmptyRequest"] = _EMPTYREQUEST -DESCRIPTOR.message_types_by_name["EmptyResponse"] = _EMPTYRESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -FetchSceneDataResponse = _reflection.GeneratedProtocolMessageType( - "FetchSceneDataResponse", - (_message.Message,), - { - "DESCRIPTOR": _FETCHSCENEDATARESPONSE, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.FetchSceneDataResponse) - }, -) -_sym_db.RegisterMessage(FetchSceneDataResponse) - -Scene = _reflection.GeneratedProtocolMessageType( - "Scene", - (_message.Message,), - { - "DESCRIPTOR": _SCENE, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.Scene) - }, -) -_sym_db.RegisterMessage(Scene) - -Animation = _reflection.GeneratedProtocolMessageType( - "Animation", - (_message.Message,), - { - "AttributeTweenData": _reflection.GeneratedProtocolMessageType( - "AttributeTweenData", - (_message.Message,), - { - "DESCRIPTOR": _ANIMATION_ATTRIBUTETWEENDATA, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.Animation.AttributeTweenData) - }, - ), - "MobjectTweenData": _reflection.GeneratedProtocolMessageType( - "MobjectTweenData", - (_message.Message,), - { - "DESCRIPTOR": _ANIMATION_MOBJECTTWEENDATA, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.Animation.MobjectTweenData) - }, - ), - "DESCRIPTOR": _ANIMATION, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.Animation) - }, -) -_sym_db.RegisterMessage(Animation) -_sym_db.RegisterMessage(Animation.AttributeTweenData) -_sym_db.RegisterMessage(Animation.MobjectTweenData) - -Updater = _reflection.GeneratedProtocolMessageType( - "Updater", - (_message.Message,), - { - "DESCRIPTOR": _UPDATER, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.Updater) - }, -) -_sym_db.RegisterMessage(Updater) - -FrameRequest = _reflection.GeneratedProtocolMessageType( - "FrameRequest", - (_message.Message,), - { - "DESCRIPTOR": _FRAMEREQUEST, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.FrameRequest) - }, -) -_sym_db.RegisterMessage(FrameRequest) - -Style = _reflection.GeneratedProtocolMessageType( - "Style", - (_message.Message,), - { - "DESCRIPTOR": _STYLE, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.Style) - }, -) -_sym_db.RegisterMessage(Style) - -Point = _reflection.GeneratedProtocolMessageType( - "Point", - (_message.Message,), - { - "DESCRIPTOR": _POINT, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.Point) - }, -) -_sym_db.RegisterMessage(Point) - -MobjectData = _reflection.GeneratedProtocolMessageType( - "MobjectData", - (_message.Message,), - { - "DESCRIPTOR": _MOBJECTDATA, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.MobjectData) - }, -) -_sym_db.RegisterMessage(MobjectData) - -VMobjectData = _reflection.GeneratedProtocolMessageType( - "VMobjectData", - (_message.Message,), - { - "DESCRIPTOR": _VMOBJECTDATA, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.VMobjectData) - }, -) -_sym_db.RegisterMessage(VMobjectData) - -ImageMobjectData = _reflection.GeneratedProtocolMessageType( - "ImageMobjectData", - (_message.Message,), - { - "DESCRIPTOR": _IMAGEMOBJECTDATA, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.ImageMobjectData) - }, -) -_sym_db.RegisterMessage(ImageMobjectData) - -FrameData = _reflection.GeneratedProtocolMessageType( - "FrameData", - (_message.Message,), - { - "DESCRIPTOR": _FRAMEDATA, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.FrameData) - }, -) -_sym_db.RegisterMessage(FrameData) - -FrameResponse = _reflection.GeneratedProtocolMessageType( - "FrameResponse", - (_message.Message,), - { - "DESCRIPTOR": _FRAMERESPONSE, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.FrameResponse) - }, -) -_sym_db.RegisterMessage(FrameResponse) - -EmptyRequest = _reflection.GeneratedProtocolMessageType( - "EmptyRequest", - (_message.Message,), - { - "DESCRIPTOR": _EMPTYREQUEST, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.EmptyRequest) - }, -) -_sym_db.RegisterMessage(EmptyRequest) - -EmptyResponse = _reflection.GeneratedProtocolMessageType( - "EmptyResponse", - (_message.Message,), - { - "DESCRIPTOR": _EMPTYRESPONSE, - "__module__": "frameserver_pb2", - # @@protoc_insertion_point(class_scope:frameserver.EmptyResponse) - }, -) -_sym_db.RegisterMessage(EmptyResponse) - - -_FRAMESERVER = _descriptor.ServiceDescriptor( - name="FrameServer", - full_name="frameserver.FrameServer", - file=DESCRIPTOR, - index=0, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=1781, - serialized_end=2021, - methods=[ - _descriptor.MethodDescriptor( - name="GetFrameAtTime", - full_name="frameserver.FrameServer.GetFrameAtTime", - index=0, - containing_service=None, - input_type=_FRAMEREQUEST, - output_type=_FRAMERESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="FetchSceneData", - full_name="frameserver.FrameServer.FetchSceneData", - index=1, - containing_service=None, - input_type=_EMPTYREQUEST, - output_type=_FETCHSCENEDATARESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name="ScriptUpdated", - full_name="frameserver.FrameServer.ScriptUpdated", - index=2, - containing_service=None, - input_type=_EMPTYREQUEST, - output_type=_EMPTYRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_FRAMESERVER) - -DESCRIPTOR.services_by_name["FrameServer"] = _FRAMESERVER - -# @@protoc_insertion_point(module_scope) diff --git a/manim/grpc/gen/frameserver_pb2_grpc.py b/manim/grpc/gen/frameserver_pb2_grpc.py deleted file mode 100644 index b21b7c427d..0000000000 --- a/manim/grpc/gen/frameserver_pb2_grpc.py +++ /dev/null @@ -1,171 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -from __future__ import annotations - -import frameserver_pb2 as frameserver__pb2 -import grpc - - -class FrameServerStub: - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.GetFrameAtTime = channel.unary_unary( - "/frameserver.FrameServer/GetFrameAtTime", - request_serializer=frameserver__pb2.FrameRequest.SerializeToString, - response_deserializer=frameserver__pb2.FrameResponse.FromString, - ) - self.FetchSceneData = channel.unary_unary( - "/frameserver.FrameServer/FetchSceneData", - request_serializer=frameserver__pb2.EmptyRequest.SerializeToString, - response_deserializer=frameserver__pb2.FetchSceneDataResponse.FromString, - ) - self.ScriptUpdated = channel.unary_unary( - "/frameserver.FrameServer/ScriptUpdated", - request_serializer=frameserver__pb2.EmptyRequest.SerializeToString, - response_deserializer=frameserver__pb2.EmptyResponse.FromString, - ) - - -class FrameServerServicer: - """Missing associated documentation comment in .proto file.""" - - def GetFrameAtTime(self, request, context): - """Returns a serialization of the scene at the specified time.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def FetchSceneData(self, request, context): - """Returns a list of the names and durations of all animations in the scene.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def ScriptUpdated(self, request, context): - """Returns when the manim script changes""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - -def add_FrameServerServicer_to_server(servicer, server): - rpc_method_handlers = { - "GetFrameAtTime": grpc.unary_unary_rpc_method_handler( - servicer.GetFrameAtTime, - request_deserializer=frameserver__pb2.FrameRequest.FromString, - response_serializer=frameserver__pb2.FrameResponse.SerializeToString, - ), - "FetchSceneData": grpc.unary_unary_rpc_method_handler( - servicer.FetchSceneData, - request_deserializer=frameserver__pb2.EmptyRequest.FromString, - response_serializer=frameserver__pb2.FetchSceneDataResponse.SerializeToString, - ), - "ScriptUpdated": grpc.unary_unary_rpc_method_handler( - servicer.ScriptUpdated, - request_deserializer=frameserver__pb2.EmptyRequest.FromString, - response_serializer=frameserver__pb2.EmptyResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - "frameserver.FrameServer", - rpc_method_handlers, - ) - server.add_generic_rpc_handlers((generic_handler,)) - - -# This class is part of an EXPERIMENTAL API. -class FrameServer: - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def GetFrameAtTime( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/frameserver.FrameServer/GetFrameAtTime", - frameserver__pb2.FrameRequest.SerializeToString, - frameserver__pb2.FrameResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def FetchSceneData( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/frameserver.FrameServer/FetchSceneData", - frameserver__pb2.EmptyRequest.SerializeToString, - frameserver__pb2.FetchSceneDataResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def ScriptUpdated( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/frameserver.FrameServer/ScriptUpdated", - frameserver__pb2.EmptyRequest.SerializeToString, - frameserver__pb2.EmptyResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) diff --git a/manim/grpc/gen/renderserver_pb2.py b/manim/grpc/gen/renderserver_pb2.py deleted file mode 100644 index 051be04c81..0000000000 --- a/manim/grpc/gen/renderserver_pb2.py +++ /dev/null @@ -1,376 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: renderserver.proto -"""Generated protocol buffer code.""" -from __future__ import annotations - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database - -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="renderserver.proto", - package="renderserver", - syntax="proto3", - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x12renderserver.proto\x12\x0crenderserver"f\n\x16UpdateSceneDataRequest\x12"\n\x05scene\x18\x01 \x01(\x0b\x32\x13.renderserver.Scene\x12\x11\n\texception\x18\x02 \x01(\t\x12\x15\n\rhas_exception\x18\x03 \x01(\x08"\\\n\x05Scene\x12\x0c\n\x04name\x18\x01 \x01(\t\x12+\n\nanimations\x18\x02 \x03(\x0b\x32\x17.renderserver.Animation\x12\x18\n\x10\x62\x61\x63kground_color\x18\x03 \x01(\t"+\n\tAnimation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x64uration\x18\x02 \x01(\x02"\x0e\n\x0c\x45mptyRequest"\x0f\n\rEmptyResponse2d\n\x0cRenderServer\x12T\n\x0fUpdateSceneData\x12$.renderserver.UpdateSceneDataRequest\x1a\x1b.renderserver.EmptyResponseb\x06proto3', -) - - -_UPDATESCENEDATAREQUEST = _descriptor.Descriptor( - name="UpdateSceneDataRequest", - full_name="renderserver.UpdateSceneDataRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="scene", - full_name="renderserver.UpdateSceneDataRequest.scene", - index=0, - number=1, - type=11, - cpp_type=10, - label=1, - has_default_value=False, - default_value=None, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="exception", - full_name="renderserver.UpdateSceneDataRequest.exception", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="has_exception", - full_name="renderserver.UpdateSceneDataRequest.has_exception", - index=2, - number=3, - type=8, - cpp_type=7, - label=1, - has_default_value=False, - default_value=False, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=36, - serialized_end=138, -) - - -_SCENE = _descriptor.Descriptor( - name="Scene", - full_name="renderserver.Scene", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="renderserver.Scene.name", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="animations", - full_name="renderserver.Scene.animations", - index=1, - number=2, - type=11, - cpp_type=10, - label=3, - has_default_value=False, - default_value=[], - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="background_color", - full_name="renderserver.Scene.background_color", - index=2, - number=3, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=140, - serialized_end=232, -) - - -_ANIMATION = _descriptor.Descriptor( - name="Animation", - full_name="renderserver.Animation", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name="name", - full_name="renderserver.Animation.name", - index=0, - number=1, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - _descriptor.FieldDescriptor( - name="duration", - full_name="renderserver.Animation.duration", - index=1, - number=2, - type=2, - cpp_type=6, - label=1, - has_default_value=False, - default_value=float(0), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=234, - serialized_end=277, -) - - -_EMPTYREQUEST = _descriptor.Descriptor( - name="EmptyRequest", - full_name="renderserver.EmptyRequest", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=279, - serialized_end=293, -) - - -_EMPTYRESPONSE = _descriptor.Descriptor( - name="EmptyResponse", - full_name="renderserver.EmptyResponse", - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=295, - serialized_end=310, -) - -_UPDATESCENEDATAREQUEST.fields_by_name["scene"].message_type = _SCENE -_SCENE.fields_by_name["animations"].message_type = _ANIMATION -DESCRIPTOR.message_types_by_name["UpdateSceneDataRequest"] = _UPDATESCENEDATAREQUEST -DESCRIPTOR.message_types_by_name["Scene"] = _SCENE -DESCRIPTOR.message_types_by_name["Animation"] = _ANIMATION -DESCRIPTOR.message_types_by_name["EmptyRequest"] = _EMPTYREQUEST -DESCRIPTOR.message_types_by_name["EmptyResponse"] = _EMPTYRESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -UpdateSceneDataRequest = _reflection.GeneratedProtocolMessageType( - "UpdateSceneDataRequest", - (_message.Message,), - { - "DESCRIPTOR": _UPDATESCENEDATAREQUEST, - "__module__": "renderserver_pb2", - # @@protoc_insertion_point(class_scope:renderserver.UpdateSceneDataRequest) - }, -) -_sym_db.RegisterMessage(UpdateSceneDataRequest) - -Scene = _reflection.GeneratedProtocolMessageType( - "Scene", - (_message.Message,), - { - "DESCRIPTOR": _SCENE, - "__module__": "renderserver_pb2", - # @@protoc_insertion_point(class_scope:renderserver.Scene) - }, -) -_sym_db.RegisterMessage(Scene) - -Animation = _reflection.GeneratedProtocolMessageType( - "Animation", - (_message.Message,), - { - "DESCRIPTOR": _ANIMATION, - "__module__": "renderserver_pb2", - # @@protoc_insertion_point(class_scope:renderserver.Animation) - }, -) -_sym_db.RegisterMessage(Animation) - -EmptyRequest = _reflection.GeneratedProtocolMessageType( - "EmptyRequest", - (_message.Message,), - { - "DESCRIPTOR": _EMPTYREQUEST, - "__module__": "renderserver_pb2", - # @@protoc_insertion_point(class_scope:renderserver.EmptyRequest) - }, -) -_sym_db.RegisterMessage(EmptyRequest) - -EmptyResponse = _reflection.GeneratedProtocolMessageType( - "EmptyResponse", - (_message.Message,), - { - "DESCRIPTOR": _EMPTYRESPONSE, - "__module__": "renderserver_pb2", - # @@protoc_insertion_point(class_scope:renderserver.EmptyResponse) - }, -) -_sym_db.RegisterMessage(EmptyResponse) - - -_RENDERSERVER = _descriptor.ServiceDescriptor( - name="RenderServer", - full_name="renderserver.RenderServer", - file=DESCRIPTOR, - index=0, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=312, - serialized_end=412, - methods=[ - _descriptor.MethodDescriptor( - name="UpdateSceneData", - full_name="renderserver.RenderServer.UpdateSceneData", - index=0, - containing_service=None, - input_type=_UPDATESCENEDATAREQUEST, - output_type=_EMPTYRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_RENDERSERVER) - -DESCRIPTOR.services_by_name["RenderServer"] = _RENDERSERVER - -# @@protoc_insertion_point(module_scope) diff --git a/manim/grpc/gen/renderserver_pb2_grpc.py b/manim/grpc/gen/renderserver_pb2_grpc.py deleted file mode 100644 index a195961f57..0000000000 --- a/manim/grpc/gen/renderserver_pb2_grpc.py +++ /dev/null @@ -1,81 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -from __future__ import annotations - -import grpc -import renderserver_pb2 as renderserver__pb2 - - -class RenderServerStub: - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.UpdateSceneData = channel.unary_unary( - "/renderserver.RenderServer/UpdateSceneData", - request_serializer=renderserver__pb2.UpdateSceneDataRequest.SerializeToString, - response_deserializer=renderserver__pb2.EmptyResponse.FromString, - ) - - -class RenderServerServicer: - """Missing associated documentation comment in .proto file.""" - - def UpdateSceneData(self, request, context): - """Called from Manim when a scene has been newly rendered.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - -def add_RenderServerServicer_to_server(servicer, server): - rpc_method_handlers = { - "UpdateSceneData": grpc.unary_unary_rpc_method_handler( - servicer.UpdateSceneData, - request_deserializer=renderserver__pb2.UpdateSceneDataRequest.FromString, - response_serializer=renderserver__pb2.EmptyResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - "renderserver.RenderServer", - rpc_method_handlers, - ) - server.add_generic_rpc_handlers((generic_handler,)) - - -# This class is part of an EXPERIMENTAL API. -class RenderServer: - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def UpdateSceneData( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/renderserver.RenderServer/UpdateSceneData", - renderserver__pb2.UpdateSceneDataRequest.SerializeToString, - renderserver__pb2.EmptyResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) diff --git a/manim/grpc/impl/__init__.py b/manim/grpc/impl/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/manim/grpc/impl/frame_server_impl.py b/manim/grpc/impl/frame_server_impl.py deleted file mode 100644 index a04ca9dca8..0000000000 --- a/manim/grpc/impl/frame_server_impl.py +++ /dev/null @@ -1,409 +0,0 @@ -from __future__ import annotations - -import copy -import subprocess as sp -import traceback -import types -from concurrent import futures - -import grpc - -from manim.mobject.value_tracker import ValueTracker - -from ... import config, logger -from ...constants import WEBGL_RENDERER_INFO -from ...mobject.types.image_mobject import ImageMobject -from ...mobject.types.vectorized_mobject import VMobject -from ...renderer.webgl_renderer import WebGLRenderer -from ...utils.family import extract_mobject_family_members -from ...utils.module_ops import scene_classes_from_file -from ..gen import ( - frameserver_pb2, - frameserver_pb2_grpc, - renderserver_pb2, - renderserver_pb2_grpc, -) - - -class FrameServer(frameserver_pb2_grpc.FrameServerServicer): - def __init__(self, server, input_file_path): - self.server = server - self.input_file_path = input_file_path - self.exception = None - self.load_scene_module() - - try: - self.update_renderer_scene_data() - except grpc._channel._InactiveRpcError: - logger.warning("No frontend was detected at localhost:50052.") - try: - sp.Popen(config["webgl_renderer_path"]) - except PermissionError: - logger.info(WEBGL_RENDERER_INFO) - self.server.stop(None) - return - - def GetFrameAtTime(self, request, context): - try: - requested_scene_index = request.animation_index - - # Find the requested scene. - scene_finished = False - if requested_scene_index == request.end_index: - scene_finished = True - - if ( - request.animation_offset - <= self.keyframes[requested_scene_index].duration - ): - animation_offset = request.animation_offset - else: - if requested_scene_index + 1 < request.end_index: - requested_scene_index += 1 - animation_offset = 0 - else: - scene_finished = True - animation_offset = self.keyframes[requested_scene_index].duration - - if requested_scene_index == self.previous_scene_index: - requested_scene = self.previous_scene - update_previous_scene = False - else: - requested_scene = copy.deepcopy(self.keyframes[requested_scene_index]) - update_previous_scene = True - - requested_scene.update_to_time(animation_offset) - - ids_to_remove = [] - mobjects_to_add = [] - animations = [] - updaters = [] - update_data = [] - # TODO: Only remove/add changed mobjects rather than all of them. - if self.previous_scene is not None and ( - request.first_request or self.previous_scene != requested_scene - ): - previous_mobjects = extract_mobject_family_members( - self.previous_scene.mobjects, - only_those_with_points=True, - ) - # Remove everything from the previous scene. - ids_to_remove = [ - mob.original_id - for mob in previous_mobjects - if not isinstance(mob, ValueTracker) - ] - - if request.first_request or self.previous_scene != requested_scene: - # Add everything from the requested scene. - mobjects_to_add = [ - serialize_mobject(mobject) - for mobject in extract_mobject_family_members( - requested_scene.mobjects, - only_those_with_points=True, - ) - if not isinstance(mobject, ValueTracker) - ] - - # Send animation and updater info. - all_animations_tweened = True - for animation in requested_scene.animations: - attribute_tween_data = generate_attribute_tween_data(animation) - mobject_tween_data_list = [] - flickered_mobject_ids = [] - if attribute_tween_data is None: - all_animations_tweened = False - flickered_mobject_ids = [ - mob.original_id - for mob in extract_mobject_family_members( - animation.mobject, - only_those_with_points=True, - ) - ] - else: - if animation.mobject is not None: - # Add offset vector to submobjects. - root_mobject_center = animation.mobject.get_center() - for updated_mobject in extract_mobject_family_members( - animation.mobject, - only_those_with_points=True, - ): - mobject_tween_data_list.append( - frameserver_pb2.Animation.MobjectTweenData( - id=updated_mobject.original_id, - root_mobject_offset=updated_mobject.get_center() - - root_mobject_center, - ), - ) - animation_proto = frameserver_pb2.Animation( - name=animation.__class__.__name__, - duration=requested_scene.duration, - easing_function=animation.rate_func.__name__, - attribute_tween_data=attribute_tween_data, - mobject_tween_data=mobject_tween_data_list, - flickered_mobject_ids=flickered_mobject_ids, - ) - animations.append(animation_proto) - for ( - updated_mobject, - updater_list, - ) in requested_scene.mobject_updater_lists: - all_updaters_tweened = True - for updater in updater_list: - attribute_tween_data = generate_attribute_tween_data(updater) - if attribute_tween_data is None: - all_animations_tweened = False - all_updaters_tweened = False - updaters.append( - frameserver_pb2.Updater( - flickered_mobject_ids=[ - mob.original_id - for mob in extract_mobject_family_members( - updated_mobject, - only_those_with_points=True, - ) - ], - ), - ) - break - else: - raise NotImplementedError("Add tween data for updaters.") - if all_updaters_tweened: - # Append an updater with tween data. - pass - else: - all_animations_tweened = False - for animation in requested_scene.animations: - # Only send update data for animations that don't have tween data. - if generate_attribute_tween_data(animation) is None: - update_data.extend( - [ - serialize_mobject(mobject) - for mobject in extract_mobject_family_members( - animation.mobject, - only_those_with_points=True, - ) - if not isinstance(mobject, ValueTracker) - ], - ) - for ( - updated_mobject, - updater_list, - ) in requested_scene.mobject_updater_lists: - for updater in updater_list: - # Only send update data for updaters that don't have tween data. - if generate_attribute_tween_data(updater) is None: - update_data.extend( - [ - serialize_mobject(mobject) - for mobject in extract_mobject_family_members( - updated_mobject, - only_those_with_points=True, - ) - if not isinstance(mobject, ValueTracker) - ], - ) - - resp = frameserver_pb2.FrameResponse( - frame_data=frameserver_pb2.FrameData( - remove=ids_to_remove, - add=mobjects_to_add, - update=update_data, - ), - scene_finished=scene_finished, - animations=animations, - updaters=updaters, - animation_index=requested_scene_index, - animation_offset=animation_offset, - all_animations_tweened=all_animations_tweened, - ) - if update_previous_scene: - self.previous_scene = requested_scene - self.previous_scene_index = requested_scene_index - return resp - except Exception: - traceback.print_exc() - - def FetchSceneData(self, request, context): - try: - request = frameserver_pb2.FetchSceneDataResponse( - scene=frameserver_pb2.Scene( - name=str(self.scene), - animations=[ - frameserver_pb2.Animation( - name=animations_to_name(scene.animations), - duration=scene.duration, - ) - for scene in self.keyframes - ], - ), - path=str(self.input_file_path), - ) - if hasattr(self.scene.camera, "background_color"): - request.scene.background_color = self.scene.camera.background_color - else: - request.scene.background_color = "#000000" - return request - except Exception: - traceback.print_exc() - - def ScriptUpdated(self, request, context): - self.load_scene_module() - with grpc.insecure_channel("localhost:50052") as channel: - stub = renderserver_pb2_grpc.RenderServerStub(channel) - try: - self.update_renderer_scene_data() - except grpc._channel._InactiveRpcError: - logger.warning("No frontend was detected at localhost:50052.") - sp.Popen(config["js_renderer_path"]) - return frameserver_pb2.EmptyResponse() - - def load_scene_module(self): - self.exception = None - try: - self.scene_class = scene_classes_from_file( - self.input_file_path, - require_single_scene=True, - ) - self.generate_keyframe_data() - except Exception as e: - self.exception = e - - def generate_keyframe_data(self): - self.keyframes = [] - self.previous_scene_index = None - self.previous_scene = None - self.renderer = WebGLRenderer(self) - self.scene = self.scene_class(self.renderer) - self.scene.render() - - def update_renderer_scene_data(self): - # If a javascript renderer is running, notify it of the scene being served. If - # not, spawn one and it will request the scene when it starts. - with grpc.insecure_channel("localhost:50052") as channel: - stub = renderserver_pb2_grpc.RenderServerStub(channel) - if not self.exception: - request = renderserver_pb2.UpdateSceneDataRequest( - scene=renderserver_pb2.Scene( - name=str(self.scene), - animations=[ - renderserver_pb2.Animation( - name=animations_to_name(scene.animations), - duration=scene.duration, - ) - for scene in self.keyframes - ], - ), - ) - if hasattr(self.scene.camera, "background_color"): - request.scene.background_color = self.scene.camera.background_color - else: - request.scene.background_color = "#000000" - else: - lines = traceback.format_exception( - None, - self.exception, - self.exception.__traceback__, - ) - request = renderserver_pb2.UpdateSceneDataRequest( - has_exception=True, - exception="\n".join(lines), - ) - stub.UpdateSceneData(request) - - -def generate_attribute_tween_data(animation): - if isinstance(animation, types.FunctionType): - return None - animation_name = animation.__class__.__name__ - if animation_name == "_MethodAnimation": - tween_data_array = [] - for method in animation.methods: - if method.__name__ in ["shift", "to_edge"]: - tween_data_array.append( - frameserver_pb2.Animation.AttributeTweenData( - attribute="position", - start_data=animation.starting_mobject.get_center(), - end_data=animation.target_mobject.get_center(), - ), - ) - else: - return None - return tween_data_array - elif animation_name == "FadeIn": - return [ - frameserver_pb2.Animation.AttributeTweenData( - attribute="fill_opacity", - start_data=[animation.starting_mobject.fill_opacity], - end_data=[animation.target_copy.fill_opacity], - ), - frameserver_pb2.Animation.AttributeTweenData( - attribute="stroke_opacity", - start_data=[animation.starting_mobject.stroke_opacity], - end_data=[animation.target_copy.stroke_opacity], - ), - ] - elif animation_name == "Wait": - return [] - else: - return None - - -def animations_to_name(animations): - if len(animations) == 1: - return str(animations[0].__class__.__name__) - return f"{str(animations[0].__class__.__name__)}..." - - -def serialize_mobject(mobject): - mob_proto = frameserver_pb2.MobjectData(id=mobject.original_id) - - if isinstance(mobject, VMobject): - needs_redraw = False - point_hash = hash(tuple(mobject.points.flatten())) - if mobject.point_hash != point_hash: - mobject.point_hash = point_hash - needs_redraw = True - mob_proto.vectorized_mobject_data.needs_redraw = needs_redraw - - for point in mobject.points: - point_proto = mob_proto.vectorized_mobject_data.points.add() - point_proto.x = point[0] - point_proto.y = point[1] - point_proto.z = point[2] - - mob_style = mobject.get_style(simple=True) - mob_proto.style.fill_color = mob_style["fill_color"] - mob_proto.style.fill_opacity = float(mob_style["fill_opacity"]) - mob_proto.style.stroke_color = mob_style["stroke_color"] - mob_proto.style.stroke_opacity = float(mob_style["stroke_opacity"]) - mob_proto.style.stroke_width = float(mob_style["stroke_width"]) - elif isinstance(mobject, ImageMobject): - mob_proto.type = frameserver_pb2.MobjectData.MobjectType.IMAGE_MOBJECT - mob_style = mobject.get_style() - mob_proto.style.fill_color = mob_style["fill_color"] - mob_proto.style.fill_opacity = float(mob_style["fill_opacity"]) - assets_dir_path = str(config.get_dir("assets_dir")) - if mobject.path.startswith(assets_dir_path): - mob_proto.image_mobject_data.path = mobject.path[len(assets_dir_path) + 1 :] - else: - logger.info( - f"Expected path {mobject.path} to be under the assets dir ({assets_dir_path})", - ) - mob_proto.image_mobject_data.height = mobject.height - mob_proto.image_mobject_data.width = mobject.width - mob_center = mobject.get_center() - mob_proto.image_mobject_data.center.x = mob_center[0] - mob_proto.image_mobject_data.center.y = mob_center[1] - mob_proto.image_mobject_data.center.z = mob_center[2] - return mob_proto - - -def get(input_file_path): - server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) - frameserver_pb2_grpc.add_FrameServerServicer_to_server( - FrameServer(server, input_file_path), - server, - ) - server.add_insecure_port("localhost:50051") - return server diff --git a/manim/grpc/proto/frameserver.proto b/manim/grpc/proto/frameserver.proto deleted file mode 100644 index 17151fd3a9..0000000000 --- a/manim/grpc/proto/frameserver.proto +++ /dev/null @@ -1,114 +0,0 @@ -syntax = "proto3"; - -package frameserver; - -service FrameServer { - // Returns a serialization of the scene at the specified time. - rpc GetFrameAtTime (FrameRequest) returns (FrameResponse); - - // Returns a list of the names and durations of all animations in the scene. - rpc FetchSceneData (EmptyRequest) returns (FetchSceneDataResponse); - - // Returns when the manim script changes - rpc ScriptUpdated (EmptyRequest) returns (EmptyResponse); -} - -message FetchSceneDataResponse { - Scene scene = 1; - string path = 2; -} - -message Scene { - string name = 1; - repeated Animation animations = 2; - string background_color = 3; -} - -message Animation { - string name = 1; - float duration = 2; - string easing_function = 3; - - message AttributeTweenData { - string attribute = 1; - repeated float start_data = 2; - repeated float end_data = 3; - } - repeated AttributeTweenData attribute_tween_data = 4; - - message MobjectTweenData { - string id = 1; - repeated float root_mobject_offset = 2; - } - repeated MobjectTweenData mobject_tween_data = 5; - repeated string flickered_mobject_ids = 6; -} - -message Updater { - repeated string flickered_mobject_ids = 1; -} - -message FrameRequest { - int32 end_index = 1; - bool first_request = 2; - int32 animation_index = 3; - float animation_offset = 4; -} - -message Style { - string fill_color = 1; - float fill_opacity = 2; - string stroke_color = 3; - float stroke_opacity = 4; - float stroke_width = 5; -} - -message Point { - float x = 1; - float y = 2; - float z = 3; -} - -message MobjectData { - string id = 1; - Style style = 2; - enum MobjectType { - VMOBJECT = 0; - IMAGE_MOBJECT = 1; - } - MobjectType type = 3; - VMobjectData vectorized_mobject_data = 4; - ImageMobjectData image_mobject_data = 5; - repeated float root_mobject_offset = 6; -} - -message VMobjectData { - repeated Point points = 1; - bool needs_redraw = 2; -} - -message ImageMobjectData { - string path = 1; - float height = 2; - float width = 3; - Point center = 4; -} - -message FrameData { - repeated string remove = 1; - repeated MobjectData add = 2; - repeated MobjectData update = 3; -} - -message FrameResponse { - FrameData frame_data = 1; - bool scene_finished = 2; - repeated Animation animations = 3; - repeated Updater updaters = 4; - int32 animation_index = 5; - float animation_offset = 6; - bool all_animations_tweened = 7; -} - -message EmptyRequest {} -message EmptyResponse {} diff --git a/manim/grpc/proto/renderserver.proto b/manim/grpc/proto/renderserver.proto deleted file mode 100644 index 0d42c5244a..0000000000 --- a/manim/grpc/proto/renderserver.proto +++ /dev/null @@ -1,28 +0,0 @@ -syntax = "proto3"; - -package renderserver; - -service RenderServer { - // Called from Manim when a scene has been newly rendered. - rpc UpdateSceneData (UpdateSceneDataRequest) returns (EmptyResponse); -} - -message UpdateSceneDataRequest { - Scene scene = 1; - string exception = 2; - bool has_exception = 3; -} - -message Scene { - string name = 1; - repeated Animation animations = 2; - string background_color = 3; -} - -message Animation { - string name = 1; - float duration = 2; -} - -message EmptyRequest {} -message EmptyResponse {} diff --git a/manim/renderer/webgl_renderer.py b/manim/renderer/webgl_renderer.py deleted file mode 100644 index 72501b1d74..0000000000 --- a/manim/renderer/webgl_renderer.py +++ /dev/null @@ -1,67 +0,0 @@ -from __future__ import annotations - -import copy - -from manim import config - -from ..utils.family import extract_mobject_family_members - - -class WebGLRenderer: - def __init__(self, frame_server): - self.skip_animations = True - self.frame_server = frame_server - self.camera = WebGLCamera() - self.num_plays = 0 - - def init_scene(self, scene): - pass - - def scene_finished(self, scene): - pass - - def play(self, scene, *args, **kwargs): - self.num_plays += 1 - # If the scene contains an updater it must be updated frame by frame. - for mob in extract_mobject_family_members(scene.mobjects): - if len(mob.updaters) > 0: - self.skip_animations = False - break - s = scene.compile_animation_data(*args, skip_rendering=True, **kwargs) - scene.begin_animations() - self.skip_animations = True - - scene_copy = copy.deepcopy(scene) - scene_copy.renderer = self - self.frame_server.keyframes.append(scene_copy) - if s is None: - # Nothing happens in this animation, so there's no need to update it. - scene_copy.is_static = True - else: - scene_copy.is_static = False - scene.play_internal(skip_rendering=True) - - def update_frame( # TODO Description in Docstring - self, - scene, - mobjects=None, - include_submobjects=True, - ignore_skipping=True, - **kwargs, - ): - pass - - def save_static_frame_data(self, scene, static_mobjects): - pass - - def add_frame(self, frame, num_frames=1): - pass - - def get_frame(self): - pass - - -class WebGLCamera: - def __init__(self, use_z_index=True): - self.use_z_index = use_z_index - self.frame_rate = config["frame_rate"] diff --git a/poetry.lock b/poetry.lock index 44edf83658..b9556d0cd7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -139,7 +139,7 @@ python-versions = ">=3.6.0" name = "beautifulsoup4" version = "4.10.0" description = "Screen-scraping library" -category = "dev" +category = "main" optional = false python-versions = ">3.0.0" @@ -226,7 +226,7 @@ unicode_backport = ["unicodedata2"] [[package]] name = "click" -version = "8.0.3" +version = "8.0.4" description = "Composable command line interface toolkit" category = "main" optional = false @@ -290,7 +290,7 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "coverage" -version = "6.3.1" +version = "6.3.2" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -312,7 +312,7 @@ python-versions = ">=3.6" [[package]] name = "cython" -version = "0.29.27" +version = "0.29.28" description = "The Cython compiler for writing C extensions for the Python language." category = "main" optional = false @@ -331,7 +331,7 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", [[package]] name = "dearpygui" -version = "1.3.1" +version = "1.4.0" description = "DearPyGui: A simple Python GUI Toolkit" category = "main" optional = true @@ -412,7 +412,7 @@ testing = ["pre-commit"] [[package]] name = "filelock" -version = "3.4.2" +version = "3.6.0" description = "A platform independent file lock." category = "dev" optional = false @@ -536,7 +536,7 @@ importlib-metadata = {version = ">=0.9", markers = "python_version < \"3.8\""} [[package]] name = "fonttools" -version = "4.29.1" +version = "4.31.2" description = "Tools to manipulate font files" category = "dev" optional = false @@ -585,7 +585,7 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.26" +version = "3.1.27" description = "GitPython is a python library used to interact with Git repositories" category = "dev" optional = false @@ -597,41 +597,15 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\"" [[package]] name = "glcontext" -version = "2.3.4" +version = "2.3.5" description = "Portable OpenGL Context" category = "main" optional = false python-versions = "*" -[[package]] -name = "grpcio" -version = "1.43.0" -description = "HTTP/2-based RPC framework" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -six = ">=1.5.2" - -[package.extras] -protobuf = ["grpcio-tools (>=1.43.0)"] - -[[package]] -name = "grpcio-tools" -version = "1.43.0" -description = "Protobuf code generator for gRPC" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -grpcio = ">=1.43.0" -protobuf = ">=3.5.0.post1,<4.0dev" - [[package]] name = "identify" -version = "2.4.9" +version = "2.4.12" description = "File identification library for Python" category = "dev" optional = false @@ -658,7 +632,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.11.0" +version = "4.11.3" description = "Read metadata from Python packages" category = "main" optional = false @@ -669,9 +643,9 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] [[package]] name = "importlib-resources" @@ -698,7 +672,7 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.9.0" +version = "6.9.2" description = "IPython Kernel for Jupyter" category = "main" optional = true @@ -711,6 +685,7 @@ ipython = ">=7.23.1" jupyter-client = "<8.0" matplotlib-inline = ">=0.1.0,<0.2.0" nest-asyncio = "*" +psutil = "*" tornado = ">=4.2,<7.0" traitlets = ">=5.1.0,<6.0" @@ -719,7 +694,7 @@ test = ["pytest (!=5.3.4)", "pytest-cov", "flaky", "ipyparallel"] [[package]] name = "ipython" -version = "7.31.1" +version = "7.32.0" description = "IPython: Productive Interactive Computing" category = "main" optional = true @@ -864,7 +839,7 @@ test = ["codecov", "coverage", "ipykernel", "ipython", "mock", "mypy", "pre-comm [[package]] name = "jupyter-core" -version = "4.9.1" +version = "4.9.2" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "main" optional = true @@ -876,24 +851,23 @@ traitlets = "*" [[package]] name = "jupyter-server" -version = "1.13.5" +version = "1.15.6" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "main" optional = true python-versions = ">=3.7" [package.dependencies] -anyio = ">=3.1.0,<4" +anyio = ">=3.1.0" argon2-cffi = "*" -ipython-genutils = "*" jinja2 = "*" jupyter-client = ">=6.1.1" jupyter-core = ">=4.6.0" nbconvert = "*" -nbformat = "*" +nbformat = ">=5.2.0" packaging = "*" prometheus-client = "*" -pywinpty = {version = "<2", markers = "os_name == \"nt\""} +pywinpty = {version = "*", markers = "os_name == \"nt\""} pyzmq = ">=17" Send2Trash = "*" terminado = ">=0.8.3" @@ -906,18 +880,18 @@ test = ["coverage", "pytest (>=6.0)", "pytest-cov", "pytest-mock", "pytest-timeo [[package]] name = "jupyterlab" -version = "3.2.9" +version = "3.3.2" description = "JupyterLab computational environment" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] ipython = "*" jinja2 = ">=2.1" jupyter-core = "*" jupyter-server = ">=1.4,<2.0" -jupyterlab-server = ">=2.3,<3.0" +jupyterlab-server = ">=2.10,<3.0" nbclassic = ">=0.2,<1.0" packaging = "*" tornado = ">=6.1.0" @@ -939,33 +913,36 @@ pygments = ">=2.4.1,<3" [[package]] name = "jupyterlab-server" -version = "2.10.3" +version = "2.11.2" description = "A set of server components for JupyterLab and JupyterLab like applications ." category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] babel = "*" entrypoints = ">=0.2.2" -jinja2 = ">=2.10" +jinja2 = ">=3.0.3" json5 = "*" jsonschema = ">=3.0.1" -jupyter-server = ">=1.4,<2.0" +jupyter-server = ">=1.8,<2.0" packaging = "*" requests = "*" [package.extras] -test = ["codecov", "ipykernel", "pytest (>=5.3.2)", "pytest-cov", "jupyter-server", "openapi-core (>=0.14.0,<0.15.0)", "pytest-console-scripts", "strict-rfc3339", "ruamel.yaml", "wheel"] +test = ["codecov", "ipykernel", "pytest (>=5.3.2)", "pytest-cov", "jupyter-server", "openapi-core (>=0.14.2)", "pytest-console-scripts", "strict-rfc3339", "ruamel.yaml", "wheel", "openapi-spec-validator (<0.5)"] [[package]] name = "kiwisolver" -version = "1.3.2" +version = "1.4.0" description = "A fast implementation of the Cassowary constraint solver" category = "dev" optional = false python-versions = ">=3.7" +[package.dependencies] +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + [[package]] name = "lazy-object-proxy" version = "1.7.1" @@ -976,7 +953,7 @@ python-versions = ">=3.6" [[package]] name = "manimpango" -version = "0.4.0.post2" +version = "0.4.1" description = "Bindings for Pango for using with Manim." category = "main" optional = false @@ -998,11 +975,11 @@ test = ["pytest"] [[package]] name = "markupsafe" -version = "2.0.1" +version = "2.1.1" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "matplotlib" @@ -1125,22 +1102,23 @@ python-versions = "*" [[package]] name = "nbclassic" -version = "0.3.5" +version = "0.3.7" description = "Jupyter Notebook as a Jupyter Server extension." category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -jupyter-server = ">=1.8,<2.0" +jupyter-server = ">=1.8" notebook = "<7" +notebook-shim = ">=0.1.0" [package.extras] test = ["pytest", "pytest-tornasync", "pytest-console-scripts"] [[package]] name = "nbclient" -version = "0.5.10" +version = "0.5.13" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "main" optional = true @@ -1150,21 +1128,22 @@ python-versions = ">=3.7.0" jupyter-client = ">=6.1.5" nbformat = ">=5.0" nest-asyncio = "*" -traitlets = ">=4.2" +traitlets = ">=5.0.0" [package.extras] sphinx = ["Sphinx (>=1.7)", "sphinx-book-theme", "mock", "moto", "myst-parser"] -test = ["ipython", "ipykernel", "ipywidgets (<8.0.0)", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "xmltodict", "black", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)"] +test = ["ipython (<8.0.0)", "ipykernel", "ipywidgets (<8.0.0)", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "xmltodict", "black", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)"] [[package]] name = "nbconvert" -version = "6.4.2" +version = "6.4.4" description = "Converting Jupyter Notebooks" category = "main" optional = true python-versions = ">=3.7" [package.dependencies] +beautifulsoup4 = "*" bleach = "*" defusedxml = "*" entrypoints = ">=0.2.2" @@ -1188,21 +1167,20 @@ webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.1.3" +version = "5.2.0" description = "The Jupyter Notebook format" category = "main" optional = true -python-versions = ">=3.5" +python-versions = ">=3.7" [package.dependencies] -ipython-genutils = "*" jsonschema = ">=2.4,<2.5.0 || >2.5.0" jupyter-core = "*" traitlets = ">=4.1" [package.extras] fast = ["fastjsonschema"] -test = ["check-manifest", "fastjsonschema", "testpath", "pytest", "pytest-cov"] +test = ["check-manifest", "fastjsonschema", "testpath", "pytest"] [[package]] name = "nest-asyncio" @@ -1237,7 +1215,7 @@ python-versions = "*" [[package]] name = "notebook" -version = "6.4.8" +version = "6.4.10" description = "A web-based notebook environment for interactive computing" category = "main" optional = true @@ -1250,7 +1228,7 @@ ipython-genutils = "*" jinja2 = "*" jupyter-client = ">=5.3.4" jupyter-core = ">=4.6.1" -nbconvert = "*" +nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" prometheus-client = "*" @@ -1265,6 +1243,20 @@ docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "m json-logging = ["json-logging"] test = ["pytest", "coverage", "requests", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] +[[package]] +name = "notebook-shim" +version = "0.1.0" +description = "A shim layer for notebook traits and config" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +jupyter-server = ">=1.8,<2.0" + +[package.extras] +test = ["pytest", "pytest-tornasync", "pytest-console-scripts"] + [[package]] name = "numpy" version = "1.21.5" @@ -1341,7 +1333,7 @@ python-versions = ">=3.7" [[package]] name = "platformdirs" -version = "2.5.0" +version = "2.5.1" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false @@ -1405,19 +1397,11 @@ python-versions = ">=3.6.2" [package.dependencies] wcwidth = "*" -[[package]] -name = "protobuf" -version = "3.19.4" -description = "Protocol Buffers" -category = "main" -optional = true -python-versions = ">=3.5" - [[package]] name = "psutil" version = "5.9.0" description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -1453,11 +1437,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pycairo" -version = "1.20.1" +version = "1.21.0" description = "Python interface for cairo" category = "main" optional = false -python-versions = ">=3.6, <4" +python-versions = ">=3.7" [[package]] name = "pycodestyle" @@ -1524,7 +1508,7 @@ integrations = ["cryptography"] [[package]] name = "pyglet" -version = "1.5.21" +version = "1.5.23" description = "Cross-platform windowing and multimedia library" category = "main" optional = false @@ -1586,7 +1570,7 @@ tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] [[package]] name = "pyobjc-core" -version = "8.2" +version = "8.4.1" description = "Python<->ObjC Interoperability Module" category = "main" optional = false @@ -1594,14 +1578,14 @@ python-versions = ">=3.6" [[package]] name = "pyobjc-framework-cocoa" -version = "8.2" +version = "8.4.1" description = "Wrappers for the Cocoa frameworks on macOS" category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -pyobjc-core = ">=8.2" +pyobjc-core = ">=8.4.1" [[package]] name = "pyparsing" @@ -1714,7 +1698,7 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2021.3" +version = "2022.1" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -1730,11 +1714,11 @@ python-versions = "*" [[package]] name = "pywinpty" -version = "1.1.6" +version = "2.0.5" description = "Pseudo terminal support for Windows from Python." category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "pyyaml" @@ -1789,7 +1773,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] [[package]] name = "restructuredtext-lint" -version = "1.3.2" +version = "1.4.0" description = "reStructuredText linter" category = "dev" optional = false @@ -1800,14 +1784,13 @@ docutils = ">=0.11,<1.0" [[package]] name = "rich" -version = "11.2.0" +version = "12.0.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false python-versions = ">=3.6.2,<4.0.0" [package.dependencies] -colorama = ">=0.4.0,<0.5.0" commonmark = ">=0.9.0,<0.10.0" pygments = ">=2.6.0,<3.0.0" typing-extensions = {version = ">=3.7.4,<5.0", markers = "python_version < \"3.8\""} @@ -1914,7 +1897,7 @@ python-versions = "*" name = "soupsieve" version = "2.3.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -2060,7 +2043,7 @@ sphinx = ">=2.0" [[package]] name = "srt" -version = "3.5.1" +version = "3.5.2" description = "A tiny library for parsing, modifying, and composing SRT files." category = "main" optional = false @@ -2068,7 +2051,7 @@ python-versions = ">=2.7" [[package]] name = "terminado" -version = "0.13.1" +version = "0.13.3" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." category = "main" optional = true @@ -2084,14 +2067,14 @@ test = ["pytest"] [[package]] name = "testpath" -version = "0.5.0" +version = "0.6.0" description = "Test utilities for code working with files and commands" category = "main" optional = true python-versions = ">= 3.5" [package.extras] -test = ["pytest", "pathlib2"] +test = ["pytest"] [[package]] name = "toml" @@ -2119,7 +2102,7 @@ python-versions = ">= 3.5" [[package]] name = "tqdm" -version = "4.62.3" +version = "4.63.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -2162,7 +2145,7 @@ python-versions = "*" [[package]] name = "types-docutils" -version = "0.17.5" +version = "0.18.0" description = "Typing stubs for docutils" category = "dev" optional = false @@ -2178,7 +2161,7 @@ python-versions = "*" [[package]] name = "types-protobuf" -version = "3.19.12" +version = "3.19.15" description = "Typing stubs for protobuf" category = "dev" optional = false @@ -2186,7 +2169,7 @@ python-versions = "*" [[package]] name = "types-pygments" -version = "2.9.16" +version = "2.9.17" description = "Typing stubs for Pygments" category = "dev" optional = false @@ -2198,7 +2181,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.27.9" +version = "2.27.14" description = "Typing stubs for requests" category = "dev" optional = false @@ -2209,7 +2192,7 @@ types-urllib3 = "<1.27" [[package]] name = "types-setuptools" -version = "57.4.9" +version = "57.4.11" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -2217,7 +2200,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.9" +version = "1.26.11" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -2233,20 +2216,20 @@ python-versions = ">=3.6" [[package]] name = "urllib3" -version = "1.26.8" +version = "1.26.9" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" [package.extras] -brotli = ["brotlipy (>=0.6.0)"] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.13.1" +version = "20.13.4" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -2292,7 +2275,7 @@ python-versions = "*" [[package]] name = "websocket-client" -version = "1.2.3" +version = "1.3.1" description = "WebSocket client for Python with low level API options" category = "main" optional = true @@ -2326,12 +2309,11 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [extras] gui = ["dearpygui"] jupyterlab = ["jupyterlab"] -webgl_renderer = ["grpcio", "grpcio-tools"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "71c0d7995d4b6645952dd39c6d84b51871eced3e238d82e23e3d9dec43fc8096" +content-hash = "a7889cae8f42d0225346a5fe4cfb31fa039863b02a4f20def6672a67c7d28404" [metadata.files] alabaster = [ @@ -2499,8 +2481,8 @@ charset-normalizer = [ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] click = [ - {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, - {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, + {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"}, + {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"}, ] click-default-group = [ {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, @@ -2522,112 +2504,112 @@ commonmark = [ {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] coverage = [ - {file = "coverage-6.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525"}, - {file = "coverage-6.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:621f6ea7260ea2ffdaec64fe5cb521669984f567b66f62f81445221d4754df4c"}, - {file = "coverage-6.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f2436d6742c01136dd940ee158bfc7cf5ced3da7e4c949662b8703b5cd8145"}, - {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de73fca6fb403dd72d4da517cfc49fcf791f74eee697d3219f6be29adf5af6ce"}, - {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78fbb2be068a13a5d99dce9e1e7d168db880870f7bc73f876152130575bd6167"}, - {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f5a4551dfd09c3bd12fca8144d47fe7745275adf3229b7223c2f9e29a975ebda"}, - {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7bff3a98f63b47464480de1b5bdd80c8fade0ba2832c9381253c9b74c4153c27"}, - {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a06c358f4aed05fa1099c39decc8022261bb07dfadc127c08cfbd1391b09689e"}, - {file = "coverage-6.3.1-cp310-cp310-win32.whl", hash = "sha256:9fff3ff052922cb99f9e52f63f985d4f7a54f6b94287463bc66b7cdf3eb41217"}, - {file = "coverage-6.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:276b13cc085474e482566c477c25ed66a097b44c6e77132f3304ac0b039f83eb"}, - {file = "coverage-6.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:56c4a409381ddd7bbff134e9756077860d4e8a583d310a6f38a2315b9ce301d0"}, - {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eb494070aa060ceba6e4bbf44c1bc5fa97bfb883a0d9b0c9049415f9e944793"}, - {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e15d424b8153756b7c903bde6d4610be0c3daca3986173c18dd5c1a1625e4cd"}, - {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d47a897c1e91f33f177c21de897267b38fbb45f2cd8e22a710bcef1df09ac1"}, - {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:25e73d4c81efa8ea3785274a2f7f3bfbbeccb6fcba2a0bdd3be9223371c37554"}, - {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fac0bcc5b7e8169bffa87f0dcc24435446d329cbc2b5486d155c2e0f3b493ae1"}, - {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:72128176fea72012063200b7b395ed8a57849282b207321124d7ff14e26988e8"}, - {file = "coverage-6.3.1-cp37-cp37m-win32.whl", hash = "sha256:1bc6d709939ff262fd1432f03f080c5042dc6508b6e0d3d20e61dd045456a1a0"}, - {file = "coverage-6.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:618eeba986cea7f621d8607ee378ecc8c2504b98b3fdc4952b30fe3578304687"}, - {file = "coverage-6.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ed164af5c9078596cfc40b078c3b337911190d3faeac830c3f1274f26b8320"}, - {file = "coverage-6.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:352c68e233409c31048a3725c446a9e48bbff36e39db92774d4f2380d630d8f8"}, - {file = "coverage-6.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:448d7bde7ceb6c69e08474c2ddbc5b4cd13c9e4aa4a717467f716b5fc938a734"}, - {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9fde6b90889522c220dd56a670102ceef24955d994ff7af2cb786b4ba8fe11e4"}, - {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e647a0be741edbb529a72644e999acb09f2ad60465f80757da183528941ff975"}, - {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a5cdc3adb4f8bb8d8f5e64c2e9e282bc12980ef055ec6da59db562ee9bdfefa"}, - {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2dd70a167843b4b4b2630c0c56f1b586fe965b4f8ac5da05b6690344fd065c6b"}, - {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9ad0a117b8dc2061ce9461ea4c1b4799e55edceb236522c5b8f958ce9ed8fa9a"}, - {file = "coverage-6.3.1-cp38-cp38-win32.whl", hash = "sha256:e92c7a5f7d62edff50f60a045dc9542bf939758c95b2fcd686175dd10ce0ed10"}, - {file = "coverage-6.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:482fb42eea6164894ff82abbcf33d526362de5d1a7ed25af7ecbdddd28fc124f"}, - {file = "coverage-6.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c5b81fb37db76ebea79aa963b76d96ff854e7662921ce742293463635a87a78d"}, - {file = "coverage-6.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f923b9ab265136e57cc14794a15b9dcea07a9c578609cd5dbbfff28a0d15e6"}, - {file = "coverage-6.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d296cbc8254a7dffdd7bcc2eb70be5a233aae7c01856d2d936f5ac4e8ac1f1"}, - {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245ab82e8554fa88c4b2ab1e098ae051faac5af829efdcf2ce6b34dccd5567c"}, - {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f2b05757c92ad96b33dbf8e8ec8d4ccb9af6ae3c9e9bd141c7cc44d20c6bcba"}, - {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9e3dd806f34de38d4c01416344e98eab2437ac450b3ae39c62a0ede2f8b5e4ed"}, - {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d651fde74a4d3122e5562705824507e2f5b2d3d57557f1916c4b27635f8fbe3f"}, - {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:704f89b87c4f4737da2860695a18c852b78ec7279b24eedacab10b29067d3a38"}, - {file = "coverage-6.3.1-cp39-cp39-win32.whl", hash = "sha256:2aed4761809640f02e44e16b8b32c1a5dee5e80ea30a0ff0912158bde9c501f2"}, - {file = "coverage-6.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9976fb0a5709988778ac9bc44f3d50fccd989987876dfd7716dee28beed0a9fa"}, - {file = "coverage-6.3.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:463e52616ea687fd323888e86bf25e864a3cc6335a043fad6bbb037dbf49bbe2"}, - {file = "coverage-6.3.1.tar.gz", hash = "sha256:6c3f6158b02ac403868eea390930ae64e9a9a2a5bbfafefbb920d29258d9f2f8"}, + {file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"}, + {file = "coverage-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37d1141ad6b2466a7b53a22e08fe76994c2d35a5b6b469590424a9953155afac"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9987b0354b06d4df0f4d3e0ec1ae76d7ce7cbca9a2f98c25041eb79eec766f1"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26e2deacd414fc2f97dd9f7676ee3eaecd299ca751412d89f40bc01557a6b1b4"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd8bafa458b5c7d061540f1ee9f18025a68e2d8471b3e858a9dad47c8d41903"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:46191097ebc381fbf89bdce207a6c107ac4ec0890d8d20f3360345ff5976155c"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6f89d05e028d274ce4fa1a86887b071ae1755082ef94a6740238cd7a8178804f"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58303469e9a272b4abdb9e302a780072c0633cdcc0165db7eec0f9e32f901e05"}, + {file = "coverage-6.3.2-cp310-cp310-win32.whl", hash = "sha256:2fea046bfb455510e05be95e879f0e768d45c10c11509e20e06d8fcaa31d9e39"}, + {file = "coverage-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:a2a8b8bcc399edb4347a5ca8b9b87e7524c0967b335fbb08a83c8421489ddee1"}, + {file = "coverage-6.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f1555ea6d6da108e1999b2463ea1003fe03f29213e459145e70edbaf3e004aaa"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5f4e1edcf57ce94e5475fe09e5afa3e3145081318e5fd1a43a6b4539a97e518"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a15dc0a14008f1da3d1ebd44bdda3e357dbabdf5a0b5034d38fcde0b5c234b7"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b7745788866028adeb1e0eca3bf1101109e2dc58456cb49d2d9b99a8c516e6"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8ce257cac556cb03be4a248d92ed36904a59a4a5ff55a994e92214cde15c5bad"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b0be84e5a6209858a1d3e8d1806c46214e867ce1b0fd32e4ea03f4bd8b2e3359"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:acf53bc2cf7282ab9b8ba346746afe703474004d9e566ad164c91a7a59f188a4"}, + {file = "coverage-6.3.2-cp37-cp37m-win32.whl", hash = "sha256:8bdde1177f2311ee552f47ae6e5aa7750c0e3291ca6b75f71f7ffe1f1dab3dca"}, + {file = "coverage-6.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b31651d018b23ec463e95cf10070d0b2c548aa950a03d0b559eaa11c7e5a6fa3"}, + {file = "coverage-6.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d"}, + {file = "coverage-6.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c6dbb42f3ad25760010c45191e9757e7dce981cbfb90e42feef301d71540059"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76aeef1b95aff3905fb2ae2d96e319caca5b76fa41d3470b19d4e4a3a313512"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cf5cfcb1521dc3255d845d9dca3ff204b3229401994ef8d1984b32746bb45ca"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fbbdc8d55990eac1b0919ca69eb5a988a802b854488c34b8f37f3e2025fa90d"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ec6bc7fe73a938933d4178c9b23c4e0568e43e220aef9472c4f6044bfc6dd0f0"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9baff2a45ae1f17c8078452e9e5962e518eab705e50a0aa8083733ea7d45f3a6"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd9e830e9d8d89b20ab1e5af09b32d33e1a08ef4c4e14411e559556fd788e6b2"}, + {file = "coverage-6.3.2-cp38-cp38-win32.whl", hash = "sha256:f7331dbf301b7289013175087636bbaf5b2405e57259dd2c42fdcc9fcc47325e"}, + {file = "coverage-6.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:68353fe7cdf91f109fc7d474461b46e7f1f14e533e911a2a2cbb8b0fc8613cf1"}, + {file = "coverage-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b78e5afb39941572209f71866aa0b206c12f0109835aa0d601e41552f9b3e620"}, + {file = "coverage-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e21876082ed887baed0146fe222f861b5815455ada3b33b890f4105d806128d"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34626a7eee2a3da12af0507780bb51eb52dca0e1751fd1471d0810539cefb536"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ebf730d2381158ecf3dfd4453fbca0613e16eaa547b4170e2450c9707665ce7"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd6fe30bd519694b356cbfcaca9bd5c1737cddd20778c6a581ae20dc8c04def2"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96f8a1cb43ca1422f36492bebe63312d396491a9165ed3b9231e778d43a7fca4"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:dd035edafefee4d573140a76fdc785dc38829fe5a455c4bb12bac8c20cfc3d69"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ca5aeb4344b30d0bec47481536b8ba1181d50dbe783b0e4ad03c95dc1296684"}, + {file = "coverage-6.3.2-cp39-cp39-win32.whl", hash = "sha256:f5fa5803f47e095d7ad8443d28b01d48c0359484fec1b9d8606d0e3282084bc4"}, + {file = "coverage-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:9548f10d8be799551eb3a9c74bbf2b4934ddb330e08a73320123c07f95cc2d92"}, + {file = "coverage-6.3.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:18d520c6860515a771708937d2f78f63cc47ab3b80cb78e86573b0a760161faf"}, + {file = "coverage-6.3.2.tar.gz", hash = "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9"}, ] 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.27-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af2b4e1e267737dae1732f02a9b567f58420a3e2f572dc4416829647ec109886"}, - {file = "Cython-0.29.27-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:62326774873cd1eff0cf7ca9132a1b6442541fe67c84dcfe97beb6a30f983b22"}, - {file = "Cython-0.29.27-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0cb3da73547ed22d4b579990c229620b274d6935e3964f21abe15e4f7af6abf1"}, - {file = "Cython-0.29.27-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:314280475ba4ab334e6b40e502a1b3b36ac37a710a63b0a74c6a61dde5f7593c"}, - {file = "Cython-0.29.27-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8e2963153212c3e699276059095fd9e20c5c97872b6dda893e7acfc5cef64df8"}, - {file = "Cython-0.29.27-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:80ea3b60d5e5b3b13ce90a4071734bbd88cf688fcfd3c82db0b47ae1e944c6a2"}, - {file = "Cython-0.29.27-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:25cb8e663dbd1e14a8f05dd6a79974ce6f0232b4dc417000fd790938face0304"}, - {file = "Cython-0.29.27-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f3a5b826d9650268ff9bd7308bf79d8077b3b452da03337656d455bba05a9be"}, - {file = "Cython-0.29.27-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a1035e568cdc48dbd74f565828b36019fdb1b1437b3d7c1164c6f2a0757608f7"}, - {file = "Cython-0.29.27-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:179e8cf796f72df8977705c7887eee3231945f665c594ad1631fe690363bfb8e"}, - {file = "Cython-0.29.27-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:abcefbfb2c8f1b35c121a727745eb03c64cc15d0d71ebd827a6ce5c609503daa"}, - {file = "Cython-0.29.27-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7742cac4a5a41c73309bc1bab568e955ad35eacaedf3b00971bc44afe0b5f04e"}, - {file = "Cython-0.29.27-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:f4a01915e33a524fca2a1e2512c0afc07f9fc51637f874bed1a831b56e789374"}, - {file = "Cython-0.29.27-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3138e4f89cb7e79d35bd6cbefe2d62c4723f2184ee414905ee0981ae0fbd92d6"}, - {file = "Cython-0.29.27-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2dfdb4d5f63a0ae6748592b319878cbe360b12997cd8074836ef159381955d16"}, - {file = "Cython-0.29.27-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4b9dbe37907b6b76d9673720e848209399b48530f6ab6178fa3a49d1af4a8d00"}, - {file = "Cython-0.29.27-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:ab4301aabcd75a436df0bbe13dbd9a3a9b6d3ad6aeb3ab577606af1642e134c2"}, - {file = "Cython-0.29.27-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:93e9f7c522f5ab3ea4e32ce6f42b123cb0bd9cdfe49726b5e43c4e5719654146"}, - {file = "Cython-0.29.27-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:6d337965a49dd52bc410685dbf63f2a95d6aa8d8be153a87c4178a06ff0e8ccd"}, - {file = "Cython-0.29.27-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1500dce7ae102bb27243b92a8461b9f7fd08c4514886e9a0da8b266de8e5c561"}, - {file = "Cython-0.29.27-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:03e0e9164e0a279c094897c6ae1505d816da59f98d664a77911b8d33f492e3f3"}, - {file = "Cython-0.29.27-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0636e377ad81b8a106b12cddc57d3e69df94e03c77bdbccd0bd4394dda2484c9"}, - {file = "Cython-0.29.27-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:77519bc6816a0fa648795ef0d5337c18e4b7be1c43c4944599a87004037579c5"}, - {file = "Cython-0.29.27-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:65757e10590a1fbce84135491a5b53a1dc8c792cff78db4bb76b09d6df21dc0e"}, - {file = "Cython-0.29.27-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:0bf5182c6bf3fe73cf14f902506baa2b6ec3cea057775393f24eb66d3f2d1a51"}, - {file = "Cython-0.29.27-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d46fef39778dfb1d62e577c02dd2bac3930b9d28419d070ee0dae297e4a90af1"}, - {file = "Cython-0.29.27-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ca361afc6152221476bc89c335d54b8241502c57b89c760ded9f2f2de2e2a0b5"}, - {file = "Cython-0.29.27-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:00c0f379763bf5f37a2180e4943cb69d0d96e90637aba596c3d9bc061c09f44d"}, - {file = "Cython-0.29.27-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:a571dcba3fbd755c187bb464a4cdaf1ce71ca7b92bdb8122c46c1812b86b6c2f"}, - {file = "Cython-0.29.27-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:11e88a9826ad71a0ab7eda04d065cb34f320b2f453bc654436c42870f79a7c47"}, - {file = "Cython-0.29.27-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:f3c738662c572676883561a393c8fb6e7a807ffb8fcd286c510ed88c27f53a65"}, - {file = "Cython-0.29.27-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6670e5643fa05112aa88ea8f54088396fe5c113383cd898100450ad156fe1e4a"}, - {file = "Cython-0.29.27-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f054331ed29f81cfd22335b96af9d33788b01338b1a5b7939f18412336ab06fd"}, - {file = "Cython-0.29.27-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7149835ef701f8f9a417059253f52f393e4334d3819caf8ceab4194c9c4098ce"}, - {file = "Cython-0.29.27-py2.py3-none-any.whl", hash = "sha256:8e7ced83f7a3ab619abe03fa2ae2de888cc429028263c95655189085346b8fcc"}, - {file = "Cython-0.29.27.tar.gz", hash = "sha256:c6a442504db906dfc13a480e96850cced994ecdc076bcf492c43515b78f70da2"}, + {file = "Cython-0.29.28-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:75686c586e37b1fed0fe4a2c053474f96fc07da0063bbfc98023454540515d31"}, + {file = "Cython-0.29.28-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:16f2e74fcac223c53e298ecead62c353d3cffa107bea5d8232e4b2ba40781634"}, + {file = "Cython-0.29.28-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b6c77cc24861a33714e74212abfab4e54bf42e1ad602623f193b8e369389af2f"}, + {file = "Cython-0.29.28-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:59f4e86b415620a097cf0ec602adf5a7ee3cc33e8220567ded96566f753483f8"}, + {file = "Cython-0.29.28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:31465dce7fd3f058d02afb98b13af962848cc607052388814428dc801cc26f57"}, + {file = "Cython-0.29.28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5658fa477e80d96c49d5ff011938dd4b62da9aa428f771b91f1a7c49af45aad8"}, + {file = "Cython-0.29.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:33b69ac9bbf2b93d8cae336cfe48889397a857e6ceeb5cef0b2f0b31b6c54f2b"}, + {file = "Cython-0.29.28-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9d39ee7ddef6856413f950b8959e852d83376d9db1c509505e3f4873df32aa70"}, + {file = "Cython-0.29.28-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c9848a423a14e8f51bd4bbf8e2ff37031764ce66bdc7c6bc06c70d4084eb23c7"}, + {file = "Cython-0.29.28-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:09448aadb818387160ca4d1e1b82dbb7001526b6d0bed7529c4e8ac12e3b6f4c"}, + {file = "Cython-0.29.28-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:341917bdb2c95bcf8322aacfe50bbe6b4794880b16fa8b2300330520e123a5e5"}, + {file = "Cython-0.29.28-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fdcef7abb09fd827691e3abe6fd42c6c34beaccfa0bc2df6074f0a49949df6a8"}, + {file = "Cython-0.29.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:43eca77169f855dd04be11921a585c8854a174f30bc925257e92bc7b9197fbd2"}, + {file = "Cython-0.29.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7962a78ceb80cdec21345fb5088e675060fa65982030d446069f2d675d30e3cd"}, + {file = "Cython-0.29.28-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ed32c206e1d68056a34b21d2ec0cf0f23d338d6531476a68c73e21e20bd7bb63"}, + {file = "Cython-0.29.28-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a0ed39c63ba52edd03a39ea9d6da6f5326aaee5d333c317feba543270a1b3af5"}, + {file = "Cython-0.29.28-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:ded4fd3da4dee2f4414c35214244e29befa7f6fede3e9be317e765169df2cbc7"}, + {file = "Cython-0.29.28-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e24bd94946ffa37f30fcb865f2340fb6d429a3c7bf87b47b22f7d22e0e68a15c"}, + {file = "Cython-0.29.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:076aa8da83383e2bed0ca5f92c13a7e76e684bc41fe8e438bbed735f5b1c2731"}, + {file = "Cython-0.29.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:004387d8b94c64681ee05660d6a234e125396097726cf2f419c0fa2ac38034d6"}, + {file = "Cython-0.29.28-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d6036f6a5a0c7fb1af88889872268b15bf20dd9cefe33a6602d79ba18b8db20f"}, + {file = "Cython-0.29.28-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1612d7439590ba3b8de5f907bf0e54bd8e024eafb8c59261531a7988030c182d"}, + {file = "Cython-0.29.28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d7d7beb600d5dd551e9322e1393b74286f4a3d4aa387f7bfbaccc1495a98603b"}, + {file = "Cython-0.29.28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5e82f6b3dc2133b2e0e2c5c63d352d40a695e40cc7ed99f4cbe83334bcf9ab39"}, + {file = "Cython-0.29.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:49076747b731ed78acf203666c3b3c5d664754ea01ca4527f62f6d8675703688"}, + {file = "Cython-0.29.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f2b7c86a73db0d8dbbd885fe67f04c7b787df37a3848b9867270d3484101fbd"}, + {file = "Cython-0.29.28-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a3b27812ac9e9737026bfbb1dd47434f3e84013f430bafe1c6cbaf1cd51b5518"}, + {file = "Cython-0.29.28-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0378a14d2580dcea234d7a2dc8d75f60c091105885096e6dd5b032be97542c16"}, + {file = "Cython-0.29.28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d7c98727397c2547a56aa0c3c98140f1873c69a0642edc9446c6c870d0d8a5b5"}, + {file = "Cython-0.29.28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6626f9691ce2093ccbcc9932f449efe3b6e1c893b556910881d177c61612e8ff"}, + {file = "Cython-0.29.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:e9cc6af0c9c477c5e175e807dce439509934efefc24ea2da9fced7fbc8170591"}, + {file = "Cython-0.29.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05edfa51c0ff31a8df3cb291b90ca93ab499686d023b9b81c216cd3509f73def"}, + {file = "Cython-0.29.28-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4b3089255b6b1cc69e4b854626a41193e6acae5332263d24707976b3cb8ca644"}, + {file = "Cython-0.29.28-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:03b749e4f0bbf631cee472add2806d338a7d496f8383f6fb28cc5fdc34b7fdb8"}, + {file = "Cython-0.29.28-py2.py3-none-any.whl", hash = "sha256:26d8d0ededca42be50e0ac377c08408e18802b1391caa3aea045a72c1bff47ac"}, + {file = "Cython-0.29.28.tar.gz", hash = "sha256:d6fac2342802c30e51426828fe084ff4deb1b3387367cf98976bb2e64b6f8e45"}, ] 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.3.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:c9a23601a6770c479e72d4d791f36fad1eb0d2a6513e312ef7178ee12838ab2e"}, - {file = "dearpygui-1.3.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:cecde17108172c1ebcd0de79a5f950c1b0dabfe3e12f6e03c179b5b132fa6f89"}, - {file = "dearpygui-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:4ac6ee1dec934830da5dc981a8b16a6fe6410bec6c8c026cc04bca6e95105f83"}, - {file = "dearpygui-1.3.1-cp36-cp36m-macosx_10_6_x86_64.whl", hash = "sha256:bbaa36feedde71b9108a66c544d636201da87b264e4770f5ff1c9951fd19ab54"}, - {file = "dearpygui-1.3.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:928526c3f37ee82087903dd08fc887f3746d6df59a41b774a27c0fbb999b0da5"}, - {file = "dearpygui-1.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b8b7a54c7b4c97c90ab52015ae26b1df7f04ba455d571ed1fc59b82df045eb2b"}, - {file = "dearpygui-1.3.1-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:9783d62ce222e5b7c053ac8d0adb0a23f80490130ff2f71b02c8964e499ed15e"}, - {file = "dearpygui-1.3.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7f157a7a695e9c2c33a1392a9814f7f83bf53ed0f05e388213a5677a990b6e88"}, - {file = "dearpygui-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4f9deacd24aeda6520f78d7c6a51f3b1e5e3545375dd5427547578dd5547fc90"}, - {file = "dearpygui-1.3.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:d860ed3b724d7910f1d4f107ba2ee7033da182b4afa49cb9799e16d637225d70"}, - {file = "dearpygui-1.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9451832c21d77454b4e90f96820eb001a2b9b517228c1573ffd15bac89b881ae"}, - {file = "dearpygui-1.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:781eb24932e68cc72700677982be0dc01ba08aae9c19f9d25c0ba5f50926defd"}, - {file = "dearpygui-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:210ed14d571c4f84b88bcba957bf59add8a0fc116981729928a7658359c62147"}, - {file = "dearpygui-1.3.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:c399728c93b0188c2a284539aa0f69f75751c43667b082c8c964b558c07bfbbf"}, - {file = "dearpygui-1.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:19c9286a41931a3c9763ccf0e57f6c1f4a5fccf8dd5687c1d138ce786029f5b4"}, - {file = "dearpygui-1.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d5fdf9b65f4eb881b05a4f8ed01d63cf16551455883e7196fc302f16b106c994"}, - {file = "dearpygui-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:af0097756a15aef656fd1bec103c71f99a3c11a173e7f21c47fa8dac3a029fd8"}, + {file = "dearpygui-1.4.0-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:f9bcb72e0eccd09e08e5ae6c2178e2ad1448ffe72272754f9b8a7bdc6feeb364"}, + {file = "dearpygui-1.4.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:cbfe4d5ff2b32db98543803278847a041390bdaeb11a870d423bab586fdec9a6"}, + {file = "dearpygui-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:4b498a5dfaf3eb6484b8a68ff95553f1cd3f319dd80f17a7d20f7df81bde6c16"}, + {file = "dearpygui-1.4.0-cp36-cp36m-macosx_10_6_x86_64.whl", hash = "sha256:17cda5bc64f8ea006a2158f89a9a21b68839ee546774f51302de0cd08ff48309"}, + {file = "dearpygui-1.4.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:80247aafcc855f9710ccf3fc40324f8fd04c0568e23ff45fbc2301d150ba47c7"}, + {file = "dearpygui-1.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7956925b6b6381be8251d4edbf4198bcafb5bed22631e400b33457bfd1514679"}, + {file = "dearpygui-1.4.0-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:05afd4f9e2059002756c2c2a998dadb7bbb9d55b6a761debf0ea8423df362328"}, + {file = "dearpygui-1.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:213a0c922f25c6bc81e088155063a3abf697a4b747d2c81b8292dc71818705f7"}, + {file = "dearpygui-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e559f1039c2252867a5a3ce0b793de8df0405dfa7515525bd85a8df6f9e05da4"}, + {file = "dearpygui-1.4.0-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:e383c070235f9397b846ee69c3e6b947e21f4bd300e35602004af665453077c0"}, + {file = "dearpygui-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83c013f532f4d48d8f122c4ab3341becc17e97cb09d26c1719def74b6848e35d"}, + {file = "dearpygui-1.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e8eb856e3ae68b0a5ce2b05abf4bb16533d14bd3e4a140034f6c95d56a33cd8d"}, + {file = "dearpygui-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:53ee74eddf3ab781795a9d6b2c495393da918f6e0f47ad563fda904bcaa21ba8"}, + {file = "dearpygui-1.4.0-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:4dce79119fc86aff285536c5477ba5d3439f69b7ac22577b7b6e5b3a60b67512"}, + {file = "dearpygui-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:caf4ab964d72a9f0ba75637c62a9bd627749811f3f73defeaee02983875883bd"}, + {file = "dearpygui-1.4.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6248ea48f7ddcc2e8a99e95948e290fa07e7c9940a575940b09a529354fc4814"}, + {file = "dearpygui-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:57310a8e16144d63c627b1b38b4984c3ecbb7ff22226cf493329e04c4a628460"}, ] debugpy = [ {file = "debugpy-1.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:70b422c63a833630c33e3f9cdbd9b6971f8c5afd452697e464339a21bbe862ba"}, @@ -2681,8 +2663,8 @@ execnet = [ {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, ] filelock = [ - {file = "filelock-3.4.2-py3-none-any.whl", hash = "sha256:cf0fc6a2f8d26bd900f19bf33915ca70ba4dd8c56903eeb14e1e7a2fd7590146"}, - {file = "filelock-3.4.2.tar.gz", hash = "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80"}, + {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"}, + {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"}, ] flake8 = [ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, @@ -2721,8 +2703,8 @@ flake8-simplify = [ {file = "flake8_simplify-0.14.6.tar.gz", hash = "sha256:c4008db8016707684a1f0502ee69f3c2da37687d3cf7031cc1f326bf5986bf47"}, ] fonttools = [ - {file = "fonttools-4.29.1-py3-none-any.whl", hash = "sha256:1933415e0fbdf068815cb1baaa1f159e17830215f7e8624e5731122761627557"}, - {file = "fonttools-4.29.1.zip", hash = "sha256:2b18a172120e32128a80efee04cff487d5d140fe7d817deb648b2eee023a40e4"}, + {file = "fonttools-4.31.2-py3-none-any.whl", hash = "sha256:2df636a3f402ef14593c6811dac0609563b8c374bd7850e76919eb51ea205426"}, + {file = "fonttools-4.31.2.zip", hash = "sha256:236b29aee6b113e8f7bee28779c1230a86ad2aac9a74a31b0aedf57e7dfb62a4"}, ] furo = [ {file = "furo-2021.11.23-py3-none-any.whl", hash = "sha256:6d396451ad1aadce380c662fca9362cb10f4fd85f296d74fe3ca32006eb641d7"}, @@ -2733,128 +2715,58 @@ gitdb = [ {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, ] gitpython = [ - {file = "GitPython-3.1.26-py3-none-any.whl", hash = "sha256:26ac35c212d1f7b16036361ca5cff3ec66e11753a0d677fb6c48fa4e1a9dd8d6"}, - {file = "GitPython-3.1.26.tar.gz", hash = "sha256:fc8868f63a2e6d268fb25f481995ba185a85a66fcad126f039323ff6635669ee"}, + {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, + {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, ] glcontext = [ - {file = "glcontext-2.3.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e558960888be5a4aa8e2f6f43b5320a227c8519bc3517bf7202cb40925114a6d"}, - {file = "glcontext-2.3.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8983f0eae99c4ec04ece197537d3914a2c9e21f074bd518f21ce3c4be6d300cb"}, - {file = "glcontext-2.3.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5e9289db306a4255328128cea0d250e078c9546678659499f5d1e819924e2225"}, - {file = "glcontext-2.3.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_27_x86_64.whl", hash = "sha256:1ca421ca610b4c3da6e41be28585839af48fd961a0f2f4c8f3377a445e9b016a"}, - {file = "glcontext-2.3.4-cp310-cp310-win_amd64.whl", hash = "sha256:821f354c60ea82e73d3d5f788c22c31e60af578b0d4fd6aa9329a770ca966257"}, - {file = "glcontext-2.3.4-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:1af3314f20c97fa2a8fc6d2b68d597463066416a7cc3c1ea4f05b4ecb0fc3e9c"}, - {file = "glcontext-2.3.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3e1ef7e93a6a0f8b89a76fb41c58af4d9e69686504785883b628f0eeee29b153"}, - {file = "glcontext-2.3.4-cp36-cp36m-win32.whl", hash = "sha256:448bafceaad2716a260fce53f171f168546691dddd18c1d4532c8d0e6f305a50"}, - {file = "glcontext-2.3.4-cp36-cp36m-win_amd64.whl", hash = "sha256:1ceb88d1cb22387af5a3d5e0223835ed0676da350774ba15ba68f6d815519f90"}, - {file = "glcontext-2.3.4-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:0be3e1cb47fe3a8f48b2e66cdcc2d330490990aba3913648c9d67d58c646765e"}, - {file = "glcontext-2.3.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0f99726238ac132cc1fd7b9a62e449c7914957f451e6aea1a54e24be8b1ce04a"}, - {file = "glcontext-2.3.4-cp37-cp37m-win32.whl", hash = "sha256:4290542e696ca6c52230521552ed26322d62eda935c43da01d9913af2e95165b"}, - {file = "glcontext-2.3.4-cp37-cp37m-win_amd64.whl", hash = "sha256:2d585a586cd5a401e9aeeca18c8d56a4b908cd5b365241ab6834e35f28f7dafb"}, - {file = "glcontext-2.3.4-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:b7eecb1a1f689bcb3b77f8aed45e6b9139b3dec4fdeef894b6a7aa2b7c9b4312"}, - {file = "glcontext-2.3.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1ad78fce244afa860cb11c30c42fb710251035b2df4d84b0e72457128b7a830f"}, - {file = "glcontext-2.3.4-cp38-cp38-win32.whl", hash = "sha256:e71121ac65a98808f9caaeaa3912756c07cd6cf73857a90b31170703103b644c"}, - {file = "glcontext-2.3.4-cp38-cp38-win_amd64.whl", hash = "sha256:a27c5bbbe9d88ae547ddb89d3f55edec14b44126999d7f6214838240b1cb8c2a"}, - {file = "glcontext-2.3.4-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:25100ea7df50728937f96cb3cb6cba5ce42d674a0a6c2efae23198674212032a"}, - {file = "glcontext-2.3.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2f99c62f234f2859d626e1b24d7949d8d76a3a6fb7c2883b6f376e70586ce0ad"}, - {file = "glcontext-2.3.4-cp39-cp39-win32.whl", hash = "sha256:e1404b84e40daf7181168f4afa4f6ac5c4984e1f090fbd538da5b49046e4a078"}, - {file = "glcontext-2.3.4-cp39-cp39-win_amd64.whl", hash = "sha256:247ac15cbef85befb8c3ddb62659cc36b26786f0cec609724b60419ffb0a423a"}, - {file = "glcontext-2.3.4.tar.gz", hash = "sha256:537cd5113f7a5c17094dee50107587adeaea01d4854407bdab8e3bcd808e0bc6"}, -] -grpcio = [ - {file = "grpcio-1.43.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:a4e786a8ee8b30b25d70ee52cda6d1dbba2a8ca2f1208d8e20ed8280774f15c8"}, - {file = "grpcio-1.43.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:af9c3742f6c13575c0d4147a8454da0ff5308c4d9469462ff18402c6416942fe"}, - {file = "grpcio-1.43.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:fdac966699707b5554b815acc272d81e619dd0999f187cd52a61aef075f870ee"}, - {file = "grpcio-1.43.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e463b4aa0a6b31cf2e57c4abc1a1b53531a18a570baeed39d8d7b65deb16b7e"}, - {file = "grpcio-1.43.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f11d05402e0ac3a284443d8a432d3dfc76a6bd3f7b5858cddd75617af2d7bd9b"}, - {file = "grpcio-1.43.0-cp310-cp310-win32.whl", hash = "sha256:c36f418c925a41fccada8f7ae9a3d3e227bfa837ddbfddd3d8b0ac252d12dda9"}, - {file = "grpcio-1.43.0-cp310-cp310-win_amd64.whl", hash = "sha256:772b943f34374744f70236bbbe0afe413ed80f9ae6303503f85e2b421d4bca92"}, - {file = "grpcio-1.43.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:cbc9b83211d905859dcf234ad39d7193ff0f05bfc3269c364fb0d114ee71de59"}, - {file = "grpcio-1.43.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:fb7229fa2a201a0c377ff3283174ec966da8f9fd7ffcc9a92f162d2e7fc9025b"}, - {file = "grpcio-1.43.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:17b75f220ee6923338155b4fcef4c38802b9a57bc57d112c9599a13a03e99f8d"}, - {file = "grpcio-1.43.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:6620a5b751b099b3b25553cfc03dfcd873cda06f9bb2ff7e9948ac7090e20f05"}, - {file = "grpcio-1.43.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:1898f999383baac5fcdbdef8ea5b1ef204f38dc211014eb6977ac6e55944d738"}, - {file = "grpcio-1.43.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47b6821238d8978014d23b1132713dac6c2d72cbb561cf257608b1673894f90a"}, - {file = "grpcio-1.43.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80398e9fb598060fa41050d1220f5a2440fe74ff082c36dda41ac3215ebb5ddd"}, - {file = "grpcio-1.43.0-cp36-cp36m-win32.whl", hash = "sha256:0110310eff07bb69782f53b7a947490268c4645de559034c43c0a635612e250f"}, - {file = "grpcio-1.43.0-cp36-cp36m-win_amd64.whl", hash = "sha256:45401d00f2ee46bde75618bf33e9df960daa7980e6e0e7328047191918c98504"}, - {file = "grpcio-1.43.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:af78ac55933811e6a25141336b1f2d5e0659c2f568d44d20539b273792563ca7"}, - {file = "grpcio-1.43.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8b2b9dc4d7897566723b77422e11c009a0ebd397966b165b21b89a62891a9fdf"}, - {file = "grpcio-1.43.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:77ef653f966934b3bfdd00e4f2064b68880eb40cf09b0b99edfa5ee22a44f559"}, - {file = "grpcio-1.43.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:e95b5d62ec26d0cd0b90c202d73e7cb927c369c3358e027225239a4e354967dc"}, - {file = "grpcio-1.43.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:04239e8f71db832c26bbbedb4537b37550a39d77681d748ab4678e58dd6455d6"}, - {file = "grpcio-1.43.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b4a7152187a49767a47d1413edde2304c96f41f7bc92cc512e230dfd0fba095"}, - {file = "grpcio-1.43.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8cc936a29c65ab39714e1ba67a694c41218f98b6e2a64efb83f04d9abc4386b"}, - {file = "grpcio-1.43.0-cp37-cp37m-win32.whl", hash = "sha256:577e024c8dd5f27cd98ba850bc4e890f07d4b5942e5bc059a3d88843a2f48f66"}, - {file = "grpcio-1.43.0-cp37-cp37m-win_amd64.whl", hash = "sha256:138f57e3445d4a48d9a8a5af1538fdaafaa50a0a3c243f281d8df0edf221dc02"}, - {file = "grpcio-1.43.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:08cf25f2936629db062aeddbb594bd76b3383ab0ede75ef0461a3b0bc3a2c150"}, - {file = "grpcio-1.43.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:01f4b887ed703fe82ebe613e1d2dadea517891725e17e7a6134dcd00352bd28c"}, - {file = "grpcio-1.43.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:0aa8285f284338eb68962fe1a830291db06f366ea12f213399b520c062b01f65"}, - {file = "grpcio-1.43.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:0edbfeb6729aa9da33ce7e28fb7703b3754934115454ae45e8cc1db601756fd3"}, - {file = "grpcio-1.43.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:c354017819201053d65212befd1dcb65c2d91b704d8977e696bae79c47cd2f82"}, - {file = "grpcio-1.43.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50cfb7e1067ee5e00b8ab100a6b7ea322d37ec6672c0455106520b5891c4b5f5"}, - {file = "grpcio-1.43.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57f1aeb65ed17dfb2f6cd717cc109910fe395133af7257a9c729c0b9604eac10"}, - {file = "grpcio-1.43.0-cp38-cp38-win32.whl", hash = "sha256:fa26a8bbb3fe57845acb1329ff700d5c7eaf06414c3e15f4cb8923f3a466ef64"}, - {file = "grpcio-1.43.0-cp38-cp38-win_amd64.whl", hash = "sha256:ade8b79a6b6aea68adb9d4bfeba5d647667d842202c5d8f3ba37ac1dc8e5c09c"}, - {file = "grpcio-1.43.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:124e718faf96fe44c98b05f3f475076be8b5198bb4c52a13208acf88a8548ba9"}, - {file = "grpcio-1.43.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2f96142d0abc91290a63ba203f01649e498302b1b6007c67bad17f823ecde0cf"}, - {file = "grpcio-1.43.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:31e6e489ccd8f08884b9349a39610982df48535881ec34f05a11c6e6b6ebf9d0"}, - {file = "grpcio-1.43.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:0e731f660e1e68238f56f4ce11156f02fd06dc58bc7834778d42c0081d4ef5ad"}, - {file = "grpcio-1.43.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:1f16725a320460435a8a5339d8b06c4e00d307ab5ad56746af2e22b5f9c50932"}, - {file = "grpcio-1.43.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4b4543e13acb4806917d883d0f70f21ba93b29672ea81f4aaba14821aaf9bb0"}, - {file = "grpcio-1.43.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:594aaa0469f4fca7773e80d8c27bf1298e7bbce5f6da0f084b07489a708f16ab"}, - {file = "grpcio-1.43.0-cp39-cp39-win32.whl", hash = "sha256:5449ae564349e7a738b8c38583c0aad954b0d5d1dd3cea68953bfc32eaee11e3"}, - {file = "grpcio-1.43.0-cp39-cp39-win_amd64.whl", hash = "sha256:bdf41550815a831384d21a498b20597417fd31bd084deb17d31ceb39ad9acc79"}, - {file = "grpcio-1.43.0.tar.gz", hash = "sha256:735d9a437c262ab039d02defddcb9f8f545d7009ae61c0114e19dda3843febe5"}, -] -grpcio-tools = [ - {file = "grpcio-tools-1.43.0.tar.gz", hash = "sha256:f42f1d713096808b1b0472dd2a3749b712d13f0092dab9442d9c096446e860b2"}, - {file = "grpcio_tools-1.43.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:766771ef5b60ebcba0a3bdb302dd92fda988552eb8508451ff6d97371eac38e5"}, - {file = "grpcio_tools-1.43.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:178a881db5de0f89abf3aeeb260ecfd1116cc31f88fb600a45fb5b19c3323b33"}, - {file = "grpcio_tools-1.43.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:019f55929e963214471825c7a4cdab7a57069109d5621b24e4db7b428b5fe47d"}, - {file = "grpcio_tools-1.43.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6c0e1d1b47554c580882d392b739df91a55b6a8ec696b2b2e1bbc127d63df2c"}, - {file = "grpcio_tools-1.43.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c5c80098fa69593b828d119973744de03c3f9a6935df8a02e4329a39b7072f5"}, - {file = "grpcio_tools-1.43.0-cp310-cp310-win32.whl", hash = "sha256:53f7dcaa4218df1b64b39d0fc7236a8270e8ab2db4ab8cd1d2fda0e6d4544946"}, - {file = "grpcio_tools-1.43.0-cp310-cp310-win_amd64.whl", hash = "sha256:5be6d402b0cafef20ba3abb3baa37444961d9a9c4a6434d3d7c1f082f7697deb"}, - {file = "grpcio_tools-1.43.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:8953fdebef6905d7ff13a5a376b21b6fecd808d18bf4f0d3990ffe4a215d56eb"}, - {file = "grpcio_tools-1.43.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:18870dcc8369ac4c37213e6796d8dc20494ea770670204f5e573f88e69eaaf0b"}, - {file = "grpcio_tools-1.43.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:010a4be6a2fccbd6741a4809c5da7f2e39a1e9e227745e6b495be567638bbeb9"}, - {file = "grpcio_tools-1.43.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:426f16b6b14d533ce61249a18fbcd1a23a4fa0c71a6d7ab347b1c7f862847bb8"}, - {file = "grpcio_tools-1.43.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:f974cb0bea88bac892c3ed16da92c6ac88cff0fea17f24bf0e1892eb4d27cd00"}, - {file = "grpcio_tools-1.43.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55c2e604536e06248e2f81e549737fb3a180c8117832e494a0a8a81fbde44837"}, - {file = "grpcio_tools-1.43.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f97f9ffa49348fb24692751d2d4455ef2968bd07fe536d65597caaec14222629"}, - {file = "grpcio_tools-1.43.0-cp36-cp36m-win32.whl", hash = "sha256:6eaf97414237b8670ae9fa623879a26eabcc4c635b550c79a81e17eb600d6ae3"}, - {file = "grpcio_tools-1.43.0-cp36-cp36m-win_amd64.whl", hash = "sha256:04f100c1f6a7c72c537760c33582f6970070bd6fa6676b529bccfa31cc58bc79"}, - {file = "grpcio_tools-1.43.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:9dbb6d1f58f26d88ae689f1b49de84cfaf4786c81c01b9001d3ceea178116a07"}, - {file = "grpcio_tools-1.43.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:63862a441a77f6326ea9fe4bb005882f0e363441a5968d9cf8621c34d3dadc2b"}, - {file = "grpcio_tools-1.43.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6dea0cb2e79b67593553ed8662f70e4310599fa8850fc0e056b19fcb63572b7f"}, - {file = "grpcio_tools-1.43.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:3eb4aa5b0e578c3d9d9da8e37a2ef73654287a498b8081543acd0db7f0ec1a9c"}, - {file = "grpcio_tools-1.43.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:09464c6b17663088144b7e6ea10e9465efdcee03d4b2ffefab39a799bd8360f8"}, - {file = "grpcio_tools-1.43.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2458d6b0404f83d95aef00cec01f310d30e9719564a25be50e39b259f6a2da5d"}, - {file = "grpcio_tools-1.43.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e9bb5da437364b7dcd2d3c6850747081ecbec0ba645c96c6d471f7e21fdcadb"}, - {file = "grpcio_tools-1.43.0-cp37-cp37m-win32.whl", hash = "sha256:2737f749a6ab965748629e619b35f3e1cbe5820fc79e34c88f73cb99efc71dde"}, - {file = "grpcio_tools-1.43.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c39cbe7b902bb92f9afaa035091f5e2b8be35acbac501fec8cb6a0be7d7cdbbd"}, - {file = "grpcio_tools-1.43.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:05550ba473cff7c09e905fcfb2263fd1f7600389660194ec022b5d5a3802534b"}, - {file = "grpcio_tools-1.43.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:ce13a922db8f5f95c5041d3a4cbf04d942b353f0cba9b251a674f69a31a2d3a6"}, - {file = "grpcio_tools-1.43.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:f19d40690c97365c1c1bde81474e6f496d7ab76f87e6d2889c72ad01bac98f2d"}, - {file = "grpcio_tools-1.43.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba3da574eb08fcaed541b3fc97ce217360fd86d954fa9ad6a604803d57a2e049"}, - {file = "grpcio_tools-1.43.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:efd1eb5880001f5189cfa3a774675cc9bbc8cc51586a3e90fe796394ac8626b8"}, - {file = "grpcio_tools-1.43.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:234c7a5af653357df5c616e013173eddda6193146c8ab38f3108c4784f66be26"}, - {file = "grpcio_tools-1.43.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7e3662f62d410b3f81823b5fa0f79c6e0e250977a1058e4131867b85138a661"}, - {file = "grpcio_tools-1.43.0-cp38-cp38-win32.whl", hash = "sha256:5f2e584d7644ef924e9e042fa151a3bb9f7c28ef1ae260ee6c9cb327982b5e94"}, - {file = "grpcio_tools-1.43.0-cp38-cp38-win_amd64.whl", hash = "sha256:98dcb5b756855110fb661ccd6a93a716610b7efcd5720a3aec01358a1a892c30"}, - {file = "grpcio_tools-1.43.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:61ef6cb6ccf9b9c27bb85fffc5338194bcf444df502196c2ad0ff8df4706d41e"}, - {file = "grpcio_tools-1.43.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:1def9b68ac9e62674929bc6590a33d89635f1cf16016657d9e16a69f41aa5c36"}, - {file = "grpcio_tools-1.43.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:b68cc0c95a0f8c757e8d69b5fa46111d5c9d887ae62af28f827649b1d1b70fe1"}, - {file = "grpcio_tools-1.43.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:e956b5c3b586d7b27eae49fb06f544a26288596fe12e22ffec768109717276d1"}, - {file = "grpcio_tools-1.43.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:671e61bbc91d8d568f12c3654bb5a91fce9f3fdfd5ec2cfc60c2d3a840449aa6"}, - {file = "grpcio_tools-1.43.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7173ed19854d1066bce9bdc09f735ca9c13e74a25d47a1cc5d1fe803b53bffb"}, - {file = "grpcio_tools-1.43.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1adb0dbcc1c10b86dcda910b8f56e39210e401bcee923dba166ba923a5f4696a"}, - {file = "grpcio_tools-1.43.0-cp39-cp39-win32.whl", hash = "sha256:ebfb94ddb454a6dc3a505d9531dc81c948e6364e181b8795bfad3f3f479974dc"}, - {file = "grpcio_tools-1.43.0-cp39-cp39-win_amd64.whl", hash = "sha256:d21928b680e6e29538688cffbf53f3d5a53cff0ec8f0c33139641700045bdf1a"}, + {file = "glcontext-2.3.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9ab27d42e2247defd047b067b011c41e46a2fa23b679d89203d426cc074fbc08"}, + {file = "glcontext-2.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b7df77de7b4b34b24b0d528c48e298876c9072bdf70f31afb899081dd95fc625"}, + {file = "glcontext-2.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d39a7c042198eb52986771cbf30837d5b29247cb915b162474a28eb7c40f3dc"}, + {file = "glcontext-2.3.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1af56c80d0b28bdb7e0cef879986e95fddfe9e8f2c16cd7ae9839e7202483776"}, + {file = "glcontext-2.3.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52be87a32884663525d2ce62b2f3af73b6e27271e3a7beb646da20afb2c47f7f"}, + {file = "glcontext-2.3.5-cp310-cp310-win32.whl", hash = "sha256:cd5b3dbba97328d3dbc8d00c74aedb1b67462e0f6c2dfee9123015047dac86ef"}, + {file = "glcontext-2.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:9439f79b4cbff5102ff609e1fc8b507c808bc8a17dcf5764d6d3736c0aeea8df"}, + {file = "glcontext-2.3.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a1046141afc30b60f92bc9707a5537b5d08788c2c7027fccc1aafafaff33be2f"}, + {file = "glcontext-2.3.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:929c395fd22e648929e0e959865e7dae3c0c113c0dbb0a221523aa1450ff3580"}, + {file = "glcontext-2.3.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a80321b5b081a9c8836680e460f6b52b0bbfbe1aae722ad402207a8488d40e4"}, + {file = "glcontext-2.3.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09891760b2027a3a690b0f506d82ac34ed0abd58fe54ff65cf8816df4398d75f"}, + {file = "glcontext-2.3.5-cp36-cp36m-win32.whl", hash = "sha256:f9472db9e98f92ed91f86f0838419071ec3e33b4c99e1b910c5beff677df14f5"}, + {file = "glcontext-2.3.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b19bdcc17e298991e54185235f0a9d1158bd683077353f31b3df14b577d6ab2f"}, + {file = "glcontext-2.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95d1cf0ea4cb7868a336746ac4fdbb6e17afb98fcdbd04c2aa16f52bf035f213"}, + {file = "glcontext-2.3.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f16493a72d9caab2c707a1f916f6dea5349c3ee8d293f39cbc6617c3f9fa68fe"}, + {file = "glcontext-2.3.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31146dcf54e3538dbffce5ee6b6f92710ed69d513a1838a1eba39f727c7d330a"}, + {file = "glcontext-2.3.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7eb4600ab24fa5f7007833bf9f309f78e6f31240d7b80f7b1beae76e21800a7"}, + {file = "glcontext-2.3.5-cp37-cp37m-win32.whl", hash = "sha256:2ff68c5d08e00246967440c2b72816bcbd01c8cde0ad30b979f0fb1149e7ebb8"}, + {file = "glcontext-2.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:f20a7065b3191f2244579ea19c0cb6967b5c623142c585616f5dbdab508e7aa4"}, + {file = "glcontext-2.3.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1348b3e82e92d04f1ddc6ebd08210951f4c37c0f2b9334adf00c43d84763ea45"}, + {file = "glcontext-2.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:418a89c8563eba061e3e8a26eafa4d720199d3945a9e46548d3bd13bfdc72f73"}, + {file = "glcontext-2.3.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86bdd828320144a70d6687e63dd0132dbcfc0723c86aa7c214dfd78998eedca1"}, + {file = "glcontext-2.3.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8809ebf227203405f7dea672859d996168e53aac2b65e2dbb99f860632c3d33"}, + {file = "glcontext-2.3.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7e6063ba81b4028af3d8960376f26eac63b3393677d19c805678febfb908e94"}, + {file = "glcontext-2.3.5-cp38-cp38-win32.whl", hash = "sha256:2286d4fe22a95147a917cb887a2c298f37ec56ef57c52e5969a56463f7540cb4"}, + {file = "glcontext-2.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:db3f3a3df661f0c2ac2994b6012650d997a9e3520abe543eb6f8f71567facb26"}, + {file = "glcontext-2.3.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2669694475924e283b3c429bf53c5867e0fe7dd3fc674f857f13ebd566eea71e"}, + {file = "glcontext-2.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d6e90642e102de51015dcfebe656dffa1339834db3215b5ea44f6fa7109f5f54"}, + {file = "glcontext-2.3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:088be0e62c874a376b3eecc95fbe6b8c469b97087696232c616b70e89b5cdf52"}, + {file = "glcontext-2.3.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2559a9a83f53de9f6cbc79a96b97c62617b990d6828b96d6d8cf6ec2883e65df"}, + {file = "glcontext-2.3.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5aadb61aece5648f9b82a6cd9c83074b44bc3568440175d7aac6533add7486b"}, + {file = "glcontext-2.3.5-cp39-cp39-win32.whl", hash = "sha256:f9fe81003daf6a0b43e6467a7d53765c3703dc9f684b30e50c95d9a2b11a97b1"}, + {file = "glcontext-2.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:2da4f13cff095e637bf817e3f41dcc28c3ee9dca9544a0c6223196705a3b8c43"}, + {file = "glcontext-2.3.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:45b27269fdaff3c937166b8f06b625bf74fa13c8d3e5eb2d4a7c316d94e345aa"}, + {file = "glcontext-2.3.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfda32c812a739665f2bc91252b75a86d8256cfea75279a5d56b434e1df36fc8"}, + {file = "glcontext-2.3.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7107df7f83abe00637ea27fa33e75b7407e3c819a06cb8e16dfbe4be25023b20"}, + {file = "glcontext-2.3.5-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e4ae8a67d6fd2fa3a4019e9b476be2e5a35aeff2a995aa23019d8cf47a03ebb"}, + {file = "glcontext-2.3.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7a7edda12bab73ff9520a2a980292b1d82e432a7008ff545e24032248a746f77"}, + {file = "glcontext-2.3.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94f1881a7e1e64c6a0c2d3eb5038e12bd18176c3e4c922c93ecbcdf069cfedcc"}, + {file = "glcontext-2.3.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773850860e81b219db9593e54955b6f3b2b3ccd9f699aaf693214b353cc053e5"}, + {file = "glcontext-2.3.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:accb0d14d5aff08af629937361cdfef07261a521479dcb228214a90f371460e2"}, + {file = "glcontext-2.3.5-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cedf181a5a05feb710c12557b988c8755a25674f41133bde02504a42f3b8ddb3"}, + {file = "glcontext-2.3.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:abfc26acc5397b07d7b7e3e463b6e318de7512faddbb52a344afb5b07c6ba5ed"}, + {file = "glcontext-2.3.5.tar.gz", hash = "sha256:44d3ef950e39930c6aefc038c9f43f1e2b6bc5c03914a4c68ac187bdc8e7636c"}, ] identify = [ - {file = "identify-2.4.9-py2.py3-none-any.whl", hash = "sha256:bff7c4959d68510bc28b99d664b6a623e36c6eadc933f89a4e0a9ddff9b4fee4"}, - {file = "identify-2.4.9.tar.gz", hash = "sha256:e926ae3b3dc142b6a7a9c65433eb14ccac751b724ee255f7c2ed3b5970d764fb"}, + {file = "identify-2.4.12-py2.py3-none-any.whl", hash = "sha256:5f06b14366bd1facb88b00540a1de05b69b310cbc2654db3c7e07fa3a4339323"}, + {file = "identify-2.4.12.tar.gz", hash = "sha256:3f3244a559290e7d3deb9e9adc7b33594c1bc85a9dd82e0f1be519bf12a1ec17"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, @@ -2865,8 +2777,8 @@ imagesize = [ {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.11.0-py3-none-any.whl", hash = "sha256:6affcdb3aec542dd98df8211e730bba6c5f2bec8288d47bacacde898f548c9ad"}, - {file = "importlib_metadata-4.11.0.tar.gz", hash = "sha256:9e5e553bbba1843cb4a00823014b907616be46ee503d2b9ba001d214a8da218f"}, + {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, + {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, ] importlib-resources = [ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"}, @@ -2877,12 +2789,12 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] ipykernel = [ - {file = "ipykernel-6.9.0-py3-none-any.whl", hash = "sha256:1626b91c50e4605555ac6e5b29f1e5206d299a4a4a21483770a181be97f0f0e0"}, - {file = "ipykernel-6.9.0.tar.gz", hash = "sha256:b556e292dc6fa223f24328b1c936b9c921fafcc2f420bb0d6cfdfc42eaa90225"}, + {file = "ipykernel-6.9.2-py3-none-any.whl", hash = "sha256:c977cff576b8425a68d3a6916510903833f0f25ed8d5c282a0c51c35de27bd47"}, + {file = "ipykernel-6.9.2.tar.gz", hash = "sha256:4c3cc8cb359f2ead70c30f5504971c0d285e2c1c699d2ce9af0216fe9c9fb17c"}, ] ipython = [ - {file = "ipython-7.31.1-py3-none-any.whl", hash = "sha256:55df3e0bd0f94e715abd968bedd89d4e8a7bce4bf498fb123fed4f5398fea874"}, - {file = "ipython-7.31.1.tar.gz", hash = "sha256:b5548ec5329a4bcf054a5deed5099b0f9622eb9ea51aaa7104d215fece201d8c"}, + {file = "ipython-7.32.0-py3-none-any.whl", hash = "sha256:86df2cf291c6c70b5be6a7b608650420e89180c8ec74f376a34e2dc15c3400e7"}, + {file = "ipython-7.32.0.tar.gz", hash = "sha256:468abefc45c15419e3c8e8c0a6a5c115b2127bafa34d7c641b1d443658793909"}, ] ipython-genutils = [ {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, @@ -2917,70 +2829,69 @@ jupyter-client = [ {file = "jupyter_client-7.1.2.tar.gz", hash = "sha256:4ea61033726c8e579edb55626d8ee2e6bf0a83158ddf3751b8dd46b2c5cd1e96"}, ] jupyter-core = [ - {file = "jupyter_core-4.9.1-py3-none-any.whl", hash = "sha256:1c091f3bbefd6f2a8782f2c1db662ca8478ac240e962ae2c66f0b87c818154ea"}, - {file = "jupyter_core-4.9.1.tar.gz", hash = "sha256:dce8a7499da5a53ae3afd5a9f4b02e5df1d57250cf48f3ad79da23b4778cd6fa"}, + {file = "jupyter_core-4.9.2-py3-none-any.whl", hash = "sha256:f875e4d27e202590311d468fa55f90c575f201490bd0c18acabe4e318db4a46d"}, + {file = "jupyter_core-4.9.2.tar.gz", hash = "sha256:d69baeb9ffb128b8cd2657fcf2703f89c769d1673c851812119e3a2a0e93ad9a"}, ] jupyter-server = [ - {file = "jupyter_server-1.13.5-py3-none-any.whl", hash = "sha256:a3eb9d397df2de26134cb24fe7cb5da60ec28b4f8b292e0bdefd450b1f062dd3"}, - {file = "jupyter_server-1.13.5.tar.gz", hash = "sha256:9e3e9717eea3bffab8cfb2ff330011be6c8bbd9cdae5b71cef169fcece2f19d3"}, + {file = "jupyter_server-1.15.6-py3-none-any.whl", hash = "sha256:e393934c19fcc324a7fca77f811eacd91201440f04c6fbb15c959c463baaa9c5"}, + {file = "jupyter_server-1.15.6.tar.gz", hash = "sha256:56bd6f580d1f46b62294990e8e78651025729f5d3fc798f10f2c03f0cdcbf28d"}, ] jupyterlab = [ - {file = "jupyterlab-3.2.9-py3-none-any.whl", hash = "sha256:729d1f06e97733070badc04152aecf9fb2cd036783eebbd9123ff58aab83a8f5"}, - {file = "jupyterlab-3.2.9.tar.gz", hash = "sha256:65ddc34e5da1a764606e38c4f70cf9d4ac1c05182813cf0ab2dfea312c701124"}, + {file = "jupyterlab-3.3.2-py3-none-any.whl", hash = "sha256:32c9e3fae93d02f7a071f5e69a7a5450fa4bf087dd3d5aca58c7dd2adf2565d3"}, + {file = "jupyterlab-3.3.2.tar.gz", hash = "sha256:3c716bf5592cb28c5c55c615c6e5bd3efc71898f6957d13719b56478bbbb587a"}, ] jupyterlab-pygments = [ {file = "jupyterlab_pygments-0.1.2-py2.py3-none-any.whl", hash = "sha256:abfb880fd1561987efaefcb2d2ac75145d2a5d0139b1876d5be806e32f630008"}, {file = "jupyterlab_pygments-0.1.2.tar.gz", hash = "sha256:cfcda0873626150932f438eccf0f8bf22bfa92345b814890ab360d666b254146"}, ] jupyterlab-server = [ - {file = "jupyterlab_server-2.10.3-py3-none-any.whl", hash = "sha256:62f3c598f1d48dfb9b27729ed17772e38115cbe61e7d60fe68a853791bdf1038"}, - {file = "jupyterlab_server-2.10.3.tar.gz", hash = "sha256:3fb84a5813d6d836ceda773fb2d4e9ef3c7944dbc1b45a8d59d98641a80de80a"}, + {file = "jupyterlab_server-2.11.2-py3-none-any.whl", hash = "sha256:45ec7dde24fb4476d2d55b1884068e285ab75ec6c21f1d77a8c12964910c2120"}, + {file = "jupyterlab_server-2.11.2.tar.gz", hash = "sha256:5d8dc70f6803dc48efb69fb43e3cd2f8c6aad4ba011670318e5efd26c7487bb9"}, ] kiwisolver = [ - {file = "kiwisolver-1.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1d819553730d3c2724582124aee8a03c846ec4362ded1034c16fb3ef309264e6"}, - {file = "kiwisolver-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d93a1095f83e908fc253f2fb569c2711414c0bfd451cab580466465b235b470"}, - {file = "kiwisolver-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4550a359c5157aaf8507e6820d98682872b9100ce7607f8aa070b4b8af6c298"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2210f28778c7d2ee13f3c2a20a3a22db889e75f4ec13a21072eabb5693801e84"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:82f49c5a79d3839bc8f38cb5f4bfc87e15f04cbafa5fbd12fb32c941cb529cfb"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9661a04ca3c950a8ac8c47f53cbc0b530bce1b52f516a1e87b7736fec24bfff0"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ddb500a2808c100e72c075cbb00bf32e62763c82b6a882d403f01a119e3f402"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72be6ebb4e92520b9726d7146bc9c9b277513a57a38efcf66db0620aec0097e0"}, - {file = "kiwisolver-1.3.2-cp310-cp310-win32.whl", hash = "sha256:83d2c9db5dfc537d0171e32de160461230eb14663299b7e6d18ca6dca21e4977"}, - {file = "kiwisolver-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:cba430db673c29376135e695c6e2501c44c256a81495da849e85d1793ee975ad"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4116ba9a58109ed5e4cb315bdcbff9838f3159d099ba5259c7c7fb77f8537492"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19554bd8d54cf41139f376753af1a644b63c9ca93f8f72009d50a2080f870f77"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a4cf5bbdc861987a7745aed7a536c6405256853c94abc9f3287c3fa401b174"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0007840186bacfaa0aba4466d5890334ea5938e0bb7e28078a0eb0e63b5b59d5"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec2eba188c1906b05b9b49ae55aae4efd8150c61ba450e6721f64620c50b59eb"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3dbb3cea20b4af4f49f84cffaf45dd5f88e8594d18568e0225e6ad9dec0e7967"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:5326ddfacbe51abf9469fe668944bc2e399181a2158cb5d45e1d40856b2a0589"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c6572c2dab23c86a14e82c245473d45b4c515314f1f859e92608dcafbd2f19b8"}, - {file = "kiwisolver-1.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b5074fb09429f2b7bc82b6fb4be8645dcbac14e592128beeff5461dcde0af09f"}, - {file = "kiwisolver-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:22521219ca739654a296eea6d4367703558fba16f98688bd8ce65abff36eaa84"}, - {file = "kiwisolver-1.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c358721aebd40c243894298f685a19eb0491a5c3e0b923b9f887ef1193ddf829"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ba5a1041480c6e0a8b11a9544d53562abc2d19220bfa14133e0cdd9967e97af"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44e6adf67577dbdfa2d9f06db9fbc5639afefdb5bf2b4dfec25c3a7fbc619536"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d45d1c74f88b9f41062716c727f78f2a59a5476ecbe74956fafb423c5c87a76"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70adc3658138bc77a36ce769f5f183169bc0a2906a4f61f09673f7181255ac9b"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6a5431940f28b6de123de42f0eb47b84a073ee3c3345dc109ad550a3307dd28"}, - {file = "kiwisolver-1.3.2-cp38-cp38-win32.whl", hash = "sha256:ee040a7de8d295dbd261ef2d6d3192f13e2b08ec4a954de34a6fb8ff6422e24c"}, - {file = "kiwisolver-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:8dc3d842fa41a33fe83d9f5c66c0cc1f28756530cd89944b63b072281e852031"}, - {file = "kiwisolver-1.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a498bcd005e8a3fedd0022bb30ee0ad92728154a8798b703f394484452550507"}, - {file = "kiwisolver-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80efd202108c3a4150e042b269f7c78643420cc232a0a771743bb96b742f838f"}, - {file = "kiwisolver-1.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f8eb7b6716f5b50e9c06207a14172cf2de201e41912ebe732846c02c830455b9"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f441422bb313ab25de7b3dbfd388e790eceb76ce01a18199ec4944b369017009"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:30fa008c172355c7768159983a7270cb23838c4d7db73d6c0f6b60dde0d432c6"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f8f6c8f4f1cff93ca5058d6ec5f0efda922ecb3f4c5fb76181f327decff98b8"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba677bcaff9429fd1bf01648ad0901cea56c0d068df383d5f5856d88221fe75b"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7843b1624d6ccca403a610d1277f7c28ad184c5aa88a1750c1a999754e65b439"}, - {file = "kiwisolver-1.3.2-cp39-cp39-win32.whl", hash = "sha256:e6f5eb2f53fac7d408a45fbcdeda7224b1cfff64919d0f95473420a931347ae9"}, - {file = "kiwisolver-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:eedd3b59190885d1ebdf6c5e0ca56828beb1949b4dfe6e5d0256a461429ac386"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dedc71c8eb9c5096037766390172c34fb86ef048b8e8958b4e484b9e505d66bc"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bf7eb45d14fc036514c09554bf983f2a72323254912ed0c3c8e697b62c4c158f"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b65bd35f3e06a47b5c30ea99e0c2b88f72c6476eedaf8cfbc8e66adb5479dcf"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25405f88a37c5f5bcba01c6e350086d65e7465fd1caaf986333d2a045045a223"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:bcadb05c3d4794eb9eee1dddf1c24215c92fb7b55a80beae7a60530a91060560"}, - {file = "kiwisolver-1.3.2.tar.gz", hash = "sha256:fc4453705b81d03568d5b808ad8f09c77c47534f6ac2e72e733f9ca4714aa75c"}, + {file = "kiwisolver-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:70e7b7a4ebeddef423115ea31857732fc04e0f38dd1e6385e1af05b6164a3d0f"}, + {file = "kiwisolver-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:384b5076b2c0172003abca9ba8b8c5efcaaffd31616f3f5e0a09dcc34772d012"}, + {file = "kiwisolver-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:334a7e3d498a0a791245f0964c746d0414e9b13aef73237f0d798a2101fdbae9"}, + {file = "kiwisolver-1.4.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:734e943ae519cdb8534d9053f478417c525ec921c06896ec7119e65d9ea4a687"}, + {file = "kiwisolver-1.4.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:65cbdbe14dc5988e362eb15e02dd24c6724238cb235132f812f1e3a29a61a3de"}, + {file = "kiwisolver-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf0080449d6ea39b817d85abd2c20d2d42fd9b1587544d64371d28d93c379cf"}, + {file = "kiwisolver-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd0223a3a4ddcc0d0e06c6cfeb0adde2bc19c08b4c7fc79d48dac2486a4b115b"}, + {file = "kiwisolver-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed30c5e58e578a2981c67346b2569e04120d1b80fa6906c207fe824d24603313"}, + {file = "kiwisolver-1.4.0-cp310-cp310-win32.whl", hash = "sha256:ed937691f522cc2362c280c903837a4e35195659b9935b598e3cd448db863605"}, + {file = "kiwisolver-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:576ba51b9f4e4d0d583c1cd257f53397bdc5e66a5e49fe68712f658426115777"}, + {file = "kiwisolver-1.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2467fe5fff6ed2a728e10dca9b1f37e9b911ca5b228a7d8990c8e3abf80c1724"}, + {file = "kiwisolver-1.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff7ae6fb6dce2f520b2d46efc801605fa1378fb19bb4580aebc6174eab05a0"}, + {file = "kiwisolver-1.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:313724e85fd14d581a939fa02424f4dc772fd914bc04499a8a6377d47313b966"}, + {file = "kiwisolver-1.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb997d1631b20745b18674d68dd6f1d9d45db512efd5fe0f162a5d4a6bbdd211"}, + {file = "kiwisolver-1.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97372c837add54e3e64a811464b14bb01428c4e9256072b6296f04157ea23246"}, + {file = "kiwisolver-1.4.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4471a48f53d20d49f263ca888aab77b754525ef35e6767657e1a44a724a8b0af"}, + {file = "kiwisolver-1.4.0-cp37-cp37m-win32.whl", hash = "sha256:1cf8c81e8a5fb4f5dcbd473fdb619b895313d29b7c60e4545827dcc6efbd8efc"}, + {file = "kiwisolver-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:87367ba1ad3819f7189fe8faff5f75a7603f526576033e7b86e10b598f8790b2"}, + {file = "kiwisolver-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:139c75216e5875ee5f8f4f7adcc3cd339f46f0d66bda2e10d8d21386d635476f"}, + {file = "kiwisolver-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:895b2df026006ff7434b03ca495983d0d26da96f6d58414c77d616747ee77e34"}, + {file = "kiwisolver-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cbf9aa926de224af15c974750fecdc7d2c0043428372acaaf61216e202abbf21"}, + {file = "kiwisolver-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd1f81bc35ec24cb82a7d0b805521e3d71b25b8a493d5810d18dc29644c6ef8"}, + {file = "kiwisolver-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:199f32bf6f3d3e2246024326497513c5c49c62aecee86f0ac019f5991978d505"}, + {file = "kiwisolver-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af6a7c956a45ee721e4263f5823e1a3b2e6b21a7e2b3646b3794e000620609d0"}, + {file = "kiwisolver-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3891527ec51b0365bb50de9bf826ce3d5b1adc276685b2779889762437bbd359"}, + {file = "kiwisolver-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14f43edc25daa0646d4b4e86c2ebdd32d785ab73a65a570130a3d234a4554b07"}, + {file = "kiwisolver-1.4.0-cp38-cp38-win32.whl", hash = "sha256:5ecf82bb25cec7df4bfcf37afe49f6f6202b4fa4029be7cb0848ed319c72d356"}, + {file = "kiwisolver-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:34e2e39a219b203fa3a82af5b9f8d386a8718677de7a9b82a9634e292a8f4e0a"}, + {file = "kiwisolver-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c19457f58941da61681efaabd5b1c37893108a2f922b9b19538f6921911186d"}, + {file = "kiwisolver-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0a6f3d5063e7fd6662e4773778ad2cb36e598abc6eb171af4a072ca86b441d0"}, + {file = "kiwisolver-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:676f9fac93f97f529dc80b5d6731099fad337549408e8bdd929343b7cb679797"}, + {file = "kiwisolver-1.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4b70f0729947d6327cd659e1b3477ced44a317a4ba441238b2a3642990f0ebd7"}, + {file = "kiwisolver-1.4.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:925a32900fc16430ba0dec2c0fca2e776eaf2fdc0930d5552be0a59e23304001"}, + {file = "kiwisolver-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ec8bd4e162fd0a8723467395c5bb16fd665a528b78e9339886c82965ed8efb"}, + {file = "kiwisolver-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9b4d1db32a4f1682df1480fd68eb1400235ac8f9ad8932e1624fdb23eb891904"}, + {file = "kiwisolver-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:38ebc0cb30ed2f59bd15e23591a53698005123e90e880f1af4600fcdbe4912e1"}, + {file = "kiwisolver-1.4.0-cp39-cp39-win32.whl", hash = "sha256:8f63b981678ca894bb665bcd5043bde2c9ba600e69df730c1ceeadd73ddbcb8c"}, + {file = "kiwisolver-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:b1ff5582bf55e85728119c5a23f695b8e408e15eee7d0f5effe0ee8ad1f8b523"}, + {file = "kiwisolver-1.4.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c29496625c61e18d97a6f6c2f2a55759ca8290fc21a751bc57824599c431c0d2"}, + {file = "kiwisolver-1.4.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:71d44a6a59ea53d41e5950a42ec496fa821bd86f292fb3e10aa1b3932ecfc65e"}, + {file = "kiwisolver-1.4.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf2030bf18c21bf91fa9cf6a403a765519c9168bd7a91ba1d66d5c7f70ded1e"}, + {file = "kiwisolver-1.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5ca92de8e48678a2cbbd90adb10773e3553bb9fd1c090bf0dfe5fc3337a181ea"}, + {file = "kiwisolver-1.4.0.tar.gz", hash = "sha256:7508b01e211178a85d21f1f87029846b77b2404a4c68cbd14748d4d4142fa3b8"}, ] lazy-object-proxy = [ {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, @@ -3022,19 +2933,19 @@ lazy-object-proxy = [ {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, ] manimpango = [ - {file = "ManimPango-0.4.0.post2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cebd954283da3ed36803bcca47ef49ed6f7587deddecd0a76e4ba6a947c22f25"}, - {file = "ManimPango-0.4.0.post2-cp310-cp310-win32.whl", hash = "sha256:9e8e881ac9d10bebb606ba490f0767755076996621b4e5ef2eb68313460d6853"}, - {file = "ManimPango-0.4.0.post2-cp310-cp310-win_amd64.whl", hash = "sha256:7cf92ce09d9154d0c078014882ca5d45eeace6c730ca1bde73f2aa505d9247b3"}, - {file = "ManimPango-0.4.0.post2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:916b01f3dd846243bcb42ae4443475fad04d8ef42ced22134c59ff613b5802fe"}, - {file = "ManimPango-0.4.0.post2-cp37-cp37m-win32.whl", hash = "sha256:8bdeafae9c112e91a29a107c3472ec7e00a2d536055a6446c804063eb0e2710c"}, - {file = "ManimPango-0.4.0.post2-cp37-cp37m-win_amd64.whl", hash = "sha256:2fa3591677d8eaf793e1b39904f8647c11776aeb669dbfee8ddda90061c53a90"}, - {file = "ManimPango-0.4.0.post2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9cf0cc4bca4d5fb5bc9c50356402a55a6d03d4cbfb83f07e36162010c2e5c836"}, - {file = "ManimPango-0.4.0.post2-cp38-cp38-win32.whl", hash = "sha256:cb02f1189e35a5d2b03d32b4e0b995afa326071dbbebb69ffd76d4cddb33d6a3"}, - {file = "ManimPango-0.4.0.post2-cp38-cp38-win_amd64.whl", hash = "sha256:a05e3764bd2c5cf2b1d2a35804eeec0efb5be98a835574f10ebdd1651bb42ec2"}, - {file = "ManimPango-0.4.0.post2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6cf01df4fbdd7619e854a5455698638ff3f33df0bb461506f2508682fe005848"}, - {file = "ManimPango-0.4.0.post2-cp39-cp39-win32.whl", hash = "sha256:717dbab9b5030a60e141490e3286f8e92519a8aaffa402f7851cd2b657cccdc5"}, - {file = "ManimPango-0.4.0.post2-cp39-cp39-win_amd64.whl", hash = "sha256:db497fd2ac84232adf8d2773110a7f2dd53ebabb5c4a434d01cc3f075af96c21"}, - {file = "ManimPango-0.4.0.post2.tar.gz", hash = "sha256:1a8b1b2981bdb128f43defc702bf457b7fd1c8dbb5b0c0625421623716394b25"}, + {file = "ManimPango-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc70c1ae3bb853b7244ea2c9b50c908e9d7a93062ec68315872e38771cc66969"}, + {file = "ManimPango-0.4.1-cp310-cp310-win32.whl", hash = "sha256:5228e5326dc52753f4e6855ac4bf9667d78c0005315cddaf74fac5c2a6f87bc3"}, + {file = "ManimPango-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:a83da66451498d6cc3f6e637157ca6c7530b68f9bc0ac6fe043b04bf78c87073"}, + {file = "ManimPango-0.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb84060069e35bbc220cc9a19658f3e694019a98cee2154fee1171a47bf3db44"}, + {file = "ManimPango-0.4.1-cp37-cp37m-win32.whl", hash = "sha256:02eee359b971d8f900ecb4de0e0023abe1aaec8f5e1c39c663a99a4e2b4425b0"}, + {file = "ManimPango-0.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:c59cadd9ed02c0d748fcf294ddb7d158c2ba2a50caa96d6af58ee0bcde327d67"}, + {file = "ManimPango-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d36b4df474149e958fadcc31a29cefc90ced6240053fa0e9cd3188a5649eca6b"}, + {file = "ManimPango-0.4.1-cp38-cp38-win32.whl", hash = "sha256:5ed7b089681d1379c4250b070b668079e92d69251491ec8e010c083d21a80775"}, + {file = "ManimPango-0.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:7a0e42e17b2caae12bcd68502befa0e879c8503e6d31cd07e8d819b1e2567718"}, + {file = "ManimPango-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2375739e7a65a7f16e5856b392d930410c194066dd44cf6000d5ef2eb3b7d6f3"}, + {file = "ManimPango-0.4.1-cp39-cp39-win32.whl", hash = "sha256:109f2f5298f7a53354871766b21bc3a40e41eba448030fdcdffb970a295ebf28"}, + {file = "ManimPango-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:ca35af36d490000a7155fdb3aae124bcdfe2a167086c95df0aeee92483f1dce1"}, + {file = "ManimPango-0.4.1.tar.gz", hash = "sha256:f2da037ccdfe174040d3315001cc59bfc7405cd1b1191078bd4db0938005d649"}, ] mapbox-earcut = [ {file = "mapbox_earcut-0.12.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:421dbfc321871e66afe9264165848c0d13a37b27156f8a42a642bf5820bafdda"}, @@ -3069,75 +2980,46 @@ mapbox-earcut = [ {file = "mapbox_earcut-0.12.11.tar.gz", hash = "sha256:2808757f8a95eb816d3ce225528c9cb15355afe175f3bcb6837eb7700972e0b9"}, ] markupsafe = [ - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] matplotlib = [ {file = "matplotlib-3.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:456cc8334f6d1124e8ff856b42d2cc1c84335375a16448189999496549f7182b"}, @@ -3189,8 +3071,14 @@ mistune = [ {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, ] moderngl = [ + {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:186f8ab2b869c56f677dc87de0577a60790fb9306bd5149cedc433a39e9291e5"}, + {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de252103b24a8dc40c7f6e1755e29bc9263c33b92141787b50c7ab0266c74906"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bcfcec3bc3b9a1ee19e94fa524913fd45c37214ea69301a6911e8e53f966029"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d76b0fb489a5dc6da591b979f8c471bb5b67409afaa9fe4569bc0abf25221f4"}, {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_27_x86_64.whl", hash = "sha256:792ffe1ec233ed5fcfb0c14955a7f944d64c0d49713ff8b9c5fa3176d96f05c3"}, {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:1f9ed0bc0d706124a01be2ad59b5774bb3b023e61dcf39faf7c4c7ef4b9f4f75"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7c2fce8b7a68f3df9189a19f424478e1d853cfd3e142efd1eb0d4cdf44148d7"}, + {file = "moderngl-5.6.4-cp310-cp310-win32.whl", hash = "sha256:0c6b482f678641e56bd44acecd10eddf74d2cd31e472eff6cca05493cf01e2c9"}, {file = "moderngl-5.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:28b517fc56c9ab9eb1f5833f7d7b1274d3719b962f95f55ccd8a0f6db884a92b"}, {file = "moderngl-5.6.4-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:bc3764d67f037b67051871345a1d0b7a3d2c19cb5c0c0af0a84c532e802d6642"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:90006d9dfd5333da604a7d26b2a5e70e1a570f291cd745b8bf80e4833d8821b6"}, @@ -3200,21 +3088,45 @@ moderngl = [ {file = "moderngl-5.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:331fd4bce60b10a08eed81a3ed4c70b7c297c38f981fdf3968d03a1c892af247"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1bd864b5cc2fc1255785e33575cec98fa5ded698503c4f8f3fa9230abeaa3a04"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b22534529f5bc52c1fe43336787c06d51123ae978fb56e74e47cabd85056c934"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5151ccf38af80ce8600eac089df1c814eb72aa99c8768307348c1a170104b7e"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ef57f65c639d12d534dce70e5c08965f0856ac371c669c7586904b8db6453eb"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0032c07b31bec50b26bba7ee7999e0f697000b31456bfa84391614bb92dba376"}, {file = "moderngl-5.6.4-cp36-cp36m-win32.whl", hash = "sha256:ee5b1eced39d7f6dc68782c2abf01c1130a40b6d83d333d175ee71adbea7c721"}, {file = "moderngl-5.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:52ee915a559762f0e992344961b35e0d241be32f8aa7464494e958f777e0534c"}, {file = "moderngl-5.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f83f6ab1fafdba2d9c06a7a1c8a4e460689ea1d514146606acc74f14e0831d93"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c350e06affea9fabc636b2350cf6e58d83ee2e7264527eee0f5d142c167f5463"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3eb65afc8ec4a1d4a4c48696fb0f4f6cf7a7ada6bef97818d717dbca73c57b11"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ec09bb3382d36e5ef3e627e85744b719db1175c3a3fdbadf9acde48eb1aca6"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23b6b30c5a16807d9d2b92f343fcdca8713a88801d8afa985decd302bb6ef7e9"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5eb217b7726511d2382bfdd56b2a8ff5489aa7d1d73bf4f854343b07df286fa9"}, {file = "moderngl-5.6.4-cp37-cp37m-win32.whl", hash = "sha256:4fd721eb83e73d34c3f7b5a11aec656fef461b51bbe7503b07ea27370c593cbd"}, {file = "moderngl-5.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:01c71d94dbd59b5d37ead463991e2998c0924426cffa393b9da2b8334551c998"}, + {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:46e7e03360eafa77159e0d6142904de0d2e9400254414820bbc2d0ca16b14388"}, {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2ec6ecd845f21ba44a08c11521cb71f2a9c2ea2ec189b7ed30d17837d392d70"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:40f74a2246e5302f93f2d46f76c0d2a26cbed1eb29731674c4052476f1e9c9ea"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5e158e6881034c7e1d0c583d7c82ff608439606f2359dc6098e4be4fd93cef9d"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eb8fb5efab2716938308732d16d0caf1a195015d84d73f2b73e3adacd228ba6"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59907d8855dd3ccf1950e8f43f5a1a7cdd93910d8edf538bf52e62098be22360"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8037b6934843000d5fecd2b1933d3894687123fc9afdb19af52a9a628971163d"}, {file = "moderngl-5.6.4-cp38-cp38-win32.whl", hash = "sha256:a28dc741469eeb69549ee85b4ddbf8e9cfca6a2b19ce0406df9fde20f78082c8"}, {file = "moderngl-5.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:ce87962b91635d857cac4a753c5d5f647d94dc66dcb0f090bb8d758fd226c3e8"}, + {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d4c56e15a5fb29de0295891ec3b153e2bd8aeada0c0825135aa5851fa481ff28"}, {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fb139bcdd25eae2c546e5788e9d8719f6c4b18a2ba68a9df31699b4ac57d62d"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9645afaa1704b2628d8a58be0760243d9954a62902283b176ea00a55b54eafe"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a3aaa15eb4d43b79e06a46945869feb13f325312ad63666ef2b7d3e216e3a09"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a07531c6b0f3da3058bd8927bc6c75eface98ce1416d8be4072b9b11b314b718"}, {file = "moderngl-5.6.4-cp39-cp39-win32.whl", hash = "sha256:fc5cc1601a3df8f45f1901c6b9960731e0619d1781b0d036e12341fbf2ef55d3"}, {file = "moderngl-5.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:1c74b71c9acee9f0e69807a086d76e92f37c1960c3bb1d6a6e2472fd03f7be5b"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1927a52fd3465c508045a1c4a8ea8c793399830d48458d431936f24f8827f136"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d04747cc9a96f786d04c8a176d5d2cbb51159efd66287d0e676ac674f53e861"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9092c50a2bb293be770f6f0ae5f1cb940848bf03682696c473a6d3f2c7710d2"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571e524fde685e21dbe132f4eb7bb223cfc235dc917a4cf122bc44897be18e89"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ee02dba4b32d7a165a36c797ce495d71deb085a7e29cfa7f1236fa7ccdfc6160"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0c02fdd386c45ad5d5053a436da64181a7821a042f6665c4ae415edfbdfe244c"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e2b40f1e11ee5f251a0d564e6a5d285ff91adf361e84f6912fc10959b92bd83"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d5f918dda6dc1ec5465d7105b06c5525041fbc368df5d4636145006ce3d303"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a6bd0e342388b931954671ccf8300ab36cc7d8c991547581efa6df5628bda8b"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:890caba3795a0288259d76a2cee014c6ffc00619bef179a8d0a87fd9c16a3729"}, {file = "moderngl-5.6.4.tar.gz", hash = "sha256:8c6d04559f5e3bf75a18525cd46d213c0f3a8409363718978e6de691bdb551fb"}, ] moderngl-window = [ @@ -3253,20 +3165,20 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] nbclassic = [ - {file = "nbclassic-0.3.5-py3-none-any.whl", hash = "sha256:012d18efb4e24fe9af598add0dcaa621c1f8afbbbabb942fb583dd7fbb247fc8"}, - {file = "nbclassic-0.3.5.tar.gz", hash = "sha256:99444dd63103af23c788d9b5172992f12caf8c3098dd5a35c787f0df31490c29"}, + {file = "nbclassic-0.3.7-py3-none-any.whl", hash = "sha256:89184baa2d66b8ac3c8d3df57cbcf16f34148954d410a2fb3e897d7c18f2479d"}, + {file = "nbclassic-0.3.7.tar.gz", hash = "sha256:36dbaa88ffaf5dc05d149deb97504b86ba648f4a80a60b8a58ac94acab2daeb5"}, ] nbclient = [ - {file = "nbclient-0.5.10-py3-none-any.whl", hash = "sha256:5b582e21c8b464e6676a9d60acc6871d7fbc3b080f74bef265a9f90411b31f6f"}, - {file = "nbclient-0.5.10.tar.gz", hash = "sha256:b5fdea88d6fa52ca38de6c2361401cfe7aaa7cd24c74effc5e489cec04d79088"}, + {file = "nbclient-0.5.13-py3-none-any.whl", hash = "sha256:47ac905af59379913c1f8f541098d2550153cf8dc58553cbe18c702b181518b0"}, + {file = "nbclient-0.5.13.tar.gz", hash = "sha256:40c52c9b5e3c31faecaee69f202b3f53e38d7c1c563de0fadde9d7eda0fdafe8"}, ] nbconvert = [ - {file = "nbconvert-6.4.2-py3-none-any.whl", hash = "sha256:7b006ae9979af56200e7fa3db39d9d12c99e811e8843b05dbe518e5b754bcb2e"}, - {file = "nbconvert-6.4.2.tar.gz", hash = "sha256:eb2803db18f6facce6bf3b01b684fe47907994bd156d15eaccdf011e3d7f8164"}, + {file = "nbconvert-6.4.4-py3-none-any.whl", hash = "sha256:c0c13d11378e13f72b9cd509c008383dca4051c228e4985f75023b2a5d82fc9f"}, + {file = "nbconvert-6.4.4.tar.gz", hash = "sha256:ee0dfe34bbd1082ac9bfc750aae3c73fcbc34a70c5574c6986ff83c10a3541fd"}, ] nbformat = [ - {file = "nbformat-5.1.3-py3-none-any.whl", hash = "sha256:eb8447edd7127d043361bc17f2f5a807626bc8e878c7709a1c647abda28a9171"}, - {file = "nbformat-5.1.3.tar.gz", hash = "sha256:b516788ad70771c6250977c1374fcca6edebe6126fd2adb5a69aa5c2356fd1c8"}, + {file = "nbformat-5.2.0-py3-none-any.whl", hash = "sha256:3e30424e8291b2188347f5c3ba5273ed3766f12f8c5137c2e456a0815f36e785"}, + {file = "nbformat-5.2.0.tar.gz", hash = "sha256:93df0b9c67221d38fb970c48f6d361819a6c388299a0ef3171bbb912edfe1324"}, ] nest-asyncio = [ {file = "nest_asyncio-1.5.4-py3-none-any.whl", hash = "sha256:3fdd0d6061a2bb16f21fe8a9c6a7945be83521d81a0d15cff52e9edee50101d6"}, @@ -3281,8 +3193,12 @@ nodeenv = [ {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, ] notebook = [ - {file = "notebook-6.4.8-py3-none-any.whl", hash = "sha256:3e702fcc54b8ae597533c3864793b7a1e971dec9e112f67235828d8a798fd654"}, - {file = "notebook-6.4.8.tar.gz", hash = "sha256:1e985c9dc6f678bdfffb9dc657306b5469bfa62d73e03f74e8defbf76d284312"}, + {file = "notebook-6.4.10-py3-none-any.whl", hash = "sha256:49cead814bff0945fcb2ee07579259418672ac175d3dc3d8102a4b0a656ed4df"}, + {file = "notebook-6.4.10.tar.gz", hash = "sha256:2408a76bc6289283a8eecfca67e298ec83c67db51a4c2e1b713dd180bb39e90e"}, +] +notebook-shim = [ + {file = "notebook_shim-0.1.0-py3-none-any.whl", hash = "sha256:02432d55a01139ac16e2100888aa2b56c614720cec73a27e71f40a5387e45324"}, + {file = "notebook_shim-0.1.0.tar.gz", hash = "sha256:7897e47a36d92248925a2143e3596f19c60597708f7bef50d81fcd31d7263e85"}, ] numpy = [ {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:301e408a052fdcda5cdcf03021ebafc3c6ea093021bf9d1aa47c54d48bdad166"}, @@ -3378,8 +3294,8 @@ pillow = [ {file = "Pillow-9.0.1.tar.gz", hash = "sha256:6c8bc8238a7dfdaf7a75f5ec5a663f4173f8c367e5a39f87e720495e1eed75fa"}, ] platformdirs = [ - {file = "platformdirs-2.5.0-py3-none-any.whl", hash = "sha256:30671902352e97b1eafd74ade8e4a694782bd3471685e78c32d0fdfd3aa7e7bb"}, - {file = "platformdirs-2.5.0.tar.gz", hash = "sha256:8ec11dfba28ecc0715eb5fb0147a87b1bf325f349f3da9aab2cd6b50b96b692b"}, + {file = "platformdirs-2.5.1-py3-none-any.whl", hash = "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227"}, + {file = "platformdirs-2.5.1.tar.gz", hash = "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -3397,34 +3313,6 @@ prompt-toolkit = [ {file = "prompt_toolkit-3.0.28-py3-none-any.whl", hash = "sha256:30129d870dcb0b3b6a53efdc9d0a83ea96162ffd28ffe077e94215b233dc670c"}, {file = "prompt_toolkit-3.0.28.tar.gz", hash = "sha256:9f1cd16b1e86c2968f2519d7fb31dd9d669916f515612c269d14e9ed52b51650"}, ] -protobuf = [ - {file = "protobuf-3.19.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f51d5a9f137f7a2cec2d326a74b6e3fc79d635d69ffe1b036d39fc7d75430d37"}, - {file = "protobuf-3.19.4-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:09297b7972da685ce269ec52af761743714996b4381c085205914c41fcab59fb"}, - {file = "protobuf-3.19.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072fbc78d705d3edc7ccac58a62c4c8e0cec856987da7df8aca86e647be4e35c"}, - {file = "protobuf-3.19.4-cp310-cp310-win32.whl", hash = "sha256:7bb03bc2873a2842e5ebb4801f5c7ff1bfbdf426f85d0172f7644fcda0671ae0"}, - {file = "protobuf-3.19.4-cp310-cp310-win_amd64.whl", hash = "sha256:f358aa33e03b7a84e0d91270a4d4d8f5df6921abe99a377828839e8ed0c04e07"}, - {file = "protobuf-3.19.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1c91ef4110fdd2c590effb5dca8fdbdcb3bf563eece99287019c4204f53d81a4"}, - {file = "protobuf-3.19.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c438268eebb8cf039552897d78f402d734a404f1360592fef55297285f7f953f"}, - {file = "protobuf-3.19.4-cp36-cp36m-win32.whl", hash = "sha256:835a9c949dc193953c319603b2961c5c8f4327957fe23d914ca80d982665e8ee"}, - {file = "protobuf-3.19.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4276cdec4447bd5015453e41bdc0c0c1234eda08420b7c9a18b8d647add51e4b"}, - {file = "protobuf-3.19.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6cbc312be5e71869d9d5ea25147cdf652a6781cf4d906497ca7690b7b9b5df13"}, - {file = "protobuf-3.19.4-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:54a1473077f3b616779ce31f477351a45b4fef8c9fd7892d6d87e287a38df368"}, - {file = "protobuf-3.19.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:435bb78b37fc386f9275a7035fe4fb1364484e38980d0dd91bc834a02c5ec909"}, - {file = "protobuf-3.19.4-cp37-cp37m-win32.whl", hash = "sha256:16f519de1313f1b7139ad70772e7db515b1420d208cb16c6d7858ea989fc64a9"}, - {file = "protobuf-3.19.4-cp37-cp37m-win_amd64.whl", hash = "sha256:cdc076c03381f5c1d9bb1abdcc5503d9ca8b53cf0a9d31a9f6754ec9e6c8af0f"}, - {file = "protobuf-3.19.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:69da7d39e39942bd52848438462674c463e23963a1fdaa84d88df7fbd7e749b2"}, - {file = "protobuf-3.19.4-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:48ed3877fa43e22bcacc852ca76d4775741f9709dd9575881a373bd3e85e54b2"}, - {file = "protobuf-3.19.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd95d1dfb9c4f4563e6093a9aa19d9c186bf98fa54da5252531cc0d3a07977e7"}, - {file = "protobuf-3.19.4-cp38-cp38-win32.whl", hash = "sha256:b38057450a0c566cbd04890a40edf916db890f2818e8682221611d78dc32ae26"}, - {file = "protobuf-3.19.4-cp38-cp38-win_amd64.whl", hash = "sha256:7ca7da9c339ca8890d66958f5462beabd611eca6c958691a8fe6eccbd1eb0c6e"}, - {file = "protobuf-3.19.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:36cecbabbda242915529b8ff364f2263cd4de7c46bbe361418b5ed859677ba58"}, - {file = "protobuf-3.19.4-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:c1068287025f8ea025103e37d62ffd63fec8e9e636246b89c341aeda8a67c934"}, - {file = "protobuf-3.19.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96bd766831596d6014ca88d86dc8fe0fb2e428c0b02432fd9db3943202bf8c5e"}, - {file = "protobuf-3.19.4-cp39-cp39-win32.whl", hash = "sha256:84123274d982b9e248a143dadd1b9815049f4477dc783bf84efe6250eb4b836a"}, - {file = "protobuf-3.19.4-cp39-cp39-win_amd64.whl", hash = "sha256:3112b58aac3bac9c8be2b60a9daf6b558ca3f7681c130dcdd788ade7c9ffbdca"}, - {file = "protobuf-3.19.4-py2.py3-none-any.whl", hash = "sha256:8961c3a78ebfcd000920c9060a262f082f29838682b1f7201889300c1fbe0616"}, - {file = "protobuf-3.19.4.tar.gz", hash = "sha256:9df0c10adf3e83015ced42a9a7bd64e13d06c4cf45c340d2c63020ea04499d0a"}, -] psutil = [ {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b"}, {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:7336292a13a80eb93c21f36bde4328aa748a04b68c13d01dfddd67fc13fd0618"}, @@ -3483,17 +3371,15 @@ py = [ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] pycairo = [ - {file = "pycairo-1.20.1-cp310-cp310-win32.whl", hash = "sha256:736ffc618e851601e861a630293e5c910ef016b83b2d035a336f83a367bf56ab"}, - {file = "pycairo-1.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:261c69850d4b2ec03346c9745bad2a835bb8124e4c6961b8ceac503d744eb3b3"}, - {file = "pycairo-1.20.1-cp36-cp36m-win32.whl", hash = "sha256:6db823a18e7be1eb2a29c28961f2f01e84d3b449f06be7338d05ac8f90592cd5"}, - {file = "pycairo-1.20.1-cp36-cp36m-win_amd64.whl", hash = "sha256:5525da2d8de912750dd157752aa96f1f0a42a437c5625e85b14c936b5c6305ae"}, - {file = "pycairo-1.20.1-cp37-cp37m-win32.whl", hash = "sha256:c8c2bb933974d91c5d19e54b846d964de177e7bf33433bf34ac34c85f9b30e94"}, - {file = "pycairo-1.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9a32e4a3574a104aa876c35d5e71485dfd6986b18d045534c6ec510c44d5d6a7"}, - {file = "pycairo-1.20.1-cp38-cp38-win32.whl", hash = "sha256:0d7a6754d410d911a46f00396bee4be96500ccd3d178e7e98aef1140e3dd67ae"}, - {file = "pycairo-1.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:b605151cdd23cedb31855b8666371b6e26b80f02753a52c8b8023a916b1df812"}, - {file = "pycairo-1.20.1-cp39-cp39-win32.whl", hash = "sha256:e800486b51fffeb11ed867b4f2220d446e2a60a81a73b7c377123e0cbb72f49d"}, - {file = "pycairo-1.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:f123d3818e30b77b7209d70a6dcfd5b4e34885f9fa539d92dd7ff3e4e2037213"}, - {file = "pycairo-1.20.1.tar.gz", hash = "sha256:1ee72b035b21a475e1ed648e26541b04e5d7e753d75ca79de8c583b25785531b"}, + {file = "pycairo-1.21.0-cp310-cp310-win32.whl", hash = "sha256:44a2ecf34968de07b3b9dfdcdbccbd25aa3cab267200f234f84e81481a73bbf6"}, + {file = "pycairo-1.21.0-cp310-cp310-win_amd64.whl", hash = "sha256:f63c153a9ea3d21aff85e2caeee4b0c5d566b2368b4ed64826020d12953d76a4"}, + {file = "pycairo-1.21.0-cp37-cp37m-win32.whl", hash = "sha256:70936b19f967fa3cb3cd200c2608911227fa5d09dae21c166f64bc15e714ee41"}, + {file = "pycairo-1.21.0-cp37-cp37m-win_amd64.whl", hash = "sha256:31e1c4850db03201d33929cbe1905ce1b33202683ebda7bb0d4dba489115066b"}, + {file = "pycairo-1.21.0-cp38-cp38-win32.whl", hash = "sha256:dace6b356c476de27f8e1522428ac21a799c225703f746e2957d441f885dcb6c"}, + {file = "pycairo-1.21.0-cp38-cp38-win_amd64.whl", hash = "sha256:4357f20a6b1de8f1e8072a74ff68ab4c9a0ae698cd9f5c0f2b2cdd9b28b635f6"}, + {file = "pycairo-1.21.0-cp39-cp39-win32.whl", hash = "sha256:6d37375aab9f2bb6136f076c19815d72108383baae89fbc0d6cb8e5092217d02"}, + {file = "pycairo-1.21.0-cp39-cp39-win_amd64.whl", hash = "sha256:26b72b813c6f9d495f71057eab89c13e70a21c92360e9265abc049e0a931fa39"}, + {file = "pycairo-1.21.0.tar.gz", hash = "sha256:251907f18a552df938aa3386657ff4b5a4937dde70e11aa042bc297957f4b74b"}, ] pycodestyle = [ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, @@ -3520,8 +3406,8 @@ pygithub = [ {file = "PyGithub-1.55.tar.gz", hash = "sha256:1bbfff9372047ff3f21d5cd8e07720f3dbfdaf6462fcaed9d815f528f1ba7283"}, ] pyglet = [ - {file = "pyglet-1.5.21-py3-none-any.whl", hash = "sha256:11f11ddda4ee456284f2ddd1fe5c62fe29ba8c42074d3d9ae52d094abc2e1b7c"}, - {file = "pyglet-1.5.21.zip", hash = "sha256:5aaaddb06dc4b6f9ba08254d8d806a2bd2406925a9caf3a51fdffbd5d09728e2"}, + {file = "pyglet-1.5.23-py3-none-any.whl", hash = "sha256:086317c022612bf0aa28f32134a8cbe3d11de96787f5412d38d9c6abb6cfc771"}, + {file = "pyglet-1.5.23.zip", hash = "sha256:dee920203cf306159c503babb62f38787268708977f5c945d28337594b797c46"}, ] pygments = [ {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, @@ -3548,22 +3434,22 @@ pynacl = [ {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, ] pyobjc-core = [ - {file = "pyobjc-core-8.2.tar.gz", hash = "sha256:6afb8ee1dd0647cbfaaf99906eca3b43ce045b27e3d4510462d04e7e5361c89b"}, - {file = "pyobjc_core-8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:311e45556c3afa8831713b89017e0204562f51f35661d76c07ffe04985f44e1d"}, - {file = "pyobjc_core-8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:711f361e83382e405e4273ff085178b0cf730901ccf6801f834e7037e50278f9"}, - {file = "pyobjc_core-8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bdd2e2960ec73214bcfe2d86bb4ca94f5f5119db86d129fa32d3c003b6532c50"}, - {file = "pyobjc_core-8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b879f91fc614c399aafa1d08cf5e279c267510e904bad5c336c3a6064c0eb3aa"}, - {file = "pyobjc_core-8.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:b4ef4bdb99a330f5e15cc6273098964276fccbc432453cdba3c2963292bc066c"}, - {file = "pyobjc_core-8.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fd8e5be0955790ff8f9d17a0f356b6eb7eb1ce4995e0c94355c462dd52d22d6d"}, + {file = "pyobjc-core-8.4.1.tar.gz", hash = "sha256:df98669e957adb33566d9ef46773a5ac876a81afe8849c282d6a80448e35dd74"}, + {file = "pyobjc_core-8.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9a89cac910fbd64728fe7ec0c7a3a7cf20959bc1d7e2f41db4d7800556e47745"}, + {file = "pyobjc_core-8.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2cf1d4348cb99fcba04fa38199a46e35263b2fe7bb66e6dfbd4f19bc2602998d"}, + {file = "pyobjc_core-8.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a130324b25c0f5f4cfe30b6a28b8e70865d6e1eee158caababb603906ef431d2"}, + {file = "pyobjc_core-8.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c31195d1a8f00da99abf79643f902d09c709dbbe9c9b6feb6b585303c57d720c"}, + {file = "pyobjc_core-8.4.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:e7fd2aefb53a96a8f688c8bb36c6ebd5446250a7251bfa6b688a045e05afc60b"}, + {file = "pyobjc_core-8.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b3191173ce268e23c84d84f036fc94c3a8749a6726fc7fe73baf27dbac14f7d0"}, ] pyobjc-framework-cocoa = [ - {file = "pyobjc-framework-Cocoa-8.2.tar.gz", hash = "sha256:f0901998e2f18415ef6d1f8a12b083f69fc93bd56b3e88040002e3c09bd8c304"}, - {file = "pyobjc_framework_Cocoa-8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5af73f150e242542735e0663bb5504f88aabaec2a54c60e856cfca3ff6dd9712"}, - {file = "pyobjc_framework_Cocoa-8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d1de3763ee01850c311da74de5c82c85ec199120e85ab45acaf203accc37a470"}, - {file = "pyobjc_framework_Cocoa-8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:86d69bf667f99f3c43184d8830567195fff94c675fe7f60f899dd90553d9b265"}, - {file = "pyobjc_framework_Cocoa-8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9dbadb22826392c48b00087359f66579f8404a4f4f77498f31f9869c54bb0fa9"}, - {file = "pyobjc_framework_Cocoa-8.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:7adf8b57da1c1292c24375b8e74b6dd45f99a4d3c10ba925a9b38f63a97ba782"}, - {file = "pyobjc_framework_Cocoa-8.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bc8279c8c1544087d46a7e99324f093029df89b8c527c5da2a682bad4cb3197e"}, + {file = "pyobjc-framework-Cocoa-8.4.1.tar.gz", hash = "sha256:dc596bac0f5d424f67944e95b2d0d7c94a07c4166359d7b4a4d4ae4f8e112822"}, + {file = "pyobjc_framework_Cocoa-8.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cfbe038a0108ae1b45f8f7067af70af5811b8352d2dc3d86a7bcb4484ff5d56e"}, + {file = "pyobjc_framework_Cocoa-8.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:118225562064d991bafb41d0913899d6b3d723984d1888cb7181e4dba63b22c2"}, + {file = "pyobjc_framework_Cocoa-8.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d117a1eb24fd317e9f63792ac6a8703ed899de5d42e8a861c7bf885625668c31"}, + {file = "pyobjc_framework_Cocoa-8.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3af8577acbd6b980d3b9270ec99bc0164f66ef8397351a72fcdee527f23c1a34"}, + {file = "pyobjc_framework_Cocoa-8.4.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:91fdc964acb4dee4d37ae81fb603d48397739dbbfcc1eadbe0cdafaa8144b6e6"}, + {file = "pyobjc_framework_Cocoa-8.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:197dd28668e786b55d7d4139afd85c285f780564ebbccc166e84a24be31de34f"}, ] pyparsing = [ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, @@ -3617,8 +3503,8 @@ python-dateutil = [ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] pytz = [ - {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, - {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, + {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, + {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, ] pywin32 = [ {file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"}, @@ -3635,12 +3521,11 @@ pywin32 = [ {file = "pywin32-303-cp39-cp39-win_amd64.whl", hash = "sha256:79cbb862c11b9af19bcb682891c1b91942ec2ff7de8151e2aea2e175899cda34"}, ] pywinpty = [ - {file = "pywinpty-1.1.6-cp310-none-win_amd64.whl", hash = "sha256:5f526f21b569b5610a61e3b6126259c76da979399598e5154498582df3736ade"}, - {file = "pywinpty-1.1.6-cp36-none-win_amd64.whl", hash = "sha256:7576e14f42b31fa98b62d24ded79754d2ea4625570c016b38eb347ce158a30f2"}, - {file = "pywinpty-1.1.6-cp37-none-win_amd64.whl", hash = "sha256:979ffdb9bdbe23db3f46fc7285fd6dbb86b80c12325a50582b211b3894072354"}, - {file = "pywinpty-1.1.6-cp38-none-win_amd64.whl", hash = "sha256:2308b1fc77545427610a705799d4ead5e7f00874af3fb148a03e202437456a7e"}, - {file = "pywinpty-1.1.6-cp39-none-win_amd64.whl", hash = "sha256:c703bf569a98ab7844b9daf37e88ab86f31862754ef6910a8b3824993a525c72"}, - {file = "pywinpty-1.1.6.tar.gz", hash = "sha256:8808f07350c709119cc4464144d6e749637f98e15acc1e5d3c37db1953d2eebc"}, + {file = "pywinpty-2.0.5-cp310-none-win_amd64.whl", hash = "sha256:f86c76e2881c37e69678cbbf178109f8da1fa8584db24d58e1b9369b0276cfcb"}, + {file = "pywinpty-2.0.5-cp37-none-win_amd64.whl", hash = "sha256:ff9b52f182650cfdf3db1b264a6fe0963eb9d996a7a1fa843ac406c1e32111f8"}, + {file = "pywinpty-2.0.5-cp38-none-win_amd64.whl", hash = "sha256:651ee1467bd7eb6f64d44dbc954b7ab7d15ab6d8adacc4e13299692c67c5d5d2"}, + {file = "pywinpty-2.0.5-cp39-none-win_amd64.whl", hash = "sha256:e59a508ae78374febada3e53b5bbc90b5ad07ae68cbfd72a2e965f9793ae04f3"}, + {file = "pywinpty-2.0.5.tar.gz", hash = "sha256:e125d3f1804d8804952b13e33604ad2ca8b9b2cac92b27b521c005d1604794f8"}, ] pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, @@ -3735,11 +3620,11 @@ requests = [ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, ] restructuredtext-lint = [ - {file = "restructuredtext_lint-1.3.2.tar.gz", hash = "sha256:d3b10a1fe2ecac537e51ae6d151b223b78de9fafdd50e5eb6b08c243df173c80"}, + {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, ] rich = [ - {file = "rich-11.2.0-py3-none-any.whl", hash = "sha256:d5f49ad91fb343efcae45a2b2df04a9755e863e50413623ab8c9e74f05aee52b"}, - {file = "rich-11.2.0.tar.gz", hash = "sha256:1a6266a5738115017bb64a66c59c717e7aa047b3ae49a011ede4abdeffc6536e"}, + {file = "rich-12.0.1-py3-none-any.whl", hash = "sha256:ce5c714e984a2d185399e4e1dd1f8b2feacb7cecfc576f1522425643a36a57ea"}, + {file = "rich-12.0.1.tar.gz", hash = "sha256:3fba9dd15ebe048e2795a02ac19baee79dc12cc50b074ef70f2958cd651b59a9"}, ] scipy = [ {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, @@ -3881,15 +3766,15 @@ sphinxext-opengraph = [ {file = "sphinxext_opengraph-0.5.1-py3-none-any.whl", hash = "sha256:3fd0df576ae11e55c710653413edd7c05db65a4fbf985d536127c5ac06f5d2cb"}, ] srt = [ - {file = "srt-3.5.1.tar.gz", hash = "sha256:3116f816cf025f71c1668970cdac2b235daa2fb46dc11fd41b8326d337eff6ee"}, + {file = "srt-3.5.2.tar.gz", hash = "sha256:7aa4ad5ce4126d3f53b3e7bc4edaa86653d0378bf1c0b1ab8c59f5ab41384450"}, ] terminado = [ - {file = "terminado-0.13.1-py3-none-any.whl", hash = "sha256:f446b522b50a7aa68b5def0a02893978fb48cb82298b0ebdae13003c6ee6f198"}, - {file = "terminado-0.13.1.tar.gz", hash = "sha256:5b82b5c6e991f0705a76f961f43262a7fb1e55b093c16dca83f16384a7f39b7b"}, + {file = "terminado-0.13.3-py3-none-any.whl", hash = "sha256:874d4ea3183536c1782d13c7c91342ef0cf4e5ee1d53633029cbc972c8760bd8"}, + {file = "terminado-0.13.3.tar.gz", hash = "sha256:94d1cfab63525993f7d5c9b469a50a18d0cdf39435b59785715539dd41e36c0d"}, ] testpath = [ - {file = "testpath-0.5.0-py3-none-any.whl", hash = "sha256:8044f9a0bab6567fc644a3593164e872543bb44225b0e24846e2c89237937589"}, - {file = "testpath-0.5.0.tar.gz", hash = "sha256:1acf7a0bcd3004ae8357409fc33751e16d37ccc650921da1094a86581ad1e417"}, + {file = "testpath-0.6.0-py3-none-any.whl", hash = "sha256:8ada9f80a2ac6fb0391aa7cdb1a7d11cfa8429f693eda83f74dde570fe6fa639"}, + {file = "testpath-0.6.0.tar.gz", hash = "sha256:2f1b97e6442c02681ebe01bd84f531028a7caea1af3825000f52345c30285e0f"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, @@ -3943,8 +3828,8 @@ tornado = [ {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"}, ] tqdm = [ - {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"}, - {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"}, + {file = "tqdm-4.63.0-py2.py3-none-any.whl", hash = "sha256:e643e071046f17139dea55b880dc9b33822ce21613b4a4f5ea57f202833dbc29"}, + {file = "tqdm-4.63.0.tar.gz", hash = "sha256:1d9835ede8e394bb8c9dcbffbca02d717217113adc679236873eeaac5bc0b3cd"}, ] traitlets = [ {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, @@ -3981,44 +3866,44 @@ types-decorator = [ {file = "types_decorator-0.1.7-py3-none-any.whl", hash = "sha256:b55f4c8c59bdd25bd1ecf835f0bc21d88b99be0f5bb51b1c0d73090be90f62db"}, ] types-docutils = [ - {file = "types-docutils-0.17.5.tar.gz", hash = "sha256:4662e087f12ed30a63c7a104dcc458b73b76e6e764c5021267d196d78efaebdb"}, - {file = "types_docutils-0.17.5-py3-none-any.whl", hash = "sha256:9e60d7ef64a8eac972342c9071fbf0e3836484ac10f3d7ff3a8eeb4d2297a5dc"}, + {file = "types-docutils-0.18.0.tar.gz", hash = "sha256:14f781eb28d89a1cd61f1c41bd0776ad3bb4e2333d317c37d2c67f2eaf5891fe"}, + {file = "types_docutils-0.18.0-py3-none-any.whl", hash = "sha256:f0305109169326edffd98c128f542f773be06a1502a17d96359c53e31082db19"}, ] 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.19.12.tar.gz", hash = "sha256:b022247347471219acbe2fe68d2f3623d788252e99e9b97358b7ab904d268a78"}, - {file = "types_protobuf-3.19.12-py3-none-any.whl", hash = "sha256:130bf00e688ae9376682ac8f3d6610be797d8a6072f102f530ca1d579b52e54b"}, + {file = "types-protobuf-3.19.15.tar.gz", hash = "sha256:d371d0a5b32e78c2d684329a5d4491d385e6eadcab497b37c41172ded328c5d9"}, + {file = "types_protobuf-3.19.15-py3-none-any.whl", hash = "sha256:4673a4e56495886590c36cd87f2d855299a699a598eacb2e27d82b57eb4afb05"}, ] types-pygments = [ - {file = "types-Pygments-2.9.16.tar.gz", hash = "sha256:8a9a257b3cddbd4307da361bd1b493247906abc15aa9266b1e61aa11a0520547"}, - {file = "types_Pygments-2.9.16-py3-none-any.whl", hash = "sha256:4160656d4e6e683b3bf9b0176ba458c6327cfa7d99bd75430335eaf143906353"}, + {file = "types-Pygments-2.9.17.tar.gz", hash = "sha256:d3a9d08365abc8a122edac4f5a94c8bcbbef8f6a3e055982523810e81f8d749c"}, + {file = "types_Pygments-2.9.17-py3-none-any.whl", hash = "sha256:723cb3db5dc3603dd4f06ca73f1d61b712c88cda5fd768dd898a23b181fd505e"}, ] types-requests = [ - {file = "types-requests-2.27.9.tar.gz", hash = "sha256:7368974534d297939492efdfdab232930440b11e2203f6df1f0c40e3242a87ea"}, - {file = "types_requests-2.27.9-py3-none-any.whl", hash = "sha256:74070045418faf710f3154403d6a16c9e67db50e5119906ca6955f1658d20f7b"}, + {file = "types-requests-2.27.14.tar.gz", hash = "sha256:04579ee164f7c2659be46950e3c2f8d51a081ad252ef1b01d4b12faba5c3810b"}, + {file = "types_requests-2.27.14-py3-none-any.whl", hash = "sha256:c01838abfe3e8a83ba68346cd373afff97594c19c15c922ddee4a0e80ba7e329"}, ] types-setuptools = [ - {file = "types-setuptools-57.4.9.tar.gz", hash = "sha256:536ef74744f8e1e4be4fc719887f886e74e4cf3c792b4a06984320be4df450b5"}, - {file = "types_setuptools-57.4.9-py3-none-any.whl", hash = "sha256:948dc6863373750e2cd0b223a84f1fb608414cde5e55cf38ea657b93aeb411d2"}, + {file = "types-setuptools-57.4.11.tar.gz", hash = "sha256:262f7406e0c7d705ad6bb4526b5b761fa500bf99eab74de85ac3592187d62935"}, + {file = "types_setuptools-57.4.11-py3-none-any.whl", hash = "sha256:fbb0647569d6fb2f6bc472402265250c0ffa53e60180d2cbfee9e84f085921f0"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.9.tar.gz", hash = "sha256:abd2d4857837482b1834b4817f0587678dcc531dbc9abe4cde4da28cef3f522c"}, - {file = "types_urllib3-1.26.9-py3-none-any.whl", hash = "sha256:4a54f6274ab1c80968115634a55fb9341a699492b95e32104a7c513db9fe02e9"}, + {file = "types-urllib3-1.26.11.tar.gz", hash = "sha256:24d64e441168851eb05f1d022de18ae31558f5649c8f1117e384c2e85e31315b"}, + {file = "types_urllib3-1.26.11-py3-none-any.whl", hash = "sha256:bd0abc01e9fb963e4fddd561a56d21cc371b988d1245662195c90379077139cd"}, ] typing-extensions = [ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, ] urllib3 = [ - {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, - {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, + {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, + {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] virtualenv = [ - {file = "virtualenv-20.13.1-py2.py3-none-any.whl", hash = "sha256:45e1d053cad4cd453181ae877c4ffc053546ae99e7dd049b9ff1d9be7491abf7"}, - {file = "virtualenv-20.13.1.tar.gz", hash = "sha256:e0621bcbf4160e4e1030f05065c8834b4e93f4fcc223255db2a823440aca9c14"}, + {file = "virtualenv-20.13.4-py2.py3-none-any.whl", hash = "sha256:c3e01300fb8495bc00ed70741f5271fc95fed067eb7106297be73d30879af60c"}, + {file = "virtualenv-20.13.4.tar.gz", hash = "sha256:ce8901d3bbf3b90393498187f2d56797a8a452fb2d0d7efc6fd837554d6f679c"}, ] watchdog = [ {file = "watchdog-2.1.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9693f35162dc6208d10b10ddf0458cc09ad70c30ba689d9206e02cd836ce28a3"}, @@ -4054,8 +3939,8 @@ webencodings = [ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] websocket-client = [ - {file = "websocket-client-1.2.3.tar.gz", hash = "sha256:1315816c0acc508997eb3ae03b9d3ff619c9d12d544c9a9b553704b1cc4f6af5"}, - {file = "websocket_client-1.2.3-py3-none-any.whl", hash = "sha256:2eed4cc58e4d65613ed6114af2f380f7910ff416fc8c46947f6e76b6815f56c0"}, + {file = "websocket-client-1.3.1.tar.gz", hash = "sha256:6278a75065395418283f887de7c3beafb3aa68dada5cacbe4b214e8d26da499b"}, + {file = "websocket_client-1.3.1-py3-none-any.whl", hash = "sha256:074e2ed575e7c822fc0940d31c3ac9bb2b1142c303eafcf3e304e6ce035522e8"}, ] wrapt = [ {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"}, diff --git a/pyproject.toml b/pyproject.toml index 84e8d1655f..661b658a96 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,14 +35,12 @@ Pillow = ">=8.4,<10.0" scipy = "^1.7.3" tqdm = "^4.62.3" pydub = "^0.25.1" -rich = ">=6.0" +rich = ">=6.0,!=12.0.0" pycairo = "^1.19" manimpango = "^0.4.0.post0" networkx = "^2.5" decorator = "^5.0.7" importlib-metadata = { version = "^4.10.0", python = "<3.8" } -grpcio = { version = "^1.43.0", optional = true } -grpcio-tools = { version = "^1.43.0", optional = true } watchdog = "^2.1.6" jupyterlab = { version = "^3.0", optional = true } moderngl = "^5.6.3" @@ -59,7 +57,6 @@ Pygments = "^2.10.0" "backports.cached-property" = "^1.0.1" [tool.poetry.extras] -webgl_renderer = ["grpcio","grpcio-tools"] jupyterlab = ["jupyterlab"] gui = ["dearpygui"] diff --git a/scripts/simple_cors_http_server.py b/scripts/simple_cors_http_server.py deleted file mode 100755 index 8ade778c58..0000000000 --- a/scripts/simple_cors_http_server.py +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python3 -from __future__ import annotations - -import sys -from http.server import HTTPServer, SimpleHTTPRequestHandler, test # type: ignore - - -class CORSRequestHandler(SimpleHTTPRequestHandler): - def end_headers(self): - self.send_header("Access-Control-Allow-Origin", "*") - super().end_headers() - - -if __name__ == "__main__": - test( - CORSRequestHandler, - HTTPServer, - port=int(sys.argv[1]) if len(sys.argv) > 1 else 8000, - ) diff --git a/scripts/update_protos.py b/scripts/update_protos.py deleted file mode 100755 index aed4b00559..0000000000 --- a/scripts/update_protos.py +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python -""" -This is intended to be run from manim/grpc -""" - -from __future__ import annotations - -import os - -CMD_STRING = """ -poetry run python \ - -m grpc_tools.protoc \ - -I./proto \ - --python_out=./gen \ - --grpc_python_out=./gen \ - ./proto/frameserver.proto \ - ./proto/renderserver.proto -""" -os.system(CMD_STRING) From 5d72d9cfa2e3dd21c844b1da807576f5a7194fda Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 28 Mar 2022 23:27:25 +0530 Subject: [PATCH 006/555] [pre-commit.ci] pre-commit autoupdate (#2641) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-mypy: v0.941 → v0.942](https://github.com/pre-commit/mirrors-mypy/compare/v0.941...v0.942) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 987a11a5de..cf5a9d95f7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -56,7 +56,7 @@ repos: flake8-docstrings==1.6.0, flake8-rst-docstrings==0.2.3, flake8-pytest-style==1.5.0, flake8-simplify==0.14.1, flake8-comprehensions>=3.6.1] - repo: https://github.com/pre-commit/mirrors-mypy - rev: 'v0.941' + rev: 'v0.942' hooks: - id: mypy additional_dependencies: [types-decorator, types-docutils, types-requests, types-setuptools] From 326bf21b5c9bd9f5a08962d92229846eed17ffe4 Mon Sep 17 00:00:00 2001 From: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> Date: Wed, 30 Mar 2022 20:13:04 +0530 Subject: [PATCH 007/555] Fixed a File logging bug and some maintenance (#2546) * Fixed File logging bug Previously, the file logger was set in manim/_config/utils. That caused problems as python tried to enable file logging when other variables like media_dir, scene_name and others which were required for the naming of log_dir were not yet set. Now, we enable log_to_file in scene_file_writer where all the required directories are declared before we enable file logging. Also removed a test that was based on set_file_logger's previous behaviour where it added a suffix only when the class name was specified when calling manim. Since, we now enable file logging in scene_file_writer, we always have access to the class name regardless. * Added Typings to file_ops * Fixed typings and some warnings in _config.utils Fixed some typings to now explicitly importing the types we require. Removed one of the double declarations of dry_run. Removed an unused import and a block of commented code. * Remove rendundant check * Add suggested changes Co-authored-by: Hugues Devimeux <36239975+huguesdevimeux@users.noreply.github.com> --- manim/_config/logger_utils.py | 27 +++-------------- manim/_config/utils.py | 48 ++++++++++-------------------- manim/scene/scene_file_writer.py | 7 +++++ manim/utils/file_ops.py | 32 ++++++++++++-------- tests/test_config.py | 4 ++- tests/test_logging/test_logging.py | 26 ---------------- 6 files changed, 50 insertions(+), 94 deletions(-) diff --git a/manim/_config/logger_utils.py b/manim/_config/logger_utils.py index de579dcfef..64b341b7be 100644 --- a/manim/_config/logger_utils.py +++ b/manim/_config/logger_utils.py @@ -15,7 +15,6 @@ import copy import json import logging -import os import sys from typing import TYPE_CHECKING @@ -26,7 +25,7 @@ from rich.theme import Theme if TYPE_CHECKING: - from manim._config.utils import ManimConfig + from pathlib import Path HIGHLIGHTED_KEYWORDS = [ # these keywords are highlighted specially "Played", "animations", @@ -142,7 +141,7 @@ def parse_theme(parser: configparser.ConfigParser) -> Theme: return custom_theme -def set_file_logger(config: ManimConfig, verbosity: str) -> None: +def set_file_logger(scene_name: str, module_name: str, log_dir: Path) -> None: """Add a file handler to manim logger. The path to the file is built using ``config.log_dir``. @@ -152,28 +151,13 @@ def set_file_logger(config: ManimConfig, verbosity: str) -> None: config : :class:`ManimConfig` The global config, used to determine the log file path. - verbosity : :class:`str` - The verbosity level of the logger. - - Notes - ----- - Calling this function changes the verbosity of all handlers assigned to - manim logger. - """ # Note: The log file name will be # _.log, gotten from config. So it # can differ from the real name of the scene. would only # appear if scene name was provided when manim was called. - scene_name_suffix = "".join(config["scene_names"]) - scene_file_name = os.path.basename(config["input_file"]).split(".")[0] - log_file_name = ( - f"{scene_file_name}_{scene_name_suffix}.log" - if scene_name_suffix - else f"{scene_file_name}.log" - ) - log_file_path = config.get_dir("log_dir") / log_file_name - log_file_path.parent.mkdir(parents=True, exist_ok=True) + log_file_name = f"{module_name}_{scene_name}.log" + log_file_path = log_dir / log_file_name file_handler = logging.FileHandler(log_file_path, mode="w") file_handler.setFormatter(JSONFormatter()) @@ -182,9 +166,6 @@ def set_file_logger(config: ManimConfig, verbosity: str) -> None: logger.addHandler(file_handler) logger.info("Log file will be saved in %(logpath)s", {"logpath": log_file_path}) - config.verbosity = verbosity - logger.setLevel(verbosity) - class JSONFormatter(logging.Formatter): """A formatter that outputs logs in a custom JSON format. diff --git a/manim/_config/utils.py b/manim/_config/utils.py index ee7e9a6407..2cdc0689c1 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -19,9 +19,9 @@ import os import re import sys -import typing from collections.abc import Mapping, MutableMapping from pathlib import Path +from typing import Any, Iterable, Iterator import colour import numpy as np @@ -29,7 +29,6 @@ from .. import constants from ..utils.tex import TexTemplate, TexTemplateFromFile from ..utils.tex_templates import TexTemplateLibrary -from .logger_utils import set_file_logger def config_file_paths() -> list[Path]: @@ -302,7 +301,7 @@ def __init__(self) -> None: self._d = {k: None for k in self._OPTS} # behave like a dict - def __iter__(self) -> typing.Iterator[str]: + def __iter__(self) -> Iterator[str]: return iter(self._d) def __len__(self) -> int: @@ -315,10 +314,10 @@ def __contains__(self, key) -> bool: except AttributeError: return False - def __getitem__(self, key) -> typing.Any: + def __getitem__(self, key) -> Any: return getattr(self, key) - def __setitem__(self, key: str, val: typing.Any) -> None: + def __setitem__(self, key: str, val: Any) -> None: getattr(ManimConfig, key).fset(self, val) # fset is the property's setter def update(self, obj: ManimConfig | dict) -> None: @@ -393,7 +392,7 @@ def __copy__(self) -> ManimConfig: """See ManimConfig.copy().""" return copy.deepcopy(self) - def __deepcopy__(self, memo: dict[str, typing.Any]) -> ManimConfig: + def __deepcopy__(self, memo: dict[str, Any]) -> ManimConfig: """See ManimConfig.copy().""" c = ManimConfig() # Deepcopying the underlying dict is enough because all properties @@ -403,14 +402,14 @@ def __deepcopy__(self, memo: dict[str, typing.Any]) -> ManimConfig: return c # helper type-checking methods - def _set_from_list(self, key: str, val: typing.Any, values: list) -> None: + def _set_from_list(self, key: str, val: Any, values: list) -> None: """Set ``key`` to ``val`` if ``val`` is contained in ``values``.""" if val in values: self._d[key] = val else: raise ValueError(f"attempted to set {key} to {val}; must be in {values}") - def _set_boolean(self, key: str | int, val: typing.Any) -> None: + def _set_boolean(self, key: str | int, val: Any) -> None: """Set ``key`` to ``val`` if ``val`` is Boolean.""" if val in [True, False]: self._d[key] = val @@ -423,7 +422,7 @@ def _set_tuple(self, key: str, val: tuple) -> None: else: raise ValueError(f"{key} must be tuple") - def _set_str(self, key: str, val: typing.Any) -> None: + def _set_str(self, key: str, val: Any) -> None: """Set ``key`` to ``val`` if ``val`` is a string.""" if isinstance(val, str): self._d[key] = val @@ -830,8 +829,7 @@ def digest_file(self, filename: str) -> ManimConfig: filename, ) - if filename: - return self.digest_parser(make_config_parser(filename)) + return self.digest_parser(make_config_parser(filename)) # config options are properties preview = property( @@ -856,19 +854,11 @@ def digest_file(self, filename: str) -> ManimConfig: doc="Whether to show progress bars while rendering animations.", ) - @property - def log_to_file(self): - """Whether to save logs to a file.""" - return self._d["log_to_file"] - - @log_to_file.setter - def log_to_file(self, val: str) -> None: - self._set_boolean("log_to_file", val) - if val: - log_dir = self.get_dir("log_dir") - if not os.path.exists(log_dir): - os.makedirs(log_dir) - set_file_logger(self, self["verbosity"]) + log_to_file = property( + lambda self: self._d["log_to_file"], + lambda self, val: self._set_boolean("log_to_file", val), + doc="Whether to save logs to a file.", + ) notify_outdated_version = property( lambda self: self._d["notify_outdated_version"], @@ -924,12 +914,6 @@ def log_to_file(self, val: str) -> None: doc="Set to force window when using the opengl renderer", ) - dry_run = property( - lambda self: self._d["dry_run"], - lambda self, val: self._set_boolean("dry_run", val), - doc="Enable dry_run so that no output files are generated and window is disabled.", - ) - @property def verbosity(self): """Logger verbosity; "DEBUG", "INFO", "WARNING", "ERROR", or "CRITICAL" (-v).""" @@ -1610,7 +1594,7 @@ def __init__(self, c: ManimConfig) -> None: self.__dict__["_c"] = c # there are required by parent class Mapping to behave like a dict - def __getitem__(self, key: str | int) -> typing.Any: + def __getitem__(self, key: str | int) -> Any: if key in self._OPTS: return self._c[key] elif key in self._CONSTANTS: @@ -1618,7 +1602,7 @@ def __getitem__(self, key: str | int) -> typing.Any: else: raise KeyError(key) - def __iter__(self) -> typing.Iterable: + def __iter__(self) -> Iterable: return iter(list(self._OPTS) + list(self._CONSTANTS)) def __len__(self) -> int: diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index b1010aefd3..57945d01b4 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -19,6 +19,7 @@ from manim import __version__ from .. import config, logger +from .._config.logger_utils import set_file_logger from ..constants import FFMPEG_BIN, GIF_FILE_EXTENSION from ..utils.file_ops import ( add_extension_if_not_present, @@ -158,6 +159,12 @@ def init_output_directories(self, scene_name): ), ) + if config["log_to_file"]: + log_dir = guarantee_existence(config.get_dir("log_dir")) + set_file_logger( + scene_name=scene_name, module_name=module_name, log_dir=log_dir + ) + def finish_last_section(self) -> None: """Delete current section if it is empty.""" if len(self.sections) and self.sections[-1].is_empty(): diff --git a/manim/utils/file_ops.py b/manim/utils/file_ops.py index b30a8cd1d0..2abc491390 100644 --- a/manim/utils/file_ops.py +++ b/manim/utils/file_ops.py @@ -24,6 +24,10 @@ import time from pathlib import Path from shutil import copyfile +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ..scene.scene_file_writer import SceneFileWriter from manim import __version__, config, logger @@ -117,33 +121,35 @@ def write_to_movie() -> bool: ) -def add_extension_if_not_present(file_name, extension): +def add_extension_if_not_present(file_name: Path, extension: str) -> Path: if file_name.suffix != extension: return file_name.with_suffix(extension) else: return file_name -def add_version_before_extension(file_name): +def add_version_before_extension(file_name: Path) -> Path: file_name = Path(file_name) path, name, suffix = file_name.parent, file_name.stem, file_name.suffix return Path(path, f"{name}_ManimCE_v{__version__}{suffix}") -def guarantee_existence(path): +def guarantee_existence(path: Path) -> Path: if not os.path.exists(path): os.makedirs(path) - return os.path.abspath(path) + return Path(os.path.abspath(path)) -def guarantee_empty_existence(path): +def guarantee_empty_existence(path: Path) -> Path: if os.path.exists(path): shutil.rmtree(path) os.makedirs(path) - return os.path.abspath(path) + return Path(os.path.abspath(path)) -def seek_full_path_from_defaults(file_name, default_dir, extensions): +def seek_full_path_from_defaults( + file_name: Path, default_dir: str, extensions: str +) -> Path: possible_paths = [file_name] possible_paths += [ Path(default_dir) / f"{file_name}{extension}" for extension in ["", *extensions] @@ -155,7 +161,7 @@ def seek_full_path_from_defaults(file_name, default_dir, extensions): raise OSError(error) -def modify_atime(file_path): +def modify_atime(file_path) -> None: """Will manually change the accessed time (called `atime`) of the file, as on a lot of OS the accessed time refresh is disabled by default. Parameters @@ -188,7 +194,7 @@ def open_file(file_path, in_browser=False): sp.Popen(commands) -def open_media_file(file_writer): +def open_media_file(file_writer: SceneFileWriter) -> None: file_paths = [] if config["save_last_frame"]: @@ -207,7 +213,7 @@ def open_media_file(file_writer): logger.info(f"Previewed File at: '{file_path}'") -def get_template_names(): +def get_template_names() -> list[str]: """Returns template names from the templates directory. Returns @@ -218,7 +224,7 @@ def get_template_names(): return [template_name.stem for template_name in template_path.glob("*.mtp")] -def get_template_path(): +def get_template_path() -> Path: """Returns the Path of templates directory. Returns @@ -242,7 +248,9 @@ def add_import_statement(file): f.write(import_line.rstrip("\r\n") + "\n" + content) -def copy_template_files(project_dir=Path("."), template_name="Default"): +def copy_template_files( + project_dir: Path = Path("."), template_name: str = "Default" +) -> None: """Copies template files from templates dir to project_dir. Parameters diff --git a/tests/test_config.py b/tests/test_config.py index 9a3c15de03..9e6f0dc18b 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -98,6 +98,7 @@ def test_custom_dirs(tmp_path): { "media_dir": tmp_path, "save_sections": True, + "log_to_file": True, "frame_rate": 15, "pixel_height": 854, "pixel_width": 480, @@ -108,6 +109,7 @@ def test_custom_dirs(tmp_path): "images_dir": "{media_dir}/test_images", "text_dir": "{media_dir}/test_text", "tex_dir": "{media_dir}/test_tex", + "log_dir": "{media_dir}/test_log", } ): scene = MyScene() @@ -131,7 +133,7 @@ def test_custom_dirs(tmp_path): assert_dir_filled(os.path.join(tmp_path, "test_text")) assert_dir_filled(os.path.join(tmp_path, "test_tex")) - # TODO: testing the log dir would be nice but it doesn't get generated for some reason and test crashes when setting "log_to_file" to True + assert_dir_filled(os.path.join(tmp_path, "test_log")) def test_frame_size(tmp_path): diff --git a/tests/test_logging/test_logging.py b/tests/test_logging/test_logging.py index e56c01a69e..2c8b94c597 100644 --- a/tests/test_logging/test_logging.py +++ b/tests/test_logging/test_logging.py @@ -35,32 +35,6 @@ def test_logging_to_file(tmp_path, python_version): assert exitcode == 0, err -@logs_comparison( - "BasicSceneLoggingTest.txt", - os.path.join("logs", "basic_scenes_square_to_circle.log"), -) -def test_logging_when_scene_is_not_specified(tmp_path, python_version): - path_basic_scene = os.path.join( - "tests", - "test_logging", - "basic_scenes_square_to_circle.py", - ) - command = [ - python_version, - "-m", - "manim", - "-ql", - "-v", - "DEBUG", - "--log_to_file", - "--media_dir", - str(tmp_path), - path_basic_scene, - ] - _, err, exitcode = capture(command) - assert exitcode == 0, err - - def test_error_logging(tmp_path, python_version): path_error_scene = Path("tests/test_logging/basic_scenes_error.py") From e648d88510d528a5ab0c5ed6823dcc1970240300 Mon Sep 17 00:00:00 2001 From: peaceheis <69596656+peaceheis@users.noreply.github.com> Date: Fri, 1 Apr 2022 21:20:27 -0500 Subject: [PATCH 008/555] Copy Edit troubleshooting.rst (#2609) * Copy Edit troubleshooting.rst This is for Issue #1401. * Update docs/source/installation/troubleshooting.rst Co-authored-by: Benjamin Hackl * Update docs/source/installation/troubleshooting.rst Co-authored-by: Benjamin Hackl * Update docs/source/installation/troubleshooting.rst Co-authored-by: Benjamin Hackl * Update troubleshooting.rst * Update troubleshooting.rst * Update docs/source/installation/troubleshooting.rst Co-authored-by: Benjamin Hackl Co-authored-by: Darylgolden --- docs/source/installation/troubleshooting.rst | 40 ++++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/source/installation/troubleshooting.rst b/docs/source/installation/troubleshooting.rst index 982685e5cd..c5f1ebe2d4 100644 --- a/docs/source/installation/troubleshooting.rst +++ b/docs/source/installation/troubleshooting.rst @@ -4,13 +4,15 @@ Troubleshooting Version incompatibility *********************** -Confusion and conflict between versions is by far the most common reason -for installation failures. Some signs and errors resulting from this are -as follows: +Confusion and conflict between versions are by far the most common reasons +for installation failures. Some errors resulting from this are: - ``There are no scenes in that module`` - ``ModuleNotFoundError: No module named 'manim'`` - ``ModuleNotFoundError: No module named 'manimlib'`` + +Some reasons that conflict may occur are: + - You followed any tutorial created before October 2020 (because the community edition did not exist before then) - You cloned a repository on GitHub (installation of the community version for normal use does not require the cloning of any repository) - Different import statements (explained below) @@ -65,7 +67,7 @@ them with: pip uninstall -If you have cloned a repository from GitHub, you should either remove it +If you cloned manim from GitHub, you should either remove it or run manim outside that folder. Other errors @@ -73,7 +75,7 @@ Other errors ``pip install manim`` fails when installing manimpango? ------------------------------------------------------- -Most likely this means that pip was not able to use our pre-built wheels +This most likely means that pip was not able to use our pre-built wheels of ``manimpango``. Let us know (via our `Discord `_ or by opening a `new issue on GitHub `_) @@ -87,19 +89,19 @@ instructions given in of the corresponding `GitHub repository `_. -(Windows) OSError: dlopen() failed to load a library: pango? ------------------------------------------------------------- +(Windows) OSError: dlopen() failed to load a library: pango +----------------------------------------------------------- This should be fixed in Manim's latest version, update using ``pip install --upgrade manim``. -Some letters are missing from Text/Tex output? ------------------------------------------------------------- +Some letters are missing from Text/Tex output +--------------------------------------------- If you have recently installed TeX you may need to build the fonts it -uses. Which can be done by running: +uses. This can be done by running: .. code-block:: bash @@ -108,8 +110,8 @@ uses. Which can be done by running: .. _dvisvgm-troubleshoot: -Installation does not support converting PDF to SVG? ----------------------------------------------------- +Installation does not support converting PDF to SVG +--------------------------------------------------- First, make sure your ``dvisvgm`` version is at least 2.4: @@ -148,7 +150,7 @@ If, however, ``--libgs=filename`` appears in the help, that means that your ``/opt/local/lib``). Please look carefully, as the file might be located elsewhere, e.g. in the directory where Ghostscript is installed. -As soon as you have found the library, try (on Mac OS or Linux) +When you have found the library, try (on Mac OS or Linux) .. code-block:: bash @@ -173,7 +175,7 @@ As a last check, you can run dvisvgm -V1 -while still having ``LIBGS`` set to the correct path, of course. If ``dvisvgm`` +(while still having ``LIBGS`` set to the correct path, of course.) If ``dvisvgm`` can find your Ghostscript installation, it will be shown in the output together with the version number. @@ -193,7 +195,7 @@ Follow the steps in `this StackExchange answer Date: Tue, 5 Apr 2022 09:59:20 +0200 Subject: [PATCH 009/555] Fixed incompatibility with black version (#2656) * fixed incompatibility with black version * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- manim/mobject/graphing/coordinate_systems.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cf5a9d95f7..3e230ffef4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -35,14 +35,14 @@ repos: - id: python-check-blanket-noqa name: Precision flake ignores - repo: https://github.com/psf/black - rev: 22.1.0 + rev: 22.3.0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs rev: v1.12.1 hooks: - id: blacken-docs - additional_dependencies: [black==20.8b1] + additional_dependencies: [black==22.3.0] - repo: https://github.com/asottile/yesqa rev: v1.3.0 hooks: diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 57d4748607..5e35303d96 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -881,7 +881,7 @@ def input_to_graph_coords(self, x: float, graph: ParametricFunction) -> tuple: >>> from manim import Axes >>> ax = Axes() - >>> parabola = ax.plot(lambda x: x ** 2) + >>> parabola = ax.plot(lambda x: x**2) >>> ax.input_to_graph_coords(x=3, graph=parabola) (3, 9) """ @@ -1255,7 +1255,7 @@ def angle_of_tangent( .. code-block:: python ax = Axes() - curve = ax.plot(lambda x: x ** 2) + curve = ax.plot(lambda x: x**2) ax.angle_of_tangent(x=3, graph=curve) # 1.4056476493802699 """ @@ -1285,7 +1285,7 @@ def slope_of_tangent(self, x: float, graph: ParametricFunction, **kwargs) -> flo .. code-block:: python ax = Axes() - curve = ax.plot(lambda x: x ** 2) + curve = ax.plot(lambda x: x**2) ax.slope_of_tangent(x=-2, graph=curve) # -3.5000000259052038 """ From b69258982d7fa60afdc5166d2b58b3e046d58479 Mon Sep 17 00:00:00 2001 From: WillSoltas <61434693+WillSoltas@users.noreply.github.com> Date: Tue, 5 Apr 2022 04:09:39 -0400 Subject: [PATCH 010/555] Migrated file_ops.py and scene_file_writer.py from os.path to Pathlib (#2642) * Migrated file_ops.py and scene_file_writer.py from os.path to Pathlib (github issue #45) * Updated scene_file_writer.py to handle WindowsPaths * Updated scene_file_writer.py to handle WindowsPaths * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Updated file_ops.py to handle WindowsPaths * Updated scene_file_writer.py to handle WindowsPaths * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fixed Merge Conflict: Added Type Hints in file_ops.py * Changed test_file_ops to use Pathlib in accordance with file_ops.py usage * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Will Soltas Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/scene/scene_file_writer.py | 62 +++++++++++++++----------------- manim/utils/file_ops.py | 26 +++++++------- tests/test_file_ops.py | 18 +++++----- 3 files changed, 51 insertions(+), 55 deletions(-) diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index 57945d01b4..2d66d62cf1 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -111,9 +111,8 @@ def init_output_directories(self, scene_name): "images_dir", module_name=module_name, scene_name=scene_name ), ) - self.image_file_path = os.path.join( - image_dir, - add_extension_if_not_present(self.output_name, ".png"), + self.image_file_path = image_dir / add_extension_if_not_present( + self.output_name, ".png" ) if write_to_movie(): @@ -122,14 +121,10 @@ def init_output_directories(self, scene_name): "video_dir", module_name=module_name, scene_name=scene_name ), ) - - self.movie_file_path = os.path.join( - movie_dir, - add_extension_if_not_present( - self.output_name, - config["movie_file_extension"], - ), + self.movie_file_path = movie_dir / add_extension_if_not_present( + self.output_name, config["movie_file_extension"] ) + # TODO: /dev/null would be good in case sections_output_dir is used without bein set (doesn't work on Windows), everyone likes defensive programming, right? self.sections_output_dir = "" if config.save_sections: @@ -149,7 +144,7 @@ def init_output_directories(self, scene_name): self.gif_file_path ) - self.gif_file_path = os.path.join(movie_dir, self.gif_file_path) + self.gif_file_path = movie_dir / self.gif_file_path self.partial_movie_directory = guarantee_existence( config.get_dir( @@ -213,9 +208,9 @@ def add_partial_movie_file(self, hash_animation): self.partial_movie_files.append(None) self.sections[-1].partial_movie_files.append(None) else: - new_partial_movie_file = os.path.join( - self.partial_movie_directory, - f"{hash_animation}{config['movie_file_extension']}", + new_partial_movie_file = str( + self.partial_movie_directory + / f"{hash_animation}{config['movie_file_extension']}" ) self.partial_movie_files.append(new_partial_movie_file) self.sections[-1].partial_movie_files.append(new_partial_movie_file) @@ -380,7 +375,8 @@ def write_opengl_frame(self, renderer): renderer.get_raw_frame_buffer_object_data(), ) elif is_png_format() and not config["dry_run"]: - target_dir, extension = os.path.splitext(self.image_file_path) + target_dir = self.image_file_path.parent / self.image_file_path.stem + extension = self.image_file_path.suffix self.output_image( renderer.get_image(), target_dir, @@ -389,7 +385,8 @@ def write_opengl_frame(self, renderer): ) def output_image_from_array(self, frame_data): - target_dir, extension = os.path.splitext(self.image_file_path) + target_dir = self.image_file_path.parent / self.image_file_path.stem + extension = self.image_file_path.suffix self.output_image( Image.fromarray(frame_data), target_dir, @@ -442,8 +439,8 @@ def finish(self): else: self.clean_cache() elif is_png_format() and not config["dry_run"]: - target_dir, _ = os.path.splitext(self.image_file_path) - logger.info("\n%i images ready at %s\n", self.frame_count, target_dir) + target_dir = self.image_file_path.parent / self.image_file_path.stem + logger.info("\n%i images ready at %s\n", self.frame_count, str(target_dir)) if self.subcaptions: self.write_subcaption_file() @@ -524,11 +521,11 @@ def is_already_cached(self, hash_invocation): """ if not hasattr(self, "partial_movie_directory") or not write_to_movie(): return False - path = os.path.join( - self.partial_movie_directory, - f"{hash_invocation}{config['movie_file_extension']}", + path = ( + self.partial_movie_directory + / f"{hash_invocation}{config['movie_file_extension']}" ) - return os.path.exists(path) + return path.exists() def combine_files( self, @@ -537,10 +534,7 @@ def combine_files( create_gif=False, includes_sound=False, ): - file_list = os.path.join( - self.partial_movie_directory, - "partial_movie_file_list.txt", - ) + file_list = str(self.partial_movie_directory / "partial_movie_file_list.txt") logger.debug( f"Partial movie files to combine ({len(input_files)} files): %(p)s", {"p": input_files[:5]}, @@ -548,6 +542,7 @@ def combine_files( with open(file_list, "w", encoding="utf-8") as fp: fp.write("# This file is used internally by FFMPEG.\n") for pf_path in input_files: + pf_path = str(pf_path) if os.name == "nt": pf_path = pf_path.replace("\\", "/") fp.write(f"file 'file:{pf_path}'\n") @@ -578,7 +573,7 @@ def combine_files( if not includes_sound: commands += ["-an"] - commands += [output_file] + commands += [str(output_file)] combine_process = subprocess.Popen(commands) combine_process.wait() @@ -598,6 +593,7 @@ def combine_to_movie(self): movie_file_path = self.movie_file_path if is_gif_format(): movie_file_path = self.gif_file_path + movie_file_path = str(movie_file_path) logger.info("Combining to Movie file.") self.combine_files( partial_movie_files, @@ -675,8 +671,8 @@ def combine_to_section_videos(self) -> None: def clean_cache(self): """Will clean the cache by removing the oldest partial_movie_files.""" cached_partial_movies = [ - os.path.join(self.partial_movie_directory, file_name) - for file_name in os.listdir(self.partial_movie_directory) + (self.partial_movie_directory / file_name) + for file_name in self.partial_movie_directory.iterdir() if file_name != "partial_movie_file_list.txt" ] if len(cached_partial_movies) > config["max_files_cached"]: @@ -689,7 +685,7 @@ def clean_cache(self): )[:number_files_to_delete] # oldest_file_path = min(cached_partial_movies, key=os.path.getatime) for file_to_delete in oldest_files_to_delete: - os.remove(file_to_delete) + file_to_delete.unlink() logger.info( f"The partial movie directory is full (> {config['max_files_cached']} files). Therefore, manim has removed the {number_files_to_delete} oldest file(s)." " You can change this behaviour by changing max_files_cached in config.", @@ -698,12 +694,12 @@ def clean_cache(self): def flush_cache_directory(self): """Delete all the cached partial movie files""" cached_partial_movies = [ - os.path.join(self.partial_movie_directory, file_name) - for file_name in os.listdir(self.partial_movie_directory) + self.partial_movie_directory / file_name + for file_name in self.partial_movie_directory.iterdir() if file_name != "partial_movie_file_list.txt" ] for f in cached_partial_movies: - os.remove(f) + f.unlink() logger.info( f"Cache flushed. {len(cached_partial_movies)} file(s) deleted in %(par_dir)s.", {"par_dir": self.partial_movie_directory}, diff --git a/manim/utils/file_ops.py b/manim/utils/file_ops.py index 2abc491390..e7b78d71a0 100644 --- a/manim/utils/file_ops.py +++ b/manim/utils/file_ops.py @@ -135,27 +135,27 @@ def add_version_before_extension(file_name: Path) -> Path: def guarantee_existence(path: Path) -> Path: - if not os.path.exists(path): - os.makedirs(path) - return Path(os.path.abspath(path)) + if not path.exists(): + path.mkdir(parents=True) + return path.resolve(strict=True) def guarantee_empty_existence(path: Path) -> Path: - if os.path.exists(path): - shutil.rmtree(path) - os.makedirs(path) - return Path(os.path.abspath(path)) + if path.exists(): + shutil.rmtree(str(path)) + path.mkdir(parents=True) + return path.resolve(strict=True) def seek_full_path_from_defaults( - file_name: Path, default_dir: str, extensions: str + file_name: str, default_dir: Path, extensions: list[str] ) -> Path: - possible_paths = [file_name] + possible_paths = [Path(file_name)] possible_paths += [ Path(default_dir) / f"{file_name}{extension}" for extension in ["", *extensions] ] for path in possible_paths: - if os.path.exists(path): + if path.exists(): return path error = f"From: {os.getcwd()}, could not find {file_name} at either of these locations: {possible_paths}" raise OSError(error) @@ -175,14 +175,14 @@ def modify_atime(file_path) -> None: def open_file(file_path, in_browser=False): current_os = platform.system() if current_os == "Windows": - os.startfile(file_path if not in_browser else os.path.dirname(file_path)) + os.startfile(file_path if not in_browser else file_path.parent) else: if current_os == "Linux": commands = ["xdg-open"] - file_path = file_path if not in_browser else os.path.dirname(file_path) + file_path = file_path if not in_browser else file_path.parent elif current_os.startswith("CYGWIN"): commands = ["cygstart"] - file_path = file_path if not in_browser else os.path.dirname(file_path) + file_path = file_path if not in_browser else file_path.parent elif current_os == "Darwin": if is_gif_format(): commands = ["ffplay", "-loglevel", config["ffmpeg_loglevel"].lower()] diff --git a/tests/test_file_ops.py b/tests/test_file_ops.py index 30c0f00f95..f8aaf1bcf4 100644 --- a/tests/test_file_ops.py +++ b/tests/test_file_ops.py @@ -1,6 +1,6 @@ from __future__ import annotations -import os +from pathlib import Path from manim import * @@ -8,25 +8,25 @@ from .utils.video_tester import * -def test_guarantee_existence(tmp_path): - test_dir = os.path.join(tmp_path, "test") +def test_guarantee_existence(tmp_path: Path): + test_dir = tmp_path / "test" guarantee_existence(test_dir) # test if file dir got created assert_dir_exists(test_dir) - with open(os.path.join(test_dir, "test.txt"), "x") as f: + with open(test_dir / "test.txt", "x") as f: pass # test if file didn't get deleted guarantee_existence(test_dir) -def test_guarantee_empty_existence(tmp_path): - test_dir = os.path.join(tmp_path, "test") - os.mkdir(test_dir) - with open(os.path.join(test_dir, "test.txt"), "x"): +def test_guarantee_empty_existence(tmp_path: Path): + test_dir = tmp_path / "test" + test_dir.mkdir() + with open(test_dir / "test.txt", "x"): pass guarantee_empty_existence(test_dir) # test if dir got created assert_dir_exists(test_dir) # test if dir got cleaned - assert_file_not_exists(os.path.join(test_dir, "test.txt")) + assert_file_not_exists(test_dir / "test.txt") From ecce9bb9ad6ce0670cb1f4e191a0baf236861434 Mon Sep 17 00:00:00 2001 From: Darigov Research <30328618+darigovresearch@users.noreply.github.com> Date: Tue, 5 Apr 2022 12:39:04 +0100 Subject: [PATCH 011/555] Update copyright year in documentation to 2020-2022 (#2651) --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 0ccb1ca72c..86d8f3aa41 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -24,7 +24,7 @@ # -- Project information ----------------------------------------------------- project = "Manim" -copyright = "2020-2021, The Manim Community Dev Team" +copyright = "2020-2022, The Manim Community Dev Team" author = "The Manim Community Dev Team" From 574ff693dadb0793ba565bc4df9425ceda6ce071 Mon Sep 17 00:00:00 2001 From: Joy Bhalla Date: Wed, 6 Apr 2022 13:40:57 +0530 Subject: [PATCH 012/555] updated cloup (#2652) Co-authored-by: Benjamin Hackl --- poetry.lock | 678 ++++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 359 insertions(+), 321 deletions(-) diff --git a/poetry.lock b/poetry.lock index b9556d0cd7..c35970221f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -74,7 +74,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [[package]] name = "astroid" -version = "2.9.3" +version = "2.11.2" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -84,7 +84,7 @@ python-versions = ">=3.6.2" lazy-object-proxy = ">=1.4.0" typed-ast = {version = ">=1.4.0,<2.0", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""} typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} -wrapt = ">=1.11,<1.14" +wrapt = ">=1.11,<2" [[package]] name = "atomicwrites" @@ -152,7 +152,7 @@ lxml = ["lxml"] [[package]] name = "black" -version = "22.1.0" +version = "22.3.0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -163,7 +163,7 @@ click = ">=8.0.0" mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = ">=1.1.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} @@ -226,11 +226,11 @@ unicode_backport = ["unicodedata2"] [[package]] name = "click" -version = "8.0.4" +version = "8.1.2" description = "Composable command line interface toolkit" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -249,14 +249,15 @@ click = "*" [[package]] name = "cloup" -version = "0.7.1" -description = "Option groups and subcommand help sections for pallets/click" +version = "0.13.0" +description = "Adds features to Click: option groups, constraints, subcommand sections and help themes." category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -click = ">=7.0,<9.0" +click = ">=7.1,<9.0" +typing-extensions = {version = "*", markers = "python_version <= \"3.8\""} [[package]] name = "colorama" @@ -331,19 +332,19 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", [[package]] name = "dearpygui" -version = "1.4.0" +version = "1.5.1" description = "DearPyGui: A simple Python GUI Toolkit" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "debugpy" -version = "1.5.1" +version = "1.6.0" description = "An implementation of the Debug Adapter Protocol for Python" category = "main" optional = true -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +python-versions = ">=3.7" [[package]] name = "decorator" @@ -375,6 +376,17 @@ wrapt = ">=1.10,<2" [package.extras] dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] +[[package]] +name = "dill" +version = "0.3.4" +description = "serialize all of python" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*" + +[package.extras] +graph = ["objgraph (>=1.7.2)"] + [[package]] name = "distlib" version = "0.3.4" @@ -649,18 +661,18 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [[package]] name = "importlib-resources" -version = "5.4.0" +version = "5.6.0" description = "Read resources from Python packages" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [[package]] name = "iniconfig" @@ -672,7 +684,7 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.9.2" +version = "6.11.0" description = "IPython Kernel for Jupyter" category = "main" optional = true @@ -680,17 +692,17 @@ python-versions = ">=3.7" [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} -debugpy = ">=1.0.0,<2.0" +debugpy = ">=1.0" ipython = ">=7.23.1" -jupyter-client = "<8.0" -matplotlib-inline = ">=0.1.0,<0.2.0" +jupyter-client = ">=6.1.12" +matplotlib-inline = ">=0.1" nest-asyncio = "*" psutil = "*" -tornado = ">=4.2,<7.0" -traitlets = ">=5.1.0,<6.0" +tornado = ">=6.1" +traitlets = ">=5.1.0" [package.extras] -test = ["pytest (!=5.3.4)", "pytest-cov", "flaky", "ipyparallel"] +test = ["pytest (>=6.0)", "pytest-cov", "flaky", "ipyparallel", "pre-commit", "pytest-timeout"] [[package]] name = "ipython" @@ -774,11 +786,11 @@ testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.0.3" +version = "3.1.1" description = "A very fast and expressive template engine." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] MarkupSafe = ">=2.0" @@ -818,24 +830,24 @@ format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jupyter-client" -version = "7.1.2" +version = "7.2.1" description = "Jupyter protocol implementation and client libraries" category = "main" optional = true -python-versions = ">=3.6.1" +python-versions = ">=3.7" [package.dependencies] entrypoints = "*" -jupyter-core = ">=4.6.0" -nest-asyncio = ">=1.5" -python-dateutil = ">=2.1" -pyzmq = ">=13" -tornado = ">=4.1" +jupyter-core = ">=4.9.2" +nest-asyncio = ">=1.5.4" +python-dateutil = ">=2.8.2" +pyzmq = ">=22.3" +tornado = ">=6.0" traitlets = "*" [package.extras] -doc = ["myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -test = ["codecov", "coverage", "ipykernel", "ipython", "mock", "mypy", "pre-commit", "pytest", "pytest-asyncio", "pytest-cov", "pytest-timeout", "jedi (<0.18)"] +doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-core" @@ -851,7 +863,7 @@ traitlets = "*" [[package]] name = "jupyter-server" -version = "1.15.6" +version = "1.16.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "main" optional = true @@ -861,9 +873,9 @@ python-versions = ">=3.7" anyio = ">=3.1.0" argon2-cffi = "*" jinja2 = "*" -jupyter-client = ">=6.1.1" -jupyter-core = ">=4.6.0" -nbconvert = "*" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.7.0" +nbconvert = ">=6.4.4" nbformat = ">=5.2.0" packaging = "*" prometheus-client = "*" @@ -872,11 +884,11 @@ pyzmq = ">=17" Send2Trash = "*" terminado = ">=0.8.3" tornado = ">=6.1.0" -traitlets = ">=5" +traitlets = ">=5.1.0" websocket-client = "*" [package.extras] -test = ["coverage", "pytest (>=6.0)", "pytest-cov", "pytest-mock", "pytest-timeout", "requests", "pytest-tornasync", "pytest-console-scripts", "ipykernel"] +test = ["coverage", "pytest (>=6.0)", "pytest-cov", "pytest-mock", "pytest-timeout", "requests", "pytest-tornasync", "pytest-console-scripts", "ipykernel", "pre-commit"] [[package]] name = "jupyterlab" @@ -913,7 +925,7 @@ pygments = ">=2.4.1,<3" [[package]] name = "jupyterlab-server" -version = "2.11.2" +version = "2.12.0" description = "A set of server components for JupyterLab and JupyterLab like applications ." category = "main" optional = true @@ -930,11 +942,12 @@ packaging = "*" requests = "*" [package.extras] -test = ["codecov", "ipykernel", "pytest (>=5.3.2)", "pytest-cov", "jupyter-server", "openapi-core (>=0.14.2)", "pytest-console-scripts", "strict-rfc3339", "ruamel.yaml", "wheel", "openapi-spec-validator (<0.5)"] +openapi = ["openapi-core (>=0.14.2)", "ruamel.yaml"] +test = ["codecov", "ipykernel", "pytest (>=5.3.2)", "pytest-cov", "jupyter-server", "pytest-console-scripts", "strict-rfc3339", "wheel", "openapi-spec-validator (<0.5)", "openapi-core (>=0.14.2)", "ruamel.yaml"] [[package]] name = "kiwisolver" -version = "1.4.0" +version = "1.4.2" description = "A fast implementation of the Cassowary constraint solver" category = "dev" optional = false @@ -1136,7 +1149,7 @@ test = ["ipython (<8.0.0)", "ipykernel", "ipywidgets (<8.0.0)", "pytest (>=4.1)" [[package]] name = "nbconvert" -version = "6.4.4" +version = "6.4.5" description = "Converting Jupyter Notebooks" category = "main" optional = true @@ -1150,6 +1163,7 @@ entrypoints = ">=0.2.2" jinja2 = ">=2.4" jupyter-core = "*" jupyterlab-pygments = "*" +MarkupSafe = ">=2.0" mistune = ">=0.8.1,<2" nbclient = ">=0.5.0,<0.6.0" nbformat = ">=4.4" @@ -1184,7 +1198,7 @@ test = ["check-manifest", "fastjsonschema", "testpath", "pytest"] [[package]] name = "nest-asyncio" -version = "1.5.4" +version = "1.5.5" description = "Patch asyncio to allow nested event loops" category = "main" optional = true @@ -1325,12 +1339,16 @@ python-versions = "*" [[package]] name = "pillow" -version = "9.0.1" +version = "9.1.0" description = "Python Imaging Library (Fork)" category = "main" optional = false python-versions = ">=3.7" +[package.extras] +docs = ["olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinx-rtd-theme (>=1.0)", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + [[package]] name = "platformdirs" version = "2.5.1" @@ -1360,11 +1378,11 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "2.17.0" +version = "2.18.1" description = "A framework for managing and maintaining multi-language pre-commit hooks." category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" [package.dependencies] cfgv = ">=2.0.0" @@ -1538,21 +1556,25 @@ tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] [[package]] name = "pylint" -version = "2.12.2" +version = "2.13.4" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -astroid = ">=2.9.0,<2.10" +astroid = ">=2.11.2,<=2.12.0-dev0" colorama = {version = "*", markers = "sys_platform == \"win32\""} +dill = ">=0.2" isort = ">=4.2.5,<6" -mccabe = ">=0.6,<0.7" +mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" -toml = ">=0.9.2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} +[package.extras] +testutil = ["gitpython (>3)"] + [[package]] name = "pynacl" version = "1.5.0" @@ -1784,7 +1806,7 @@ docutils = ">=0.11,<1.0" [[package]] name = "rich" -version = "12.0.1" +version = "12.1.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -1793,7 +1815,7 @@ python-versions = ">=3.6.2,<4.0.0" [package.dependencies] commonmark = ">=0.9.0,<0.10.0" pygments = ">=2.6.0,<3.0.0" -typing-extensions = {version = ">=3.7.4,<5.0", markers = "python_version < \"3.8\""} +typing-extensions = {version = ">=3.7.4,<5.0", markers = "python_version < \"3.9\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] @@ -1903,7 +1925,7 @@ python-versions = ">=3.6" [[package]] name = "sphinx" -version = "4.4.0" +version = "4.5.0" description = "Python documentation generator" category = "dev" optional = false @@ -2102,7 +2124,7 @@ python-versions = ">= 3.5" [[package]] name = "tqdm" -version = "4.63.0" +version = "4.64.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -2114,6 +2136,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] dev = ["py-make (>=0.1.0)", "twine", "wheel"] notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] telegram = ["requests"] [[package]] @@ -2181,7 +2204,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.27.14" +version = "2.27.16" description = "Typing stubs for requests" category = "dev" optional = false @@ -2229,7 +2252,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.13.4" +version = "20.14.0" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -2248,7 +2271,7 @@ testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", [[package]] name = "watchdog" -version = "2.1.6" +version = "2.1.7" description = "Filesystem events monitoring" category = "main" optional = false @@ -2275,11 +2298,11 @@ python-versions = "*" [[package]] name = "websocket-client" -version = "1.3.1" +version = "1.3.2" description = "WebSocket client for Python with low level API options" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] @@ -2288,7 +2311,7 @@ test = ["websockets"] [[package]] name = "wrapt" -version = "1.13.3" +version = "1.14.0" description = "Module for decorators, wrappers and monkey patching." category = "dev" optional = false @@ -2296,15 +2319,15 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "zipp" -version = "3.7.0" +version = "3.8.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [extras] gui = ["dearpygui"] @@ -2313,7 +2336,7 @@ jupyterlab = ["jupyterlab"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "a7889cae8f42d0225346a5fe4cfb31fa039863b02a4f20def6672a67c7d28404" +content-hash = "edc8f7483a72be94bab6509be2ca1bd908b927b393af5c5bce4a8f92385b44a8" [metadata.files] alabaster = [ @@ -2360,8 +2383,8 @@ astor = [ {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, ] astroid = [ - {file = "astroid-2.9.3-py3-none-any.whl", hash = "sha256:506daabe5edffb7e696ad82483ad0228245a9742ed7d2d8c9cdb31537decf9f6"}, - {file = "astroid-2.9.3.tar.gz", hash = "sha256:1efdf4e867d4d8ba4a9f6cf9ce07cd182c4c41de77f23814feb27ca93ca9d877"}, + {file = "astroid-2.11.2-py3-none-any.whl", hash = "sha256:cc8cc0d2d916c42d0a7c476c57550a4557a083081976bf42a73414322a6411d9"}, + {file = "astroid-2.11.2.tar.gz", hash = "sha256:8d0a30fe6481ce919f56690076eafbb2fb649142a89dc874f1ec0e7a011492d0"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -2388,29 +2411,29 @@ beautifulsoup4 = [ {file = "beautifulsoup4-4.10.0.tar.gz", hash = "sha256:c23ad23c521d818955a4151a67d81580319d4bf548d3d49f4223ae041ff98891"}, ] black = [ - {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"}, - {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"}, - {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"}, - {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"}, - {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"}, - {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"}, - {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"}, - {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"}, - {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"}, - {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"}, - {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"}, - {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"}, - {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"}, - {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"}, - {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"}, - {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"}, - {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"}, - {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"}, - {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"}, - {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"}, - {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"}, - {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"}, - {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"}, + {file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"}, + {file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"}, + {file = "black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a"}, + {file = "black-22.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968"}, + {file = "black-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"}, + {file = "black-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce"}, + {file = "black-22.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82"}, + {file = "black-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b"}, + {file = "black-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015"}, + {file = "black-22.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b"}, + {file = "black-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a"}, + {file = "black-22.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163"}, + {file = "black-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464"}, + {file = "black-22.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0"}, + {file = "black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176"}, + {file = "black-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0"}, + {file = "black-22.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20"}, + {file = "black-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a"}, + {file = "black-22.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad"}, + {file = "black-22.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21"}, + {file = "black-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265"}, + {file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"}, + {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"}, ] bleach = [ {file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"}, @@ -2481,15 +2504,15 @@ charset-normalizer = [ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] click = [ - {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"}, - {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"}, + {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"}, + {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"}, ] click-default-group = [ {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, ] cloup = [ - {file = "cloup-0.7.1-py2.py3-none-any.whl", hash = "sha256:947c881ada77ea2f7b2876f7b5bb2fc7e5406daac5a045342acf8de35bcce5d7"}, - {file = "cloup-0.7.1.tar.gz", hash = "sha256:f26cc500dda4e4c9444ac1008b82376df8d72ecfa43a6310a9b3d54ef98add7b"}, + {file = "cloup-0.13.0-py2.py3-none-any.whl", hash = "sha256:2b389c85f26e910a27c491ffa8ebc41a79431a320b8f1a49b1614fdd2f2b43cf"}, + {file = "cloup-0.13.0.tar.gz", hash = "sha256:b9f1925d087dcf52d731797b27885d6d8c80d67d85d4e8e40cdc2c085948b921"}, ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, @@ -2593,46 +2616,40 @@ data-science-types = [ {file = "data_science_types-0.2.23-py3-none-any.whl", hash = "sha256:bca319abc0e53a0316f9fcb887937e942477cb9e5fc63c8581e0b0438903b977"}, ] dearpygui = [ - {file = "dearpygui-1.4.0-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:f9bcb72e0eccd09e08e5ae6c2178e2ad1448ffe72272754f9b8a7bdc6feeb364"}, - {file = "dearpygui-1.4.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:cbfe4d5ff2b32db98543803278847a041390bdaeb11a870d423bab586fdec9a6"}, - {file = "dearpygui-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:4b498a5dfaf3eb6484b8a68ff95553f1cd3f319dd80f17a7d20f7df81bde6c16"}, - {file = "dearpygui-1.4.0-cp36-cp36m-macosx_10_6_x86_64.whl", hash = "sha256:17cda5bc64f8ea006a2158f89a9a21b68839ee546774f51302de0cd08ff48309"}, - {file = "dearpygui-1.4.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:80247aafcc855f9710ccf3fc40324f8fd04c0568e23ff45fbc2301d150ba47c7"}, - {file = "dearpygui-1.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7956925b6b6381be8251d4edbf4198bcafb5bed22631e400b33457bfd1514679"}, - {file = "dearpygui-1.4.0-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:05afd4f9e2059002756c2c2a998dadb7bbb9d55b6a761debf0ea8423df362328"}, - {file = "dearpygui-1.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:213a0c922f25c6bc81e088155063a3abf697a4b747d2c81b8292dc71818705f7"}, - {file = "dearpygui-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e559f1039c2252867a5a3ce0b793de8df0405dfa7515525bd85a8df6f9e05da4"}, - {file = "dearpygui-1.4.0-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:e383c070235f9397b846ee69c3e6b947e21f4bd300e35602004af665453077c0"}, - {file = "dearpygui-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83c013f532f4d48d8f122c4ab3341becc17e97cb09d26c1719def74b6848e35d"}, - {file = "dearpygui-1.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e8eb856e3ae68b0a5ce2b05abf4bb16533d14bd3e4a140034f6c95d56a33cd8d"}, - {file = "dearpygui-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:53ee74eddf3ab781795a9d6b2c495393da918f6e0f47ad563fda904bcaa21ba8"}, - {file = "dearpygui-1.4.0-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:4dce79119fc86aff285536c5477ba5d3439f69b7ac22577b7b6e5b3a60b67512"}, - {file = "dearpygui-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:caf4ab964d72a9f0ba75637c62a9bd627749811f3f73defeaee02983875883bd"}, - {file = "dearpygui-1.4.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6248ea48f7ddcc2e8a99e95948e290fa07e7c9940a575940b09a529354fc4814"}, - {file = "dearpygui-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:57310a8e16144d63c627b1b38b4984c3ecbb7ff22226cf493329e04c4a628460"}, + {file = "dearpygui-1.5.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:e831d33fd9fddc8a58e9c63ae5da328f3a6224cb976e3cdcd7ed81a0a5e3b6b8"}, + {file = "dearpygui-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a6724a07edc2740ed8beb3a23c7572f0cbf842ce470385a9c3708c477ed78a9"}, + {file = "dearpygui-1.5.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:e42f7329268d1145937e20927d5014dfbc0050285968d71a73b6339f18b0be1e"}, + {file = "dearpygui-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce79101e7b82217eda38ceabeb2dc52b98d1198ae887377c78a465a58d4422a8"}, + {file = "dearpygui-1.5.1-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:f27d92529feedf4a934f771063201ebbdcf5f73fef5138fc62685659a582abe4"}, + {file = "dearpygui-1.5.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7fbd3c15190deadeb3ce15f498de096ee3423e9d2bdd4401053435ecaf1737f0"}, + {file = "dearpygui-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:01a1b9b781c4a9396bfc65eb4c81b6648e99d37eafc7448c6f57dfe70b823aed"}, + {file = "dearpygui-1.5.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:0c3b118e2441d6f16f69e1963bdd8d30271d97ca9f1203e993ad21d4ca904c5a"}, + {file = "dearpygui-1.5.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b02c03a3beb1413ad6ac2568f104c85f6d97f105da3136e46e3cc9aa6e07ce2f"}, + {file = "dearpygui-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:6d0186f5bc8e51177ac3459ac8e8c1e45f6321e448c6c099425a14346fd87ed2"}, + {file = "dearpygui-1.5.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:e3db4afe5cfe66599c86ef9a2d1a0585877077f2acfd1b5667cf009d66bbc8f5"}, + {file = "dearpygui-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e29b45218c22c7974abd7e7db290527b229ad820fc251bed3384c0c89d9c969e"}, + {file = "dearpygui-1.5.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1201f73fdd1e786965ad1e36112ee2c2a1bd8e97955afe445b65de2131d4adba"}, + {file = "dearpygui-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:4f047d016efe45244949af1db7197fc277ab528f488e2cd3501383cd2a08c030"}, ] debugpy = [ - {file = "debugpy-1.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:70b422c63a833630c33e3f9cdbd9b6971f8c5afd452697e464339a21bbe862ba"}, - {file = "debugpy-1.5.1-cp310-cp310-win32.whl", hash = "sha256:3a457ad9c0059a21a6c7d563c1f18e924f5cf90278c722bd50ede6f56b77c7fe"}, - {file = "debugpy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:5d76a4fd028d8009c3faf1185b4b78ceb2273dd2499447664b03939e0368bb90"}, - {file = "debugpy-1.5.1-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:16db27b4b91991442f91d73604d32080b30de655aca9ba821b1972ea8171021b"}, - {file = "debugpy-1.5.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b073ad5e8d8c488fbb6a116986858bab0c9c4558f28deb8832c7a5a27405bd6"}, - {file = "debugpy-1.5.1-cp36-cp36m-win32.whl", hash = "sha256:318f81f37341e4e054b4267d39896b73cddb3612ca13b39d7eea45af65165e1d"}, - {file = "debugpy-1.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b5b3157372e0e0a1297a8b6b5280bcf1d35a40f436c7973771c972726d1e32d5"}, - {file = "debugpy-1.5.1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1ec3a086e14bba6c472632025b8fe5bdfbaef2afa1ebd5c6615ce6ed8d89bc67"}, - {file = "debugpy-1.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:26fbe53cca45a608679094791ce587b6e2798acd1d4777a8b303b07622e85182"}, - {file = "debugpy-1.5.1-cp37-cp37m-win32.whl", hash = "sha256:d876db8c312eeb02d85611e0f696abe66a2c1515e6405943609e725d5ff36f2a"}, - {file = "debugpy-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4404a62fb5332ea5c8c9132290eef50b3a0ba38cecacad5529e969a783bcbdd7"}, - {file = "debugpy-1.5.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f3a3dca9104aa14fd4210edcce6d9ce2b65bd9618c0b222135a40b9d6e2a9eeb"}, - {file = "debugpy-1.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2df2c373e85871086bd55271c929670cd4e1dba63e94a08d442db830646203b"}, - {file = "debugpy-1.5.1-cp38-cp38-win32.whl", hash = "sha256:82f5f9ce93af6861a0713f804e62ab390bb12a17f113153e47fea8bbb1dfbe36"}, - {file = "debugpy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:17a25ce9d7714f92fc97ef00cc06269d7c2b163094990ada30156ed31d9a5030"}, - {file = "debugpy-1.5.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:01e98c594b3e66d529e40edf314f849cd1a21f7a013298df58cd8e263bf8e184"}, - {file = "debugpy-1.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f73988422b17f071ad3c4383551ace1ba5ed810cbab5f9c362783d22d40a08dc"}, - {file = "debugpy-1.5.1-cp39-cp39-win32.whl", hash = "sha256:23df67fc56d59e386c342428a7953c2c06cc226d8525b11319153e96afb65b0c"}, - {file = "debugpy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:a2aa64f6d2ca7ded8a7e8a4e7cae3bc71866b09876b7b05cecad231779cb9156"}, - {file = "debugpy-1.5.1-py2.py3-none-any.whl", hash = "sha256:194f95dd3e84568b5489aab5689a3a2c044e8fdc06f1890b8b4f70b6b89f2778"}, - {file = "debugpy-1.5.1.zip", hash = "sha256:d2b09e91fbd1efa4f4fda121d49af89501beda50c18ed7499712c71a4bf3452e"}, + {file = "debugpy-1.6.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad"}, + {file = "debugpy-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f"}, + {file = "debugpy-1.6.0-cp310-cp310-win32.whl", hash = "sha256:5c492235d6b68f879df3bdbdb01f25c15be15682665517c2c7d0420e5658d71f"}, + {file = "debugpy-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:40de9ba137d355538432209d05e0f5fe5d0498dce761c39119ad4b950b51db31"}, + {file = "debugpy-1.6.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:0d383b91efee57dbb923ba20801130cf60450a0eda60bce25bccd937de8e323a"}, + {file = "debugpy-1.6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1ff853e60e77e1c16f85a31adb8360bb2d98ca588d7ed645b7f0985b240bdb5e"}, + {file = "debugpy-1.6.0-cp37-cp37m-win32.whl", hash = "sha256:8e972c717d95f56b6a3a7a29a5ede1ee8f2c3802f6f0e678203b0778eb322bf1"}, + {file = "debugpy-1.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a8aaeb53e87225141fda7b9081bd87155c1debc13e2f5a532d341112d1983b65"}, + {file = "debugpy-1.6.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:132defb585b518955358321d0f42f6aa815aa15b432be27db654807707c70b2f"}, + {file = "debugpy-1.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ee75844242b4537beb5899f3e60a578454d1f136b99e8d57ac424573797b94a"}, + {file = "debugpy-1.6.0-cp38-cp38-win32.whl", hash = "sha256:a65a2499761d47df3e9ea9567109be6e73d412e00ac3ffcf74839f3ddfcdf028"}, + {file = "debugpy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:bd980d533d0ddfc451e03a3bb32acb2900049fec39afc3425b944ebf0889be62"}, + {file = "debugpy-1.6.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:245c7789a012f86210847ec7ee9f38c30a30d4c2223c3e111829a76c9006a5d0"}, + {file = "debugpy-1.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e3aa2368883e83e7b689ddff3cafb595f7b711f6a065886b46a96a7fef874e7"}, + {file = "debugpy-1.6.0-cp39-cp39-win32.whl", hash = "sha256:72bcfa97f3afa0064afc77ab811f48ad4a06ac330f290b675082c24437730366"}, + {file = "debugpy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:30abefefd2ff5a5481162d613cb70e60e2fa80a5eb4c994717c0f008ed25d2e1"}, + {file = "debugpy-1.6.0-py2.py3-none-any.whl", hash = "sha256:4de7777842da7e08652f2776c552070bbdd758557fdec73a15d7be0e4aab95ce"}, + {file = "debugpy-1.6.0.zip", hash = "sha256:7b79c40852991f7b6c3ea65845ed0f5f6b731c37f4f9ad9c61e2ab4bd48a9275"}, ] decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, @@ -2646,6 +2663,10 @@ 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.4-py2.py3-none-any.whl", hash = "sha256:7e40e4a70304fd9ceab3535d36e58791d9c4a776b38ec7f7ec9afc8d3dca4d4f"}, + {file = "dill-0.3.4.zip", hash = "sha256:9f9734205146b2b353ab3fec9af0070237b6ddae78452af83d2fca84d739e675"}, +] distlib = [ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, @@ -2781,16 +2802,16 @@ importlib-metadata = [ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, ] importlib-resources = [ - {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"}, - {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"}, + {file = "importlib_resources-5.6.0-py3-none-any.whl", hash = "sha256:a9dd72f6cc106aeb50f6e66b86b69b454766dd6e39b69ac68450253058706bcc"}, + {file = "importlib_resources-5.6.0.tar.gz", hash = "sha256:1b93238cbf23b4cde34240dd8321d99e9bf2eb4bc91c0c99b2886283e7baad85"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] ipykernel = [ - {file = "ipykernel-6.9.2-py3-none-any.whl", hash = "sha256:c977cff576b8425a68d3a6916510903833f0f25ed8d5c282a0c51c35de27bd47"}, - {file = "ipykernel-6.9.2.tar.gz", hash = "sha256:4c3cc8cb359f2ead70c30f5504971c0d285e2c1c699d2ce9af0216fe9c9fb17c"}, + {file = "ipykernel-6.11.0-py3-none-any.whl", hash = "sha256:62ec17caff6e4fa1dc87ef0a6f9eff5a5d6588bb585ab1e06897e7bec9eb2819"}, + {file = "ipykernel-6.11.0.tar.gz", hash = "sha256:6712604531c96100f326440c11cb023da26819f2f34ba9d1ca0fb163401834e8"}, ] ipython = [ {file = "ipython-7.32.0-py3-none-any.whl", hash = "sha256:86df2cf291c6c70b5be6a7b608650420e89180c8ec74f376a34e2dc15c3400e7"}, @@ -2813,8 +2834,8 @@ jedi = [ {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, ] jinja2 = [ - {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, - {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, + {file = "Jinja2-3.1.1-py3-none-any.whl", hash = "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119"}, + {file = "Jinja2-3.1.1.tar.gz", hash = "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"}, ] json5 = [ {file = "json5-0.9.6-py2.py3-none-any.whl", hash = "sha256:823e510eb355949bed817e1f3e2d682455dc6af9daf6066d5698d6a2ca4481c2"}, @@ -2825,16 +2846,16 @@ jsonschema = [ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"}, ] jupyter-client = [ - {file = "jupyter_client-7.1.2-py3-none-any.whl", hash = "sha256:d56f1c57bef42ff31e61b1185d3348a5b2bcde7c9a05523ae4dbe5ee0871797c"}, - {file = "jupyter_client-7.1.2.tar.gz", hash = "sha256:4ea61033726c8e579edb55626d8ee2e6bf0a83158ddf3751b8dd46b2c5cd1e96"}, + {file = "jupyter_client-7.2.1-py3-none-any.whl", hash = "sha256:d10e31ac4b8364d1cb30ebcee9e5cc7b7eb5d23b76912be9ef3d4c75167fbc68"}, + {file = "jupyter_client-7.2.1.tar.gz", hash = "sha256:aa177279e93205d0681ec0e2e210da01b22c5a1464a56abd455adcac64f0de91"}, ] jupyter-core = [ {file = "jupyter_core-4.9.2-py3-none-any.whl", hash = "sha256:f875e4d27e202590311d468fa55f90c575f201490bd0c18acabe4e318db4a46d"}, {file = "jupyter_core-4.9.2.tar.gz", hash = "sha256:d69baeb9ffb128b8cd2657fcf2703f89c769d1673c851812119e3a2a0e93ad9a"}, ] jupyter-server = [ - {file = "jupyter_server-1.15.6-py3-none-any.whl", hash = "sha256:e393934c19fcc324a7fca77f811eacd91201440f04c6fbb15c959c463baaa9c5"}, - {file = "jupyter_server-1.15.6.tar.gz", hash = "sha256:56bd6f580d1f46b62294990e8e78651025729f5d3fc798f10f2c03f0cdcbf28d"}, + {file = "jupyter_server-1.16.0-py3-none-any.whl", hash = "sha256:72dd1ff5373d2def94e80632ba4397e504cc9200c5b5f44b5b0af2e062a73353"}, + {file = "jupyter_server-1.16.0.tar.gz", hash = "sha256:c756f87ad64b84e2aa522ef482445e1a93f7fe4a5fc78358f4636e53c9a0463a"}, ] jupyterlab = [ {file = "jupyterlab-3.3.2-py3-none-any.whl", hash = "sha256:32c9e3fae93d02f7a071f5e69a7a5450fa4bf087dd3d5aca58c7dd2adf2565d3"}, @@ -2845,53 +2866,53 @@ jupyterlab-pygments = [ {file = "jupyterlab_pygments-0.1.2.tar.gz", hash = "sha256:cfcda0873626150932f438eccf0f8bf22bfa92345b814890ab360d666b254146"}, ] jupyterlab-server = [ - {file = "jupyterlab_server-2.11.2-py3-none-any.whl", hash = "sha256:45ec7dde24fb4476d2d55b1884068e285ab75ec6c21f1d77a8c12964910c2120"}, - {file = "jupyterlab_server-2.11.2.tar.gz", hash = "sha256:5d8dc70f6803dc48efb69fb43e3cd2f8c6aad4ba011670318e5efd26c7487bb9"}, + {file = "jupyterlab_server-2.12.0-py3-none-any.whl", hash = "sha256:db5d234955c5c2684f77a064345712f071acf7df31f0d8c31b420b33b09d6472"}, + {file = "jupyterlab_server-2.12.0.tar.gz", hash = "sha256:00e0f4b4c399f55938323ea10cf92d915288fe12753e35d1069f6ca08b72abbf"}, ] kiwisolver = [ - {file = "kiwisolver-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:70e7b7a4ebeddef423115ea31857732fc04e0f38dd1e6385e1af05b6164a3d0f"}, - {file = "kiwisolver-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:384b5076b2c0172003abca9ba8b8c5efcaaffd31616f3f5e0a09dcc34772d012"}, - {file = "kiwisolver-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:334a7e3d498a0a791245f0964c746d0414e9b13aef73237f0d798a2101fdbae9"}, - {file = "kiwisolver-1.4.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:734e943ae519cdb8534d9053f478417c525ec921c06896ec7119e65d9ea4a687"}, - {file = "kiwisolver-1.4.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:65cbdbe14dc5988e362eb15e02dd24c6724238cb235132f812f1e3a29a61a3de"}, - {file = "kiwisolver-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf0080449d6ea39b817d85abd2c20d2d42fd9b1587544d64371d28d93c379cf"}, - {file = "kiwisolver-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd0223a3a4ddcc0d0e06c6cfeb0adde2bc19c08b4c7fc79d48dac2486a4b115b"}, - {file = "kiwisolver-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed30c5e58e578a2981c67346b2569e04120d1b80fa6906c207fe824d24603313"}, - {file = "kiwisolver-1.4.0-cp310-cp310-win32.whl", hash = "sha256:ed937691f522cc2362c280c903837a4e35195659b9935b598e3cd448db863605"}, - {file = "kiwisolver-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:576ba51b9f4e4d0d583c1cd257f53397bdc5e66a5e49fe68712f658426115777"}, - {file = "kiwisolver-1.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2467fe5fff6ed2a728e10dca9b1f37e9b911ca5b228a7d8990c8e3abf80c1724"}, - {file = "kiwisolver-1.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff7ae6fb6dce2f520b2d46efc801605fa1378fb19bb4580aebc6174eab05a0"}, - {file = "kiwisolver-1.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:313724e85fd14d581a939fa02424f4dc772fd914bc04499a8a6377d47313b966"}, - {file = "kiwisolver-1.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb997d1631b20745b18674d68dd6f1d9d45db512efd5fe0f162a5d4a6bbdd211"}, - {file = "kiwisolver-1.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97372c837add54e3e64a811464b14bb01428c4e9256072b6296f04157ea23246"}, - {file = "kiwisolver-1.4.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4471a48f53d20d49f263ca888aab77b754525ef35e6767657e1a44a724a8b0af"}, - {file = "kiwisolver-1.4.0-cp37-cp37m-win32.whl", hash = "sha256:1cf8c81e8a5fb4f5dcbd473fdb619b895313d29b7c60e4545827dcc6efbd8efc"}, - {file = "kiwisolver-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:87367ba1ad3819f7189fe8faff5f75a7603f526576033e7b86e10b598f8790b2"}, - {file = "kiwisolver-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:139c75216e5875ee5f8f4f7adcc3cd339f46f0d66bda2e10d8d21386d635476f"}, - {file = "kiwisolver-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:895b2df026006ff7434b03ca495983d0d26da96f6d58414c77d616747ee77e34"}, - {file = "kiwisolver-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cbf9aa926de224af15c974750fecdc7d2c0043428372acaaf61216e202abbf21"}, - {file = "kiwisolver-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd1f81bc35ec24cb82a7d0b805521e3d71b25b8a493d5810d18dc29644c6ef8"}, - {file = "kiwisolver-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:199f32bf6f3d3e2246024326497513c5c49c62aecee86f0ac019f5991978d505"}, - {file = "kiwisolver-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af6a7c956a45ee721e4263f5823e1a3b2e6b21a7e2b3646b3794e000620609d0"}, - {file = "kiwisolver-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3891527ec51b0365bb50de9bf826ce3d5b1adc276685b2779889762437bbd359"}, - {file = "kiwisolver-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14f43edc25daa0646d4b4e86c2ebdd32d785ab73a65a570130a3d234a4554b07"}, - {file = "kiwisolver-1.4.0-cp38-cp38-win32.whl", hash = "sha256:5ecf82bb25cec7df4bfcf37afe49f6f6202b4fa4029be7cb0848ed319c72d356"}, - {file = "kiwisolver-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:34e2e39a219b203fa3a82af5b9f8d386a8718677de7a9b82a9634e292a8f4e0a"}, - {file = "kiwisolver-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c19457f58941da61681efaabd5b1c37893108a2f922b9b19538f6921911186d"}, - {file = "kiwisolver-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0a6f3d5063e7fd6662e4773778ad2cb36e598abc6eb171af4a072ca86b441d0"}, - {file = "kiwisolver-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:676f9fac93f97f529dc80b5d6731099fad337549408e8bdd929343b7cb679797"}, - {file = "kiwisolver-1.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4b70f0729947d6327cd659e1b3477ced44a317a4ba441238b2a3642990f0ebd7"}, - {file = "kiwisolver-1.4.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:925a32900fc16430ba0dec2c0fca2e776eaf2fdc0930d5552be0a59e23304001"}, - {file = "kiwisolver-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ec8bd4e162fd0a8723467395c5bb16fd665a528b78e9339886c82965ed8efb"}, - {file = "kiwisolver-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9b4d1db32a4f1682df1480fd68eb1400235ac8f9ad8932e1624fdb23eb891904"}, - {file = "kiwisolver-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:38ebc0cb30ed2f59bd15e23591a53698005123e90e880f1af4600fcdbe4912e1"}, - {file = "kiwisolver-1.4.0-cp39-cp39-win32.whl", hash = "sha256:8f63b981678ca894bb665bcd5043bde2c9ba600e69df730c1ceeadd73ddbcb8c"}, - {file = "kiwisolver-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:b1ff5582bf55e85728119c5a23f695b8e408e15eee7d0f5effe0ee8ad1f8b523"}, - {file = "kiwisolver-1.4.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c29496625c61e18d97a6f6c2f2a55759ca8290fc21a751bc57824599c431c0d2"}, - {file = "kiwisolver-1.4.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:71d44a6a59ea53d41e5950a42ec496fa821bd86f292fb3e10aa1b3932ecfc65e"}, - {file = "kiwisolver-1.4.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf2030bf18c21bf91fa9cf6a403a765519c9168bd7a91ba1d66d5c7f70ded1e"}, - {file = "kiwisolver-1.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5ca92de8e48678a2cbbd90adb10773e3553bb9fd1c090bf0dfe5fc3337a181ea"}, - {file = "kiwisolver-1.4.0.tar.gz", hash = "sha256:7508b01e211178a85d21f1f87029846b77b2404a4c68cbd14748d4d4142fa3b8"}, + {file = "kiwisolver-1.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e395ece147f0692ca7cdb05a028d31b83b72c369f7b4a2c1798f4b96af1e3d8"}, + {file = "kiwisolver-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0b7f50a1a25361da3440f07c58cd1d79957c2244209e4f166990e770256b6b0b"}, + {file = "kiwisolver-1.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c032c41ae4c3a321b43a3650e6ecc7406b99ff3e5279f24c9b310f41bc98479"}, + {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1dcade8f6fe12a2bb4efe2cbe22116556e3b6899728d3b2a0d3b367db323eacc"}, + {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e45e780a74416ef2f173189ef4387e44b5494f45e290bcb1f03735faa6779bf"}, + {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d2bb56309fb75a811d81ed55fbe2208aa77a3a09ff5f546ca95e7bb5fac6eff"}, + {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b2d6c12f2ad5f55104a36a356192cfb680c049fe5e7c1f6620fc37f119cdc2"}, + {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:262c248c60f22c2b547683ad521e8a3db5909c71f679b93876921549107a0c24"}, + {file = "kiwisolver-1.4.2-cp310-cp310-win32.whl", hash = "sha256:1008346a7741620ab9cc6c96e8ad9b46f7a74ce839dbb8805ddf6b119d5fc6c2"}, + {file = "kiwisolver-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:6ece2e12e4b57bc5646b354f436416cd2a6f090c1dadcd92b0ca4542190d7190"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b978afdb913ca953cf128d57181da2e8798e8b6153be866ae2a9c446c6162f40"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f88c4b8e449908eeddb3bbd4242bd4dc2c7a15a7aa44bb33df893203f02dc2d"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e348f1904a4fab4153407f7ccc27e43b2a139752e8acf12e6640ba683093dd96"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c839bf28e45d7ddad4ae8f986928dbf5a6d42ff79760d54ec8ada8fb263e097c"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8ae5a071185f1a93777c79a9a1e67ac46544d4607f18d07131eece08d415083a"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c222f91a45da9e01a9bc4f760727ae49050f8e8345c4ff6525495f7a164c8973"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:a4e8f072db1d6fb7a7cc05a6dbef8442c93001f4bb604f1081d8c2db3ca97159"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:be9a650890fb60393e60aacb65878c4a38bb334720aa5ecb1c13d0dac54dd73b"}, + {file = "kiwisolver-1.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ec2e55bf31b43aabe32089125dca3b46fdfe9f50afbf0756ae11e14c97b80ca"}, + {file = "kiwisolver-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d1078ba770d6165abed3d9a1be1f9e79b61515de1dd00d942fa53bba79f01ae"}, + {file = "kiwisolver-1.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cbb5eb4a2ea1ffec26268d49766cafa8f957fe5c1b41ad00733763fae77f9436"}, + {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e6cda72db409eefad6b021e8a4f964965a629f577812afc7860c69df7bdb84a"}, + {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1605c7c38cc6a85212dfd6a641f3905a33412e49f7c003f35f9ac6d71f67720"}, + {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81237957b15469ea9151ec8ca08ce05656090ffabc476a752ef5ad7e2644c526"}, + {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:240009fdf4fa87844f805e23f48995537a8cb8f8c361e35fda6b5ac97fcb906f"}, + {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:240c2d51d098395c012ddbcb9bd7b3ba5de412a1d11840698859f51d0e643c4f"}, + {file = "kiwisolver-1.4.2-cp38-cp38-win32.whl", hash = "sha256:8b6086aa6936865962b2cee0e7aaecf01ab6778ce099288354a7229b4d9f1408"}, + {file = "kiwisolver-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:0d98dca86f77b851350c250f0149aa5852b36572514d20feeadd3c6b1efe38d0"}, + {file = "kiwisolver-1.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:91eb4916271655dfe3a952249cb37a5c00b6ba68b4417ee15af9ba549b5ba61d"}, + {file = "kiwisolver-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa4d97d7d2b2c082e67907c0b8d9f31b85aa5d3ba0d33096b7116f03f8061261"}, + {file = "kiwisolver-1.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:71469b5845b9876b8d3d252e201bef6f47bf7456804d2fbe9a1d6e19e78a1e65"}, + {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8ff3033e43e7ca1389ee59fb7ecb8303abb8713c008a1da49b00869e92e3dd7c"}, + {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89b57c2984f4464840e4b768affeff6b6809c6150d1166938ade3e22fbe22db8"}, + {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffbdb9a96c536f0405895b5e21ee39ec579cb0ed97bdbd169ae2b55f41d73219"}, + {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a830a03970c462d1a2311c90e05679da56d3bd8e78a4ba9985cb78ef7836c9f"}, + {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f74f2a13af201559e3d32b9ddfc303c94ae63d63d7f4326d06ce6fe67e7a8255"}, + {file = "kiwisolver-1.4.2-cp39-cp39-win32.whl", hash = "sha256:e677cc3626287f343de751e11b1e8a5b915a6ac897e8aecdbc996cd34de753a0"}, + {file = "kiwisolver-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b3e251e5c38ac623c5d786adb21477f018712f8c6fa54781bd38aa1c60b60fc2"}, + {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c380bb5ae20d829c1a5473cfcae64267b73aaa4060adc091f6df1743784aae0"}, + {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:484f2a5f0307bc944bc79db235f41048bae4106ffa764168a068d88b644b305d"}, + {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8afdf533b613122e4bbaf3c1e42c2a5e9e2d1dd3a0a017749a7658757cb377"}, + {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42f6ef9b640deb6f7d438e0a371aedd8bef6ddfde30683491b2e6f568b4e884e"}, + {file = "kiwisolver-1.4.2.tar.gz", hash = "sha256:7f606d91b8a8816be476513a77fd30abe66227039bd6f8b406c348cb0247dcc9"}, ] lazy-object-proxy = [ {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, @@ -3173,16 +3194,16 @@ nbclient = [ {file = "nbclient-0.5.13.tar.gz", hash = "sha256:40c52c9b5e3c31faecaee69f202b3f53e38d7c1c563de0fadde9d7eda0fdafe8"}, ] nbconvert = [ - {file = "nbconvert-6.4.4-py3-none-any.whl", hash = "sha256:c0c13d11378e13f72b9cd509c008383dca4051c228e4985f75023b2a5d82fc9f"}, - {file = "nbconvert-6.4.4.tar.gz", hash = "sha256:ee0dfe34bbd1082ac9bfc750aae3c73fcbc34a70c5574c6986ff83c10a3541fd"}, + {file = "nbconvert-6.4.5-py3-none-any.whl", hash = "sha256:e01d219f55cc79f9701c834d605e8aa3acf35725345d3942e3983937f368ce14"}, + {file = "nbconvert-6.4.5.tar.gz", hash = "sha256:21163a8e2073c07109ca8f398836e45efdba2aacea68d6f75a8a545fef070d4e"}, ] nbformat = [ {file = "nbformat-5.2.0-py3-none-any.whl", hash = "sha256:3e30424e8291b2188347f5c3ba5273ed3766f12f8c5137c2e456a0815f36e785"}, {file = "nbformat-5.2.0.tar.gz", hash = "sha256:93df0b9c67221d38fb970c48f6d361819a6c388299a0ef3171bbb912edfe1324"}, ] nest-asyncio = [ - {file = "nest_asyncio-1.5.4-py3-none-any.whl", hash = "sha256:3fdd0d6061a2bb16f21fe8a9c6a7945be83521d81a0d15cff52e9edee50101d6"}, - {file = "nest_asyncio-1.5.4.tar.gz", hash = "sha256:f969f6013a16fadb4adcf09d11a68a4f617c6049d7af7ac2c676110169a63abd"}, + {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, + {file = "nest_asyncio-1.5.5.tar.gz", hash = "sha256:e442291cd942698be619823a17a86a5759eabe1f8613084790de189fe9e16d65"}, ] networkx = [ {file = "networkx-2.6.3-py3-none-any.whl", hash = "sha256:80b6b89c77d1dfb64a4c7854981b60aeea6360ac02c6d4e4913319e0a313abef"}, @@ -3257,41 +3278,44 @@ pickleshare = [ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] pillow = [ - {file = "Pillow-9.0.1-1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a5d24e1d674dd9d72c66ad3ea9131322819ff86250b30dc5821cbafcfa0b96b4"}, - {file = "Pillow-9.0.1-1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2632d0f846b7c7600edf53c48f8f9f1e13e62f66a6dbc15191029d950bfed976"}, - {file = "Pillow-9.0.1-1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b9618823bd237c0d2575283f2939655f54d51b4527ec3972907a927acbcc5bfc"}, - {file = "Pillow-9.0.1-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:9bfdb82cdfeccec50aad441afc332faf8606dfa5e8efd18a6692b5d6e79f00fd"}, - {file = "Pillow-9.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5100b45a4638e3c00e4d2320d3193bdabb2d75e79793af7c3eb139e4f569f16f"}, - {file = "Pillow-9.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:528a2a692c65dd5cafc130de286030af251d2ee0483a5bf50c9348aefe834e8a"}, - {file = "Pillow-9.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f29d831e2151e0b7b39981756d201f7108d3d215896212ffe2e992d06bfe049"}, - {file = "Pillow-9.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:855c583f268edde09474b081e3ddcd5cf3b20c12f26e0d434e1386cc5d318e7a"}, - {file = "Pillow-9.0.1-cp310-cp310-win32.whl", hash = "sha256:d9d7942b624b04b895cb95af03a23407f17646815495ce4547f0e60e0b06f58e"}, - {file = "Pillow-9.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:81c4b81611e3a3cb30e59b0cf05b888c675f97e3adb2c8672c3154047980726b"}, - {file = "Pillow-9.0.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:413ce0bbf9fc6278b2d63309dfeefe452835e1c78398efb431bab0672fe9274e"}, - {file = "Pillow-9.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80fe64a6deb6fcfdf7b8386f2cf216d329be6f2781f7d90304351811fb591360"}, - {file = "Pillow-9.0.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cef9c85ccbe9bee00909758936ea841ef12035296c748aaceee535969e27d31b"}, - {file = "Pillow-9.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d19397351f73a88904ad1aee421e800fe4bbcd1aeee6435fb62d0a05ccd1030"}, - {file = "Pillow-9.0.1-cp37-cp37m-win32.whl", hash = "sha256:d21237d0cd37acded35154e29aec853e945950321dd2ffd1a7d86fe686814669"}, - {file = "Pillow-9.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ede5af4a2702444a832a800b8eb7f0a7a1c0eed55b644642e049c98d589e5092"}, - {file = "Pillow-9.0.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b5b3f092fe345c03bca1e0b687dfbb39364b21ebb8ba90e3fa707374b7915204"}, - {file = "Pillow-9.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:335ace1a22325395c4ea88e00ba3dc89ca029bd66bd5a3c382d53e44f0ccd77e"}, - {file = "Pillow-9.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db6d9fac65bd08cea7f3540b899977c6dee9edad959fa4eaf305940d9cbd861c"}, - {file = "Pillow-9.0.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f154d173286a5d1863637a7dcd8c3437bb557520b01bddb0be0258dcb72696b5"}, - {file = "Pillow-9.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d4b1341ac07ae07eb2cc682f459bec932a380c3b122f5540432d8977e64eae"}, - {file = "Pillow-9.0.1-cp38-cp38-win32.whl", hash = "sha256:effb7749713d5317478bb3acb3f81d9d7c7f86726d41c1facca068a04cf5bb4c"}, - {file = "Pillow-9.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:7f7609a718b177bf171ac93cea9fd2ddc0e03e84d8fa4e887bdfc39671d46b00"}, - {file = "Pillow-9.0.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:80ca33961ced9c63358056bd08403ff866512038883e74f3a4bf88ad3eb66838"}, - {file = "Pillow-9.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c3c33ac69cf059bbb9d1a71eeaba76781b450bc307e2291f8a4764d779a6b28"}, - {file = "Pillow-9.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12875d118f21cf35604176872447cdb57b07126750a33748bac15e77f90f1f9c"}, - {file = "Pillow-9.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:514ceac913076feefbeaf89771fd6febde78b0c4c1b23aaeab082c41c694e81b"}, - {file = "Pillow-9.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3c5c79ab7dfce6d88f1ba639b77e77a17ea33a01b07b99840d6ed08031cb2a7"}, - {file = "Pillow-9.0.1-cp39-cp39-win32.whl", hash = "sha256:718856856ba31f14f13ba885ff13874be7fefc53984d2832458f12c38205f7f7"}, - {file = "Pillow-9.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:f25ed6e28ddf50de7e7ea99d7a976d6a9c415f03adcaac9c41ff6ff41b6d86ac"}, - {file = "Pillow-9.0.1-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:011233e0c42a4a7836498e98c1acf5e744c96a67dd5032a6f666cc1fb97eab97"}, - {file = "Pillow-9.0.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253e8a302a96df6927310a9d44e6103055e8fb96a6822f8b7f514bb7ef77de56"}, - {file = "Pillow-9.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6295f6763749b89c994fcb6d8a7f7ce03c3992e695f89f00b741b4580b199b7e"}, - {file = "Pillow-9.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a9f44cd7e162ac6191491d7249cceb02b8116b0f7e847ee33f739d7cb1ea1f70"}, - {file = "Pillow-9.0.1.tar.gz", hash = "sha256:6c8bc8238a7dfdaf7a75f5ec5a663f4173f8c367e5a39f87e720495e1eed75fa"}, + {file = "Pillow-9.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:af79d3fde1fc2e33561166d62e3b63f0cc3e47b5a3a2e5fea40d4917754734ea"}, + {file = "Pillow-9.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:55dd1cf09a1fd7c7b78425967aacae9b0d70125f7d3ab973fadc7b5abc3de652"}, + {file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66822d01e82506a19407d1afc104c3fcea3b81d5eb11485e593ad6b8492f995a"}, + {file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5eaf3b42df2bcda61c53a742ee2c6e63f777d0e085bbc6b2ab7ed57deb13db7"}, + {file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01ce45deec9df310cbbee11104bae1a2a43308dd9c317f99235b6d3080ddd66e"}, + {file = "Pillow-9.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:aea7ce61328e15943d7b9eaca87e81f7c62ff90f669116f857262e9da4057ba3"}, + {file = "Pillow-9.1.0-cp310-cp310-win32.whl", hash = "sha256:7a053bd4d65a3294b153bdd7724dce864a1d548416a5ef61f6d03bf149205160"}, + {file = "Pillow-9.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:97bda660702a856c2c9e12ec26fc6d187631ddfd896ff685814ab21ef0597033"}, + {file = "Pillow-9.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:21dee8466b42912335151d24c1665fcf44dc2ee47e021d233a40c3ca5adae59c"}, + {file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b6d4050b208c8ff886fd3db6690bf04f9a48749d78b41b7a5bf24c236ab0165"}, + {file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5cfca31ab4c13552a0f354c87fbd7f162a4fafd25e6b521bba93a57fe6a3700a"}, + {file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed742214068efa95e9844c2d9129e209ed63f61baa4d54dbf4cf8b5e2d30ccf2"}, + {file = "Pillow-9.1.0-cp37-cp37m-win32.whl", hash = "sha256:c9efef876c21788366ea1f50ecb39d5d6f65febe25ad1d4c0b8dff98843ac244"}, + {file = "Pillow-9.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:de344bcf6e2463bb25179d74d6e7989e375f906bcec8cb86edb8b12acbc7dfef"}, + {file = "Pillow-9.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:17869489de2fce6c36690a0c721bd3db176194af5f39249c1ac56d0bb0fcc512"}, + {file = "Pillow-9.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:25023a6209a4d7c42154073144608c9a71d3512b648a2f5d4465182cb93d3477"}, + {file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8782189c796eff29dbb37dd87afa4ad4d40fc90b2742704f94812851b725964b"}, + {file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:463acf531f5d0925ca55904fa668bb3461c3ef6bc779e1d6d8a488092bdee378"}, + {file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f42364485bfdab19c1373b5cd62f7c5ab7cc052e19644862ec8f15bb8af289e"}, + {file = "Pillow-9.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3fddcdb619ba04491e8f771636583a7cc5a5051cd193ff1aa1ee8616d2a692c5"}, + {file = "Pillow-9.1.0-cp38-cp38-win32.whl", hash = "sha256:4fe29a070de394e449fd88ebe1624d1e2d7ddeed4c12e0b31624561b58948d9a"}, + {file = "Pillow-9.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c24f718f9dd73bb2b31a6201e6db5ea4a61fdd1d1c200f43ee585fc6dcd21b34"}, + {file = "Pillow-9.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fb89397013cf302f282f0fc998bb7abf11d49dcff72c8ecb320f76ea6e2c5717"}, + {file = "Pillow-9.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c870193cce4b76713a2b29be5d8327c8ccbe0d4a49bc22968aa1e680930f5581"}, + {file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e5ddc609230d4408277af135c5b5c8fe7a54b2bdb8ad7c5100b86b3aab04c6"}, + {file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35be4a9f65441d9982240e6966c1eaa1c654c4e5e931eaf580130409e31804d4"}, + {file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82283af99c1c3a5ba1da44c67296d5aad19f11c535b551a5ae55328a317ce331"}, + {file = "Pillow-9.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a325ac71914c5c043fa50441b36606e64a10cd262de12f7a179620f579752ff8"}, + {file = "Pillow-9.1.0-cp39-cp39-win32.whl", hash = "sha256:a598d8830f6ef5501002ae85c7dbfcd9c27cc4efc02a1989369303ba85573e58"}, + {file = "Pillow-9.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c51cb9edac8a5abd069fd0758ac0a8bfe52c261ee0e330f363548aca6893595"}, + {file = "Pillow-9.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a336a4f74baf67e26f3acc4d61c913e378e931817cd1e2ef4dfb79d3e051b481"}, + {file = "Pillow-9.1.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb1b89b11256b5b6cad5e7593f9061ac4624f7651f7a8eb4dfa37caa1dfaa4d0"}, + {file = "Pillow-9.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:255c9d69754a4c90b0ee484967fc8818c7ff8311c6dddcc43a4340e10cd1636a"}, + {file = "Pillow-9.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5a3ecc026ea0e14d0ad7cd990ea7f48bfcb3eb4271034657dc9d06933c6629a7"}, + {file = "Pillow-9.1.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5b0ff59785d93b3437c3703e3c64c178aabada51dea2a7f2c5eccf1bcf565a3"}, + {file = "Pillow-9.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7110ec1701b0bf8df569a7592a196c9d07c764a0a74f65471ea56816f10e2c8"}, + {file = "Pillow-9.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8d79c6f468215d1a8415aa53d9868a6b40c4682165b8cb62a221b1baa47db458"}, + {file = "Pillow-9.1.0.tar.gz", hash = "sha256:f401ed2bbb155e1ade150ccc63db1a4f6c1909d3d378f7d1235a44e90d75fb97"}, ] platformdirs = [ {file = "platformdirs-2.5.1-py3-none-any.whl", hash = "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227"}, @@ -3302,8 +3326,8 @@ pluggy = [ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] pre-commit = [ - {file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"}, - {file = "pre_commit-2.17.0.tar.gz", hash = "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a"}, + {file = "pre_commit-2.18.1-py2.py3-none-any.whl", hash = "sha256:02226e69564ebca1a070bd1f046af866aa1c318dbc430027c50ab832ed2b73f2"}, + {file = "pre_commit-2.18.1.tar.gz", hash = "sha256:5d445ee1fa8738d506881c5d84f83c62bb5be6b2838e32207433647e8e5ebe10"}, ] prometheus-client = [ {file = "prometheus_client-0.13.1-py3-none-any.whl", hash = "sha256:357a447fd2359b0a1d2e9b311a0c5778c330cfbe186d880ad5a6b39884652316"}, @@ -3418,8 +3442,8 @@ pyjwt = [ {file = "PyJWT-2.3.0.tar.gz", hash = "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41"}, ] pylint = [ - {file = "pylint-2.12.2-py3-none-any.whl", hash = "sha256:daabda3f7ed9d1c60f52d563b1b854632fd90035bcf01443e234d3dc794e3b74"}, - {file = "pylint-2.12.2.tar.gz", hash = "sha256:9d945a73640e1fec07ee34b42f5669b770c759acd536ec7b16d7e4b87a9c9ff9"}, + {file = "pylint-2.13.4-py3-none-any.whl", hash = "sha256:8672cf7441b81410f5de7defdf56e2d559c956fd0579652f2e0a0a35bea2d546"}, + {file = "pylint-2.13.4.tar.gz", hash = "sha256:7cc6d0c4f61dff440f9ed8b657f4ecd615dcfe35345953eb7b1dc74afe901d7a"}, ] pynacl = [ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, @@ -3623,8 +3647,8 @@ restructuredtext-lint = [ {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, ] rich = [ - {file = "rich-12.0.1-py3-none-any.whl", hash = "sha256:ce5c714e984a2d185399e4e1dd1f8b2feacb7cecfc576f1522425643a36a57ea"}, - {file = "rich-12.0.1.tar.gz", hash = "sha256:3fba9dd15ebe048e2795a02ac19baee79dc12cc50b074ef70f2958cd651b59a9"}, + {file = "rich-12.1.0-py3-none-any.whl", hash = "sha256:b60ff99f4ff7e3d1d37444dee2b22fdd941c622dbc37841823ec1ce7f058b263"}, + {file = "rich-12.1.0.tar.gz", hash = "sha256:198ae15807a7c1bf84ceabf662e902731bf8f874f9e775e2289cab02bb6a4e30"}, ] scipy = [ {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, @@ -3726,8 +3750,8 @@ soupsieve = [ {file = "soupsieve-2.3.1.tar.gz", hash = "sha256:b8d49b1cd4f037c7082a9683dfa1801aa2597fb11c3a1155b7a5b94829b4f1f9"}, ] sphinx = [ - {file = "Sphinx-4.4.0-py3-none-any.whl", hash = "sha256:5da895959511473857b6d0200f56865ed62c31e8f82dd338063b84ec022701fe"}, - {file = "Sphinx-4.4.0.tar.gz", hash = "sha256:6caad9786055cb1fa22b4a365c1775816b876f91966481765d7d50e9f0dd35cc"}, + {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, + {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, ] sphinx-copybutton = [ {file = "sphinx-copybutton-0.4.0.tar.gz", hash = "sha256:8daed13a87afd5013c3a9af3575cc4d5bec052075ccd3db243f895c07a689386"}, @@ -3828,8 +3852,8 @@ tornado = [ {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"}, ] tqdm = [ - {file = "tqdm-4.63.0-py2.py3-none-any.whl", hash = "sha256:e643e071046f17139dea55b880dc9b33822ce21613b4a4f5ea57f202833dbc29"}, - {file = "tqdm-4.63.0.tar.gz", hash = "sha256:1d9835ede8e394bb8c9dcbffbca02d717217113adc679236873eeaac5bc0b3cd"}, + {file = "tqdm-4.64.0-py2.py3-none-any.whl", hash = "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6"}, + {file = "tqdm-4.64.0.tar.gz", hash = "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d"}, ] traitlets = [ {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, @@ -3882,8 +3906,8 @@ types-pygments = [ {file = "types_Pygments-2.9.17-py3-none-any.whl", hash = "sha256:723cb3db5dc3603dd4f06ca73f1d61b712c88cda5fd768dd898a23b181fd505e"}, ] types-requests = [ - {file = "types-requests-2.27.14.tar.gz", hash = "sha256:04579ee164f7c2659be46950e3c2f8d51a081ad252ef1b01d4b12faba5c3810b"}, - {file = "types_requests-2.27.14-py3-none-any.whl", hash = "sha256:c01838abfe3e8a83ba68346cd373afff97594c19c15c922ddee4a0e80ba7e329"}, + {file = "types-requests-2.27.16.tar.gz", hash = "sha256:c8010c18b291a7efb60b1452dbe12530bc25693dd657e70c62803fcdc4bffe9b"}, + {file = "types_requests-2.27.16-py3-none-any.whl", hash = "sha256:2437a5f4d16c0c8bd7539a8126d492b7aeb41e6cda670d76b286c7f83a658d42"}, ] types-setuptools = [ {file = "types-setuptools-57.4.11.tar.gz", hash = "sha256:262f7406e0c7d705ad6bb4526b5b761fa500bf99eab74de85ac3592187d62935"}, @@ -3902,33 +3926,34 @@ urllib3 = [ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] virtualenv = [ - {file = "virtualenv-20.13.4-py2.py3-none-any.whl", hash = "sha256:c3e01300fb8495bc00ed70741f5271fc95fed067eb7106297be73d30879af60c"}, - {file = "virtualenv-20.13.4.tar.gz", hash = "sha256:ce8901d3bbf3b90393498187f2d56797a8a452fb2d0d7efc6fd837554d6f679c"}, + {file = "virtualenv-20.14.0-py2.py3-none-any.whl", hash = "sha256:1e8588f35e8b42c6ec6841a13c5e88239de1e6e4e4cedfd3916b306dc826ec66"}, + {file = "virtualenv-20.14.0.tar.gz", hash = "sha256:8e5b402037287126e81ccde9432b95a8be5b19d36584f64957060a3488c11ca8"}, ] watchdog = [ - {file = "watchdog-2.1.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9693f35162dc6208d10b10ddf0458cc09ad70c30ba689d9206e02cd836ce28a3"}, - {file = "watchdog-2.1.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aba5c812f8ee8a3ff3be51887ca2d55fb8e268439ed44110d3846e4229eb0e8b"}, - {file = "watchdog-2.1.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4ae38bf8ba6f39d5b83f78661273216e7db5b00f08be7592062cb1fc8b8ba542"}, - {file = "watchdog-2.1.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ad6f1796e37db2223d2a3f302f586f74c72c630b48a9872c1e7ae8e92e0ab669"}, - {file = "watchdog-2.1.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:922a69fa533cb0c793b483becaaa0845f655151e7256ec73630a1b2e9ebcb660"}, - {file = "watchdog-2.1.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b2fcf9402fde2672545b139694284dc3b665fd1be660d73eca6805197ef776a3"}, - {file = "watchdog-2.1.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3386b367e950a11b0568062b70cc026c6f645428a698d33d39e013aaeda4cc04"}, - {file = "watchdog-2.1.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f1c00aa35f504197561060ca4c21d3cc079ba29cf6dd2fe61024c70160c990b"}, - {file = "watchdog-2.1.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b52b88021b9541a60531142b0a451baca08d28b74a723d0c99b13c8c8d48d604"}, - {file = "watchdog-2.1.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8047da932432aa32c515ec1447ea79ce578d0559362ca3605f8e9568f844e3c6"}, - {file = "watchdog-2.1.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e92c2d33858c8f560671b448205a268096e17870dcf60a9bb3ac7bfbafb7f5f9"}, - {file = "watchdog-2.1.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b7d336912853d7b77f9b2c24eeed6a5065d0a0cc0d3b6a5a45ad6d1d05fb8cd8"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_aarch64.whl", hash = "sha256:cca7741c0fcc765568350cb139e92b7f9f3c9a08c4f32591d18ab0a6ac9e71b6"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_armv7l.whl", hash = "sha256:25fb5240b195d17de949588628fdf93032ebf163524ef08933db0ea1f99bd685"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_i686.whl", hash = "sha256:be9be735f827820a06340dff2ddea1fb7234561fa5e6300a62fe7f54d40546a0"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0d19fb2441947b58fbf91336638c2b9f4cc98e05e1045404d7a4cb7cddc7a65"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:3becdb380d8916c873ad512f1701f8a92ce79ec6978ffde92919fd18d41da7fb"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_s390x.whl", hash = "sha256:ae67501c95606072aafa865b6ed47343ac6484472a2f95490ba151f6347acfc2"}, - {file = "watchdog-2.1.6-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e0f30db709c939cabf64a6dc5babb276e6d823fd84464ab916f9b9ba5623ca15"}, - {file = "watchdog-2.1.6-py3-none-win32.whl", hash = "sha256:e02794ac791662a5eafc6ffeaf9bcc149035a0e48eb0a9d40a8feb4622605a3d"}, - {file = "watchdog-2.1.6-py3-none-win_amd64.whl", hash = "sha256:bd9ba4f332cf57b2c1f698be0728c020399ef3040577cde2939f2e045b39c1e5"}, - {file = "watchdog-2.1.6-py3-none-win_ia64.whl", hash = "sha256:a0f1c7edf116a12f7245be06120b1852275f9506a7d90227648b250755a03923"}, - {file = "watchdog-2.1.6.tar.gz", hash = "sha256:a36e75df6c767cbf46f61a91c70b3ba71811dfa0aca4a324d9407a06a8b7a2e7"}, + {file = "watchdog-2.1.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:177bae28ca723bc00846466016d34f8c1d6a621383b6caca86745918d55c7383"}, + {file = "watchdog-2.1.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d1cf7dfd747dec519486a98ef16097e6c480934ef115b16f18adb341df747a4"}, + {file = "watchdog-2.1.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7f14ce6adea2af1bba495acdde0e510aecaeb13b33f7bd2f6324e551b26688ca"}, + {file = "watchdog-2.1.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4d0e98ac2e8dd803a56f4e10438b33a2d40390a72750cff4939b4b274e7906fa"}, + {file = "watchdog-2.1.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:81982c7884aac75017a6ecc72f1a4fedbae04181a8665a34afce9539fc1b3fab"}, + {file = "watchdog-2.1.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0b4a1fe6201c6e5a1926f5767b8664b45f0fcb429b62564a41f490ff1ce1dc7a"}, + {file = "watchdog-2.1.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6e6ae29b72977f2e1ee3d0b760d7ee47896cb53e831cbeede3e64485e5633cc8"}, + {file = "watchdog-2.1.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b9777664848160449e5b4260e0b7bc1ae0f6f4992a8b285db4ec1ef119ffa0e2"}, + {file = "watchdog-2.1.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:19b36d436578eb437e029c6b838e732ed08054956366f6dd11875434a62d2b99"}, + {file = "watchdog-2.1.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b61acffaf5cd5d664af555c0850f9747cc5f2baf71e54bbac164c58398d6ca7b"}, + {file = "watchdog-2.1.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1e877c70245424b06c41ac258023ea4bd0c8e4ff15d7c1368f17cd0ae6e351dd"}, + {file = "watchdog-2.1.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d802d65262a560278cf1a65ef7cae4e2bc7ecfe19e5451349e4c67e23c9dc420"}, + {file = "watchdog-2.1.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b3750ee5399e6e9c69eae8b125092b871ee9e2fcbd657a92747aea28f9056a5c"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_aarch64.whl", hash = "sha256:ed6d9aad09a2a948572224663ab00f8975fae242aa540509737bb4507133fa2d"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_armv7l.whl", hash = "sha256:b26e13e8008dcaea6a909e91d39b629a39635d1a8a7239dd35327c74f4388601"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_i686.whl", hash = "sha256:0908bb50f6f7de54d5d31ec3da1654cb7287c6b87bce371954561e6de379d690"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_ppc64.whl", hash = "sha256:bdcbf75580bf4b960fb659bbccd00123d83119619195f42d721e002c1621602f"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:81a5861d0158a7e55fe149335fb2bbfa6f48cbcbd149b52dbe2cd9a544034bbd"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_s390x.whl", hash = "sha256:03b43d583df0f18782a0431b6e9e9965c5b3f7cf8ec36a00b930def67942c385"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ae934e34c11aa8296c18f70bf66ed60e9870fcdb4cc19129a04ca83ab23e7055"}, + {file = "watchdog-2.1.7-py3-none-win32.whl", hash = "sha256:49639865e3db4be032a96695c98ac09eed39bbb43fe876bb217da8f8101689a6"}, + {file = "watchdog-2.1.7-py3-none-win_amd64.whl", hash = "sha256:340b875aecf4b0e6672076a6f05cfce6686935559bb6d34cebedee04126a9566"}, + {file = "watchdog-2.1.7-py3-none-win_ia64.whl", hash = "sha256:351e09b6d9374d5bcb947e6ac47a608ec25b9d70583e9db00b2fcdb97b00b572"}, + {file = "watchdog-2.1.7.tar.gz", hash = "sha256:3fd47815353be9c44eebc94cc28fe26b2b0c5bd889dafc4a5a7cbdf924143480"}, ] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, @@ -3939,63 +3964,76 @@ webencodings = [ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] websocket-client = [ - {file = "websocket-client-1.3.1.tar.gz", hash = "sha256:6278a75065395418283f887de7c3beafb3aa68dada5cacbe4b214e8d26da499b"}, - {file = "websocket_client-1.3.1-py3-none-any.whl", hash = "sha256:074e2ed575e7c822fc0940d31c3ac9bb2b1142c303eafcf3e304e6ce035522e8"}, + {file = "websocket-client-1.3.2.tar.gz", hash = "sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6"}, + {file = "websocket_client-1.3.2-py3-none-any.whl", hash = "sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef"}, ] wrapt = [ - {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"}, - {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"}, - {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"}, - {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"}, - {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"}, - {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"}, - {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"}, - {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"}, - {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"}, - {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"}, - {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"}, - {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"}, - {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"}, - {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"}, - {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"}, - {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"}, - {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"}, - {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"}, - {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"}, - {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"}, - {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"}, - {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"}, - {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"}, - {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"}, - {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"}, - {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"}, - {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"}, - {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"}, - {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"}, - {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"}, - {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"}, - {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"}, - {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"}, - {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"}, - {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"}, - {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"}, - {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"}, - {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"}, - {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"}, + {file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"}, + {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"}, + {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"}, + {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"}, + {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"}, + {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"}, + {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"}, + {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"}, + {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"}, + {file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"}, + {file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"}, + {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"}, + {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"}, + {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"}, + {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"}, + {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"}, + {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"}, + {file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"}, + {file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"}, + {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"}, + {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"}, + {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"}, + {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"}, + {file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"}, + {file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"}, + {file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"}, + {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"}, + {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"}, + {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"}, + {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"}, + {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"}, + {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"}, + {file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"}, + {file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"}, + {file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"}, + {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"}, + {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"}, + {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"}, + {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"}, + {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"}, + {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"}, + {file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"}, + {file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"}, + {file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"}, + {file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"}, + {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"}, + {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"}, + {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"}, + {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"}, + {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"}, + {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"}, + {file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"}, + {file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"}, + {file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"}, + {file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"}, + {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"}, + {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"}, + {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"}, + {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"}, + {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"}, + {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"}, + {file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"}, + {file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"}, + {file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"}, ] zipp = [ - {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"}, - {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"}, + {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, + {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, ] diff --git a/pyproject.toml b/pyproject.toml index 661b658a96..98f656ea05 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,7 @@ jupyterlab = { version = "^3.0", optional = true } moderngl = "^5.6.3" moderngl-window = "^2.3.0" mapbox-earcut = "^0.12.10" -cloup = "^0.7.0" +cloup = "^0.13.0" requests = "^2.26.0" dearpygui = { version = "^1.3.1", optional = true } skia-pathops = "^0.7.0" From 5071e9418b4018e4d3c6c40808ec8bab7f3af765 Mon Sep 17 00:00:00 2001 From: darkways <51851705+darkway-s@users.noreply.github.com> Date: Sat, 9 Apr 2022 17:49:16 +0800 Subject: [PATCH 013/555] Fix Bug `Uncreate()` with `rate_func` via introducing new parameter `reversed` to class `Animation` (#2597) * `Uncreate()` works with `rate_func` ,fix #2469 Place the reverse of `rate_func` to become part of the process in `Uncreate()`. The original `uncreate()` is implemented by setting a specific value to `rate_func`. Now, if you want to set parameter`rate_func` when using `Uncreate()`, you can set the parameter `reverse_rate_func` to `Uncreate()`. Examples ```python .. manim:: ShowUncreate class ShowUncreate(Scene): def construct(self): self.play(Uncreate(Square(), reverse_rate_func=linear)) ``` But problems remains when you try to pass parameter `rate_func` to `Scene.play()` * fix issue #2469 * Add parameter reversed to class Animation Fix an error in the last [commit](https://github.com/darkway-s/manim/commit/47b5196e3f4d5cdab36c61a7a3917c3bf445635e). The "remover" decided whether it would reverse. Now it correctly passes the power of decision to "reversed". Add a bool parameter `reversed` to class `Animation`. It decides whether the animation need to be played backwards. Default to be False. * Add unit tests for usages of `Uncreate()` * Add control data for the new unit test * change the implementation of `Unwrite` to the same logic as `Uncreate` * Rename parameter `reversed`, add descriptions, style #2597 Rename `reversed` to the more explicit `reverse_rate_function`, in class Animation. Explicitly mention in documentation that setting `reverse_rate_function` doesn't have any effect on `remover` and `introducer`. * improve documentation of parameter `reverse_rate_function`, doc #2597 improve documentation of parameter `reverse_rate_function` in class `Animation` Co-authored-by: Benjamin Hackl * doc: remove unnecessary comments in creation.py The comment was added because the name of the parameter `reversed` was similar to reverse, which is a also parameter, but defined in Write(). Now the parameter has a more explicit name `reverse_rate_function`. Developers can get the main idea from its name. So we don't need the comment to tell. Co-authored-by: Sefik-Palazoglu Co-authored-by: Benjamin Hackl --- manim/animation/animation.py | 14 +++++++++++++- manim/animation/creation.py | 6 +++--- .../control_data/creation/uncreate_rate_func.npz | Bin 0 -> 4129 bytes tests/test_graphical_units/test_creation.py | 7 +++++++ 4 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 tests/test_graphical_units/control_data/creation/uncreate_rate_func.npz diff --git a/manim/animation/animation.py b/manim/animation/animation.py index 2805e04023..385917e162 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -49,6 +49,13 @@ class Animation: For example ``rate_func(0.5)`` is the proportion of the animation that is done after half of the animations run time. + + + reverse_rate_function + Reverses the rate function of the animation. Setting ``reverse_rate_function`` + does not have any effect on ``remover`` or ``introducer``. These need to be + set explicitly if an introducer-animation should be turned into a remover one + and vice versa. name The name of the animation. This gets displayed while rendering the animation. Defaults to (). @@ -123,6 +130,7 @@ def __init__( lag_ratio: float = DEFAULT_ANIMATION_LAG_RATIO, run_time: float = DEFAULT_ANIMATION_RUN_TIME, rate_func: Callable[[float], float] = smooth, + reverse_rate_function: bool = False, name: str = None, remover: bool = False, # remove a mobject from the screen? suspend_mobject_updating: bool = True, @@ -134,6 +142,7 @@ def __init__( self._typecheck_input(mobject) self.run_time: float = run_time self.rate_func: Callable[[float], float] = rate_func + self.reverse_rate_function: bool = reverse_rate_function self.name: str | None = name self.remover: bool = remover self.introducer: bool = introducer @@ -361,7 +370,10 @@ def get_sub_alpha(self, alpha: float, index: int, num_submobjects: int) -> float full_length = (num_submobjects - 1) * lag_ratio + 1 value = alpha * full_length lower = index * lag_ratio - return self.rate_func(value - lower) + if self.reverse_rate_function: + return self.rate_func(1 - (value - lower)) + else: + return self.rate_func(value - lower) # Getters and setters def set_run_time(self, run_time: float) -> Animation: diff --git a/manim/animation/creation.py b/manim/animation/creation.py index 1b2eddda7e..8abc265684 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -191,13 +191,13 @@ def construct(self): def __init__( self, mobject: VMobject | OpenGLVMobject, - rate_func: Callable[[float], float] = lambda t: smooth(1 - t), + reverse_rate_function: bool = True, remover: bool = True, **kwargs, ) -> None: super().__init__( mobject, - rate_func=rate_func, + reverse_rate_function=reverse_rate_function, introducer=False, remover=remover, **kwargs, @@ -405,7 +405,7 @@ def __init__( vmobject, run_time=run_time, lag_ratio=lag_ratio, - rate_func=lambda t: -rate_func(t) + 1, + reverse_rate_function=True, reverse=reverse, **kwargs, ) diff --git a/tests/test_graphical_units/control_data/creation/uncreate_rate_func.npz b/tests/test_graphical_units/control_data/creation/uncreate_rate_func.npz new file mode 100644 index 0000000000000000000000000000000000000000..3826c14faf4fae28782735ecf759566930eeabf7 GIT binary patch literal 4129 zcmWIWW@Zs#U|`??Vnqh4yZR>m{0s~ZC$$;)7(^J-iV|~E<5Ln#67}*5Dj69Bz%oFk z3?Nk?@b>D$J~>v2)`v$Ix&6<&>$Hh!mYPZoLmmfPqY|&Kqkz}82F7(vrd4`hmMdRd z8^KfjYi{}^_4?ge=Q`g1ef~QCdj7uOFP`*`FCMk^7otfFsS=uXoM+cbBnZ-|44Cw)1N5`{#FrF@BhGJWO_f`hIQ(8`sqg9?L@+ zmR#0ixRfc%@Nx@RLrD~?gVkClg}Gsj6Z{51de^qFt#4UpEO=YCec-4EAIskVuDiP} zcTe*2FvgmQX{nZb<V)6Z8yV#;6ae$XqVdi*WUX6cUNxolG0fJ|9%W}(t!n8^pem)7+r(W zNe6C1D)H3V>zDUiGn_Bq8ME&A=J&r}@?O+pnD^<%s>k2olruIg2PUY&P;k*I84bp$ z8I*4NqwrzcB-!`n-^`gF#6+ Date: Sat, 9 Apr 2022 14:33:06 +0100 Subject: [PATCH 014/555] Document and type utils/iterables.py (#2649) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🎨 Reorder functions alphabetically Makes it easier to reference documentation alongside source code. * 🎨 Rename concatenate_lists to flatten_lists This is more consistent with terminology online in terms of data science. We're flattening a 2D list into a regular one. * 🏷️ Add types to iterables.py Some functions require just Iterables, others Collections (sized iterables), etc. * 💡 Add docstrings and examples to 1st half of iterables.py Improved the clarity of some existing explanations as well. flatten_lists was reverted to concatenate lists on closer inspection. * 🎨 Adjust docstring format to numpy style Use Examples header and indent docstrings description consistent with numpy style guide as well as Manim wiki guidance. * 💡 Add docstrings and examples to 2nd half of iterables.py Improved the clarity of some existing explanations as well and updated formatting to match updated style. * 💄 Sort __all__ in file head alphabetically Matches order of functions in file. Co-authored-by: Darylgolden --- manim/utils/iterables.py | 428 ++++++++++++++++++++++++++++++--------- 1 file changed, 335 insertions(+), 93 deletions(-) diff --git a/manim/utils/iterables.py b/manim/utils/iterables.py index 0984b75900..51a9a6ff23 100644 --- a/manim/utils/iterables.py +++ b/manim/utils/iterables.py @@ -3,110 +3,86 @@ from __future__ import annotations __all__ = [ - "remove_list_redundancies", - "list_update", - "list_difference_update", - "all_elements_are_instances", "adjacent_n_tuples", "adjacent_pairs", - "tuplify", - "stretch_array_to_length", + "all_elements_are_instances", + "concatenate_lists", + "list_difference_update", + "list_update", + "listify", "make_even", "make_even_by_cycling", + "remove_list_redundancies", "remove_nones", - "concatenate_lists", - "listify", + "stretch_array_to_length", + "tuplify", ] - import itertools as it +from typing import Any, Callable, Collection, Generator, Iterable, Reversible, Sequence import numpy as np -def resize_array(nparray, length): - if len(nparray) == length: - return nparray - return np.resize(nparray, (length, *nparray.shape[1:])) +def adjacent_n_tuples(objects: Sequence, n: int) -> zip: + """Returns the Sequence objects cyclically split into n length tuples. + See Also + -------- + adjacent_pairs : alias with n=2 -def resize_preserving_order(nparray, length): - if len(nparray) == 0: - return np.zeros((length, *nparray.shape[1:])) - if len(nparray) == length: - return nparray - indices = np.arange(length) * len(nparray) // length - return nparray[indices] - - -def resize_with_interpolation(nparray, length): - if len(nparray) == length: - return nparray - cont_indices = np.linspace(0, len(nparray) - 1, length) - return np.array( - [ - (1 - a) * nparray[lh] + a * nparray[rh] - for ci in cont_indices - for lh, rh, a in [(int(ci), int(np.ceil(ci)), ci % 1)] - ], - ) + Examples + -------- + Normal usage:: + list(adjacent_n_tuples([1, 2, 3, 4], 2)) + # returns [(1, 2), (2, 3), (3, 4), (4, 1)] -def remove_list_redundancies(lst): - """ - Used instead of list(set(l)) to maintain order - Keeps the last occurrence of each element + list(adjacent_n_tuples([1, 2, 3, 4], 3)) + # returns [(1, 2, 3), (2, 3, 4), (3, 4, 1), (4, 1, 2)] """ - reversed_result = [] - used = set() - for x in reversed(lst): - if x not in used: - reversed_result.append(x) - used.add(x) - reversed_result.reverse() - return reversed_result - - -def list_update(l1, l2): - """ - Used instead of list(set(l1).update(l2)) to maintain order, - making sure duplicates are removed from l1, not l2. - """ - return [e for e in l1 if e not in l2] + list(l2) - - -def list_difference_update(l1, l2): - return [e for e in l1 if e not in l2] - + return zip(*([*objects[k:], *objects[:k]] for k in range(n))) -def all_elements_are_instances(iterable, Class): - return all([isinstance(e, Class) for e in iterable]) +def adjacent_pairs(objects: Sequence) -> zip: + """Alias for ``adjacent_n_tuples(objects, 2)``. -def adjacent_n_tuples(objects, n): - return zip(*([*objects[k:], *objects[:k]] for k in range(n))) + See Also + -------- + adjacent_n_tuples + Examples + -------- + Normal usage:: -def adjacent_pairs(objects): + list(adjacent_pairs([1, 2, 3, 4])) + # returns [(1, 2), (2, 3), (3, 4), (4, 1)] + """ return adjacent_n_tuples(objects, 2) -def tuplify(obj): - if isinstance(obj, str): - return (obj,) - try: - return tuple(obj) - except TypeError: - return (obj,) +def all_elements_are_instances(iterable: Iterable, Class) -> bool: + """Returns ``True`` if all elements of iterable are instances of Class. + False otherwise. + """ + return all([isinstance(e, Class) for e in iterable]) -def batch_by_property(items, property_func): - """ - Takes in a list, and returns a list of tuples, (batch, prop) +def batch_by_property( + items: Sequence, property_func: Callable +) -> list[tuple[list, Any]]: + """Takes in a Sequence, and returns a list of tuples, (batch, prop) such that all items in a batch have the same output when - put into property_func, and such that chaining all these - batches together would give the original list (i.e. order is - preserved) + put into the Callable property_func, and such that chaining all these + batches together would give the original Sequence (i.e. order is + preserved). + + Examples + -------- + Normal usage:: + + batch_by_property([(1, 2), (3, 4), (5, 6, 7), (8, 9)], len) + # returns [([(1, 2), (3, 4)], 2), ([(5, 6, 7)], 3), ([(8, 9)], 2)] """ batch_prop_pairs = [] curr_batch = [] @@ -127,7 +103,58 @@ def batch_by_property(items, property_func): return batch_prop_pairs -def listify(obj): +def concatenate_lists(*list_of_lists: Iterable) -> list: + """Combines the Iterables provided as arguments into one list. + + Examples + -------- + Normal usage:: + + concatenate_lists([1, 2], [3, 4], [5]) + # returns [1, 2, 3, 4, 5] + """ + return [item for lst in list_of_lists for item in lst] + + +def list_difference_update(l1: Iterable, l2: Iterable) -> list: + """Returns a list containing all the elements of l1 not in l2. + + Examples + -------- + Normal usage:: + + list_difference_update([1, 2, 3, 4], [2, 4]) + # returns [1, 3] + """ + return [e for e in l1 if e not in l2] + + +def list_update(l1: Iterable, l2: Iterable) -> list: + """Used instead of ``set.update()`` to maintain order, + making sure duplicates are removed from l1, not l2. + Removes overlap of l1 and l2 and then concatenates l2 unchanged. + + Examples + -------- + Normal usage:: + + list_update([1, 2, 3], [2, 4, 4]) + # returns [1, 3, 2, 4, 4] + """ + return [e for e in l1 if e not in l2] + list(l2) + + +def listify(obj) -> list: + """Converts obj to a list intelligently. + + Examples + -------- + Normal usage:: + + listify('str') # ['str'] + listify((1, 2)) # [1, 2] + listify(len) # [] + """ if isinstance(obj, str): return [obj] try: @@ -136,16 +163,24 @@ def listify(obj): return [obj] -def stretch_array_to_length(nparray, length): - curr_len = len(nparray) - if curr_len > length: - raise Warning("Trying to stretch array to a length shorter than its own") - indices = np.arange(length) / float(length) - indices *= curr_len - return nparray[indices.astype("int")] +def make_even(iterable_1: Iterable, iterable_2: Iterable) -> tuple[list, list]: + """Extends the shorter of the two iterables with duplicate values until its + length is equal to the longer iterable (favours earlier elements). + + See Also + -------- + make_even_by_cycling : cycles elements instead of favouring earlier ones + Examples + -------- + Normal usage:: -def make_even(iterable_1, iterable_2): + make_even([1, 2], [3, 4, 5, 6]) + ([1, 1, 2, 2], [3, 4, 5, 6]) + + make_even([1, 2], [3, 4, 5, 6, 7]) + # ([1, 1, 1, 2, 2], [3, 4, 5, 6, 7]) + """ list_1, list_2 = list(iterable_1), list(iterable_2) length = max(len(list_1), len(list_2)) return ( @@ -154,28 +189,235 @@ def make_even(iterable_1, iterable_2): ) -def make_even_by_cycling(iterable_1, iterable_2): +def make_even_by_cycling( + iterable_1: Collection, iterable_2: Collection +) -> tuple[list, list]: + """Extends the shorter of the two iterables with duplicate values until its + length is equal to the longer iterable (cycles over shorter iterable). + + See Also + -------- + make_even : favours earlier elements instead of cycling them + + Examples + -------- + Normal usage:: + + make_even_by_cycling([1, 2], [3, 4, 5, 6]) + ([1, 2, 1, 2], [3, 4, 5, 6]) + + make_even_by_cycling([1, 2], [3, 4, 5, 6, 7]) + # ([1, 2, 1, 2, 1], [3, 4, 5, 6, 7]) + """ length = max(len(iterable_1), len(iterable_2)) cycle1 = it.cycle(iterable_1) cycle2 = it.cycle(iterable_2) return ( - [next(cycle1) for x in range(length)], - [next(cycle2) for x in range(length)], + [next(cycle1) for _ in range(length)], + [next(cycle2) for _ in range(length)], ) -def remove_nones(sequence): +def remove_list_redundancies(lst: Reversible) -> list: + """Used instead of ``list(set(l))`` to maintain order. + Keeps the last occurrence of each element. + """ + reversed_result = [] + used = set() + for x in reversed(lst): + if x not in used: + reversed_result.append(x) + used.add(x) + reversed_result.reverse() + return reversed_result + + +def remove_nones(sequence: Iterable) -> list: + """Removes elements where bool(x) evaluates to False. + + Examples + -------- + Normal usage:: + + remove_nones(['m', '', 'l', 0, 42, False, True]) + # ['m', 'l', 42, True] + """ + # Note this is redundant with it.chain return [x for x in sequence if x] -# Note this is redundant with it.chain +def resize_array(nparray: np.ndarray, length: int) -> np.ndarray: + """Extends/truncates nparray so that ``len(result) == length``. + The elements of nparray are cycled to achieve the desired length. + See Also + -------- + resize_preserving_order : favours earlier elements instead of cycling them + make_even_by_cycling : similar cycling behaviour for balancing 2 iterables -def concatenate_lists(*list_of_lists): - return [item for lst in list_of_lists for item in lst] + Examples + -------- + Normal usage:: + + nparray = np.array([[1, 2], + [3, 4]]) + + resize_array(nparray, 1) + # np.array([[1, 2]]) + + resize_array(nparray, 3) + # np.array([[1, 2], + # [3, 4], + # [1, 2]]) + + nparray = np.array([[[1, 2],[3, 4]]]) + resize_array(nparray, 2) + # np.array([[[1, 2], [3, 4]], + # [[1, 2], [3, 4]]]) + """ + if len(nparray) == length: + return nparray + return np.resize(nparray, (length, *nparray.shape[1:])) + + +def resize_preserving_order(nparray: np.ndarray, length: int) -> np.ndarray: + """Extends/truncates nparray so that ``len(result) == length``. + The elements of nparray are duplicated to achieve the desired length + (favours earlier elements). + + Constructs a zeroes array of length if nparray is empty. + + See Also + -------- + resize_array : cycles elements instead of favouring earlier ones + make_even : similar earlier-favouring behaviour for balancing 2 iterables + + Examples + -------- + Normal usage:: + + resize_preserving_order(np.array([]), 5) + # np.array([0., 0., 0., 0., 0.]) + nparray = np.array([[1, 2], + [3, 4]]) -def uniq_chain(*args): + resize_preserving_order(nparray, 1) + # np.array([[1, 2]]) + + resize_preserving_order(nparray, 3) + # np.array([[1, 2], + # [1, 2], + # [3, 4]]) + """ + if len(nparray) == 0: + return np.zeros((length, *nparray.shape[1:])) + if len(nparray) == length: + return nparray + indices = np.arange(length) * len(nparray) // length + return nparray[indices] + + +def resize_with_interpolation(nparray: np.ndarray, length: int) -> np.ndarray: + """Extends/truncates nparray so that ``len(result) == length``. + New elements are interpolated to achieve the desired length. + + Note that if nparray's length changes, its dtype may too + (e.g. int -> float: see Examples) + + See Also + -------- + resize_array : cycles elements instead of interpolating + resize_preserving_order : favours earlier elements instead of interpolating + + Examples + -------- + Normal usage:: + + nparray = np.array([[1, 2], + [3, 4]]) + + resize_with_interpolation(nparray, 1) + # np.array([[1., 2.]]) + + resize_with_interpolation(nparray, 4) + # np.array([[1. , 2. ], + # [1.66666667, 2.66666667], + # [2.33333333, 3.33333333], + # [3. , 4. ]]) + + nparray = np.array([[[1, 2],[3, 4]]]) + resize_with_interpolation(nparray, 3) + # np.array([[[1., 2.], [3., 4.]], + # [[1., 2.], [3., 4.]], + # [[1., 2.], [3., 4.]]]) + + nparray = np.array([[1, 2], [3, 4], [5, 6]]) + resize_with_interpolation(nparray, 4) + # np.array([[1. , 2. ], + # [2.33333333, 3.33333333], + # [3.66666667, 4.66666667], + # [5. , 6. ]]) + + nparray = np.array([[1, 2], [3, 4], [1, 2]]) + resize_with_interpolation(nparray, 4) + # np.array([[1. , 2. ], + # [2.33333333, 3.33333333], + # [2.33333333, 3.33333333], + # [1. , 2. ]]) + """ + if len(nparray) == length: + return nparray + cont_indices = np.linspace(0, len(nparray) - 1, length) + return np.array( + [ + (1 - a) * nparray[lh] + a * nparray[rh] + for ci in cont_indices + for lh, rh, a in [(int(ci), int(np.ceil(ci)), ci % 1)] + ], + ) + + +def stretch_array_to_length(nparray: np.ndarray, length: int) -> np.ndarray: + # todo: is this the same as resize_preserving_order()? + curr_len = len(nparray) + if curr_len > length: + raise Warning("Trying to stretch array to a length shorter than its own") + indices = np.arange(length) / float(length) + indices *= curr_len + return nparray[indices.astype(int)] + + +def tuplify(obj) -> tuple: + """Converts obj to a tuple intelligently. + + Examples + -------- + Normal usage:: + + tuplify('str') # ('str',) + tuplify([1, 2]) # (1, 2) + tuplify(len) # (,) + """ + if isinstance(obj, str): + return (obj,) + try: + return tuple(obj) + except TypeError: + return (obj,) + + +def uniq_chain(*args: Iterable) -> Generator: + """Returns a generator that yields all unique elements of the Iterables + provided via args in the order provided. + + Examples + -------- + Normal usage:: + + uniq_chain([1, 2], [2, 3], [1, 4, 4]) + # yields 1, 2, 3, 4 + """ unique_items = set() for x in it.chain(*args): if x in unique_items: From 842a57eac9180183b8ba3db0a58a950e5cf64564 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sun, 10 Apr 2022 10:36:19 +0200 Subject: [PATCH 015/555] Added documentation for scene updater functions (#2663) * added scene updater documentation * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/scene/scene.py | 61 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 2fc4add87e..397fab6a8a 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -345,7 +345,22 @@ def update_meshes(self, dt): for mesh in obj.get_family(): mesh.update(dt) - def update_self(self, dt): + def update_self(self, dt: float): + """Run all scene updater functions. + + Among all types of update functions (mobject updaters, mesh updaters, + scene updaters), scene update functions are called last. + + Parameters + ---------- + dt + Scene time since last update. + + See Also + -------- + :meth:`.Scene.add_updater` + :meth:`.Scene.remove_updater` + """ for func in self.updaters: func(dt) @@ -503,10 +518,50 @@ def remove(self, *mobjects): self.restructure_mobjects(mobjects, list_name, False) return self - def add_updater(self, func): + def add_updater(self, func: Callable[[float], None]) -> None: + """Add an update function to the scene. + + The scene updater functions are run every frame, + and they are the last type of updaters to run. + + .. WARNING:: + + When using the Cairo renderer, scene updaters that + modify mobjects are not detected in the same way + that mobject updaters are. To be more concrete, + a mobject only modified via a scene updater will + not necessarily be added to the list of *moving + mobjects* and thus might not be updated every frame. + + TL;DR: Use mobject updaters to update mobjects. + + Parameters + ---------- + func + The updater function. It takes a float, which is the + time difference since the last update (usually equal + to the frame rate). + + See also + -------- + :meth:`.Scene.remove_updater` + :meth:`.Scene.update_self` + """ self.updaters.append(func) - def remove_updater(self, func): + def remove_updater(self, func: Callable[[float], None]) -> None: + """Remove an update function from the scene. + + Parameters + ---------- + func + The updater function to be removed. + + See also + -------- + :meth:`.Scene.add_updater` + :meth:`.Scene.update_self` + """ self.updaters = [f for f in self.updaters if f is not func] def restructure_mobjects( From 94a984e1839f0ae13804547d45aea472d884cf6f Mon Sep 17 00:00:00 2001 From: trickypr <23250792+trickypr@users.noreply.github.com> Date: Mon, 11 Apr 2022 05:45:06 +1000 Subject: [PATCH 016/555] Fix `assert_is_mobject_method` when using OpenGL (#2655) Co-authored-by: Benjamin Hackl --- manim/animation/updaters/mobject_update_utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manim/animation/updaters/mobject_update_utils.py b/manim/animation/updaters/mobject_update_utils.py index c039b04b8c..c77174c89c 100644 --- a/manim/animation/updaters/mobject_update_utils.py +++ b/manim/animation/updaters/mobject_update_utils.py @@ -20,12 +20,13 @@ from manim.constants import DEGREES, RIGHT from manim.mobject.mobject import Mobject +from manim.opengl import OpenGLMobject def assert_is_mobject_method(method): assert inspect.ismethod(method) mobject = method.__self__ - assert isinstance(mobject, Mobject) + assert isinstance(mobject, (Mobject, OpenGLMobject)) def always(method, *args, **kwargs): From 65a0fecfdaddce0e12cb14eba0608cecc4f4edbd Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sun, 10 Apr 2022 21:50:01 +0200 Subject: [PATCH 017/555] (re)set background color when initializing scene (#2668) --- manim/renderer/opengl_renderer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manim/renderer/opengl_renderer.py b/manim/renderer/opengl_renderer.py index 3490ac2c0d..5f368d900b 100644 --- a/manim/renderer/opengl_renderer.py +++ b/manim/renderer/opengl_renderer.py @@ -246,7 +246,7 @@ def __init__(self, file_writer_class=SceneFileWriter, skip_animations=False): # Initialize texture map. self.path_to_texture_id = {} - self._background_color = color_to_rgba(config["background_color"], 1.0) + self.background_color = config["background_color"] def init_scene(self, scene): self.partial_movie_files = [] @@ -255,6 +255,7 @@ def init_scene(self, scene): scene.__class__.__name__, ) self.scene = scene + self.background_color = config["background_color"] if not hasattr(self, "window"): if self.should_create_window(): from .opengl_renderer_window import Window From f73861e3581871c719e3131699e0111238a6d5e7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 13 Apr 2022 14:13:58 +0800 Subject: [PATCH 018/555] [pre-commit.ci] pre-commit autoupdate (#2670) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v4.1.0 → v4.2.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.1.0...v4.2.0) - [github.com/asottile/pyupgrade: v2.31.1 → v2.32.0](https://github.com/asottile/pyupgrade/compare/v2.31.1...v2.32.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3e230ffef4..a24b75f639 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ fail_fast: false exclude: ^(manim/grpc/gen/|docs/i18n/) repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.1.0 + rev: v4.2.0 hooks: - id: check-ast name: Validate Python @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v2.31.1 + rev: v2.32.0 hooks: - id: pyupgrade name: Update code to new python versions From b6311098df07c87f3c3991a3aa95847721c202d3 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 15 Apr 2022 21:53:21 +0200 Subject: [PATCH 019/555] Improved handling of attributes when using the ``.animate`` syntax (#2665) * apply all methods to original mobject after finishing _MethodBuilder animation * added test to check whether custom attributes are changed * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/animation/transform.py | 5 +++++ manim/mobject/mobject.py | 2 +- tests/test_scene_rendering/test_play_logic.py | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/manim/animation/transform.py b/manim/animation/transform.py index 22d2a65d18..624d36f004 100644 --- a/manim/animation/transform.py +++ b/manim/animation/transform.py @@ -360,6 +360,11 @@ def __init__(self, mobject, methods): self.methods = methods super().__init__(mobject) + def finish(self) -> None: + for method, method_args, method_kwargs in self.methods: + method.__func__(self.mobject, *method_args, **method_kwargs) + super().finish() + class ApplyMethod(Transform): """Animates a mobject by applying a method. diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 63869698ab..74bf285394 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -2783,7 +2783,6 @@ def __call__(self, **kwargs): def __getattr__(self, method_name): method = getattr(self.mobject.target, method_name) - self.methods.append(method) has_overridden_animation = hasattr(method, "_override_animate") if (self.is_chaining and has_overridden_animation) or self.overridden_animation: @@ -2801,6 +2800,7 @@ def update_target(*method_args, **method_kwargs): **method_kwargs, ) else: + self.methods.append([method, method_args, method_kwargs]) method(*method_args, **method_kwargs) return self diff --git a/tests/test_scene_rendering/test_play_logic.py b/tests/test_scene_rendering/test_play_logic.py index 7f996ff3f3..9a8e44bea1 100644 --- a/tests/test_scene_rendering/test_play_logic.py +++ b/tests/test_scene_rendering/test_play_logic.py @@ -101,3 +101,19 @@ def test_t_values_save_last_frame(using_temp_config): scene.update_to_time = Mock() scene.render() scene.update_to_time.assert_called_once_with(1) + + +def test_animate_with_changed_custom_attribute(using_temp_config): + """Test that animating the change of a custom attribute + using the animate syntax works correctly. + """ + + class CustomAnimateScene(Scene): + def construct(self): + vt = ValueTracker(0) + vt.custom_attribute = "hello" + self.play(vt.animate.set_value(42).set(custom_attribute="world")) + assert vt.get_value() == 42 + assert vt.custom_attribute == "world" + + CustomAnimateScene().render() From 3413ca226fa3e893ea194a91ce028e6947f878ce Mon Sep 17 00:00:00 2001 From: Bailey Powers <89673452+Pow3r5@users.noreply.github.com> Date: Fri, 15 Apr 2022 17:21:45 -0400 Subject: [PATCH 020/555] Copyedited Documentation (#2640) * Copyedited Documentation Changelog / Overview Reviewed tutorials\configurations.rst. Edited simple mistakes such as Manim not being capitalized and commas. Motivation and Explanation: Why and how do your changes improve the library? My motivation was to start getting involved in the open source community. This improves the library as it increases readability and professionalism. Links to added or changed documentation pages Further Information and Comments Closes #1401 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Apply suggestions from code review Co-authored-by: Darylgolden Co-authored-by: Luca <30503695+tameTNT@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl Co-authored-by: Darylgolden Co-authored-by: Luca <30503695+tameTNT@users.noreply.github.com> --- docs/source/tutorials/configuration.rst | 48 ++++++++++++------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/docs/source/tutorials/configuration.rst b/docs/source/tutorials/configuration.rst index 22d9ad9822..46c32cbda2 100644 --- a/docs/source/tutorials/configuration.rst +++ b/docs/source/tutorials/configuration.rst @@ -8,7 +8,7 @@ can be configured programmatically via `the ManimConfig class`_, at the time of command invocation via `command-line arguments`_, or at the time the library is first imported via `the config files`_. -The most common, simplest and recommended way to set the configure Manim is +The most common, simplest, and recommended way to configure Manim is via the command-line interface (CLI), which is described directly below. Command-line arguments @@ -21,7 +21,7 @@ It is used with the following arguments: .. program-output:: manim render --help :ellipsis: 9 -However, since manim defaults to the :code:`render` command whenever no command +However, since Manim defaults to the :code:`render` command whenever no command is specified, the following form is far more common and can be used instead: .. code-block:: bash @@ -34,7 +34,7 @@ An example of using the above form is: manim -qm file.py SceneOne -This asks manim to search for a Scene class called :code:`SceneOne` inside the +This asks Manim to search for a Scene class called :code:`SceneOne` inside the file ``file.py`` and render it with medium quality (specified by the ``-qm`` flag). Another frequently used flag is ``-p`` ("preview"), which makes manim @@ -74,7 +74,7 @@ A list of all CLI flags The ManimConfig class ********************* -The most direct way of configuring manim is through the global ``config`` object, +The most direct way of configuring Manim is through the global ``config`` object, which is an instance of :class:`.ManimConfig`. Each property of this class is a config option that can be accessed either with standard attribute syntax or with dict-like syntax: @@ -139,22 +139,22 @@ rendered in our documentation with a reference frame. The config files **************** -As the last example shows, executing manim from the command-line may involve -using many flags at the same time. This may become a nuisance if you must -execute the same script many times in a short time period, for example when -making small incremental tweaks to your scene script. For this reason, manim +As the last example shows, executing Manim from the command line may involve +using many flags simultaneously. This may become a nuisance if you must +execute the same script many times in a short time period, for example, when +making small incremental tweaks to your scene script. For this reason, Manim can also be configured using a configuration file. A configuration file is a file ending with the suffix ``.cfg``. To use a local configuration file when rendering your scene, you must create a -file with name ``manim.cfg`` in the same directory as your scene code. +file with the name ``manim.cfg`` in the same directory as your scene code. -.. warning:: The config file **must** be named ``manim.cfg``. Currently, manim +.. warning:: The config file **must** be named ``manim.cfg``. Currently, Manim does not support config files with any other name. The config file must start with the section header ``[CLI]``. The -configuration options under this header have the same name as the CLI flags, -and serve the same purpose. Take for example the following config file. +configuration options under this header have the same name as the CLI flags +and serve the same purpose. Take, for example, the following config file. .. code-block:: ini @@ -188,8 +188,8 @@ is in the same directory as , Since config files are meant to replace CLI flags, all CLI flags can be set via a config file. Moreover, any config option can be set via a config file, -whether or not it has an associated CLI flag. For a list of all CLI flags and -all config options, see the bottom of this document. +whether or not it has an associated CLI flag. See the bottom of this document +for a list of all CLI flags and config options. Manim will look for a ``manim.cfg`` config file in the same directory as the file being rendered, and **not** in the directory of execution. For example, @@ -215,7 +215,7 @@ As explained in the previous section, a :code:`manim.cfg` config file only affects the scene scripts in its same folder. However, the user may also create a special config file that will apply to all scenes rendered by that user. This is referred to as the **user-wide** config file, and it will apply -regardless of where manim is executed from, and regardless of where the scene +regardless of where Manim is executed from, and regardless of where the scene script is stored. The user-wide config file lives in a special folder, depending on the operating @@ -235,14 +235,14 @@ Here, :code:`UserDirectory` is the user's home folder. .. warning:: Do not store scene scripts in the same folder as the user-wide config file. In this case, the behavior is undefined. -Whenever you use manim from anywhere in the system, manim will look for a +Whenever you use Manim from anywhere in the system, Manim will look for a user-wide config file and read its configuration. Cascading config files ====================== -What happens if you execute manim and it finds both a folder-wide config file +What happens if you execute Manim and it finds both a folder-wide config file and a user-wide config file? Manim will read both files, but if they are incompatible, **the folder-wide file takes precedence**. @@ -280,7 +280,7 @@ executing manim -o myscene -c RED SceneName -There is also a **library-wide** config file that determines manim's default +There is also a **library-wide** config file that determines Manim's default behavior and applies to every user of the library. It has the least precedence, so any config options in the user-wide and any folder-wide files will override the library-wide file. This is referred to as the *cascading* @@ -301,19 +301,19 @@ Order of operations -With so many different ways of configuring manim, it can be difficult to know -when each config option is being set. In fact, this will depend on how manim +With so many different ways of configuring Manim, it can be difficult to know +when each config option is being set. In fact, this will depend on how Manim is being used. -If manim is imported from a module, then the configuration system will follow +If Manim is imported from a module, then the configuration system will follow these steps: 1. The library-wide config file is loaded. -2. The user-wide and folder-wide files are loaded, if they exist. +2. The user-wide and folder-wide files are loaded if they exist. 3. All files found in the previous two steps are parsed in a single :class:`ConfigParser` object, called ``parser``. This is where *cascading* happens. -4. :class:`logging.Logger` is instantiated to create manim's global ``logger`` +4. :class:`logging.Logger` is instantiated to create Manim's global ``logger`` object. It is configured using the "logger" section of the parser, i.e. ``parser['logger']``. 5. :class:`ManimConfig` is instantiated to create the global ``config`` object. @@ -321,7 +321,7 @@ these steps: :meth:`ManimConfig.digest_parser`. 7. Both ``logger`` and ``config`` are exposed to the user. -If manim is being invoked from the command-line, all of the previous steps +If Manim is being invoked from the command line, all of the previous steps happen, and are complemented by: 8. The CLI flags are parsed and fed into ``config`` via From 7f464cc5d3e155f44797f8138fdc9334a234c3fb Mon Sep 17 00:00:00 2001 From: sparshg <43041139+sparshg@users.noreply.github.com> Date: Sat, 16 Apr 2022 03:42:44 +0530 Subject: [PATCH 021/555] Fix background lines drawn twice in `NumberPlane` (#2634) * fix axis lines drawn twice in numberplane * simplified and fixed test, added comments * fixed background lines drawn when both x_min, x_max are negative * regenerated control data of failing tests * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/graphing/coordinate_systems.py | 5 +++-- tests/test_coordinate_system.py | 20 +++++++++--------- .../coordinate_system/line_graph.npz | Bin 11632 -> 11642 bytes .../coordinate_system/number_plane.npz | Bin 10291 -> 10291 bytes .../coordinate_system/number_plane_log.npz | Bin 11899 -> 12038 bytes .../plot/plot_derivative_graph.npz | Bin 31740 -> 31734 bytes .../vector_scene/vector_to_coords.npz | Bin 235561 -> 235675 bytes 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 5e35303d96..90afe66aa0 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -2422,8 +2422,9 @@ def _get_lines_parallel_to_axis( # min/max used in case range does not include 0. i.e. if (2,6): # the range becomes (0,4), not (0,6). ranges = ( - np.arange(0, min(x_max - x_min, x_max), step), - np.arange(0, max(x_min - x_max, x_min), -step), + [0], + np.arange(step, min(x_max - x_min, x_max), step), + np.arange(-step, max(x_min - x_max, x_min), -step), ) for inputs in ranges: diff --git a/tests/test_coordinate_system.py b/tests/test_coordinate_system.py index 1695f5c549..8a359d7a1d 100644 --- a/tests/test_coordinate_system.py +++ b/tests/test_coordinate_system.py @@ -55,19 +55,16 @@ def test_NumberPlane(): pos_y_range = (2, 6) neg_y_range = (-6, -2) - x_vals = [0, 1.5, 2, 2.8, 4, 6.25] - y_vals = [2, 5, 4.25, 6, 4.5, 2.75] - testing_data = [ - (pos_x_range, pos_y_range, x_vals, y_vals), - (pos_x_range, neg_y_range, x_vals, [-v for v in y_vals]), - (neg_x_range, pos_y_range, [-v for v in x_vals], y_vals), - (neg_x_range, neg_y_range, [-v for v in x_vals], [-v for v in y_vals]), + (pos_x_range, pos_y_range), + (pos_x_range, neg_y_range), + (neg_x_range, pos_y_range), + (neg_x_range, neg_y_range), ] for test_data in testing_data: - x_range, y_range, x_vals, y_vals = test_data + x_range, y_range = test_data x_start, x_end = x_range y_start, y_end = y_range @@ -89,8 +86,11 @@ def test_NumberPlane(): assert len(plane.x_lines) == num_x_lines plane = NumberPlane((-5, 5, 0.5), (-8, 8, 2)) # <- test for different step values - assert len(plane.x_lines) == 8 - assert len(plane.y_lines) == 20 + # horizontal lines: -6 -4, -2, 0, 2, 4, 6 + assert len(plane.x_lines) == 7 + # vertical lines: 0, +-0.5, +-1, +-1.5, +-2, +-2.5, + # +-3, +-3.5, +-4, +-4.5 + assert len(plane.y_lines) == 19 def test_point_to_coords(): diff --git a/tests/test_graphical_units/control_data/coordinate_system/line_graph.npz b/tests/test_graphical_units/control_data/coordinate_system/line_graph.npz index ad2a00d3604a45534f5fc17da78a43ed1b981c63..077dbbd22a166de9098a1d3985111f4f0b7dab75 100644 GIT binary patch literal 11642 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 Cy?Lzw literal 11632 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 diff --git a/tests/test_graphical_units/control_data/coordinate_system/number_plane.npz b/tests/test_graphical_units/control_data/coordinate_system/number_plane.npz index 3ca51a4adf43263a7b6788f7c7db694ab696619f..afb647aba4a1fcf0e1a4a2e522ef31126f939b64 100644 GIT binary patch literal 10291 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 literal 10291 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 O1^C$x{ysN9^!MMXiSQ=? diff --git a/tests/test_graphical_units/control_data/coordinate_system/number_plane_log.npz b/tests/test_graphical_units/control_data/coordinate_system/number_plane_log.npz index dc9c4f0a6808f38e707fcba9b7c0f1522b1dff00..894f2ebb6d93b1cb69d379b182e6c8276d8c2925 100644 GIT binary patch literal 12038 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 KS-sT9{(k|fG5OH| literal 11899 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 diff --git a/tests/test_graphical_units/control_data/plot/plot_derivative_graph.npz b/tests/test_graphical_units/control_data/plot/plot_derivative_graph.npz index 7101141defe33dde21e49f04258e6cbee17d2e27..bf393eb228aa881a5c285f8c53c79675bf5a2c6d 100644 GIT binary patch literal 31734 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

@(i3qS^AB{ev*RRC~{Mie80K|thbKq_~ynE(N)g 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

  • >d$phkQV&3CeJzI8Ov4w+X{Me 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

    P_o2G0RFF3Rp9!6uQ`&w!79AkWo{0XZI<%l_ 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

    ^)plxSfRjVbh_-t$JI6uk9D1K^ZGOWi%mO#Us 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 From 2964326040f12448ec14135d476f0fae82ef29dd Mon Sep 17 00:00:00 2001 From: Ryan McCauley <32387857+ryanmccauley211@users.noreply.github.com> Date: Sat, 16 Apr 2022 22:30:38 +0100 Subject: [PATCH 022/555] Fix opengl finish transform (#2676) --- manim/mobject/opengl/opengl_mobject.py | 2 +- .../opengl/test_play_logic_opengl.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 9aae1a5765..e75b363e45 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -2729,7 +2729,6 @@ def __call__(self, **kwargs): def __getattr__(self, method_name): method = getattr(self.mobject.target, method_name) - self.methods.append(method) has_overridden_animation = hasattr(method, "_override_animate") if (self.is_chaining and has_overridden_animation) or self.overridden_animation: @@ -2747,6 +2746,7 @@ def update_target(*method_args, **method_kwargs): **method_kwargs, ) else: + self.methods.append([method, method_args, method_kwargs]) method(*method_args, **method_kwargs) return self diff --git a/tests/test_scene_rendering/opengl/test_play_logic_opengl.py b/tests/test_scene_rendering/opengl/test_play_logic_opengl.py index 4a3f634ed5..5e51aee926 100644 --- a/tests/test_scene_rendering/opengl/test_play_logic_opengl.py +++ b/tests/test_scene_rendering/opengl/test_play_logic_opengl.py @@ -101,3 +101,19 @@ def test_t_values_save_last_frame(using_temp_opengl_config): scene.update_to_time = Mock() scene.render() scene.update_to_time.assert_called_once_with(1) + + +def test_animate_with_changed_custom_attribute(using_temp_opengl_config): + """Test that animating the change of a custom attribute + using the animate syntax works correctly. + """ + + class CustomAnimateScene(Scene): + def construct(self): + vt = ValueTracker(0) + vt.custom_attribute = "hello" + self.play(vt.animate.set_value(42).set(custom_attribute="world")) + assert vt.get_value() == 42 + assert vt.custom_attribute == "world" + + CustomAnimateScene().render() From f43f54365ab99cf973b0d55afba6a94f59f7cfc3 Mon Sep 17 00:00:00 2001 From: dawn*squirryl <35942162+dawnsqrl@users.noreply.github.com> Date: Sun, 17 Apr 2022 05:40:45 +0800 Subject: [PATCH 023/555] Fix arguments of overridden `set_style` for `BackgroundRectangle` (#2658) * Sync `set_style` arguments with base * Minimize set_style arguments; add info log * Remove excessive import * more verbose logger output, added test * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/geometry/shape_matchers.py | 17 ++++++++--------- tests/test_unit_geometry.py | 19 ++++++++++++++++++- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/manim/mobject/geometry/shape_matchers.py b/manim/mobject/geometry/shape_matchers.py index 5aad303090..4376213ef9 100644 --- a/manim/mobject/geometry/shape_matchers.py +++ b/manim/mobject/geometry/shape_matchers.py @@ -4,7 +4,7 @@ __all__ = ["SurroundingRectangle", "BackgroundRectangle", "Cross", "Underline"] -from manim import config +from manim import config, logger from manim.constants import * from manim.mobject.geometry.line import Line from manim.mobject.geometry.polygram import RoundedRectangle @@ -104,21 +104,20 @@ def pointwise_become_partial(self, mobject, a, b): self.set_fill(opacity=b * self.original_fill_opacity) return self - def set_style( - self, - stroke_color=None, - stroke_width=None, - fill_color=None, - fill_opacity=None, - family=True, - ): + def set_style(self, fill_opacity, **kwargs): # Unchangeable style, except for fill_opacity + # All other style arguments are ignored super().set_style( stroke_color=BLACK, stroke_width=0, fill_color=BLACK, fill_opacity=fill_opacity, ) + if len(kwargs) > 0: + logger.info( + "Argument %s is ignored in BackgroundRectangle.set_style.", + kwargs, + ) return self def get_fill_color(self): diff --git a/tests/test_unit_geometry.py b/tests/test_unit_geometry.py index b85cc08056..23b944ece2 100644 --- a/tests/test_unit_geometry.py +++ b/tests/test_unit_geometry.py @@ -1,9 +1,26 @@ from __future__ import annotations +import logging + import numpy as np -from manim import Sector +logger = logging.getLogger(__name__) + +from manim import BackgroundRectangle, Circle, Sector def test_get_arc_center(): assert np.all(Sector(arc_center=[1, 2, 0]).get_arc_center() == [1, 2, 0]) + + +def test_BackgroundRectangle(caplog): + caplog.set_level(logging.INFO) + c = Circle() + bg = BackgroundRectangle(c) + bg.set_style(fill_opacity=0.42) + assert bg.get_fill_opacity() == 0.42 + bg.set_style(fill_opacity=1, hello="world") + assert ( + "Argument {'hello': 'world'} is ignored in BackgroundRectangle.set_style." + in caplog.text + ) From c4a72083f9cf3b1c9fc9714b90eae5e9eb30029f Mon Sep 17 00:00:00 2001 From: David Millard Date: Sun, 17 Apr 2022 13:23:28 -0700 Subject: [PATCH 024/555] Handle user-defined centers for Wiggle animation (#2648) * Handle user-defined centers for Wiggle animation * Add unit tests for wiggle attributes * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/animation/indication.py | 2 ++ tests/test_graphical_units/test_indication.py | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/manim/animation/indication.py b/manim/animation/indication.py index 55bf6b409c..53f8b8ad69 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -535,10 +535,12 @@ def __init__( def get_scale_about_point(self) -> np.ndarray: if self.scale_about_point is None: return self.mobject.get_center() + return self.scale_about_point def get_rotate_about_point(self) -> np.ndarray: if self.rotate_about_point is None: return self.mobject.get_center() + return self.rotate_about_point def interpolate_submobject( self, diff --git a/tests/test_graphical_units/test_indication.py b/tests/test_graphical_units/test_indication.py index f134f4e9c3..47db2e49a7 100644 --- a/tests/test_graphical_units/test_indication.py +++ b/tests/test_graphical_units/test_indication.py @@ -61,3 +61,14 @@ def test_Wiggle(scene): square = Square() scene.add(square) scene.play(Wiggle(square)) + + +def test_Wiggle_custom_about_points(): + square = Square() + wiggle = Wiggle( + square, + scale_about_point=[1.0, 2.0, 3.0], + rotate_about_point=[4.0, 5.0, 6.0], + ) + assert wiggle.get_scale_about_point() == [1.0, 2.0, 3.0] + assert wiggle.get_rotate_about_point() == [4.0, 5.0, 6.0] From d5f08a5d2382e88b855abcd57ef2abe0e38ceca0 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Mon, 18 Apr 2022 15:43:56 +0530 Subject: [PATCH 025/555] Require `backports-cached-property` only for Python < 3.8 (#2678) Fixes https://github.com/ManimCommunity/manim/issues/2677 --- poetry.lock | 354 ++++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 189 insertions(+), 167 deletions(-) diff --git a/poetry.lock b/poetry.lock index c35970221f..819e1e600c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -26,7 +26,7 @@ trio = ["trio (>=0.16)"] [[package]] name = "appnope" -version = "0.1.2" +version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" category = "main" optional = true @@ -137,11 +137,11 @@ python-versions = ">=3.6.0" [[package]] name = "beautifulsoup4" -version = "4.10.0" +version = "4.11.1" description = "Screen-scraping library" category = "main" optional = false -python-versions = ">3.0.0" +python-versions = ">=3.6.0" [package.dependencies] soupsieve = ">1.2" @@ -175,17 +175,20 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bleach" -version = "4.1.0" +version = "5.0.0" description = "An easy safelist-based HTML-sanitizing tool." category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -packaging = "*" six = ">=1.9.0" webencodings = "*" +[package.extras] +css = ["tinycss2 (>=1.1.0)"] +dev = ["pip-tools (==6.5.1)", "pytest (==7.1.1)", "flake8 (==4.0.1)", "tox (==3.24.5)", "sphinx (==4.3.2)", "twine (==4.0.0)", "wheel (==0.37.1)", "hashin (==0.17.0)", "black (==22.3.0)", "mypy (==0.942)"] + [[package]] name = "certifi" version = "2021.10.8" @@ -422,6 +425,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.extras] testing = ["pre-commit"] +[[package]] +name = "fastjsonschema" +version = "2.15.3" +description = "Fastest Python implementation of JSON schema" +category = "main" +optional = true +python-versions = "*" + +[package.extras] +devel = ["colorama", "jsonschema", "json-spec", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + [[package]] name = "filelock" version = "3.6.0" @@ -548,7 +562,7 @@ importlib-metadata = {version = ">=0.9", markers = "python_version < \"3.8\""} [[package]] name = "fonttools" -version = "4.31.2" +version = "4.32.0" description = "Tools to manipulate font files" category = "dev" optional = false @@ -661,7 +675,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [[package]] name = "importlib-resources" -version = "5.6.0" +version = "5.7.1" description = "Read resources from Python packages" category = "main" optional = true @@ -684,7 +698,7 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.11.0" +version = "6.13.0" description = "IPython Kernel for Jupyter" category = "main" optional = true @@ -697,6 +711,7 @@ ipython = ">=7.23.1" jupyter-client = ">=6.1.12" matplotlib-inline = ">=0.1" nest-asyncio = "*" +packaging = "*" psutil = "*" tornado = ">=6.1" traitlets = ">=5.1.0" @@ -830,7 +845,7 @@ format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jupyter-client" -version = "7.2.1" +version = "7.2.2" description = "Jupyter protocol implementation and client libraries" category = "main" optional = true @@ -892,7 +907,7 @@ test = ["coverage", "pytest (>=6.0)", "pytest-cov", "pytest-mock", "pytest-timeo [[package]] name = "jupyterlab" -version = "3.3.2" +version = "3.3.4" description = "JupyterLab computational environment" category = "main" optional = true @@ -909,19 +924,16 @@ packaging = "*" tornado = ">=6.1.0" [package.extras] -test = ["coverage", "pytest (>=6.0)", "pytest-cov", "pytest-console-scripts", "pytest-check-links (>=0.5)", "jupyterlab-server[test] (>=2.2,<3.0)", "requests", "requests-cache", "virtualenv", "check-manifest"] +test = ["check-manifest", "coverage", "jupyterlab-server", "pytest (>=6.0)", "pytest-cov", "pytest-console-scripts", "pytest-check-links (>=0.5)", "requests", "requests-cache", "virtualenv", "pre-commit"] ui-tests = ["build"] [[package]] name = "jupyterlab-pygments" -version = "0.1.2" +version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" category = "main" optional = true -python-versions = "*" - -[package.dependencies] -pygments = ">=2.4.1,<3" +python-versions = ">=3.7" [[package]] name = "jupyterlab-server" @@ -1131,7 +1143,7 @@ test = ["pytest", "pytest-tornasync", "pytest-console-scripts"] [[package]] name = "nbclient" -version = "0.5.13" +version = "0.6.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "main" optional = true @@ -1144,12 +1156,12 @@ nest-asyncio = "*" traitlets = ">=5.0.0" [package.extras] -sphinx = ["Sphinx (>=1.7)", "sphinx-book-theme", "mock", "moto", "myst-parser"] -test = ["ipython (<8.0.0)", "ipykernel", "ipywidgets (<8.0.0)", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "xmltodict", "black", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)"] +sphinx = ["mock", "moto", "myst-parser", "Sphinx (>=1.7)", "sphinx-book-theme"] +test = ["black", "check-manifest", "flake8", "ipykernel", "ipython (<8.0.0)", "ipywidgets (<8.0.0)", "mypy", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"] [[package]] name = "nbconvert" -version = "6.4.5" +version = "6.5.0" description = "Converting Jupyter Notebooks" category = "main" optional = true @@ -1160,41 +1172,42 @@ beautifulsoup4 = "*" bleach = "*" defusedxml = "*" entrypoints = ">=0.2.2" -jinja2 = ">=2.4" -jupyter-core = "*" +jinja2 = ">=3.0" +jupyter-core = ">=4.7" jupyterlab-pygments = "*" MarkupSafe = ">=2.0" mistune = ">=0.8.1,<2" -nbclient = ">=0.5.0,<0.6.0" -nbformat = ">=4.4" +nbclient = ">=0.5.0" +nbformat = ">=5.1" +packaging = "*" pandocfilters = ">=1.4.1" pygments = ">=2.4.1" -testpath = "*" +tinycss2 = "*" traitlets = ">=5.0" [package.extras] -all = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (>=1,<1.1)", "tornado (>=4.0)", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] +all = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)", "tornado (>=6.1)", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] docs = ["sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] -serve = ["tornado (>=4.0)"] -test = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (>=1,<1.1)"] +serve = ["tornado (>=6.1)"] +test = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)"] webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.2.0" +version = "5.3.0" description = "The Jupyter Notebook format" category = "main" optional = true python-versions = ">=3.7" [package.dependencies] -jsonschema = ">=2.4,<2.5.0 || >2.5.0" +fastjsonschema = "*" +jsonschema = ">=2.6" jupyter-core = "*" traitlets = ">=4.1" [package.extras] -fast = ["fastjsonschema"] -test = ["check-manifest", "fastjsonschema", "testpath", "pytest"] +test = ["check-manifest", "testpath", "pytest", "pre-commit"] [[package]] name = "nest-asyncio" @@ -1273,7 +1286,7 @@ test = ["pytest", "pytest-tornasync", "pytest-console-scripts"] [[package]] name = "numpy" -version = "1.21.5" +version = "1.21.6" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false @@ -1395,7 +1408,7 @@ virtualenv = ">=20.0.8" [[package]] name = "prometheus-client" -version = "0.13.1" +version = "0.14.1" description = "Python client for the Prometheus monitoring system." category = "main" optional = true @@ -1406,7 +1419,7 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.28" +version = "3.0.29" description = "Library for building powerful interactive command lines in Python" category = "main" optional = true @@ -1556,7 +1569,7 @@ tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] [[package]] name = "pylint" -version = "2.13.4" +version = "2.13.5" description = "python code static checker" category = "dev" optional = false @@ -1611,14 +1624,14 @@ pyobjc-core = ">=8.4.1" [[package]] name = "pyparsing" -version = "3.0.7" -description = "Python parsing module" +version = "3.0.8" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.6.8" [package.extras] -diagrams = ["jinja2", "railroad-diagrams"] +diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pyrr" @@ -1806,16 +1819,16 @@ docutils = ">=0.11,<1.0" [[package]] name = "rich" -version = "12.1.0" +version = "12.2.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false -python-versions = ">=3.6.2,<4.0.0" +python-versions = ">=3.6.3,<4.0.0" [package.dependencies] commonmark = ">=0.9.0,<0.10.0" pygments = ">=2.6.0,<3.0.0" -typing-extensions = {version = ">=3.7.4,<5.0", markers = "python_version < \"3.9\""} +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] @@ -1917,7 +1930,7 @@ python-versions = "*" [[package]] name = "soupsieve" -version = "2.3.1" +version = "2.3.2.post1" description = "A modern CSS selector implementation for Beautiful Soup." category = "main" optional = false @@ -2088,15 +2101,19 @@ tornado = ">=4" test = ["pytest"] [[package]] -name = "testpath" -version = "0.6.0" -description = "Test utilities for code working with files and commands" +name = "tinycss2" +version = "1.1.1" +description = "A tiny CSS parser" category = "main" optional = true -python-versions = ">= 3.5" +python-versions = ">=3.6" + +[package.dependencies] +webencodings = ">=0.4" [package.extras] -test = ["pytest"] +doc = ["sphinx", "sphinx-rtd-theme"] +test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"] [[package]] name = "toml" @@ -2152,7 +2169,7 @@ test = ["pytest"] [[package]] name = "typed-ast" -version = "1.5.2" +version = "1.5.3" description = "a fork of Python 2 and 3 ast modules with type comment support" category = "dev" optional = false @@ -2168,7 +2185,7 @@ python-versions = "*" [[package]] name = "types-docutils" -version = "0.18.0" +version = "0.18.2" description = "Typing stubs for docutils" category = "dev" optional = false @@ -2184,7 +2201,7 @@ python-versions = "*" [[package]] name = "types-protobuf" -version = "3.19.15" +version = "3.19.17" description = "Typing stubs for protobuf" category = "dev" optional = false @@ -2192,7 +2209,7 @@ python-versions = "*" [[package]] name = "types-pygments" -version = "2.9.17" +version = "2.9.19" description = "Typing stubs for Pygments" category = "dev" optional = false @@ -2204,7 +2221,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.27.16" +version = "2.27.19" description = "Typing stubs for requests" category = "dev" optional = false @@ -2215,7 +2232,7 @@ types-urllib3 = "<1.27" [[package]] name = "types-setuptools" -version = "57.4.11" +version = "57.4.14" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -2223,7 +2240,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.11" +version = "1.26.13" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -2252,7 +2269,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.14.0" +version = "20.14.1" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -2336,7 +2353,7 @@ jupyterlab = ["jupyterlab"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "edc8f7483a72be94bab6509be2ca1bd908b927b393af5c5bce4a8f92385b44a8" +content-hash = "cf4119e335a4bba36b518caf685dfa8403bd6e426a5e859679affc1b728d209b" [metadata.files] alabaster = [ @@ -2348,8 +2365,8 @@ anyio = [ {file = "anyio-3.5.0.tar.gz", hash = "sha256:a0aeffe2fb1fdf374a8e4b471444f0f3ac4fb9f5a5b542b48824475e0042a5a6"}, ] appnope = [ - {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"}, - {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"}, + {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"}, @@ -2407,8 +2424,8 @@ backcall = [ {file = "backports.cached_property-1.0.1-py3-none-any.whl", hash = "sha256:687b5fe14be40aadcf547cae91337a1fdb84026046a39370274e54d3fe4fb4f9"}, ] beautifulsoup4 = [ - {file = "beautifulsoup4-4.10.0-py3-none-any.whl", hash = "sha256:9a315ce70049920ea4572a4055bc4bd700c940521d36fc858205ad4fcde149bf"}, - {file = "beautifulsoup4-4.10.0.tar.gz", hash = "sha256:c23ad23c521d818955a4151a67d81580319d4bf548d3d49f4223ae041ff98891"}, + {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.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"}, @@ -2436,8 +2453,8 @@ black = [ {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"}, ] bleach = [ - {file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"}, - {file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"}, + {file = "bleach-5.0.0-py3-none-any.whl", hash = "sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1"}, + {file = "bleach-5.0.0.tar.gz", hash = "sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"}, ] certifi = [ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, @@ -2683,6 +2700,10 @@ execnet = [ {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, ] +fastjsonschema = [ + {file = "fastjsonschema-2.15.3-py3-none-any.whl", hash = "sha256:ddb0b1d8243e6e3abb822bd14e447a89f4ab7439342912d590444831fa00b6a0"}, + {file = "fastjsonschema-2.15.3.tar.gz", hash = "sha256:0a572f0836962d844c1fc435e200b2e4f4677e4e6611a2e3bdd01ba697c275ec"}, +] filelock = [ {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"}, {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"}, @@ -2724,8 +2745,8 @@ flake8-simplify = [ {file = "flake8_simplify-0.14.6.tar.gz", hash = "sha256:c4008db8016707684a1f0502ee69f3c2da37687d3cf7031cc1f326bf5986bf47"}, ] fonttools = [ - {file = "fonttools-4.31.2-py3-none-any.whl", hash = "sha256:2df636a3f402ef14593c6811dac0609563b8c374bd7850e76919eb51ea205426"}, - {file = "fonttools-4.31.2.zip", hash = "sha256:236b29aee6b113e8f7bee28779c1230a86ad2aac9a74a31b0aedf57e7dfb62a4"}, + {file = "fonttools-4.32.0-py3-none-any.whl", hash = "sha256:b038d1a0dee0079de7ade57071e2e2aced6e35bd697de244ac62938b2b1628c1"}, + {file = "fonttools-4.32.0.zip", hash = "sha256:59a90de72149893167e3d552ae2402c6874e006b9adc3feaf5f6d706fe20d392"}, ] furo = [ {file = "furo-2021.11.23-py3-none-any.whl", hash = "sha256:6d396451ad1aadce380c662fca9362cb10f4fd85f296d74fe3ca32006eb641d7"}, @@ -2802,16 +2823,16 @@ importlib-metadata = [ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, ] importlib-resources = [ - {file = "importlib_resources-5.6.0-py3-none-any.whl", hash = "sha256:a9dd72f6cc106aeb50f6e66b86b69b454766dd6e39b69ac68450253058706bcc"}, - {file = "importlib_resources-5.6.0.tar.gz", hash = "sha256:1b93238cbf23b4cde34240dd8321d99e9bf2eb4bc91c0c99b2886283e7baad85"}, + {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"}, + {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"}, ] 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.11.0-py3-none-any.whl", hash = "sha256:62ec17caff6e4fa1dc87ef0a6f9eff5a5d6588bb585ab1e06897e7bec9eb2819"}, - {file = "ipykernel-6.11.0.tar.gz", hash = "sha256:6712604531c96100f326440c11cb023da26819f2f34ba9d1ca0fb163401834e8"}, + {file = "ipykernel-6.13.0-py3-none-any.whl", hash = "sha256:2b0987af43c0d4b62cecb13c592755f599f96f29aafe36c01731aaa96df30d39"}, + {file = "ipykernel-6.13.0.tar.gz", hash = "sha256:0e28273e290858393e86e152b104e5506a79c13d25b951ac6eca220051b4be60"}, ] ipython = [ {file = "ipython-7.32.0-py3-none-any.whl", hash = "sha256:86df2cf291c6c70b5be6a7b608650420e89180c8ec74f376a34e2dc15c3400e7"}, @@ -2846,8 +2867,8 @@ jsonschema = [ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"}, ] jupyter-client = [ - {file = "jupyter_client-7.2.1-py3-none-any.whl", hash = "sha256:d10e31ac4b8364d1cb30ebcee9e5cc7b7eb5d23b76912be9ef3d4c75167fbc68"}, - {file = "jupyter_client-7.2.1.tar.gz", hash = "sha256:aa177279e93205d0681ec0e2e210da01b22c5a1464a56abd455adcac64f0de91"}, + {file = "jupyter_client-7.2.2-py3-none-any.whl", hash = "sha256:44045448eadc12493d819d965eb1dc9d10d1927698adbb9b14eb9a3a4a45ba53"}, + {file = "jupyter_client-7.2.2.tar.gz", hash = "sha256:8fdbad344a8baa6a413d86d25bbf87ce21cb2b4aa5a8e0413863b9754eb8eb8a"}, ] jupyter-core = [ {file = "jupyter_core-4.9.2-py3-none-any.whl", hash = "sha256:f875e4d27e202590311d468fa55f90c575f201490bd0c18acabe4e318db4a46d"}, @@ -2858,12 +2879,12 @@ jupyter-server = [ {file = "jupyter_server-1.16.0.tar.gz", hash = "sha256:c756f87ad64b84e2aa522ef482445e1a93f7fe4a5fc78358f4636e53c9a0463a"}, ] jupyterlab = [ - {file = "jupyterlab-3.3.2-py3-none-any.whl", hash = "sha256:32c9e3fae93d02f7a071f5e69a7a5450fa4bf087dd3d5aca58c7dd2adf2565d3"}, - {file = "jupyterlab-3.3.2.tar.gz", hash = "sha256:3c716bf5592cb28c5c55c615c6e5bd3efc71898f6957d13719b56478bbbb587a"}, + {file = "jupyterlab-3.3.4-py3-none-any.whl", hash = "sha256:87121636963027a0477e50ea8f366acf1ab06bb05d7e581cd2ec8c00f6e741a5"}, + {file = "jupyterlab-3.3.4.tar.gz", hash = "sha256:e04355848b3d91ac4d95c2e3846a0429b33e9c2edc79668fb4fc4d212f1e5107"}, ] jupyterlab-pygments = [ - {file = "jupyterlab_pygments-0.1.2-py2.py3-none-any.whl", hash = "sha256:abfb880fd1561987efaefcb2d2ac75145d2a5d0139b1876d5be806e32f630008"}, - {file = "jupyterlab_pygments-0.1.2.tar.gz", hash = "sha256:cfcda0873626150932f438eccf0f8bf22bfa92345b814890ab360d666b254146"}, + {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.12.0-py3-none-any.whl", hash = "sha256:db5d234955c5c2684f77a064345712f071acf7df31f0d8c31b420b33b09d6472"}, @@ -3190,16 +3211,16 @@ nbclassic = [ {file = "nbclassic-0.3.7.tar.gz", hash = "sha256:36dbaa88ffaf5dc05d149deb97504b86ba648f4a80a60b8a58ac94acab2daeb5"}, ] nbclient = [ - {file = "nbclient-0.5.13-py3-none-any.whl", hash = "sha256:47ac905af59379913c1f8f541098d2550153cf8dc58553cbe18c702b181518b0"}, - {file = "nbclient-0.5.13.tar.gz", hash = "sha256:40c52c9b5e3c31faecaee69f202b3f53e38d7c1c563de0fadde9d7eda0fdafe8"}, + {file = "nbclient-0.6.0-py3-none-any.whl", hash = "sha256:2eed35fc954716cdf0a01ea8cbdd9f9316761479008570059e2f5de29e139423"}, + {file = "nbclient-0.6.0.tar.gz", hash = "sha256:3f89a403c6badf24d2855a455b69a80985b3b27e04111243fdb6a88a28d27031"}, ] nbconvert = [ - {file = "nbconvert-6.4.5-py3-none-any.whl", hash = "sha256:e01d219f55cc79f9701c834d605e8aa3acf35725345d3942e3983937f368ce14"}, - {file = "nbconvert-6.4.5.tar.gz", hash = "sha256:21163a8e2073c07109ca8f398836e45efdba2aacea68d6f75a8a545fef070d4e"}, + {file = "nbconvert-6.5.0-py3-none-any.whl", hash = "sha256:c56dd0b8978a1811a5654f74c727ff16ca87dd5a43abd435a1c49b840fcd8360"}, + {file = "nbconvert-6.5.0.tar.gz", hash = "sha256:223e46e27abe8596b8aed54301fadbba433b7ffea8196a68fd7b1ff509eee99d"}, ] nbformat = [ - {file = "nbformat-5.2.0-py3-none-any.whl", hash = "sha256:3e30424e8291b2188347f5c3ba5273ed3766f12f8c5137c2e456a0815f36e785"}, - {file = "nbformat-5.2.0.tar.gz", hash = "sha256:93df0b9c67221d38fb970c48f6d361819a6c388299a0ef3171bbb912edfe1324"}, + {file = "nbformat-5.3.0-py3-none-any.whl", hash = "sha256:38856d97de49e8292e2d5d8f595e9d26f02abfd87e075d450af4511870b40538"}, + {file = "nbformat-5.3.0.tar.gz", hash = "sha256:fcc5ab8cb74e20b19570b5be809e2dba9b82836fd2761a89066ad43394ba29f5"}, ] nest-asyncio = [ {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, @@ -3222,36 +3243,37 @@ notebook-shim = [ {file = "notebook_shim-0.1.0.tar.gz", hash = "sha256:7897e47a36d92248925a2143e3596f19c60597708f7bef50d81fcd31d7263e85"}, ] numpy = [ - {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:301e408a052fdcda5cdcf03021ebafc3c6ea093021bf9d1aa47c54d48bdad166"}, - {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7e8f6216f180f3fd4efb73de5d1eaefb5f5a1ee5b645c67333033e39440e63a"}, - {file = "numpy-1.21.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc7a7d7b0ed72589fd8b8486b9b42a564f10b8762be8bd4d9df94b807af4a089"}, - {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58ca1d7c8aef6e996112d0ce873ac9dfa1eaf4a1196b4ff7ff73880a09923ba7"}, - {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4b2fb01f1b4ddbe2453468ea0719f4dbb1f5caa712c8b21bb3dd1480cd30d9"}, - {file = "numpy-1.21.5-cp310-cp310-win_amd64.whl", hash = "sha256:cc1b30205d138d1005adb52087ff45708febbef0e420386f58664f984ef56954"}, - {file = "numpy-1.21.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:08de8472d9f7571f9d51b27b75e827f5296295fa78817032e84464be8bb905bc"}, - {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4fe6a006557b87b352c04596a6e3f12a57d6e5f401d804947bd3188e6b0e0e76"}, - {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3d893b0871322eaa2f8c7072cdb552d8e2b27645b7875a70833c31e9274d4611"}, - {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341dddcfe3b7b6427a28a27baa59af5ad51baa59bfec3264f1ab287aa3b30b13"}, - {file = "numpy-1.21.5-cp37-cp37m-win32.whl", hash = "sha256:ca9c23848292c6fe0a19d212790e62f398fd9609aaa838859be8459bfbe558aa"}, - {file = "numpy-1.21.5-cp37-cp37m-win_amd64.whl", hash = "sha256:025b497014bc33fc23897859350f284323f32a2fff7654697f5a5fc2a19e9939"}, - {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a5098df115340fb17fc93867317a947e1dcd978c3888c5ddb118366095851f8"}, - {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:311283acf880cfcc20369201bd75da907909afc4666966c7895cbed6f9d2c640"}, - {file = "numpy-1.21.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b545ebadaa2b878c8630e5bcdb97fc4096e779f335fc0f943547c1c91540c815"}, - {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c5562bcc1a9b61960fc8950ade44d00e3de28f891af0acc96307c73613d18f6e"}, - {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eed2afaa97ec33b4411995be12f8bdb95c87984eaa28d76cf628970c8a2d689a"}, - {file = "numpy-1.21.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61bada43d494515d5b122f4532af226fdb5ee08fe5b5918b111279843dc6836a"}, - {file = "numpy-1.21.5-cp38-cp38-win32.whl", hash = "sha256:7b9d6b14fc9a4864b08d1ba57d732b248f0e482c7b2ff55c313137e3ed4d8449"}, - {file = "numpy-1.21.5-cp38-cp38-win_amd64.whl", hash = "sha256:dbce7adeb66b895c6aaa1fad796aaefc299ced597f6fbd9ceddb0dd735245354"}, - {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:507c05c7a37b3683eb08a3ff993bd1ee1e6c752f77c2f275260533b265ecdb6c"}, - {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:00c9fa73a6989895b8815d98300a20ac993c49ac36c8277e8ffeaa3631c0dbbb"}, - {file = "numpy-1.21.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69a5a8d71c308d7ef33ef72371c2388a90e3495dbb7993430e674006f94797d5"}, - {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2d8adfca843bc46ac199a4645233f13abf2011a0b2f4affc5c37cd552626f27b"}, - {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c293d3c0321996cd8ffe84215ffe5d269fd9d1d12c6f4ffe2b597a7c30d3e593"}, - {file = "numpy-1.21.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c978544be9e04ed12016dd295a74283773149b48f507d69b36f91aa90a643e5"}, - {file = "numpy-1.21.5-cp39-cp39-win32.whl", hash = "sha256:2a9add27d7fc0fdb572abc3b2486eb3b1395da71e0254c5552b2aad2a18b5441"}, - {file = "numpy-1.21.5-cp39-cp39-win_amd64.whl", hash = "sha256:1964db2d4a00348b7a60ee9d013c8cb0c566644a589eaa80995126eac3b99ced"}, - {file = "numpy-1.21.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7c4b701ca418cd39e28ec3b496e6388fe06de83f5f0cb74794fa31cfa384c02"}, - {file = "numpy-1.21.5.zip", hash = "sha256:6a5928bc6241264dce5ed509e66f33676fc97f464e7a919edc672fb5532221ee"}, + {file = "numpy-1.21.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8737609c3bbdd48e380d463134a35ffad3b22dc56295eff6f79fd85bd0eeeb25"}, + {file = "numpy-1.21.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fdffbfb6832cd0b300995a2b08b8f6fa9f6e856d562800fea9182316d99c4e8e"}, + {file = "numpy-1.21.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3820724272f9913b597ccd13a467cc492a0da6b05df26ea09e78b171a0bb9da6"}, + {file = "numpy-1.21.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f17e562de9edf691a42ddb1eb4a5541c20dd3f9e65b09ded2beb0799c0cf29bb"}, + {file = "numpy-1.21.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f30427731561ce75d7048ac254dbe47a2ba576229250fb60f0fb74db96501a1"}, + {file = "numpy-1.21.6-cp310-cp310-win32.whl", hash = "sha256:d4bf4d43077db55589ffc9009c0ba0a94fa4908b9586d6ccce2e0b164c86303c"}, + {file = "numpy-1.21.6-cp310-cp310-win_amd64.whl", hash = "sha256:d136337ae3cc69aa5e447e78d8e1514be8c3ec9b54264e680cf0b4bd9011574f"}, + {file = "numpy-1.21.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6aaf96c7f8cebc220cdfc03f1d5a31952f027dda050e5a703a0d1c396075e3e7"}, + {file = "numpy-1.21.6-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:67c261d6c0a9981820c3a149d255a76918278a6b03b6a036800359aba1256d46"}, + {file = "numpy-1.21.6-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a6be4cb0ef3b8c9250c19cc122267263093eee7edd4e3fa75395dfda8c17a8e2"}, + {file = "numpy-1.21.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c4068a8c44014b2d55f3c3f574c376b2494ca9cc73d2f1bd692382b6dffe3db"}, + {file = "numpy-1.21.6-cp37-cp37m-win32.whl", hash = "sha256:7c7e5fa88d9ff656e067876e4736379cc962d185d5cd808014a8a928d529ef4e"}, + {file = "numpy-1.21.6-cp37-cp37m-win_amd64.whl", hash = "sha256:bcb238c9c96c00d3085b264e5c1a1207672577b93fa666c3b14a45240b14123a"}, + {file = "numpy-1.21.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:82691fda7c3f77c90e62da69ae60b5ac08e87e775b09813559f8901a88266552"}, + {file = "numpy-1.21.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:643843bcc1c50526b3a71cd2ee561cf0d8773f062c8cbaf9ffac9fdf573f83ab"}, + {file = "numpy-1.21.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:357768c2e4451ac241465157a3e929b265dfac85d9214074985b1786244f2ef3"}, + {file = "numpy-1.21.6-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9f411b2c3f3d76bba0865b35a425157c5dcf54937f82bbeb3d3c180789dd66a6"}, + {file = "numpy-1.21.6-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4aa48afdce4660b0076a00d80afa54e8a97cd49f457d68a4342d188a09451c1a"}, + {file = "numpy-1.21.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a96eef20f639e6a97d23e57dd0c1b1069a7b4fd7027482a4c5c451cd7732f4"}, + {file = "numpy-1.21.6-cp38-cp38-win32.whl", hash = "sha256:5c3c8def4230e1b959671eb959083661b4a0d2e9af93ee339c7dada6759a9470"}, + {file = "numpy-1.21.6-cp38-cp38-win_amd64.whl", hash = "sha256:bf2ec4b75d0e9356edea834d1de42b31fe11f726a81dfb2c2112bc1eaa508fcf"}, + {file = "numpy-1.21.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4391bd07606be175aafd267ef9bea87cf1b8210c787666ce82073b05f202add1"}, + {file = "numpy-1.21.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:67f21981ba2f9d7ba9ade60c9e8cbaa8cf8e9ae51673934480e45cf55e953673"}, + {file = "numpy-1.21.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee5ec40fdd06d62fe5d4084bef4fd50fd4bb6bfd2bf519365f569dc470163ab0"}, + {file = "numpy-1.21.6-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1dbe1c91269f880e364526649a52eff93ac30035507ae980d2fed33aaee633ac"}, + {file = "numpy-1.21.6-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d9caa9d5e682102453d96a0ee10c7241b72859b01a941a397fd965f23b3e016b"}, + {file = "numpy-1.21.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58459d3bad03343ac4b1b42ed14d571b8743dc80ccbf27444f266729df1d6f5b"}, + {file = "numpy-1.21.6-cp39-cp39-win32.whl", hash = "sha256:7f5ae4f304257569ef3b948810816bc87c9146e8c446053539947eedeaa32786"}, + {file = "numpy-1.21.6-cp39-cp39-win_amd64.whl", hash = "sha256:e31f0bb5928b793169b87e3d1e070f2342b22d5245c755e2b81caa29756246c3"}, + {file = "numpy-1.21.6-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd1c8f6bd65d07d3810b90d02eba7997e32abbdf1277a481d698969e921a3be0"}, + {file = "numpy-1.21.6.zip", hash = "sha256:ecb55251139706669fdec2ff073c98ef8e9a84473e51e716211b41aa0f18e656"}, ] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, @@ -3330,12 +3352,12 @@ pre-commit = [ {file = "pre_commit-2.18.1.tar.gz", hash = "sha256:5d445ee1fa8738d506881c5d84f83c62bb5be6b2838e32207433647e8e5ebe10"}, ] prometheus-client = [ - {file = "prometheus_client-0.13.1-py3-none-any.whl", hash = "sha256:357a447fd2359b0a1d2e9b311a0c5778c330cfbe186d880ad5a6b39884652316"}, - {file = "prometheus_client-0.13.1.tar.gz", hash = "sha256:ada41b891b79fca5638bd5cfe149efa86512eaa55987893becd2c6d8d0a5dfc5"}, + {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, + {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.28-py3-none-any.whl", hash = "sha256:30129d870dcb0b3b6a53efdc9d0a83ea96162ffd28ffe077e94215b233dc670c"}, - {file = "prompt_toolkit-3.0.28.tar.gz", hash = "sha256:9f1cd16b1e86c2968f2519d7fb31dd9d669916f515612c269d14e9ed52b51650"}, + {file = "prompt_toolkit-3.0.29-py3-none-any.whl", hash = "sha256:62291dad495e665fca0bda814e342c69952086afb0f4094d0893d357e5c78752"}, + {file = "prompt_toolkit-3.0.29.tar.gz", hash = "sha256:bd640f60e8cecd74f0dc249713d433ace2ddc62b65ee07f96d358e0b152b6ea7"}, ] psutil = [ {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b"}, @@ -3442,8 +3464,8 @@ pyjwt = [ {file = "PyJWT-2.3.0.tar.gz", hash = "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41"}, ] pylint = [ - {file = "pylint-2.13.4-py3-none-any.whl", hash = "sha256:8672cf7441b81410f5de7defdf56e2d559c956fd0579652f2e0a0a35bea2d546"}, - {file = "pylint-2.13.4.tar.gz", hash = "sha256:7cc6d0c4f61dff440f9ed8b657f4ecd615dcfe35345953eb7b1dc74afe901d7a"}, + {file = "pylint-2.13.5-py3-none-any.whl", hash = "sha256:c149694cfdeaee1aa2465e6eaab84c87a881a7d55e6e93e09466be7164764d1e"}, + {file = "pylint-2.13.5.tar.gz", hash = "sha256:dab221658368c7a05242e673c275c488670144123f4bd262b2777249c1c0de9b"}, ] pynacl = [ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, @@ -3476,8 +3498,8 @@ pyobjc-framework-cocoa = [ {file = "pyobjc_framework_Cocoa-8.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:197dd28668e786b55d7d4139afd85c285f780564ebbccc166e84a24be31de34f"}, ] pyparsing = [ - {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, - {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, + {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, + {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, ] pyrr = [ {file = "pyrr-0.10.3-py3-none-any.whl", hash = "sha256:d8af23fb9bb29262405845e1c98f7339fbba5e49323b98528bd01160a75c65ac"}, @@ -3647,8 +3669,8 @@ restructuredtext-lint = [ {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, ] rich = [ - {file = "rich-12.1.0-py3-none-any.whl", hash = "sha256:b60ff99f4ff7e3d1d37444dee2b22fdd941c622dbc37841823ec1ce7f058b263"}, - {file = "rich-12.1.0.tar.gz", hash = "sha256:198ae15807a7c1bf84ceabf662e902731bf8f874f9e775e2289cab02bb6a4e30"}, + {file = "rich-12.2.0-py3-none-any.whl", hash = "sha256:c50f3d253bc6a9bb9c79d61a26d510d74abdf1b16881260fab5edfc3edfb082f"}, + {file = "rich-12.2.0.tar.gz", hash = "sha256:ea74bc9dad9589d8eea3e3fd0b136d8bf6e428888955f215824c2894f0da8b47"}, ] scipy = [ {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, @@ -3746,8 +3768,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] soupsieve = [ - {file = "soupsieve-2.3.1-py3-none-any.whl", hash = "sha256:1a3cca2617c6b38c0343ed661b1fa5de5637f257d4fe22bd9f1338010a1efefb"}, - {file = "soupsieve-2.3.1.tar.gz", hash = "sha256:b8d49b1cd4f037c7082a9683dfa1801aa2597fb11c3a1155b7a5b94829b4f1f9"}, + {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"}, @@ -3796,9 +3818,9 @@ terminado = [ {file = "terminado-0.13.3-py3-none-any.whl", hash = "sha256:874d4ea3183536c1782d13c7c91342ef0cf4e5ee1d53633029cbc972c8760bd8"}, {file = "terminado-0.13.3.tar.gz", hash = "sha256:94d1cfab63525993f7d5c9b469a50a18d0cdf39435b59785715539dd41e36c0d"}, ] -testpath = [ - {file = "testpath-0.6.0-py3-none-any.whl", hash = "sha256:8ada9f80a2ac6fb0391aa7cdb1a7d11cfa8429f693eda83f74dde570fe6fa639"}, - {file = "testpath-0.6.0.tar.gz", hash = "sha256:2f1b97e6442c02681ebe01bd84f531028a7caea1af3825000f52345c30285e0f"}, +tinycss2 = [ + {file = "tinycss2-1.1.1-py3-none-any.whl", hash = "sha256:fe794ceaadfe3cf3e686b22155d0da5780dd0e273471a51846d0a02bc204fec8"}, + {file = "tinycss2-1.1.1.tar.gz", hash = "sha256:b2e44dd8883c360c35dd0d1b5aad0b610e5156c2cb3b33434634e539ead9d8bf"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, @@ -3860,62 +3882,62 @@ traitlets = [ {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, ] typed-ast = [ - {file = "typed_ast-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:183b183b7771a508395d2cbffd6db67d6ad52958a5fdc99f450d954003900266"}, - {file = "typed_ast-1.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:676d051b1da67a852c0447621fdd11c4e104827417bf216092ec3e286f7da596"}, - {file = "typed_ast-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc2542e83ac8399752bc16e0b35e038bdb659ba237f4222616b4e83fb9654985"}, - {file = "typed_ast-1.5.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74cac86cc586db8dfda0ce65d8bcd2bf17b58668dfcc3652762f3ef0e6677e76"}, - {file = "typed_ast-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:18fe320f354d6f9ad3147859b6e16649a0781425268c4dde596093177660e71a"}, - {file = "typed_ast-1.5.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:31d8c6b2df19a777bc8826770b872a45a1f30cfefcfd729491baa5237faae837"}, - {file = "typed_ast-1.5.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:963a0ccc9a4188524e6e6d39b12c9ca24cc2d45a71cfdd04a26d883c922b4b78"}, - {file = "typed_ast-1.5.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0eb77764ea470f14fcbb89d51bc6bbf5e7623446ac4ed06cbd9ca9495b62e36e"}, - {file = "typed_ast-1.5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:294a6903a4d087db805a7656989f613371915fc45c8cc0ddc5c5a0a8ad9bea4d"}, - {file = "typed_ast-1.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:26a432dc219c6b6f38be20a958cbe1abffcc5492821d7e27f08606ef99e0dffd"}, - {file = "typed_ast-1.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7407cfcad702f0b6c0e0f3e7ab876cd1d2c13b14ce770e412c0c4b9728a0f88"}, - {file = "typed_ast-1.5.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f30ddd110634c2d7534b2d4e0e22967e88366b0d356b24de87419cc4410c41b7"}, - {file = "typed_ast-1.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8c08d6625bb258179b6e512f55ad20f9dfef019bbfbe3095247401e053a3ea30"}, - {file = "typed_ast-1.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:90904d889ab8e81a956f2c0935a523cc4e077c7847a836abee832f868d5c26a4"}, - {file = "typed_ast-1.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bbebc31bf11762b63bf61aaae232becb41c5bf6b3461b80a4df7e791fabb3aca"}, - {file = "typed_ast-1.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29dd9a3a9d259c9fa19d19738d021632d673f6ed9b35a739f48e5f807f264fb"}, - {file = "typed_ast-1.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:58ae097a325e9bb7a684572d20eb3e1809802c5c9ec7108e85da1eb6c1a3331b"}, - {file = "typed_ast-1.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:da0a98d458010bf4fe535f2d1e367a2e2060e105978873c04c04212fb20543f7"}, - {file = "typed_ast-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:33b4a19ddc9fc551ebabca9765d54d04600c4a50eda13893dadf67ed81d9a098"}, - {file = "typed_ast-1.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1098df9a0592dd4c8c0ccfc2e98931278a6c6c53cb3a3e2cf7e9ee3b06153344"}, - {file = "typed_ast-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42c47c3b43fe3a39ddf8de1d40dbbfca60ac8530a36c9b198ea5b9efac75c09e"}, - {file = "typed_ast-1.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f290617f74a610849bd8f5514e34ae3d09eafd521dceaa6cf68b3f4414266d4e"}, - {file = "typed_ast-1.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:df05aa5b241e2e8045f5f4367a9f6187b09c4cdf8578bb219861c4e27c443db5"}, - {file = "typed_ast-1.5.2.tar.gz", hash = "sha256:525a2d4088e70a9f75b08b3f87a51acc9cde640e19cc523c7e41aa355564ae27"}, + {file = "typed_ast-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ad3b48cf2b487be140072fb86feff36801487d4abb7382bb1929aaac80638ea"}, + {file = "typed_ast-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:542cd732351ba8235f20faa0fc7398946fe1a57f2cdb289e5497e1e7f48cfedb"}, + {file = "typed_ast-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc2c11ae59003d4a26dda637222d9ae924387f96acae9492df663843aefad55"}, + {file = "typed_ast-1.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd5df1313915dbd70eaaa88c19030b441742e8b05e6103c631c83b75e0435ccc"}, + {file = "typed_ast-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:e34f9b9e61333ecb0f7d79c21c28aa5cd63bec15cb7e1310d7d3da6ce886bc9b"}, + {file = "typed_ast-1.5.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f818c5b81966d4728fec14caa338e30a70dfc3da577984d38f97816c4b3071ec"}, + {file = "typed_ast-1.5.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3042bfc9ca118712c9809201f55355479cfcdc17449f9f8db5e744e9625c6805"}, + {file = "typed_ast-1.5.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fff9fdcce59dc61ec1b317bdb319f8f4e6b69ebbe61193ae0a60c5f9333dc49"}, + {file = "typed_ast-1.5.3-cp36-cp36m-win_amd64.whl", hash = "sha256:8e0b8528838ffd426fea8d18bde4c73bcb4167218998cc8b9ee0a0f2bfe678a6"}, + {file = "typed_ast-1.5.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ef1d96ad05a291f5c36895d86d1375c0ee70595b90f6bb5f5fdbee749b146db"}, + {file = "typed_ast-1.5.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed44e81517364cb5ba367e4f68fca01fba42a7a4690d40c07886586ac267d9b9"}, + {file = "typed_ast-1.5.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f60d9de0d087454c91b3999a296d0c4558c1666771e3460621875021bf899af9"}, + {file = "typed_ast-1.5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9e237e74fd321a55c90eee9bc5d44be976979ad38a29bbd734148295c1ce7617"}, + {file = "typed_ast-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ee852185964744987609b40aee1d2eb81502ae63ee8eef614558f96a56c1902d"}, + {file = "typed_ast-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:27e46cdd01d6c3a0dd8f728b6a938a6751f7bd324817501c15fb056307f918c6"}, + {file = "typed_ast-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d64dabc6336ddc10373922a146fa2256043b3b43e61f28961caec2a5207c56d5"}, + {file = "typed_ast-1.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8cdf91b0c466a6c43f36c1964772918a2c04cfa83df8001ff32a89e357f8eb06"}, + {file = "typed_ast-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:9cc9e1457e1feb06b075c8ef8aeb046a28ec351b1958b42c7c31c989c841403a"}, + {file = "typed_ast-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e20d196815eeffb3d76b75223e8ffed124e65ee62097e4e73afb5fec6b993e7a"}, + {file = "typed_ast-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:37e5349d1d5de2f4763d534ccb26809d1c24b180a477659a12c4bde9dd677d74"}, + {file = "typed_ast-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f1a27592fac87daa4e3f16538713d705599b0a27dfe25518b80b6b017f0a6d"}, + {file = "typed_ast-1.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8831479695eadc8b5ffed06fdfb3e424adc37962a75925668deeb503f446c0a3"}, + {file = "typed_ast-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:20d5118e494478ef2d3a2702d964dae830aedd7b4d3b626d003eea526be18718"}, + {file = "typed_ast-1.5.3.tar.gz", hash = "sha256:27f25232e2dd0edfe1f019d6bfaaf11e86e657d9bdb7b0956db95f560cceb2b3"}, ] 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.18.0.tar.gz", hash = "sha256:14f781eb28d89a1cd61f1c41bd0776ad3bb4e2333d317c37d2c67f2eaf5891fe"}, - {file = "types_docutils-0.18.0-py3-none-any.whl", hash = "sha256:f0305109169326edffd98c128f542f773be06a1502a17d96359c53e31082db19"}, + {file = "types-docutils-0.18.2.tar.gz", hash = "sha256:35aa0a9d40c150f96f59a5adcdafc0bb9927d6a421efbd0097374c673ad8d793"}, + {file = "types_docutils-0.18.2-py3-none-any.whl", hash = "sha256:470700fdd29c1267cf3f1cefc1d1d88492d5d381a8e1c422e51f82e1d8b2762b"}, ] 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.19.15.tar.gz", hash = "sha256:d371d0a5b32e78c2d684329a5d4491d385e6eadcab497b37c41172ded328c5d9"}, - {file = "types_protobuf-3.19.15-py3-none-any.whl", hash = "sha256:4673a4e56495886590c36cd87f2d855299a699a598eacb2e27d82b57eb4afb05"}, + {file = "types-protobuf-3.19.17.tar.gz", hash = "sha256:d0d930326cd76d9e85fd592e18c2248636bdbbf0226618082f57a82f00dd7d25"}, + {file = "types_protobuf-3.19.17-py3-none-any.whl", hash = "sha256:68e9e7bd9439a7b5ee679ada87a2622f2f7df2c66434ff49a5729007ceebc501"}, ] types-pygments = [ - {file = "types-Pygments-2.9.17.tar.gz", hash = "sha256:d3a9d08365abc8a122edac4f5a94c8bcbbef8f6a3e055982523810e81f8d749c"}, - {file = "types_Pygments-2.9.17-py3-none-any.whl", hash = "sha256:723cb3db5dc3603dd4f06ca73f1d61b712c88cda5fd768dd898a23b181fd505e"}, + {file = "types-Pygments-2.9.19.tar.gz", hash = "sha256:bd08888acf1f85eeeed906b7897ed2ee6d2a0b9dddceaae32ad97692a44638ba"}, + {file = "types_Pygments-2.9.19-py3-none-any.whl", hash = "sha256:6f2ba3127cddabc32a5648332cdc5339a4521f60b21524d376fc44de78a2d413"}, ] types-requests = [ - {file = "types-requests-2.27.16.tar.gz", hash = "sha256:c8010c18b291a7efb60b1452dbe12530bc25693dd657e70c62803fcdc4bffe9b"}, - {file = "types_requests-2.27.16-py3-none-any.whl", hash = "sha256:2437a5f4d16c0c8bd7539a8126d492b7aeb41e6cda670d76b286c7f83a658d42"}, + {file = "types-requests-2.27.19.tar.gz", hash = "sha256:795e378117088d1e4bf41a2c01a153b73d6ea40aa9d7c0ac753abde84c0d3a8f"}, + {file = "types_requests-2.27.19-py3-none-any.whl", hash = "sha256:c6c5384677d98f212516de50c4b2c38ef659b93008fbc5bb4b81726138bc8485"}, ] types-setuptools = [ - {file = "types-setuptools-57.4.11.tar.gz", hash = "sha256:262f7406e0c7d705ad6bb4526b5b761fa500bf99eab74de85ac3592187d62935"}, - {file = "types_setuptools-57.4.11-py3-none-any.whl", hash = "sha256:fbb0647569d6fb2f6bc472402265250c0ffa53e60180d2cbfee9e84f085921f0"}, + {file = "types-setuptools-57.4.14.tar.gz", hash = "sha256:df02fe1dd244f58cf4e67cfc3d0a97930a2d61a72dd89f21d81c71017cd83f9a"}, + {file = "types_setuptools-57.4.14-py3-none-any.whl", hash = "sha256:828f7e7e51e157876f47c80518b23ba0c3c36aa8081efd39d5d39f393938aec9"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.11.tar.gz", hash = "sha256:24d64e441168851eb05f1d022de18ae31558f5649c8f1117e384c2e85e31315b"}, - {file = "types_urllib3-1.26.11-py3-none-any.whl", hash = "sha256:bd0abc01e9fb963e4fddd561a56d21cc371b988d1245662195c90379077139cd"}, + {file = "types-urllib3-1.26.13.tar.gz", hash = "sha256:40f8fb5e8cd7d57e8aefdee3fdd5e930aa1a1bb4179cdadd55226cea588af790"}, + {file = "types_urllib3-1.26.13-py3-none-any.whl", hash = "sha256:ff7500641824f881b2c7bde4cc57e6c3abf03d1e005bae83aca752e77213a5da"}, ] typing-extensions = [ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, @@ -3926,8 +3948,8 @@ urllib3 = [ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] virtualenv = [ - {file = "virtualenv-20.14.0-py2.py3-none-any.whl", hash = "sha256:1e8588f35e8b42c6ec6841a13c5e88239de1e6e4e4cedfd3916b306dc826ec66"}, - {file = "virtualenv-20.14.0.tar.gz", hash = "sha256:8e5b402037287126e81ccde9432b95a8be5b19d36584f64957060a3488c11ca8"}, + {file = "virtualenv-20.14.1-py2.py3-none-any.whl", hash = "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a"}, + {file = "virtualenv-20.14.1.tar.gz", hash = "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5"}, ] watchdog = [ {file = "watchdog-2.1.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:177bae28ca723bc00846466016d34f8c1d6a621383b6caca86745918d55c7383"}, diff --git a/pyproject.toml b/pyproject.toml index 98f656ea05..c3b438b5ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ isosurfaces = "0.1.0" srt = "^3.5.0" screeninfo = "^0.8" Pygments = "^2.10.0" -"backports.cached-property" = "^1.0.1" +"backports.cached-property" = { version = "^1.0.1", python = "<3.8" } [tool.poetry.extras] jupyterlab = ["jupyterlab"] From 8841e39a20b501e38091df126a62bb7440931089 Mon Sep 17 00:00:00 2001 From: Luca <30503695+tameTNT@users.noreply.github.com> Date: Tue, 19 Apr 2022 23:37:43 +0100 Subject: [PATCH 026/555] Document and type `simple_functions.py` (#2674) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🏷️ Add types to simple_functions.py * 💄 Neaten binary_search() Add spacing between signature and code. Remove and expressions and address IDE warnings * 📝 Add docstrings for functions in simple_functions.py * 🎨 Reorder functions alphabetically * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * 🐛 Reformat code examples These were causing checks to fail due to missing spaces after `>>>` I had wanted to change these to be more consistent with iterables.py anyway. * 🎨 Change single tics to double Change \` to \`` - this ensures that the variable names are actually displayed as code (and not italics) * improved docstrings, rewrote examples as doctests * fix (???) unrelated failing doctest * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed typo * Update manim/utils/simple_functions.py Co-authored-by: Luca <30503695+tameTNT@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- .../opengl/opengl_vectorized_mobject.py | 4 +- manim/utils/simple_functions.py | 127 +++++++++++++++--- 2 files changed, 110 insertions(+), 21 deletions(-) diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 46dffe11b2..643a26da93 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -1629,7 +1629,9 @@ class OpenGLVGroup(OpenGLVMobject): can subtract elements of a OpenGLVGroup via :meth:`~.OpenGLVGroup.remove` method, or `-` and `-=` operators: - >>> from manim import Triangle, Square, OpenGLVGroup + >>> from manim import Triangle, Square, config + >>> config.renderer = "opengl" + >>> from manim.opengl import OpenGLVGroup >>> vg = OpenGLVGroup() >>> triangle, square = Triangle(), Square() >>> vg.add(triangle) diff --git a/manim/utils/simple_functions.py b/manim/utils/simple_functions.py index e5f05d2a7f..2a4a7afed6 100644 --- a/manim/utils/simple_functions.py +++ b/manim/utils/simple_functions.py @@ -3,59 +3,146 @@ from __future__ import annotations __all__ = [ - "sigmoid", + "binary_search", "choose", + "clip", "get_parameters", - "binary_search", + "sigmoid", ] import inspect from functools import lru_cache +from types import MappingProxyType +from typing import Callable import numpy as np from scipy import special -def sigmoid(x): - return 1.0 / (1 + np.exp(-x)) +def binary_search( + function: Callable[[int | float], int | float], + target: int | float, + lower_bound: int | float, + upper_bound: int | float, + tolerance: int | float = 1e-4, +) -> int | float | None: + """Searches for a value in a range by repeatedly dividing the range in half. + To be more precise, performs numerical binary search to determine the + input to ``function``, between the bounds given, that outputs ``target`` + to within ``tolerance`` (default of 0.0001). + Returns ``None`` if no input can be found within the bounds. -@lru_cache(maxsize=10) -def choose(n, k): - return special.comb(n, k, exact=True) - + Examples + -------- -def get_parameters(function): - return inspect.signature(function).parameters + Consider the polynomial :math:`x^2 + 3x + 1` where we search for + a target value of :math:`11`. An exact solution is :math:`x = 2`. + :: -def clip(a, min_a, max_a): - if a < min_a: - return min_a - elif a > max_a: - return max_a - return a + >>> solution = binary_search(lambda x: x**2 + 3*x + 1, 11, 0, 5) + >>> abs(solution - 2) < 1e-4 + True + >>> solution = binary_search(lambda x: x**2 + 3*x + 1, 11, 0, 5, tolerance=0.01) + >>> abs(solution - 2) < 0.01 + True + Searching in the interval :math:`[0, 5]` for a target value of :math:`71` + does not yield a solution:: -def binary_search(function, target, lower_bound, upper_bound, tolerance=1e-4): + >>> binary_search(lambda x: x**2 + 3*x + 1, 71, 0, 5) is None + True + """ lh = lower_bound rh = upper_bound + mh = np.mean(np.array([lh, rh])) while abs(rh - lh) > tolerance: - mh = np.mean([lh, rh]) + mh = np.mean(np.array([lh, rh])) lx, mx, rx = (function(h) for h in (lh, mh, rh)) if lx == target: return lh if rx == target: return rh - if lx <= target and rx >= target: + if lx <= target <= rx: if mx > target: rh = mh else: lh = mh - elif lx > target and rx < target: + elif lx > target > rx: lh, rh = rh, lh else: return None + return mh + + +@lru_cache(maxsize=10) +def choose(n: int, k: int) -> int: + r"""The binomial coefficient n choose k. + + :math:`\binom{n}{k}` describes the number of possible choices of + :math:`k` elements from a set of :math:`n` elements. + + References + ---------- + - https://en.wikipedia.org/wiki/Combination + - https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.comb.html + """ + return special.comb(n, k, exact=True) + + +def clip(a, min_a, max_a): + """Clips ``a`` to the interval [``min_a``, ``max_a``]. + + Accepts any comparable objects (i.e. those that support <, >). + Returns ``a`` if it is between ``min_a`` and ``max_a``. + Otherwise, whichever of ``min_a`` and ``max_a`` is closest. + + Examples + -------- + :: + + >>> clip(15, 11, 20) + 15 + >>> clip('a', 'h', 'k') + 'h' + """ + if a < min_a: + return min_a + elif a > max_a: + return max_a + return a + + +def get_parameters(function: Callable) -> MappingProxyType[str, inspect.Parameter]: + """Return the parameters of ``function`` as an ordered mapping of parameters' + names to their corresponding ``Parameter`` objects. + + Examples + -------- + :: + + >>> get_parameters(get_parameters) + mappingproxy(OrderedDict([('function', )])) + + >>> tuple(get_parameters(choose)) + ('n', 'k') + """ + return inspect.signature(function).parameters + + +def sigmoid(x: float) -> float: + r"""Returns the output of the logistic function. + + The logistic function, a common example of a sigmoid function, is defined + as :math:`\frac{1}{1 + e^{-x}}`. + + References + ---------- + - https://en.wikipedia.org/wiki/Sigmoid_function + - https://en.wikipedia.org/wiki/Logistic_function + """ + return 1.0 / (1 + np.exp(-x)) From a34d54d69b8280dfebe4aabf43f5b6a0b5ff13e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Hendrik=20M=C3=BCller?= <44469195+kolibril13@users.noreply.github.com> Date: Fri, 22 Apr 2022 11:47:01 +0200 Subject: [PATCH 027/555] Add instructions to install extra dependencies with poetry (#2686) * add poetry install -e instruction * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * make new section * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update docs/source/contributing/development.rst Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- docs/source/contributing/development.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/source/contributing/development.rst b/docs/source/contributing/development.rst index 6ea6aa151b..d7e0a947a3 100644 --- a/docs/source/contributing/development.rst +++ b/docs/source/contributing/development.rst @@ -66,6 +66,10 @@ For first-time contributors as create and enter a virtual environment. You can always re-enter that environment by running ``poetry shell``. + - In case you want to install extra dependencies that are defined in + the ``[tool.poetry.extras]`` section of ``pyproject.toml``, this can be done by passing + the ``-E`` flag, for example ``poetry install -E jupyterlab -E gui``. + - In case you decided against Poetry, you can install Manim via pip by running ``python3 -m pip install .``. Note that due to our development infrastructure being based on Poetry, we currently From 584d80242f005c484803f36efa9df7d01fcc599e Mon Sep 17 00:00:00 2001 From: Mohsin Shaikh <55991791+byter11@users.noreply.github.com> Date: Sat, 23 Apr 2022 02:07:52 +0500 Subject: [PATCH 028/555] Allow using :meth:`.MovingCamera.auto_zoom` without animation (#2693) * Allow using `MovingCamera.auto_zoom` without animation * added test for auto_zoom width * type hints for MovingCamera.auto_zoom * black * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/camera/moving_camera.py | 23 +++++++++++++++++------ tests/test_camera.py | 11 +++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 tests/test_camera.py diff --git a/manim/camera/moving_camera.py b/manim/camera/moving_camera.py index c0c2ad3d25..581e3150e7 100644 --- a/manim/camera/moving_camera.py +++ b/manim/camera/moving_camera.py @@ -14,6 +14,7 @@ from ..camera.camera import Camera from ..constants import DOWN, LEFT, ORIGIN, RIGHT, UP from ..mobject.frame import ScreenRectangle +from ..mobject.mobject import Mobject from ..mobject.types.vectorized_mobject import VGroup from ..utils.color import WHITE @@ -175,7 +176,13 @@ def get_mobjects_indicating_movement(self): """ return [self.frame] - def auto_zoom(self, mobjects, margin=0, only_mobjects_in_frame=False): + def auto_zoom( + self, + mobjects: list[Mobject], + margin: float = 0, + only_mobjects_in_frame: bool = False, + animate: bool = True, + ): """Zooms on to a given array of mobjects (or a singular mobject) and automatically resizes to frame all the mobjects. @@ -195,11 +202,14 @@ def auto_zoom(self, mobjects, margin=0, only_mobjects_in_frame=False): only_mobjects_in_frame If set to ``True``, only allows focusing on mobjects that are already in frame. + animate + If set to ``False``, applies the changes instead of returning the corresponding animation + Returns ------- - _AnimationBuilder - Returns an animation that zooms the camera view to a given - list of mobjects. + Union[_AnimationBuilder, ScreenRectangle] + _AnimationBuilder that zooms the camera view to a given list of mobjects + or ScreenRectangle with position and size updated to zoomed position. """ scene_critical_x_left = None @@ -242,8 +252,9 @@ def auto_zoom(self, mobjects, margin=0, only_mobjects_in_frame=False): new_width = abs(scene_critical_x_left - scene_critical_x_right) new_height = abs(scene_critical_y_up - scene_critical_y_down) + m_target = self.frame.animate if animate else self.frame # zoom to fit all mobjects along the side that has the largest size if new_width / self.frame.width > new_height / self.frame.height: - return self.frame.animate.set_x(x).set_y(y).set(width=new_width + margin) + return m_target.set_x(x).set_y(y).set(width=new_width + margin) else: - return self.frame.animate.set_x(x).set_y(y).set(height=new_height + margin) + return m_target.set_x(x).set_y(y).set(height=new_height + margin) diff --git a/tests/test_camera.py b/tests/test_camera.py new file mode 100644 index 0000000000..44c54e7e4f --- /dev/null +++ b/tests/test_camera.py @@ -0,0 +1,11 @@ +from __future__ import annotations + +from manim import MovingCamera, Square + + +def test_movingcamera_auto_zoom(): + camera = MovingCamera() + square = Square() + margin = 0.5 + camera.auto_zoom([square], margin=margin, animate=False) + assert camera.frame.height == square.height + margin From bef8302be3fb9e1512274411c015678c4840ab25 Mon Sep 17 00:00:00 2001 From: Jonathan Alpert <55598684+jbalpert@users.noreply.github.com> Date: Fri, 22 Apr 2022 23:15:14 -0400 Subject: [PATCH 029/555] Created a more accessible way to create Angles with line.py angle function - Angle.from_three_points (#2684) * fixed style * fixed style * fixed formatting * Update manim/mobject/geometry/line.py Co-authored-by: Benjamin Hackl * Update manim/mobject/geometry/line.py Co-authored-by: Benjamin Hackl * Update manim/mobject/geometry/line.py Co-authored-by: Benjamin Hackl * Update manim/mobject/geometry/line.py Co-authored-by: Benjamin Hackl * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed formatting comments and added tests that can visualize graphic better * Update manim/mobject/geometry/line.py Co-authored-by: Benjamin Hackl * Update manim/mobject/geometry/line.py Co-authored-by: Benjamin Hackl * added additional example * Update manim/mobject/geometry/line.py Co-authored-by: Benjamin Hackl * Update manim/mobject/geometry/line.py Co-authored-by: Benjamin Hackl * example has been changed! * fixed name change * reverted change to not include Vgroup Co-authored-by: hickmott99 <71236306+hickmott99@users.noreply.github.com> Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Darylgolden --- manim/mobject/geometry/line.py | 40 ++++++++++++++++++ .../geometry/three_points_Angle.npz | Bin 0 -> 7060 bytes tests/test_graphical_units/test_geometry.py | 29 +++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 tests/test_graphical_units/control_data/geometry/three_points_Angle.npz diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index 76e17cc288..cb8d7188d7 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -1015,6 +1015,46 @@ def construct(self): return self.angle_value / DEGREES return self.angle_value + @staticmethod + def from_three_points( + A: np.ndarray, B: np.ndarray, C: np.ndarray, **kwargs + ) -> Angle: + """The angle between the lines AB and BC. + + This constructs the angle :math:`\angle ABC`. + + Parameters + ---------- + A + The endpoint of the first angle leg + B + The vertex of the angle + C + The endpoint of the second angle leg + + **kwargs + Further keyword arguments are passed to :class:`.Angle` + + Returns + ------- + The Angle calculated from the three points + + Angle(line1, line2, radius=0.5, quadrant=(-1,1), stroke_width=8), + Angle(line1, line2, radius=0.7, quadrant=(-1,-1), color=RED, other_angle=True), + + Examples + -------- + .. manim:: AngleFromThreePointsExample + :save_last_frame: + + class AngleFromThreePointsExample(Scene): + def construct(self): + sample_angle = Angle.from_three_points(UP, ORIGIN, LEFT) + red_angle = Angle.from_three_points(LEFT + UP, ORIGIN, RIGHT, radius=.8, quadrant=(-1,-1), color=RED, stroke_width=8, other_angle=True) + self.add(red_angle, sample_angle) + """ + return Angle(Line(B, A), Line(B, C), **kwargs) + class RightAngle(Angle): """An elbow-type mobject representing a right angle between two lines. diff --git a/tests/test_graphical_units/control_data/geometry/three_points_Angle.npz b/tests/test_graphical_units/control_data/geometry/three_points_Angle.npz new file mode 100644 index 0000000000000000000000000000000000000000..a084129e8f6d2e5edb7eb3ae8437e1ab81015071 GIT binary patch literal 7060 zcmeHM`B#!@-@mJ8YUZ6L$2Ye&eMZyLTrx8?6>E%~GMC&}NKC0*NX!KhZKfF`*W7Z4 z%G7ZsHF4ZvdU6*fQ*l9|6rn^U7a#=my`ATW_q^x4|G;z3z~P2-xX*Q6_xF2!Kg;)W zb=>n06#xLf20uRlUuUyl?mhwl_rE#>8~{{+P;^j42>fQyy&&VryO>?T_kaBZ-U{s8 zweu3pee=@WQvuvn5BQ0u>*1<#cMtTqO4OC{ySvVs2Mp?Fe|_3RCBNc2?aE%2{@H?~ zuMMvZkD{*}ba%hH3%bAHtn%>JI_f`u)pJ%z6_&M8x3T!mBq|##?0iTR(vT;6u`5;* zSm=nfESkbgeM61$*>WIOcKQ?ryU;kNLl<78%sV7e=;&lbBPrf##Vu2j~! zd^2t~%0b+F1eG{{Y&>1bPJVjZnAE;hv)p~qg+`qlj{t!8X|+f?VVX0L+pG>xTs4z5 z)~2eS^13-z-_xuTDwI+(JOT5xX5BUb2} zCI#G7d zE%ML%yQZIBe9#oN&>J#V=`<8NT--7!W+!herg!Z-`nYptxF@tE;z=M*G%?*2G6XS& zq#_eP{HD&OZ#{i*V6Z(_P~3uIL-@08(PY_52NJirG2m=1cqPZxElKWA!mvh1Y~t^d z8Gd29s1pECTlMCEwIOy($_o?Ovy)_k!@NXe3rXMo%N^1dYhuDu zb)s?QOy_>nth>`81rx18 z4-9F;FpK$#BZi`N0C`eXC!wVa{xtWV_)3cSx+miO zpFdZ`DM#Z=BHM4T@%8{0#?+*gw3cL3@0^71Sl*Pid=CA1{txykd7JAJ7FMXPR{*VR zO-ocLXUj~`B`+G>X>7IC&u^5HgIHeyz+zf+ftm@dRB~*A?y>G6r&`9f;lDYkcbw#6 zpC%%>*sNZT8V1( zYp1HTtPBogO}?#FTS&LGu$-rED^QGbhb&Iaou9G`p5uewr09}doK{hStYmpGthImc zW1T5*elt(0X2Fj^E-}-V6Wtrcq=8w4| zhHsae9aCN?*c@4eYauca*-G2l4w_eBJ8OF}rIoz-sp+~j}OkWB|kqiFMm-0 zPqH#u_)Q(w&+tceaRkrFxh{~l4FXj_Y)tRhi6pX-FT8vZm^ zg=|LBomrK|=a}Km%L)mb&Q#~wS2fU)kJ!gjo11iqKP_znfQL5Mt7gvORTDxm`f;>8 zx0Mtys%7*%d3!4auBBN2Smi(~G}XaizubGMl@$Le&^v+PGb|#k3SLCI2Q5!ER@mMg z{?OTA8r+*lSTOEb&gq1JiS(jsVOQ^u)G5aNa? z5N=h?p@PwPzgM@ijr?AnO!lVA7fntXlw&0;o>{|7{J#cY!V^qukF-&xFpP`)$#L1)Wn8^+o$H+J%nr-L?8 z=Nb0E(l>pER4{;!wvun1@XA~-8iWud%p7l|%wODMKKbjhdv7leFn^p=L0Z7$Km4W| zm^`Ro#hFZ&ulD(N#0qj+c?9gr0Dt|hy^=1;(aNtivWzHFQ*ML1P3{Ap21F5D8nqTk z$%?QE%lNad)h8qZpe;8`R>$<2J>F*$(9swj&Nk%h03UE{!2MsBeXM2`w2@A6gw{>zFx!Q0D>7$PrmR)i15 zfD>_JvaDKnqW`-`>6?Sf*k36d6(*jZjC^mH?^12#%h!9sq17h?;{sv4R#w6(yS|!t zJaycg@rY`V^lt_uupAyfaiJ?gRC7{deEwWd0Q4ia9&kStMYomIwNiqHOK;kz?7zYy(+@8EtWEN-usV@ye$BM<+8hBr5wOQ9 z{`32$h78+#&~6Rg82>>}vwb(sW#y?hh1;8x)FsjEFX#=h1jnCn??z4xUQXA@p2SJl z76?+hh?8C!2sGxT{(%+GI+AcoBT5rqlVkz80-s(q3EZ?O2~TjQTt zgsYd}=jPMRMo#kE`z_vpw%f*>tvv%qG_lLsyrf4v(2+wPx2cLR&p3B=D}2a2 z@yqAVl~Z1IKfyq}zcWsYIU1H)qtAbAe?UJ!W^Lfa2^6#Hk*z+8s)&WrnUNj!^XPe6 z4ZaecdA)55y#7N7X*C6gD=^Xr<|+8tIh{z~2D<=_0s;l8X^t8Mvut+8;_L2Gy@6@qma z@Oq>@%GqP}#nM#iI*+$_jbLMiDKS`my-$lH%CdTZZeSwPjIQFO+`R3^w;gdpH-&Y~ zl82{nquv=VQU_578xWK?Wy(-Oewfo>u`#IKaQ#F^O z=4WnwTFHskf_!fM@A?!e!YPCn6bl00=*+v8ut_)n;$T+lum#%&6n~1Q9c}T~w5t3+ zwGmlwKnd+1gIVayG7*V(G*Bn*w_~wWKlr!byA30OG+n)P6u+ZrVGIzMiJcLPOYbTi zKOKWo$+LVSD8l43jwW4aG5&+9vH@+7NV^hFtuxtMvA0Q{%N=001cxh(qSOMF_w3#O z(^mK{fYN`5o4x|dz==iZ$_m2v#)i53vbC?T+*lL&PlwL!EtxN!U|VZ!#_iDF61P%y zQSdfI(o?)xz%0NiKr}3YA3-ixMmn}>_g(5?&}7;tHqOSX=yh(xE6~=GB0jaX?|gA^vW6Zbq8oLKMWgg3p3D(Ueq_1x^ah zAyW`?-L|PY{ABrp7H_g|8XiXKid_@umG>{i51UVpW2aXma9=(=#7I|p(@0_&Q8MvZ z(DtdaWK9NzjEvLOKy7a*9#X-*-lQ$4ONSQ1iHLAjD$gR8i4ed|T~w77vzrE3W<;w| zzN{XFJ0-;$_SN||uO;+p{&BUz?(?5}93#N4Kv!;SRm1svA6;wW>;<2!K0bYL75M;a z1FHG&+9lPNdkoedpY4k--UWD_fQ|@2N*fPrYa~%L{GkCLfO!hTYHAC0POVitTv}<| zq&PJ04V!s&dw?Aj2qkPFOy25OmAYL&)Tl(V^v3+_*KY=x9^RuY{H^WElE|4Gl1DB1 zpcS~`Wwz3}J`zsEiK`{po|!rA;x*}B0D%9aijZ&zvT_UG_OQN{bzZhk+zwchK}YaY zV-v0skGecsXVH$Ik{XEyBcJZzv4Nn-mD(cYYF1)5YG3=wk^QM%7xI_u4dfvHj0`<$ z42kyrR)Yt3kb`RR&Sz|o&1VTk(&a}zb?MSEZK9)`>k5~iDYsQ-?A{I3u@E%n==0_} zXw7AC=Za#peD*D^R_E17jkCuy@lPF|+SR)#=%&=g)0L9YIy`Cy-t zasG4{R>Gkl2JWZCfZ69Eb&Ev`WD6@Z)$#jb@4*=l!+QoL=K;B zdd>9UKz2OPVH<~wEjwNg75q%2Tvd93J5pBC89_Y3_yFw$eVPbOxX`BU5=tw%Y}_+{ zja%FZIwbFaSUFRlvDRy8Bx>FZJpIrklviGII(kx;XicP6V*!uj??i!4kac<`1cBaW6?|(@wHBa7>hu7AV zYiej9rq_@6ZVvLl0j0G%ZfMNKu8YB{y{glDYX@){AZ1-fInbCif~_^lp-zoT)CY2U~{nG`vlRF=b(v(^hdYWn2=mOCj*?tL(PO+Ynx|Z6!UFRpj+gK zb^-saA3n!46p|bwe_hD3gB&?~%QY5c4qn?nZR(BX+N*(m`GM#G-3myA`(WI$b+xDz zH&e|F({LPHr?(Y)wnBbvRnR^27Vo1~+z!e3u*oNxbfp!R?>GVAq(hwrcB#5*Z7ZCk zi(e0NpVSw7^u#}ZCYv4=gCfJ23dXBP!!m}cL%fo%ql4IXa}Ow=auq(;aOflS*dMSu zjwu7Z*3s-!)@Y=Ip+DJ>813j;pyBRRbf)5L~zB7)Trd+`0xs(4~Fz7CxD?SPumEzU77uAhdzQWX$ z9*pcXun zwwb;g0DcEezTeIA%Nc{~J}SyGQUhgkDbcz19XdDyPO~0A>H?(|o7Y}MS9=?9t5cgF zq~WEx8WPVllyuWE5Mt~`SG?gkb33Yj47Q|6V+^9$7;7Q;)2e%0HIUf)2Bh8|;N>R1 zCCW6}z4V!X^zh7L0h~Z=QNi#b5pyiPlJFcly*r*GW}@iPi1GCP9t%(v+9=&vA~zV$ zs00s9t$Ucw`(8>CPd!lO!FC+{4hc6qmz`gfb+^X}2}Ie^h2M9GzQh6rt8c5u`%J1u zn;r>&d2ucF+`h&wlU^d|8)#mcg)TU-m$oL{kgwC}6tGxBciKk-ptC9L+ya2_5o{Nb zZ81h(nHm;`ppnu-^%UxCC4w5-OUl07Ew^8;O^u1G1`!$oxd}F%q_F1vK8MB2rK)NR z{oJ=Jm3OEL@ld66nO~UJdt^^T$4YVM2mrXc(@5RYwrqcG#>)wFL>BF!i%m9Uel1_KurMyQ z(W_38hRKUp8)boVWvKq~PpJVp|H&QJzt{eE1pbP^S@`xoSI1quRlu{d|Nji_e*<-Y d*Us<%d!pv*_!TG}0bm#SwgJC?{OeThe*kOj0#X0~ literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/test_geometry.py b/tests/test_graphical_units/test_geometry.py index 51e6817d74..6f6ab72e13 100644 --- a/tests/test_graphical_units/test_geometry.py +++ b/tests/test_graphical_units/test_geometry.py @@ -168,6 +168,35 @@ def test_Angle(scene): scene.add(a) +@frames_comparison +def test_three_points_Angle(scene): + # acute angle + acute = Angle.from_three_points( + np.array([10, 0, 0]), np.array([0, 0, 0]), np.array([10, 10, 0]) + ) + # obtuse angle + obtuse = Angle.from_three_points( + np.array([-10, 1, 0]), np.array([0, 0, 0]), np.array([10, 1, 0]) + ) + # quadrant 1 angle + q1 = Angle.from_three_points( + np.array([10, 10, 0]), np.array([0, 0, 0]), np.array([10, 1, 0]) + ) + # quadrant 2 angle + q2 = Angle.from_three_points( + np.array([-10, 1, 0]), np.array([0, 0, 0]), np.array([-1, 10, 0]) + ) + # quadrant 3 angle + q3 = Angle.from_three_points( + np.array([-10, -1, 0]), np.array([0, 0, 0]), np.array([-1, -10, 0]) + ) + # quadrant 4 angle + q4 = Angle.from_three_points( + np.array([10, -1, 0]), np.array([0, 0, 0]), np.array([1, -10, 0]) + ) + scene.add(VGroup(acute, obtuse, q1, q2, q3, q4).arrange(RIGHT)) + + @frames_comparison def test_RightAngle(scene): l1 = Line(ORIGIN, RIGHT) From 54bee2722b0d067d95fc27debb3d91472f05a127 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 23 Apr 2022 18:16:04 +0200 Subject: [PATCH 030/555] Fixed two minor issues of :class:`.SpiralIn` and :class:`.ManimBanner` (#2688) * passed run_time argument to SpiralIn in ManimBanner.create * let SpiralIn respect rate_func * make SpiralIn an introducer Co-authored-by: Naveen M K --- manim/animation/creation.py | 3 ++- manim/mobject/logo.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/manim/animation/creation.py b/manim/animation/creation.py index 8abc265684..85bb78ccbf 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -459,9 +459,10 @@ def __init__( shape.move_to(shape.initial_position) shape.save_state() - super().__init__(shapes, **kwargs) + super().__init__(shapes, introducer=True, **kwargs) def interpolate_mobject(self, alpha: float) -> None: + alpha = self.rate_func(alpha) for shape in self.shapes: shape.restore() shape.save_state() diff --git a/manim/mobject/logo.py b/manim/mobject/logo.py index 67339d47b9..429641e67e 100644 --- a/manim/mobject/logo.py +++ b/manim/mobject/logo.py @@ -128,7 +128,7 @@ def create(self, run_time: float = 2) -> AnimationGroup: An animation to be used in a :meth:`.Scene.play` call. """ return AnimationGroup( - SpiralIn(self.shapes), + SpiralIn(self.shapes, run_time=run_time), FadeIn(self.M, run_time=run_time / 2), lag_ratio=0.1, ) From 7f5624ef62260191538a03665fc793ff861b8145 Mon Sep 17 00:00:00 2001 From: icedcoffeeee <83535735+icedcoffeeee@users.noreply.github.com> Date: Sun, 24 Apr 2022 15:19:03 +0800 Subject: [PATCH 031/555] Implement `OpenGLImageMobject` (#2534) * initial commit make OpenGLImageMobject a subclass of OpenGLTexturedSurface * added typing * unused import * explicit imports * new typing style * convert to correct type * update file structure * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Added support for Path and image_mode parameter * remove duplicate function * let moderngl accept PIL Images only * allow custom resampling * allow greyscale Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Naveen M K --- manim/mobject/opengl/opengl_image_mobject.py | 80 ++++++++++++++++++++ manim/mobject/opengl/opengl_surface.py | 45 ++++++++--- manim/mobject/types/image_mobject.py | 21 +---- manim/opengl/__init__.py | 1 + manim/renderer/opengl_renderer.py | 19 +++-- manim/utils/images.py | 23 +++++- 6 files changed, 154 insertions(+), 35 deletions(-) create mode 100644 manim/mobject/opengl/opengl_image_mobject.py diff --git a/manim/mobject/opengl/opengl_image_mobject.py b/manim/mobject/opengl/opengl_image_mobject.py new file mode 100644 index 0000000000..59727f2eab --- /dev/null +++ b/manim/mobject/opengl/opengl_image_mobject.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +__all__ = [ + "OpenGLImageMobject", +] + +from pathlib import Path + +import numpy as np +from PIL import Image + +from manim.mobject.opengl.opengl_surface import OpenGLSurface, OpenGLTexturedSurface +from manim.utils.images import get_full_raster_image_path + + +class OpenGLImageMobject(OpenGLTexturedSurface): + def __init__( + self, + filename_or_array: str | Path | np.ndarray, + width: float = None, + height: float = None, + image_mode: str = "RGBA", + resampling_algorithm: int = Image.BICUBIC, + opacity: float = 1, + gloss: float = 0, + shadow: float = 0, + **kwargs, + ): + self.image = filename_or_array + self.resampling_algorithm = resampling_algorithm + if type(filename_or_array) == np.ndarray: + self.size = self.image.shape[1::-1] + elif isinstance(filename_or_array, (str, Path)): + path = get_full_raster_image_path(filename_or_array) + self.size = Image.open(path).size + + if width is None and height is None: + width = 4 * self.size[0] / self.size[1] + height = 4 + if height is None: + height = width * self.size[1] / self.size[0] + if width is None: + width = height * self.size[0] / self.size[1] + + surface = OpenGLSurface( + lambda u, v: np.array([u, v, 0]), + [-width / 2, width / 2], + [-height / 2, height / 2], + opacity=opacity, + gloss=gloss, + shadow=shadow, + ) + + super().__init__( + surface, + self.image, + image_mode=image_mode, + opacity=opacity, + gloss=gloss, + shadow=shadow, + **kwargs, + ) + + def get_image_from_file( + self, + image_file: str | Path | np.ndarray, + image_mode: str, + ): + if isinstance(image_file, (str, Path)): + return super().get_image_from_file(image_file, image_mode) + else: + return ( + Image.fromarray(image_file.astype("uint8")) + .convert(image_mode) + .resize( + np.array(image_file.shape[:2]) + * 200, # assumption of 200 ppmu (pixels per manim unit) would suffice + resample=self.resampling_algorithm, + ) + ) diff --git a/manim/mobject/opengl/opengl_surface.py b/manim/mobject/opengl/opengl_surface.py index 1d72d56a8d..542baeea97 100644 --- a/manim/mobject/opengl/opengl_surface.py +++ b/manim/mobject/opengl/opengl_surface.py @@ -1,14 +1,18 @@ from __future__ import annotations +from pathlib import Path +from typing import Iterable + import moderngl import numpy as np +from PIL import Image from manim.constants import * from manim.mobject.opengl.opengl_mobject import OpenGLMobject from manim.utils.bezier import integer_interpolate, interpolate from manim.utils.color import * from manim.utils.config_ops import _Data, _Uniforms -from manim.utils.images import get_full_raster_image_path +from manim.utils.images import change_to_rgba_array, get_full_raster_image_path from manim.utils.iterables import listify from manim.utils.space_ops import normalize_along_axis @@ -324,22 +328,37 @@ class OpenGLTexturedSurface(OpenGLSurface): num_textures = _Uniforms() def __init__( - self, uv_surface, image_file, dark_image_file=None, shader_folder=None, **kwargs + self, + uv_surface: OpenGLSurface, + image_file: str | Path, + dark_image_file: str | Path = None, + image_mode: str | Iterable[str] = "RGBA", + shader_folder: str | Path = None, + **kwargs, ): self.uniforms = {} if not isinstance(uv_surface, OpenGLSurface): raise Exception("uv_surface must be of type OpenGLSurface") + if type(image_file) == np.ndarray: + image_file = change_to_rgba_array(image_file) + # Set texture information - if dark_image_file is None: - dark_image_file = image_file - self.num_textures = 1 - else: - self.num_textures = 2 + if isinstance(image_mode, (str, Path)): + image_mode = [image_mode] * 2 + image_mode_light, image_mode_dark = image_mode texture_paths = { - "LightTexture": get_full_raster_image_path(image_file), - "DarkTexture": get_full_raster_image_path(dark_image_file), + "LightTexture": self.get_image_from_file( + image_file, + image_mode_light, + ), + "DarkTexture": self.get_image_from_file( + dark_image_file or image_file, + image_mode_dark, + ), } + if dark_image_file: + self.num_textures = 2 self.uv_surface = uv_surface self.uv_func = uv_surface.uv_func @@ -349,6 +368,14 @@ def __init__( self.gloss = self.uv_surface.gloss super().__init__(texture_paths=texture_paths, **kwargs) + def get_image_from_file( + self, + image_file: str | Path, + image_mode: str, + ): + image_file = get_full_raster_image_path(image_file) + return Image.open(image_file).convert(image_mode) + def init_data(self): super().init_data() self.im_coords = np.zeros((0, 2)) diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index 10b61a27af..241a7e3fa9 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -17,7 +17,7 @@ from ...mobject.mobject import Mobject from ...utils.bezier import interpolate from ...utils.color import WHITE, color_to_int_rgb -from ...utils.images import get_full_raster_image_path +from ...utils.images import change_to_rgba_array, get_full_raster_image_path class AbstractImageMobject(Mobject): @@ -183,26 +183,13 @@ def __init__( else: self.pixel_array = np.array(filename_or_array) self.pixel_array_dtype = kwargs.get("pixel_array_dtype", "uint8") - self.change_to_rgba_array() + self.pixel_array = change_to_rgba_array( + self.pixel_array, self.pixel_array_dtype + ) if self.invert: self.pixel_array[:, :, :3] = 255 - self.pixel_array[:, :, :3] super().__init__(scale_to_resolution, **kwargs) - def change_to_rgba_array(self): - """Converts an RGB array into RGBA with the alpha value opacity maxed.""" - pa = self.pixel_array - if len(pa.shape) == 2: - pa = pa.reshape(list(pa.shape) + [1]) - if pa.shape[2] == 1: - pa = pa.repeat(3, axis=2) - if pa.shape[2] == 3: - alphas = 255 * np.ones( - list(pa.shape[:2]) + [1], - dtype=self.pixel_array_dtype, - ) - pa = np.append(pa, alphas, axis=2) - self.pixel_array = pa - def get_pixel_array(self): """A simple getter method.""" return self.pixel_array diff --git a/manim/opengl/__init__.py b/manim/opengl/__init__.py index 85d583086a..83f6a4ccde 100644 --- a/manim/opengl/__init__.py +++ b/manim/opengl/__init__.py @@ -7,6 +7,7 @@ from manim.mobject.opengl.dot_cloud import * +from manim.mobject.opengl.opengl_image_mobject import * from manim.mobject.opengl.opengl_mobject import * from manim.mobject.opengl.opengl_point_cloud_mobject import * from manim.mobject.opengl.opengl_surface import * diff --git a/manim/renderer/opengl_renderer.py b/manim/renderer/opengl_renderer.py index 5f368d900b..ffd29cc1bf 100644 --- a/manim/renderer/opengl_renderer.py +++ b/manim/renderer/opengl_renderer.py @@ -381,18 +381,21 @@ def render_mobject(self, mobject): mesh.render() def get_texture_id(self, path): - if path not in self.path_to_texture_id: - # A way to increase tid's sequentially + if repr(path) not in self.path_to_texture_id: tid = len(self.path_to_texture_id) - im = Image.open(path) texture = self.context.texture( - size=im.size, - components=len(im.getbands()), - data=im.tobytes(), + size=path.size, + components=len(path.getbands()), + data=path.tobytes(), ) + texture.repeat_x = False + texture.repeat_y = False + texture.filter = (moderngl.NEAREST, moderngl.NEAREST) + texture.swizzle = "RRR1" if path.mode == "L" else "RGBA" texture.use(location=tid) - self.path_to_texture_id[path] = tid - return self.path_to_texture_id[path] + self.path_to_texture_id[repr(path)] = tid + + return self.path_to_texture_id[repr(path)] def update_skipping_status(self): """ diff --git a/manim/utils/images.py b/manim/utils/images.py index 544533f897..a8ef93e931 100644 --- a/manim/utils/images.py +++ b/manim/utils/images.py @@ -2,7 +2,12 @@ from __future__ import annotations -__all__ = ["get_full_raster_image_path", "drag_pixels", "invert_image"] +__all__ = [ + "get_full_raster_image_path", + "drag_pixels", + "invert_image", + "change_to_rgba_array", +] import numpy as np from PIL import Image @@ -32,3 +37,19 @@ def invert_image(image: np.array) -> Image: arr = np.array(image) arr = (255 * np.ones(arr.shape)).astype(arr.dtype) - arr return Image.fromarray(arr) + + +def change_to_rgba_array(image, dtype="uint8"): + """Converts an RGB array into RGBA with the alpha value opacity maxed.""" + pa = image + if len(pa.shape) == 2: + pa = pa.reshape(list(pa.shape) + [1]) + if pa.shape[2] == 1: + pa = pa.repeat(3, axis=2) + if pa.shape[2] == 3: + alphas = 255 * np.ones( + list(pa.shape[:2]) + [1], + dtype=dtype, + ) + pa = np.append(pa, alphas, axis=2) + return pa From a8bc854abe6e8e8e568ba2330de2e35f439d711d Mon Sep 17 00:00:00 2001 From: Hamidreza Hashemi <52376408+zzzzz1st@users.noreply.github.com> Date: Sun, 24 Apr 2022 09:24:26 +0200 Subject: [PATCH 032/555] Removed :class:`CameraFrame` (#2691) * Removed CameraFrame (#2689) * removed superfluous comment Co-authored-by: Benjamin Hackl Co-authored-by: Naveen M K --- manim/camera/moving_camera.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/manim/camera/moving_camera.py b/manim/camera/moving_camera.py index 581e3150e7..22d6be22ed 100644 --- a/manim/camera/moving_camera.py +++ b/manim/camera/moving_camera.py @@ -8,25 +8,16 @@ from __future__ import annotations -__all__ = ["CameraFrame", "MovingCamera"] +__all__ = ["MovingCamera"] from .. import config from ..camera.camera import Camera -from ..constants import DOWN, LEFT, ORIGIN, RIGHT, UP +from ..constants import DOWN, LEFT, RIGHT, UP from ..mobject.frame import ScreenRectangle from ..mobject.mobject import Mobject -from ..mobject.types.vectorized_mobject import VGroup from ..utils.color import WHITE -# TODO, think about how to incorporate perspective -class CameraFrame(VGroup): - def __init__(self, center=ORIGIN, **kwargs): - super().__init__(center=center, **kwargs) - self.width = config["frame_width"] - self.height = config["frame_height"] - - class MovingCamera(Camera): """ Stays in line with the height, width and position of it's 'frame', which is a Rectangle From b451301de7ef3dd2ad5184bb72c08390f0a53181 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Sun, 24 Apr 2022 13:43:32 +0530 Subject: [PATCH 033/555] Improve `scripts/dev_changelog.py` (#2696) * dev_changelog: Normalize newline to `\n` This otherwise creates issues when the changlog is rendered in windows * Fetch Github API using threads This would make the changelog generation faster as the requests to Github API are made simultaneously. --- scripts/dev_changelog.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/scripts/dev_changelog.py b/scripts/dev_changelog.py index 97dc3e7cb8..707b627d21 100755 --- a/scripts/dev_changelog.py +++ b/scripts/dev_changelog.py @@ -45,6 +45,7 @@ from __future__ import annotations +import concurrent.futures import datetime import os import re @@ -88,6 +89,7 @@ def update_citation(version, date): with open(os.path.join(current_directory, "TEMPLATE.cff")) as a, open( os.path.join(parent_directory, "CITATION.cff"), "w", + newline="\n", ) as b: contents = a.read() contents = contents.replace("", version) @@ -102,17 +104,23 @@ def process_pullrequests(lst, cur, github_repo, pr_nums): authors = set() reviewers = set() pr_by_labels = defaultdict(list) - for num in tqdm(pr_nums, desc="Processing PRs"): - pr = github_repo.get_pull(num) - authors.add(pr.user) - reviewers = reviewers.union(rev.user for rev in pr.get_reviews()) - pr_labels = [label.name for label in pr.labels] - for label in PR_LABELS.keys(): - if label in pr_labels: - pr_by_labels[label].append(pr) - break # ensure that PR is only added in one category - else: - pr_by_labels["unlabeled"].append(pr) + with concurrent.futures.ThreadPoolExecutor() as executor: + future_to_num = { + executor.submit(github_repo.get_pull, num): num for num in pr_nums + } + for future in tqdm( + concurrent.futures.as_completed(future_to_num), "Processing PRs" + ): + pr = future.result() + authors.add(pr.user) + reviewers = reviewers.union(rev.user for rev in pr.get_reviews()) + pr_labels = [label.name for label in pr.labels] + for label in PR_LABELS.keys(): + if label in pr_labels: + pr_by_labels[label].append(pr) + break # ensure that PR is only added in one category + else: + pr_by_labels["unlabeled"].append(pr) # identify first-time contributors: author_names = [] @@ -239,7 +247,7 @@ def main(token, prior, tag, additional, outfile): else: outfile = Path(outfile).resolve() - with outfile.open("w", encoding="utf8") as f: + with outfile.open("w", encoding="utf8", newline="\n") as f: f.write("*" * len(tag) + "\n") f.write(f"{tag}\n") f.write("*" * len(tag) + "\n\n") From 5f490a98814b019a4b9e9c01c4e67278347c61f1 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Sun, 24 Apr 2022 14:59:18 +0530 Subject: [PATCH 034/555] devchangelog: Sort items before writing (#2697) After https://github.com/ManimCommunity/manim/pull/2696 it caused an issue where each time rendering the order of pull requests changes. Fix that issue by sorting it based on the number of the pull request. --- scripts/dev_changelog.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/dev_changelog.py b/scripts/dev_changelog.py index 707b627d21..98472f3bdf 100755 --- a/scripts/dev_changelog.py +++ b/scripts/dev_changelog.py @@ -139,6 +139,10 @@ def process_pullrequests(lst, cur, github_repo, pr_nums): continue reviewer_names.append(name) + # Sort items in pr_by_labels + for i in pr_by_labels: + pr_by_labels[i] = sorted(pr_by_labels[i], key=lambda pr: pr.number) + return { "authors": sorted(author_names), "reviewers": sorted(reviewer_names), From 32b714a898593db7e68c33926bfbfc521adb8ff9 Mon Sep 17 00:00:00 2001 From: Jason Villanueva Date: Sun, 24 Apr 2022 03:05:23 -0700 Subject: [PATCH 035/555] Improved CLI help page styling (#1975) * First draft of cloup/click update * Added some customizability via cfg files * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fixed test_command epilogs * Adjusted logic for overriding theme * Update main help page, no_args_is_help, and documentation * Removed help shorthand '-h' * Apply suggestions from code review Co-authored-by: Benjamin Hackl * Update poetry lock again, update DefaultGroup snippet Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl Co-authored-by: Naveen M K --- docs/source/tutorials/configuration.rst | 38 ++++++ manim/__main__.py | 12 +- manim/_config/__init__.py | 3 + manim/_config/cli_colors.py | 50 +++++++ manim/_config/default.cfg | 30 +++++ manim/cli/cfg/group.py | 15 ++- manim/cli/default_group.py | 67 ++++++++++ manim/cli/init/commands.py | 4 +- manim/cli/new/group.py | 17 +-- manim/cli/plugins/commands.py | 6 +- manim/cli/render/commands.py | 1 + manim/constants.py | 10 +- poetry.lock | 168 ++++++++++-------------- pyproject.toml | 2 +- scripts/dev_changelog.py | 3 +- tests/test_commands.py | 12 +- 16 files changed, 305 insertions(+), 133 deletions(-) create mode 100644 manim/_config/cli_colors.py create mode 100644 manim/cli/default_group.py diff --git a/docs/source/tutorials/configuration.rst b/docs/source/tutorials/configuration.rst index 46c32cbda2..17cdfecc90 100644 --- a/docs/source/tutorials/configuration.rst +++ b/docs/source/tutorials/configuration.rst @@ -363,3 +363,41 @@ A list of all config options 'upto_animation_number', 'use_opengl_renderer', 'verbosity', 'video_dir', 'window_position', 'window_monitor', 'window_size', 'write_all', 'write_to_movie', 'enable_wireframe', 'force_window'] + + +Accessing CLI command options +***************************** + +Entering ``manim``, or ``manim --help``, will open the main help page. + +.. code:: + + Usage: manim [OPTIONS] COMMAND [ARGS]... + + Animation engine for explanatory math videos. + + Options: + --version Show version and exit. + --help Show this message and exit. + + Commands: + cfg Manages Manim configuration files. + init Sets up a new project in current working directory with default + settings. + + It copies files from templates directory and pastes them in the + current working dir. + new Create a new project or insert a new scene. + plugins Manages Manim plugins. + render Render SCENE(S) from the input FILE. + + See 'manim ' to read about a specific subcommand. + + Made with <3 by Manim Community developers. + +Each of the subcommands has its own help page which can be accessed similarly: + +.. code:: + + manim render + manim render --help diff --git a/manim/__main__.py b/manim/__main__.py index 9905185c09..2272002ac3 100644 --- a/manim/__main__.py +++ b/manim/__main__.py @@ -3,10 +3,11 @@ import sys import click -from click_default_group import DefaultGroup +import cloup -from . import __version__, console +from . import __version__, cli_ctx_settings, console from .cli.cfg.group import cfg +from .cli.default_group import DefaultGroup from .cli.init.commands import init from .cli.new.group import new from .cli.plugins.commands import plugins @@ -22,12 +23,13 @@ def exit_early(ctx, param, value): console.print(f"Manim Community [green]v{__version__}[/green]\n") -@click.group( +@cloup.group( + context_settings=cli_ctx_settings, cls=DefaultGroup, default="render", no_args_is_help=True, - help="Animation engine for explanatory math videos", - epilog=EPILOG, + help="Animation engine for explanatory math videos.", + epilog="See 'manim ' to read about a specific subcommand.\n\n" + EPILOG, ) @click.option( "--version", diff --git a/manim/_config/__init__.py b/manim/_config/__init__.py index 036f54c188..ebcca2d550 100644 --- a/manim/_config/__init__.py +++ b/manim/_config/__init__.py @@ -5,6 +5,7 @@ import logging from contextlib import _GeneratorContextManager, contextmanager +from .cli_colors import parse_cli_ctx from .logger_utils import make_logger from .utils import ManimConfig, ManimFrame, make_config_parser @@ -15,6 +16,7 @@ "config", "frame", "tempconfig", + "cli_ctx_settings", ] parser = make_config_parser() @@ -28,6 +30,7 @@ parser["logger"], parser["CLI"]["verbosity"], ) +cli_ctx_settings = parse_cli_ctx(parser["CLI_CTX"]) # TODO: temporary to have a clean terminal output when working with PIL or matplotlib logging.getLogger("PIL").setLevel(logging.INFO) logging.getLogger("matplotlib").setLevel(logging.INFO) diff --git a/manim/_config/cli_colors.py b/manim/_config/cli_colors.py new file mode 100644 index 0000000000..dfeeabd317 --- /dev/null +++ b/manim/_config/cli_colors.py @@ -0,0 +1,50 @@ +import configparser + +from cloup import Context, HelpFormatter, HelpTheme, Style + + +def parse_cli_ctx(parser: configparser.ConfigParser) -> Context: + formatter_settings = { + "indent_increment": int(parser["indent_increment"]), + "width": int(parser["width"]), + "col1_max_width": int(parser["col1_max_width"]), + "col2_min_width": int(parser["col2_min_width"]), + "col_spacing": int(parser["col_spacing"]), + "row_sep": parser["row_sep"] if parser["row_sep"] else None, + } + theme_settings = {} + theme_keys = { + "command_help", + "invoked_command", + "heading", + "constraint", + "section_help", + "col1", + "col2", + "epilog", + } + for k, v in parser.items(): + if k in theme_keys and v: + theme_settings.update({k: Style(v)}) + + formatter = {} + theme = parser["theme"] if parser["theme"] else None + if theme is None: + formatter = HelpFormatter().settings( + theme=HelpTheme(**theme_settings), **formatter_settings + ) + elif theme.lower() == "dark": + formatter = HelpFormatter().settings( + theme=HelpTheme.dark().with_(**theme_settings), **formatter_settings + ) + elif theme.lower() == "light": + formatter = HelpFormatter().settings( + theme=HelpTheme.light().with_(**theme_settings), **formatter_settings + ) + + return Context.settings( + align_option_groups=parser["align_option_groups"].lower() == "true", + align_sections=parser["align_sections"].lower() == "true", + show_constraints=True, + formatter_settings=formatter, + ) diff --git a/manim/_config/default.cfg b/manim/_config/default.cfg index 1d70cb9f08..ee382742e0 100644 --- a/manim/_config/default.cfg +++ b/manim/_config/default.cfg @@ -159,6 +159,36 @@ tex_template = # manim will load that plugin if it specified here. plugins = +# CLI Context/Formatter +# Visit the cloup documentation to understand the formatting options available: +# https://cloup.readthedocs.io/en/latest/index.html#a-simple-example +[CLI_CTX] +# CTX settings +align_option_groups = True +align_sections = True +show_constraints = True + +# Formatter settings +indent_increment = 2 +width = 80 +col1_max_width = 30 +col2_min_width = 35 +col_spacing = 2 +row_sep = + +# Dark/Light, or leave empty +theme = + +# Theme Settings - The following options override the theme colors. +command_help = +invoked_command = +heading = +constraint = +section_help = +col1 = +col2 = +epilog = + # Overrides the default output folders, NOT the output file names. Note that # if the custom_folders flag is present, the Tex and text files will not be put # under media_dir, as is the default. diff --git a/manim/cli/cfg/group.py b/manim/cli/cfg/group.py index 3cc5b207d6..474de60f92 100644 --- a/manim/cli/cfg/group.py +++ b/manim/cli/cfg/group.py @@ -11,12 +11,13 @@ from ast import literal_eval import click +import cloup from rich.errors import StyleSyntaxError from rich.style import Style -from ... import console +from ... import cli_ctx_settings, console from ..._config.utils import config_file_paths, make_config_parser -from ...constants import CONTEXT_SETTINGS, EPILOG +from ...constants import EPILOG from ...utils.file_ops import guarantee_existence, open_file RICH_COLOUR_INSTRUCTIONS: str = """ @@ -114,8 +115,8 @@ def replace_keys(default: dict) -> dict: return default -@click.group( - context_settings=CONTEXT_SETTINGS, +@cloup.group( + context_settings=cli_ctx_settings, invoke_without_command=True, no_args_is_help=True, epilog=EPILOG, @@ -127,7 +128,7 @@ def cfg(ctx): pass -@cfg.command(context_settings=CONTEXT_SETTINGS, no_args_is_help=True) +@cfg.command(context_settings=cli_ctx_settings, no_args_is_help=True) @click.option( "-l", "--level", @@ -237,7 +238,7 @@ def write(level: str = None, openfile: bool = False) -> None: open_file(cfg_file_path) -@cfg.command(context_settings=CONTEXT_SETTINGS) +@cfg.command(context_settings=cli_ctx_settings) def show(): parser = make_config_parser() rich_non_style_entries = [a.replace(".", "_") for a in RICH_NON_STYLE_ENTRIES] @@ -255,7 +256,7 @@ def show(): console.print("\n") -@cfg.command(context_settings=CONTEXT_SETTINGS) +@cfg.command(context_settings=cli_ctx_settings) @click.option("-d", "--directory", default=os.getcwd()) @click.pass_context def export(ctx, directory): diff --git a/manim/cli/default_group.py b/manim/cli/default_group.py new file mode 100644 index 0000000000..c8c4d7b7bb --- /dev/null +++ b/manim/cli/default_group.py @@ -0,0 +1,67 @@ +"""DefaultGroup allows a subcommand to act as the main command + +In particular, this class is what allows ``manim`` to act as ``manim render``. +""" +import cloup + +from .. import logger + +__all__ = ["DefaultGroup"] + + +class DefaultGroup(cloup.Group): + """Invokes a subcommand marked with ``default=True`` if any subcommand not + chosen. + """ + + def __init__(self, *args, **kwargs): + # To resolve as the default command. + if not kwargs.get("ignore_unknown_options", True): + raise ValueError("Default group accepts unknown options") + self.ignore_unknown_options = True + self.default_cmd_name = kwargs.pop("default", None) + self.default_if_no_args = kwargs.pop("default_if_no_args", False) + super().__init__(*args, **kwargs) + + def set_default_command(self, command): + """Sets a command function as the default command.""" + cmd_name = command.name + self.add_command(command) + self.default_cmd_name = cmd_name + + def parse_args(self, ctx, args): + if not args and self.default_if_no_args: + args.insert(0, self.default_cmd_name) + return super().parse_args(ctx, args) + + def get_command(self, ctx, cmd_name): + if cmd_name not in self.commands: + # No command name matched. + ctx.arg0 = cmd_name + cmd_name = self.default_cmd_name + return super().get_command(ctx, cmd_name) + + def resolve_command(self, ctx, args): + base = super() + cmd_name, cmd, args = base.resolve_command(ctx, args) + if hasattr(ctx, "arg0"): + args.insert(0, ctx.arg0) + cmd_name = cmd.name + return cmd_name, cmd, args + + def command(self, *args, **kwargs): + default = kwargs.pop("default", False) + decorator = super().command(*args, **kwargs) + if not default: + return decorator + logger.log( + "Use default param of DefaultGroup or " "set_default_command() instead", + DeprecationWarning, + ) + + def _decorator(f): + cmd = decorator(f) + self.set_default_command(cmd) + return cmd + + return _decorator diff --git a/manim/cli/init/commands.py b/manim/cli/init/commands.py index d619730de2..410d7a9f07 100644 --- a/manim/cli/init/commands.py +++ b/manim/cli/init/commands.py @@ -9,13 +9,13 @@ from pathlib import Path -import click +import cloup from ...constants import CONTEXT_SETTINGS, EPILOG from ...utils.file_ops import copy_template_files -@click.command( +@cloup.command( context_settings=CONTEXT_SETTINGS, epilog=EPILOG, short_help="""Sets up a new project in current working directory with default settings.\n diff --git a/manim/cli/new/group.py b/manim/cli/new/group.py index d53bcf4690..b9ee9ccfe2 100644 --- a/manim/cli/new/group.py +++ b/manim/cli/new/group.py @@ -4,6 +4,7 @@ from pathlib import Path import click +import cloup from ... import console from ...constants import CONTEXT_SETTINGS, EPILOG, QUALITIES @@ -70,12 +71,12 @@ def update_cfg(cfg_dict, project_cfg_path): config.write(conf) -@click.command( +@cloup.command( context_settings=CONTEXT_SETTINGS, epilog=EPILOG, ) -@click.argument("project_name", type=Path, required=False) -@click.option( +@cloup.argument("project_name", type=Path, required=False) +@cloup.option( "-d", "--default", "default_settings", @@ -127,13 +128,13 @@ def project(default_settings, **args): update_cfg(CFG_DEFAULTS, new_cfg_path) -@click.command( +@cloup.command( context_settings=CONTEXT_SETTINGS, no_args_is_help=True, epilog=EPILOG, ) -@click.argument("scene_name", type=str, required=True) -@click.argument("file_name", type=str, required=False) +@cloup.argument("scene_name", type=str, required=True) +@cloup.argument("file_name", type=str, required=False) def scene(**args): """Inserts a SCENE to an existing FILE or creates a new FILE. @@ -174,14 +175,14 @@ def scene(**args): f.write("\n\n\n" + scene) -@click.group( +@cloup.group( context_settings=CONTEXT_SETTINGS, invoke_without_command=True, no_args_is_help=True, epilog=EPILOG, help="Create a new project or insert a new scene.", ) -@click.pass_context +@cloup.pass_context def new(ctx): pass diff --git a/manim/cli/plugins/commands.py b/manim/cli/plugins/commands.py index 06c4c42e56..1d34f9431f 100644 --- a/manim/cli/plugins/commands.py +++ b/manim/cli/plugins/commands.py @@ -7,19 +7,19 @@ """ from __future__ import annotations -import click +import cloup from ...constants import CONTEXT_SETTINGS, EPILOG from ...plugins.plugins_flags import list_plugins -@click.command( +@cloup.command( context_settings=CONTEXT_SETTINGS, no_args_is_help=True, epilog=EPILOG, help="Manages Manim plugins.", ) -@click.option( +@cloup.option( "-l", "--list", "list_available", diff --git a/manim/cli/render/commands.py b/manim/cli/render/commands.py index 96a7943e58..bc63157311 100644 --- a/manim/cli/render/commands.py +++ b/manim/cli/render/commands.py @@ -26,6 +26,7 @@ @cloup.command( context_settings=None, + no_args_is_help=True, epilog=EPILOG, ) @click.argument("file", type=Path, required=True) diff --git a/manim/constants.py b/manim/constants.py index 6efde3b858..6206ec6772 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -5,6 +5,7 @@ from __future__ import annotations import numpy as np +from cloup import Context from PIL import Image __all__ = [ @@ -71,7 +72,6 @@ "DEFAULT_QUALITY", "DEFAULT_QUALITY_SHORT", "EPILOG", - "HELP_OPTIONS", "CONTEXT_SETTINGS", "SHIFT_VALUE", "CTRL_VALUE", @@ -260,7 +260,11 @@ DEFAULT_QUALITY_SHORT = QUALITIES[DEFAULT_QUALITY]["flag"] EPILOG = "Made with <3 by Manim Community developers." -HELP_OPTIONS = ["-h", "--help"] -CONTEXT_SETTINGS = {"help_option_names": HELP_OPTIONS} SHIFT_VALUE = 65505 CTRL_VALUE = 65507 + +CONTEXT_SETTINGS = Context.settings( + align_option_groups=True, + align_sections=True, + show_constraints=True, +) diff --git a/poetry.lock b/poetry.lock index 819e1e600c..35942fc228 100644 --- a/poetry.lock +++ b/poetry.lock @@ -74,7 +74,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [[package]] name = "astroid" -version = "2.11.2" +version = "2.11.3" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -110,11 +110,11 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "babel" -version = "2.9.1" +version = "2.10.1" description = "Internationalization utilities" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [package.dependencies] pytz = ">=2015.7" @@ -562,19 +562,20 @@ importlib-metadata = {version = ">=0.9", markers = "python_version < \"3.8\""} [[package]] name = "fonttools" -version = "4.32.0" +version = "4.33.2" description = "Tools to manipulate font files" category = "dev" optional = false python-versions = ">=3.7" [package.extras] -all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=14.0.0)", "xattr"] +all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "uharfbuzz (>=0.23.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=14.0.0)", "xattr"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["scipy", "munkres"] lxml = ["lxml (>=4.0,<5)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] @@ -866,16 +867,19 @@ test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-comm [[package]] name = "jupyter-core" -version = "4.9.2" +version = "4.10.0" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} traitlets = "*" +[package.extras] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + [[package]] name = "jupyter-server" version = "1.16.0" @@ -937,7 +941,7 @@ python-versions = ">=3.7" [[package]] name = "jupyterlab-server" -version = "2.12.0" +version = "2.13.0" description = "A set of server components for JupyterLab and JupyterLab like applications ." category = "main" optional = true @@ -945,17 +949,17 @@ python-versions = ">=3.7" [package.dependencies] babel = "*" -entrypoints = ">=0.2.2" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0.3" json5 = "*" jsonschema = ">=3.0.1" -jupyter-server = ">=1.8,<2.0" +jupyter-server = ">=1.8,<2" packaging = "*" requests = "*" [package.extras] openapi = ["openapi-core (>=0.14.2)", "ruamel.yaml"] -test = ["codecov", "ipykernel", "pytest (>=5.3.2)", "pytest-cov", "jupyter-server", "pytest-console-scripts", "strict-rfc3339", "wheel", "openapi-spec-validator (<0.5)", "openapi-core (>=0.14.2)", "ruamel.yaml"] +test = ["openapi-core (>=0.14.2)", "ruamel.yaml", "codecov", "ipykernel", "jupyter-server", "openapi-spec-validator (<0.5)", "pytest-console-scripts", "pytest-cov", "pytest (>=5.3.2)", "strict-rfc3339", "wheel"] [[package]] name = "kiwisolver" @@ -1242,11 +1246,11 @@ python-versions = "*" [[package]] name = "notebook" -version = "6.4.10" +version = "6.4.11" description = "A web-based notebook environment for interactive computing" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] argon2-cffi = "*" @@ -1268,7 +1272,7 @@ traitlets = ">=4.2.1" [package.extras] docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] json-logging = ["json-logging"] -test = ["pytest", "coverage", "requests", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] +test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] [[package]] name = "notebook-shim" @@ -1364,15 +1368,15 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa [[package]] name = "platformdirs" -version = "2.5.1" +version = "2.5.2" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" [package.extras] -docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pluggy" @@ -1569,14 +1573,14 @@ tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] [[package]] name = "pylint" -version = "2.13.5" +version = "2.13.7" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -astroid = ">=2.11.2,<=2.12.0-dev0" +astroid = ">=2.11.3,<=2.12.0-dev0" colorama = {version = "*", markers = "sys_platform == \"win32\""} dill = ">=0.2" isort = ">=4.2.5,<6" @@ -1605,7 +1609,7 @@ tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] [[package]] name = "pyobjc-core" -version = "8.4.1" +version = "8.5" description = "Python<->ObjC Interoperability Module" category = "main" optional = false @@ -1613,14 +1617,14 @@ python-versions = ">=3.6" [[package]] name = "pyobjc-framework-cocoa" -version = "8.4.1" +version = "8.5" description = "Wrappers for the Cocoa frameworks on macOS" category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -pyobjc-core = ">=8.4.1" +pyobjc-core = ">=8.5" [[package]] name = "pyparsing" @@ -2185,7 +2189,7 @@ python-versions = "*" [[package]] name = "types-docutils" -version = "0.18.2" +version = "0.18.3" description = "Typing stubs for docutils" category = "dev" optional = false @@ -2201,7 +2205,7 @@ python-versions = "*" [[package]] name = "types-protobuf" -version = "3.19.17" +version = "3.19.18" description = "Typing stubs for protobuf" category = "dev" optional = false @@ -2221,7 +2225,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.27.19" +version = "2.27.20" description = "Typing stubs for requests" category = "dev" optional = false @@ -2248,11 +2252,11 @@ python-versions = "*" [[package]] name = "typing-extensions" -version = "4.1.1" -description = "Backported and Experimental Type Hints for Python 3.6+" +version = "4.2.0" +description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "urllib3" @@ -2353,7 +2357,7 @@ jupyterlab = ["jupyterlab"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "cf4119e335a4bba36b518caf685dfa8403bd6e426a5e859679affc1b728d209b" +content-hash = "30528079fd9e1880d63fbbb4fe28e72f90fb1815a48a553d089c9e990a2a79aa" [metadata.files] alabaster = [ @@ -2400,8 +2404,8 @@ astor = [ {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, ] astroid = [ - {file = "astroid-2.11.2-py3-none-any.whl", hash = "sha256:cc8cc0d2d916c42d0a7c476c57550a4557a083081976bf42a73414322a6411d9"}, - {file = "astroid-2.11.2.tar.gz", hash = "sha256:8d0a30fe6481ce919f56690076eafbb2fb649142a89dc874f1ec0e7a011492d0"}, + {file = "astroid-2.11.3-py3-none-any.whl", hash = "sha256:f1af57483cd17e963b2eddce8361e00fc593d1520fe19948488e94ff6476bd71"}, + {file = "astroid-2.11.3.tar.gz", hash = "sha256:4e5ba10571e197785e312966ea5efb2f5783176d4c1a73fa922d474ae2be59f7"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -2412,8 +2416,8 @@ attrs = [ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, ] babel = [ - {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, - {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, + {file = "Babel-2.10.1-py3-none-any.whl", hash = "sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2"}, + {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, ] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, @@ -2745,8 +2749,8 @@ flake8-simplify = [ {file = "flake8_simplify-0.14.6.tar.gz", hash = "sha256:c4008db8016707684a1f0502ee69f3c2da37687d3cf7031cc1f326bf5986bf47"}, ] fonttools = [ - {file = "fonttools-4.32.0-py3-none-any.whl", hash = "sha256:b038d1a0dee0079de7ade57071e2e2aced6e35bd697de244ac62938b2b1628c1"}, - {file = "fonttools-4.32.0.zip", hash = "sha256:59a90de72149893167e3d552ae2402c6874e006b9adc3feaf5f6d706fe20d392"}, + {file = "fonttools-4.33.2-py3-none-any.whl", hash = "sha256:b4da40696829845ea8c1cb33ce51c552179754cbee7ab4e8b96a6bcf421f437a"}, + {file = "fonttools-4.33.2.zip", hash = "sha256:696fe922a271584c3ec8325ba31d4001a4fd6c4953b22900b767f1cb53ce1044"}, ] furo = [ {file = "furo-2021.11.23-py3-none-any.whl", hash = "sha256:6d396451ad1aadce380c662fca9362cb10f4fd85f296d74fe3ca32006eb641d7"}, @@ -2871,8 +2875,8 @@ jupyter-client = [ {file = "jupyter_client-7.2.2.tar.gz", hash = "sha256:8fdbad344a8baa6a413d86d25bbf87ce21cb2b4aa5a8e0413863b9754eb8eb8a"}, ] jupyter-core = [ - {file = "jupyter_core-4.9.2-py3-none-any.whl", hash = "sha256:f875e4d27e202590311d468fa55f90c575f201490bd0c18acabe4e318db4a46d"}, - {file = "jupyter_core-4.9.2.tar.gz", hash = "sha256:d69baeb9ffb128b8cd2657fcf2703f89c769d1673c851812119e3a2a0e93ad9a"}, + {file = "jupyter_core-4.10.0-py3-none-any.whl", hash = "sha256:e7f5212177af7ab34179690140f188aa9bf3d322d8155ed972cbded19f55b6f3"}, + {file = "jupyter_core-4.10.0.tar.gz", hash = "sha256:a6de44b16b7b31d7271130c71a6792c4040f077011961138afed5e5e73181aec"}, ] jupyter-server = [ {file = "jupyter_server-1.16.0-py3-none-any.whl", hash = "sha256:72dd1ff5373d2def94e80632ba4397e504cc9200c5b5f44b5b0af2e062a73353"}, @@ -2887,8 +2891,8 @@ jupyterlab-pygments = [ {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, ] jupyterlab-server = [ - {file = "jupyterlab_server-2.12.0-py3-none-any.whl", hash = "sha256:db5d234955c5c2684f77a064345712f071acf7df31f0d8c31b420b33b09d6472"}, - {file = "jupyterlab_server-2.12.0.tar.gz", hash = "sha256:00e0f4b4c399f55938323ea10cf92d915288fe12753e35d1069f6ca08b72abbf"}, + {file = "jupyterlab_server-2.13.0-py3-none-any.whl", hash = "sha256:fc9e86d4e7c4b139de59b0a96b53071e670bee1ed106a3389daecd68f1221aeb"}, + {file = "jupyterlab_server-2.13.0.tar.gz", hash = "sha256:2040298a133458aa22f287a877d6bb91ff973f6298d562264f9f7b75e92a5ace"}, ] kiwisolver = [ {file = "kiwisolver-1.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e395ece147f0692ca7cdb05a028d31b83b72c369f7b4a2c1798f4b96af1e3d8"}, @@ -3113,14 +3117,8 @@ mistune = [ {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, ] moderngl = [ - {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:186f8ab2b869c56f677dc87de0577a60790fb9306bd5149cedc433a39e9291e5"}, - {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de252103b24a8dc40c7f6e1755e29bc9263c33b92141787b50c7ab0266c74906"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bcfcec3bc3b9a1ee19e94fa524913fd45c37214ea69301a6911e8e53f966029"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d76b0fb489a5dc6da591b979f8c471bb5b67409afaa9fe4569bc0abf25221f4"}, {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_27_x86_64.whl", hash = "sha256:792ffe1ec233ed5fcfb0c14955a7f944d64c0d49713ff8b9c5fa3176d96f05c3"}, {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:1f9ed0bc0d706124a01be2ad59b5774bb3b023e61dcf39faf7c4c7ef4b9f4f75"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7c2fce8b7a68f3df9189a19f424478e1d853cfd3e142efd1eb0d4cdf44148d7"}, - {file = "moderngl-5.6.4-cp310-cp310-win32.whl", hash = "sha256:0c6b482f678641e56bd44acecd10eddf74d2cd31e472eff6cca05493cf01e2c9"}, {file = "moderngl-5.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:28b517fc56c9ab9eb1f5833f7d7b1274d3719b962f95f55ccd8a0f6db884a92b"}, {file = "moderngl-5.6.4-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:bc3764d67f037b67051871345a1d0b7a3d2c19cb5c0c0af0a84c532e802d6642"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:90006d9dfd5333da604a7d26b2a5e70e1a570f291cd745b8bf80e4833d8821b6"}, @@ -3130,45 +3128,21 @@ moderngl = [ {file = "moderngl-5.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:331fd4bce60b10a08eed81a3ed4c70b7c297c38f981fdf3968d03a1c892af247"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1bd864b5cc2fc1255785e33575cec98fa5ded698503c4f8f3fa9230abeaa3a04"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b22534529f5bc52c1fe43336787c06d51123ae978fb56e74e47cabd85056c934"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5151ccf38af80ce8600eac089df1c814eb72aa99c8768307348c1a170104b7e"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ef57f65c639d12d534dce70e5c08965f0856ac371c669c7586904b8db6453eb"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0032c07b31bec50b26bba7ee7999e0f697000b31456bfa84391614bb92dba376"}, {file = "moderngl-5.6.4-cp36-cp36m-win32.whl", hash = "sha256:ee5b1eced39d7f6dc68782c2abf01c1130a40b6d83d333d175ee71adbea7c721"}, {file = "moderngl-5.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:52ee915a559762f0e992344961b35e0d241be32f8aa7464494e958f777e0534c"}, {file = "moderngl-5.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f83f6ab1fafdba2d9c06a7a1c8a4e460689ea1d514146606acc74f14e0831d93"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c350e06affea9fabc636b2350cf6e58d83ee2e7264527eee0f5d142c167f5463"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3eb65afc8ec4a1d4a4c48696fb0f4f6cf7a7ada6bef97818d717dbca73c57b11"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ec09bb3382d36e5ef3e627e85744b719db1175c3a3fdbadf9acde48eb1aca6"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23b6b30c5a16807d9d2b92f343fcdca8713a88801d8afa985decd302bb6ef7e9"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5eb217b7726511d2382bfdd56b2a8ff5489aa7d1d73bf4f854343b07df286fa9"}, {file = "moderngl-5.6.4-cp37-cp37m-win32.whl", hash = "sha256:4fd721eb83e73d34c3f7b5a11aec656fef461b51bbe7503b07ea27370c593cbd"}, {file = "moderngl-5.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:01c71d94dbd59b5d37ead463991e2998c0924426cffa393b9da2b8334551c998"}, - {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:46e7e03360eafa77159e0d6142904de0d2e9400254414820bbc2d0ca16b14388"}, {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2ec6ecd845f21ba44a08c11521cb71f2a9c2ea2ec189b7ed30d17837d392d70"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:40f74a2246e5302f93f2d46f76c0d2a26cbed1eb29731674c4052476f1e9c9ea"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5e158e6881034c7e1d0c583d7c82ff608439606f2359dc6098e4be4fd93cef9d"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eb8fb5efab2716938308732d16d0caf1a195015d84d73f2b73e3adacd228ba6"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59907d8855dd3ccf1950e8f43f5a1a7cdd93910d8edf538bf52e62098be22360"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8037b6934843000d5fecd2b1933d3894687123fc9afdb19af52a9a628971163d"}, {file = "moderngl-5.6.4-cp38-cp38-win32.whl", hash = "sha256:a28dc741469eeb69549ee85b4ddbf8e9cfca6a2b19ce0406df9fde20f78082c8"}, {file = "moderngl-5.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:ce87962b91635d857cac4a753c5d5f647d94dc66dcb0f090bb8d758fd226c3e8"}, - {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d4c56e15a5fb29de0295891ec3b153e2bd8aeada0c0825135aa5851fa481ff28"}, {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fb139bcdd25eae2c546e5788e9d8719f6c4b18a2ba68a9df31699b4ac57d62d"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9645afaa1704b2628d8a58be0760243d9954a62902283b176ea00a55b54eafe"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a3aaa15eb4d43b79e06a46945869feb13f325312ad63666ef2b7d3e216e3a09"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a07531c6b0f3da3058bd8927bc6c75eface98ce1416d8be4072b9b11b314b718"}, {file = "moderngl-5.6.4-cp39-cp39-win32.whl", hash = "sha256:fc5cc1601a3df8f45f1901c6b9960731e0619d1781b0d036e12341fbf2ef55d3"}, {file = "moderngl-5.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:1c74b71c9acee9f0e69807a086d76e92f37c1960c3bb1d6a6e2472fd03f7be5b"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1927a52fd3465c508045a1c4a8ea8c793399830d48458d431936f24f8827f136"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d04747cc9a96f786d04c8a176d5d2cbb51159efd66287d0e676ac674f53e861"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9092c50a2bb293be770f6f0ae5f1cb940848bf03682696c473a6d3f2c7710d2"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571e524fde685e21dbe132f4eb7bb223cfc235dc917a4cf122bc44897be18e89"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ee02dba4b32d7a165a36c797ce495d71deb085a7e29cfa7f1236fa7ccdfc6160"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0c02fdd386c45ad5d5053a436da64181a7821a042f6665c4ae415edfbdfe244c"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e2b40f1e11ee5f251a0d564e6a5d285ff91adf361e84f6912fc10959b92bd83"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d5f918dda6dc1ec5465d7105b06c5525041fbc368df5d4636145006ce3d303"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a6bd0e342388b931954671ccf8300ab36cc7d8c991547581efa6df5628bda8b"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:890caba3795a0288259d76a2cee014c6ffc00619bef179a8d0a87fd9c16a3729"}, {file = "moderngl-5.6.4.tar.gz", hash = "sha256:8c6d04559f5e3bf75a18525cd46d213c0f3a8409363718978e6de691bdb551fb"}, ] moderngl-window = [ @@ -3235,8 +3209,8 @@ nodeenv = [ {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, ] notebook = [ - {file = "notebook-6.4.10-py3-none-any.whl", hash = "sha256:49cead814bff0945fcb2ee07579259418672ac175d3dc3d8102a4b0a656ed4df"}, - {file = "notebook-6.4.10.tar.gz", hash = "sha256:2408a76bc6289283a8eecfca67e298ec83c67db51a4c2e1b713dd180bb39e90e"}, + {file = "notebook-6.4.11-py3-none-any.whl", hash = "sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505"}, + {file = "notebook-6.4.11.tar.gz", hash = "sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a"}, ] notebook-shim = [ {file = "notebook_shim-0.1.0-py3-none-any.whl", hash = "sha256:02432d55a01139ac16e2100888aa2b56c614720cec73a27e71f40a5387e45324"}, @@ -3340,8 +3314,8 @@ pillow = [ {file = "Pillow-9.1.0.tar.gz", hash = "sha256:f401ed2bbb155e1ade150ccc63db1a4f6c1909d3d378f7d1235a44e90d75fb97"}, ] platformdirs = [ - {file = "platformdirs-2.5.1-py3-none-any.whl", hash = "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227"}, - {file = "platformdirs-2.5.1.tar.gz", hash = "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d"}, + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -3464,8 +3438,8 @@ pyjwt = [ {file = "PyJWT-2.3.0.tar.gz", hash = "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41"}, ] pylint = [ - {file = "pylint-2.13.5-py3-none-any.whl", hash = "sha256:c149694cfdeaee1aa2465e6eaab84c87a881a7d55e6e93e09466be7164764d1e"}, - {file = "pylint-2.13.5.tar.gz", hash = "sha256:dab221658368c7a05242e673c275c488670144123f4bd262b2777249c1c0de9b"}, + {file = "pylint-2.13.7-py3-none-any.whl", hash = "sha256:13ddbbd8872c804574149e81197c28877eba75224ba6b76cd8652fc31df55c1c"}, + {file = "pylint-2.13.7.tar.gz", hash = "sha256:911d3a97c808f7554643bcc5416028cfdc42eae34ed129b150741888c688d5d5"}, ] pynacl = [ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, @@ -3480,22 +3454,22 @@ pynacl = [ {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, ] pyobjc-core = [ - {file = "pyobjc-core-8.4.1.tar.gz", hash = "sha256:df98669e957adb33566d9ef46773a5ac876a81afe8849c282d6a80448e35dd74"}, - {file = "pyobjc_core-8.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9a89cac910fbd64728fe7ec0c7a3a7cf20959bc1d7e2f41db4d7800556e47745"}, - {file = "pyobjc_core-8.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2cf1d4348cb99fcba04fa38199a46e35263b2fe7bb66e6dfbd4f19bc2602998d"}, - {file = "pyobjc_core-8.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a130324b25c0f5f4cfe30b6a28b8e70865d6e1eee158caababb603906ef431d2"}, - {file = "pyobjc_core-8.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c31195d1a8f00da99abf79643f902d09c709dbbe9c9b6feb6b585303c57d720c"}, - {file = "pyobjc_core-8.4.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:e7fd2aefb53a96a8f688c8bb36c6ebd5446250a7251bfa6b688a045e05afc60b"}, - {file = "pyobjc_core-8.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b3191173ce268e23c84d84f036fc94c3a8749a6726fc7fe73baf27dbac14f7d0"}, + {file = "pyobjc-core-8.5.tar.gz", hash = "sha256:704c275439856c0d1287469f0d589a7d808d48b754a93d9ce5415d4eaf06d576"}, + {file = "pyobjc_core-8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0c234143b48334443f5adcf26e668945a6d47bc1fa6223e80918c6c735a029d9"}, + {file = "pyobjc_core-8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1486ee533f0d76f666804ce89723ada4db56bfde55e56151ba512d3f849857f8"}, + {file = "pyobjc_core-8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:412de06dfa728301c04b3e46fd7453320a8ae8b862e85236e547cd797a73b490"}, + {file = "pyobjc_core-8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b3e09cccb1be574a82cc9f929ae27fc4283eccc75496cb5d51534caa6bb83a3"}, + {file = "pyobjc_core-8.5-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:eeafe21f879666ab7f57efcc6b007c9f5f8733d367b7e380c925203ed83f000d"}, + {file = "pyobjc_core-8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c0071686976d7ea8c14690950e504a13cb22b4ebb2bc7b5ec47c1c1c0f6eff41"}, ] pyobjc-framework-cocoa = [ - {file = "pyobjc-framework-Cocoa-8.4.1.tar.gz", hash = "sha256:dc596bac0f5d424f67944e95b2d0d7c94a07c4166359d7b4a4d4ae4f8e112822"}, - {file = "pyobjc_framework_Cocoa-8.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cfbe038a0108ae1b45f8f7067af70af5811b8352d2dc3d86a7bcb4484ff5d56e"}, - {file = "pyobjc_framework_Cocoa-8.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:118225562064d991bafb41d0913899d6b3d723984d1888cb7181e4dba63b22c2"}, - {file = "pyobjc_framework_Cocoa-8.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d117a1eb24fd317e9f63792ac6a8703ed899de5d42e8a861c7bf885625668c31"}, - {file = "pyobjc_framework_Cocoa-8.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3af8577acbd6b980d3b9270ec99bc0164f66ef8397351a72fcdee527f23c1a34"}, - {file = "pyobjc_framework_Cocoa-8.4.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:91fdc964acb4dee4d37ae81fb603d48397739dbbfcc1eadbe0cdafaa8144b6e6"}, - {file = "pyobjc_framework_Cocoa-8.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:197dd28668e786b55d7d4139afd85c285f780564ebbccc166e84a24be31de34f"}, + {file = "pyobjc-framework-Cocoa-8.5.tar.gz", hash = "sha256:569bd3a020f64b536fb2d1c085b37553e50558c9f907e08b73ffc16ae68e1861"}, + {file = "pyobjc_framework_Cocoa-8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7a7c160416696bf6035dfcdf0e603aaa52858d6afcddfcc5ab41733619ac2529"}, + {file = "pyobjc_framework_Cocoa-8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6ceba444282030be8596b812260e8d28b671254a51052ad778d32da6e17db847"}, + {file = "pyobjc_framework_Cocoa-8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f46b2b161b8dd40c7b9e00bc69636c3e6480b2704a69aee22ee0154befbe163a"}, + {file = "pyobjc_framework_Cocoa-8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b31d425aee8698cbf62b187338f5ca59427fa4dca2153a73866f7cb410713119"}, + {file = "pyobjc_framework_Cocoa-8.5-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:898359ac1f76eedec8aa156847682378a8950824421c40edb89391286e607dc4"}, + {file = "pyobjc_framework_Cocoa-8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:baa2947f76b119a3360973d74d57d6dada87ac527bab9a88f31596af392f123c"}, ] pyparsing = [ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, @@ -3912,24 +3886,24 @@ types-decorator = [ {file = "types_decorator-0.1.7-py3-none-any.whl", hash = "sha256:b55f4c8c59bdd25bd1ecf835f0bc21d88b99be0f5bb51b1c0d73090be90f62db"}, ] types-docutils = [ - {file = "types-docutils-0.18.2.tar.gz", hash = "sha256:35aa0a9d40c150f96f59a5adcdafc0bb9927d6a421efbd0097374c673ad8d793"}, - {file = "types_docutils-0.18.2-py3-none-any.whl", hash = "sha256:470700fdd29c1267cf3f1cefc1d1d88492d5d381a8e1c422e51f82e1d8b2762b"}, + {file = "types-docutils-0.18.3.tar.gz", hash = "sha256:a0ef831dc20635f350fa9cff591231c31d27e75771e59fd6c979b6c0c7e03292"}, + {file = "types_docutils-0.18.3-py3-none-any.whl", hash = "sha256:b54b6fd599914093a5aab08dbf1cba96eb107cdeb4210bbe4ccd233fe3a71d9b"}, ] 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.19.17.tar.gz", hash = "sha256:d0d930326cd76d9e85fd592e18c2248636bdbbf0226618082f57a82f00dd7d25"}, - {file = "types_protobuf-3.19.17-py3-none-any.whl", hash = "sha256:68e9e7bd9439a7b5ee679ada87a2622f2f7df2c66434ff49a5729007ceebc501"}, + {file = "types-protobuf-3.19.18.tar.gz", hash = "sha256:670b25c1a4f3d650a9d8a009b0cf19a1aa0e7cba044045648b563e825f35d4d3"}, + {file = "types_protobuf-3.19.18-py3-none-any.whl", hash = "sha256:78d677fefb10e3ea88b8c0fab543833e82cd6eb27e3f71aeda2d5cd9bd503ae1"}, ] types-pygments = [ {file = "types-Pygments-2.9.19.tar.gz", hash = "sha256:bd08888acf1f85eeeed906b7897ed2ee6d2a0b9dddceaae32ad97692a44638ba"}, {file = "types_Pygments-2.9.19-py3-none-any.whl", hash = "sha256:6f2ba3127cddabc32a5648332cdc5339a4521f60b21524d376fc44de78a2d413"}, ] types-requests = [ - {file = "types-requests-2.27.19.tar.gz", hash = "sha256:795e378117088d1e4bf41a2c01a153b73d6ea40aa9d7c0ac753abde84c0d3a8f"}, - {file = "types_requests-2.27.19-py3-none-any.whl", hash = "sha256:c6c5384677d98f212516de50c4b2c38ef659b93008fbc5bb4b81726138bc8485"}, + {file = "types-requests-2.27.20.tar.gz", hash = "sha256:63344573cde6c4efd44d867c0158d9fb7e6beb95721cbe9882f3f857ee8a5398"}, + {file = "types_requests-2.27.20-py3-none-any.whl", hash = "sha256:68b8de86552116424ec23b77afc925e111afb6496d3821b183b7d151b3b834d4"}, ] types-setuptools = [ {file = "types-setuptools-57.4.14.tar.gz", hash = "sha256:df02fe1dd244f58cf4e67cfc3d0a97930a2d61a72dd89f21d81c71017cd83f9a"}, @@ -3940,8 +3914,8 @@ types-urllib3 = [ {file = "types_urllib3-1.26.13-py3-none-any.whl", hash = "sha256:ff7500641824f881b2c7bde4cc57e6c3abf03d1e005bae83aca752e77213a5da"}, ] typing-extensions = [ - {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, - {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, + {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, + {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, ] urllib3 = [ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, diff --git a/pyproject.toml b/pyproject.toml index c3b438b5ce..c84798f9b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ packages = [ [tool.poetry.dependencies] python = ">=3.7,<3.11" -click = ">=7.1<=9.0" +click = ">=7.2<=9.0" click-default-group = "^1.2.2" colour = "^0.1.5" numpy = "^1.9" diff --git a/scripts/dev_changelog.py b/scripts/dev_changelog.py index 98472f3bdf..8fdbcfb0f2 100755 --- a/scripts/dev_changelog.py +++ b/scripts/dev_changelog.py @@ -54,6 +54,7 @@ from textwrap import dedent, indent import click +import cloup from git import Repo from github import Github from tqdm import tqdm @@ -193,7 +194,7 @@ def get_summary(body): print(f"Error parsing body for changelog: {body}") -@click.command( +@cloup.command( context_settings=CONTEXT_SETTINGS, epilog=EPILOG, ) diff --git a/tests/test_commands.py b/tests/test_commands.py index ca284aa52a..aec1d47d3b 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -32,14 +32,14 @@ def test_manim_cfg_subcommand(): Manages Manim configuration files. Options: - -h, --help Show this message and exit. + --help Show this message and exit. Commands: export show write - Made with <3 by Manim Community developers. +Made with <3 by Manim Community developers. """ assert dedent(expected_output) == result.stdout @@ -55,9 +55,9 @@ def test_manim_plugins_subcommand(): Options: -l, --list List available plugins. - -h, --help Show this message and exit. + --help Show this message and exit. - Made with <3 by Manim Community developers. +Made with <3 by Manim Community developers. """ assert dedent(expected_output) == result.output @@ -109,12 +109,12 @@ def test_manim_new_command(): Create a new project or insert a new scene. Options: - -h, --help Show this message and exit. + --help Show this message and exit. Commands: project Creates a new project. scene Inserts a SCENE to an existing FILE or creates a new FILE. - Made with <3 by Manim Community developers. +Made with <3 by Manim Community developers. """ assert dedent(expected_output) == result.output From 7a13f0e969e6a70af9084cdbf41cea49c7f1813c Mon Sep 17 00:00:00 2001 From: Jonathan Alpert <55598684+jbalpert@users.noreply.github.com> Date: Sun, 24 Apr 2022 06:48:11 -0400 Subject: [PATCH 036/555] Migrate from os.path to pathlib in Testing Scripts (#2685) * updated styling * final commit * fixed style * removed exist_ok=true * added parents=True * potentially .exists() is the problem * fixed style' * fixed style on revisions * style check processed * Update tests/helpers/graphical_units.py Co-authored-by: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> * fixed changes * made get_dir_layout also accept path. * removed small auto import error Co-authored-by: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> Co-authored-by: Naveen M K --- manim/utils/commands.py | 18 +++++++-------- tests/helpers/graphical_units.py | 24 ++++++++----------- tests/helpers/video_utils.py | 36 ++++++++++++++--------------- tests/test_config.py | 24 +++++++++---------- tests/utils/GraphicalUnitTester.py | 37 +++++++++++++++--------------- tests/utils/video_tester.py | 11 ++++----- 6 files changed, 70 insertions(+), 80 deletions(-) diff --git a/manim/utils/commands.py b/manim/utils/commands.py index efc9d9c1f9..51e272909c 100644 --- a/manim/utils/commands.py +++ b/manim/utils/commands.py @@ -1,9 +1,9 @@ from __future__ import annotations import json -import os +from pathlib import Path from subprocess import run -from typing import Any +from typing import Generator __all__ = [ "capture", @@ -18,7 +18,7 @@ def capture(command, cwd=None, command_input=None): return out, err, p.returncode -def get_video_metadata(path_to_video: str) -> dict[str, Any]: +def get_video_metadata(path_to_video: str) -> dict[str]: command = [ "ffprobe", "-v", @@ -36,10 +36,10 @@ def get_video_metadata(path_to_video: str) -> dict[str, Any]: return json.loads(config)["streams"][0] -def get_dir_layout(dirpath: str) -> list[str]: +def get_dir_layout(dirpath: Path) -> Generator[str, None, None]: """Get list of paths relative to dirpath of all files in dir and subdirs recursively.""" - index_files: list[str] = [] - for root, dirs, files in os.walk(dirpath): - for file in files: - index_files.append(f"{os.path.relpath(os.path.join(root, file), dirpath)}") - return index_files + for p in dirpath.iterdir(): + if p.is_dir(): + yield from get_dir_layout(p) + continue + yield str(p.relative_to(dirpath)) diff --git a/tests/helpers/graphical_units.py b/tests/helpers/graphical_units.py index 46b2303191..f6568d6ff7 100644 --- a/tests/helpers/graphical_units.py +++ b/tests/helpers/graphical_units.py @@ -3,8 +3,8 @@ from __future__ import annotations -import os import tempfile +from pathlib import Path import numpy as np @@ -37,9 +37,9 @@ def set_test_scene(scene_object, module_name): config["frame_rate"] = 15 with tempfile.TemporaryDirectory() as tmpdir: - os.makedirs(os.path.join(tmpdir, "tex")) - config["text_dir"] = os.path.join(tmpdir, "text") - config["tex_dir"] = os.path.join(tmpdir, "tex") + temp_path = Path(tmpdir) + config["text_dir"] = temp_path / "text" + config["tex_dir"] = temp_path / "tex" scene = scene_object(skip_animations=True) scene.render() data = scene.renderer.get_frame() @@ -48,14 +48,10 @@ def set_test_scene(scene_object, module_name): data == np.array([0, 0, 0, 255]), ), f"Control data generated for {str(scene)} only contains empty pixels." assert data.shape == (480, 854, 4) - tests_directory = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - path_control_data = os.path.join( - tests_directory, - "control_data", - "graphical_units_data", - ) - path = os.path.join(path_control_data, module_name) - if not os.path.isdir(path): - os.makedirs(path) - np.savez_compressed(os.path.join(path, str(scene)), frame_data=data) + tests_directory = Path(__file__).absolute().parent.parent + path_control_data = Path(tests_directory) / "control_data" / "graphical_units_data" + path = Path(path_control_data) / module_name + if not path.is_dir(): + path.mkdir(parents=True) + np.savez_compressed(path / str(scene), frame_data=data) logger.info(f"Test data for {str(scene)} saved in {path}\n") diff --git a/tests/helpers/video_utils.py b/tests/helpers/video_utils.py index 54203215d1..15bcd3590a 100644 --- a/tests/helpers/video_utils.py +++ b/tests/helpers/video_utils.py @@ -3,31 +3,30 @@ from __future__ import annotations import json -import os -import pathlib +from pathlib import Path from typing import Any from manim import get_dir_layout, get_video_metadata, logger -def get_section_dir_layout(dirpath: str) -> list[str]: +def get_section_dir_layout(dirpath: Path) -> list[str]: """Return a list of all files in the sections directory.""" # test if sections have been created in the first place, doesn't work with multiple scene but this isn't an issue with tests - if not os.path.isdir(dirpath): + if not dirpath.is_dir(): return [] - files = get_dir_layout(dirpath) + files = list(get_dir_layout(dirpath)) # indicate that the sections directory has been created files.append(".") return files -def get_section_index(metapath: str) -> list[dict[str, Any]]: +def get_section_index(metapath: Path) -> list[dict[str, Any]]: """Return content of sections index file.""" - parent_folder = pathlib.Path(metapath).parent.absolute() + parent_folder = metapath.parent.absolute() # test if sections have been created in the first place - if not os.path.isdir(parent_folder): + if not parent_folder.is_dir(): return [] - with open(metapath) as file: + with metapath.open() as file: index = json.load(file) return index @@ -51,28 +50,27 @@ def save_control_data_from_video(path_to_video: str, name: str) -> None: See Also -------- + tests/utils/video_tester.py : read control data and compare with output of test """ - path_to_sections = os.path.join( - pathlib.Path(path_to_video).parent.absolute(), "sections" - ) - tests_directory = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - path_control_data = os.path.join(tests_directory, "control_data", "videos_data") + orig_path_to_sections = Path(path_to_video) + path_to_sections = orig_path_to_sections.parent.absolute() / "sections" + tests_directory = Path(__file__).absolute().parent.parent + path_control_data = Path(tests_directory) / "control_data" / "videos_data" # this is the name of the section used in the test, not the name of the test itself, it can be found as a parameter of this function - scene_name = "".join(os.path.basename(path_to_video).split(".")[:-1]) + scene_name = orig_path_to_sections.stem movie_metadata = get_video_metadata(path_to_video) section_dir_layout = get_section_dir_layout(path_to_sections) - section_index = get_section_index( - os.path.join(path_to_sections, f"{scene_name}.json") - ) + section_index = get_section_index(path_to_sections / f"{scene_name}.json") + data = { "name": name, "movie_metadata": movie_metadata, "section_dir_layout": section_dir_layout, "section_index": section_index, } - path_saved = os.path.join(path_control_data, f"{name}.json") + path_saved = Path(path_control_data) / f"{name}.json" with open(path_saved, "w") as f: json.dump(data, f, indent=4) logger.info(f"Data for {name} saved in {path_saved}") diff --git a/tests/test_config.py b/tests/test_config.py index 9e6f0dc18b..cab3334460 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -114,26 +114,24 @@ def test_custom_dirs(tmp_path): ): scene = MyScene() scene.render() + tmp_path = Path(tmp_path) + assert_dir_filled(tmp_path / "test_sections") + assert_file_exists(tmp_path / "test_sections/MyScene.json") - assert_dir_filled(os.path.join(tmp_path, "test_sections")) - assert_file_exists(os.path.join(tmp_path, "test_sections", "MyScene.json")) + assert_dir_filled(tmp_path / "test_video") + assert_file_exists(tmp_path / "test_video/MyScene.mp4") - assert_dir_filled(os.path.join(tmp_path, "test_video")) - assert_file_exists(os.path.join(tmp_path, "test_video", "MyScene.mp4")) - - assert_dir_filled(os.path.join(tmp_path, "test_partial_movie_dir")) + assert_dir_filled(tmp_path / "test_partial_movie_dir") assert_file_exists( - os.path.join( - tmp_path, "test_partial_movie_dir", "partial_movie_file_list.txt" - ) + tmp_path / "test_partial_movie_dir/partial_movie_file_list.txt" ) # TODO: another example with image output would be nice - assert_dir_exists(os.path.join(tmp_path, "test_images")) + assert_dir_exists(tmp_path / "test_images") - assert_dir_filled(os.path.join(tmp_path, "test_text")) - assert_dir_filled(os.path.join(tmp_path, "test_tex")) - assert_dir_filled(os.path.join(tmp_path, "test_log")) + assert_dir_filled(tmp_path / "test_text") + assert_dir_filled(tmp_path / "test_tex") + assert_dir_filled(tmp_path / "test_log") def test_frame_size(tmp_path): diff --git a/tests/utils/GraphicalUnitTester.py b/tests/utils/GraphicalUnitTester.py index 1e86c88bee..18fe373c56 100644 --- a/tests/utils/GraphicalUnitTester.py +++ b/tests/utils/GraphicalUnitTester.py @@ -2,6 +2,7 @@ import logging import os +from pathlib import Path import numpy as np @@ -34,27 +35,29 @@ class GraphicalUnitTester: def __init__(self, scene_class, module_tested, tmpdir, rgb_atol=0): # Disable the the logs, (--quiet is broken) TODO logging.disable(logging.CRITICAL) - tests_directory = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - self.path_tests_medias_cache = os.path.join( - tmpdir, - "test_graphical_units", - "tests_cache", - module_tested, - scene_class.__name__, + tests_directory = Path(__file__).absolute().parent.parent + + self.path_tests_medias_cache = ( + Path(tmpdir) + / "test_graphical_units" + / "tests_cache" + / module_tested + / scene_class.__name__ ) - self.path_control_data = os.path.join( - tests_directory, - "control_data", - "graphical_units_data", - module_tested, + + self.path_control_data = ( + Path(tests_directory) + / "control_data" + / "graphical_units_data" + / module_tested ) self.rgb_atol = rgb_atol # IMPORTANT NOTE : The graphical units tests don't use for now any # custom manim.cfg, since it is impossible to manually select a # manim.cfg from a python file. (see issue #293) - config["text_dir"] = os.path.join(self.path_tests_medias_cache, "Text") - config["tex_dir"] = os.path.join(self.path_tests_medias_cache, "Tex") + config["text_dir"] = Path(self.path_tests_medias_cache) / "Text" + config["tex_dir"] = Path(self.path_tests_medias_cache) / "Tex" config["disable_caching"] = True config["quality"] = "low_quality" @@ -64,7 +67,7 @@ def __init__(self, scene_class, module_tested, tmpdir, rgb_atol=0): config["text_dir"], config["tex_dir"], ]: - os.makedirs(dir_temp) + Path(dir_temp).mkdir(parents=True) with tempconfig({"dry_run": True}): if config["renderer"] == "opengl": @@ -81,9 +84,7 @@ def _load_data(self): :class:`numpy.array` The pre-rendered frame. """ - frame_data_path = os.path.join( - os.path.join(self.path_control_data, f"{self.scene}.npz"), - ) + frame_data_path = Path(self.path_control_data) / f"{self.scene}.npz" return np.load(frame_data_path)["frame_data"] def _show_diff_helper(self, frame_data, expected_frame_data): diff --git a/tests/utils/video_tester.py b/tests/utils/video_tester.py index ec3308006f..643a82b8f6 100644 --- a/tests/utils/video_tester.py +++ b/tests/utils/video_tester.py @@ -2,8 +2,8 @@ import json import os -import pathlib from functools import wraps +from pathlib import Path from manim import get_video_metadata @@ -25,10 +25,7 @@ def check_video_data(path_control_data, path_video_gen): meta -> metadata """ # movie file specification - path_sec_gen = os.path.join( - pathlib.Path(path_video_gen).parent.absolute(), - "sections", - ) + path_sec_gen = Path(path_video_gen).parent.absolute() / "sections" control_data = load_control_data(path_control_data) movie_meta_gen = get_video_metadata(path_video_gen) movie_meta_exp = control_data["movie_metadata"] @@ -51,8 +48,8 @@ def check_video_data(path_control_data, path_video_gen): raise AssertionError(f"Sections don't match:\n{mismatch}") # sections index file - scene_name = "".join(os.path.basename(path_video_gen).split(".")[:-1]) - path_sec_index_gen = os.path.join(path_sec_gen, f"{scene_name}.json") + scene_name = Path(path_video_gen).stem + path_sec_index_gen = path_sec_gen / f"{scene_name}.json" sec_index_gen = get_section_index(path_sec_index_gen) sec_index_exp = control_data["section_index"] From da3e99597d627b3e2e339dad977f8ef21d9b640d Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Tue, 26 Apr 2022 17:43:02 +0530 Subject: [PATCH 037/555] Prepared bugfix release v0.15.2 (#2694) * bumped version number, generated changelog * regenerate changelog (second pass) * regenerate changelog * Add changelog to toctree * regenerate changelog * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add this pr also to changelog * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * regenerate changelog * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * regenerate changelog * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Apply suggestions from code review Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- CITATION.cff | 4 +- docs/source/changelog.rst | 1 + docs/source/changelog/0.15.2-changelog.rst | 207 +++++++++++++++++++++ pyproject.toml | 2 +- 4 files changed, 211 insertions(+), 3 deletions(-) create mode 100644 docs/source/changelog/0.15.2-changelog.rst diff --git a/CITATION.cff b/CITATION.cff index 3e5fa0ab7b..faf8ea68d8 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -4,10 +4,10 @@ authors: - name: "The Manim Community Developers" cff-version: "1.2.0" -date-released: 2022-03-08 +date-released: 2022-04-25 license: MIT message: "We acknowledge the importance of good software to support research, and we note that research becomes more valuable when it is communicated effectively. To demonstrate the value of Manim, we ask that you cite Manim in your work." title: Manim – Mathematical Animation Framework url: "https://www.manim.community/" -version: "v0.15.1" +version: "v0.15.2" ... diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index eadf9f7fdd..f151b241af 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -5,6 +5,7 @@ Changelog .. toctree:: + changelog/0.15.2-changelog changelog/0.15.1-changelog changelog/0.15.0-changelog changelog/0.14.0-changelog diff --git a/docs/source/changelog/0.15.2-changelog.rst b/docs/source/changelog/0.15.2-changelog.rst new file mode 100644 index 0000000000..e73ebdd0a7 --- /dev/null +++ b/docs/source/changelog/0.15.2-changelog.rst @@ -0,0 +1,207 @@ +******* +v0.15.2 +******* + +:Date: April 25, 2022 + +Contributors +============ + +A total of 33 people contributed to this +release. People with a '+' by their names authored a patch for the first +time. + +* Bailey Powers + +* Benjamin Hackl +* Dan Walsh + +* Darigov Research +* Darylgolden +* David Millard + +* Hamidreza Hashemi + +* Jan-Hendrik Müller +* Jason Villanueva +* Jonathan Alpert + +* Joy Bhalla +* Kian Cross + +* Luca + +* Mohsin Shaikh + +* Naveen M K +* Prismo + +* Ryan McCauley +* WillSoltas + +* ad_chaos +* darkways + +* dawn*squirryl + +* icedcoffeeee +* peaceheis +* sparshg +* trickypr + + + +The patches included in this release have been reviewed by +the following contributors. + +* Benjamin Hackl +* Dan Walsh +* Darylgolden +* GameDungeon +* Hugues Devimeux +* Jan-Hendrik Müller +* Jason Villanueva +* Jonathan Alpert +* Luca +* Naveen M K +* Prismo +* Ryan McCauley +* ad_chaos +* darkways +* hickmott99 +* icedcoffeeee +* peaceheis + +Pull requests merged +==================== + +A total of 39 pull requests were merged for this release. + +New features +------------ + +* :pr:`1975`: Improved CLI help page styling + - Updates dependencies on Click and Cloup libraries for CLI help page styling. + - Removed the dependency on click-default-group. + - Added ``no_args_is_help`` parameter for ``manim render`` to allow easy access to help page. + - Added note to ``manim`` help page epilog on how to access other command help pages. + +* :pr:`2404`: Add :class:`.SpiralIn` Animation + - Make :class:`.ManimBanner` to use :class:`.SpiralIn`. + +* :pr:`2534`: Implement :class:`~.OpenGLImageMobject` + + +* :pr:`2684`: Created a more accessible way to create Angles with line.py angle function - :meth:`.Angle.from_three_points` + + +Enhancements +------------ + +* :pr:`2062`: Reuse shader wrappers and shader data + + +* :pr:`2642`: Migrated ``file_ops.py`` and ``scene_file_writer.py`` from os.path to Pathlib + In ``file_ops.py`` and ``scene_file_writer.py``: Uses of str type file names have been mostly (see further information) converted to pathlib's Path objects. Uses of ``os.path`` methods have been converted to equivalent pathlib methods. + +* :pr:`2655`: Fix :func:`.assert_is_mobject_method` when using OpenGL + + +* :pr:`2665`: Improved handling of attributes when using the ``.animate`` syntax + + +* :pr:`2674`: Document and type ``simple_functions.py`` + - Add documentation for ``simple_functions.py``. + - Small additions with some extra clarity for these functions. + +* :pr:`2693`: Allow using :meth:`.MovingCamera.auto_zoom` without animation + Allows auto zooming camera without having to play an animation by passing an ``animation=False`` argument + +Fixed bugs +---------- + +* :pr:`2546`: Fixed a file logging bug and some maintenance + + +* :pr:`2597`: Fix Bug in :class:`.Uncreate` with ``rate_func`` via introducing new parameter ``reversed`` to :class:`.Animation` + - Refractor the :class:`.Uncreate`. The new implementation uses a flag member ``reversed``. Set it to ``True`` and its superclass handles the reverse. + - Introduce a bool parameter ``reversed`` to :class:`.Animation`. It decides whether the animation needs to be played backwards. Default to be False. + - Add conditional branches in :meth:`.Animation.get_sub_alpha`. If the parameter ``reversed`` is True, it would set ``rate_func(t)`` to ``rate_func(1 - t)``. + +* :pr:`2613`: Fixed bug in :meth:`.Circle.point_at_angle` when the angle is not in the interval :math:`[0, 2\pi]` + + +* :pr:`2634`: Fix background lines drawn twice in :class:`.NumberPlane` + + +* :pr:`2648`: Handle user-defined centers for Wiggle animation + + +* :pr:`2658`: Fix arguments of overridden ``set_style`` for :class:`.BackgroundRectangle` + Using :class:`.Write` animation on a :class:`.Text` object with ``.add_background_rectangle()`` applied no longer generates a ``TypeError``. + +* :pr:`2668`: (Re)set background color of :class:`.OpenGLRenderer` when initializing scene + + +* :pr:`2676`: Fixed propagation of custom attributes in animations for the OpenGL renderer + + +* :pr:`2688`: Fixed two minor issues of :class:`.SpiralIn` and :class:`.ManimBanner` + + +Documentation-related changes +----------------------------- + +* :pr:`2609`: Copyedit troubleshooting.rst + + +* :pr:`2610`: Add example PolygonOnAxes + + +* :pr:`2617`: Re-added :mod:`.value_tracker` documentation + + +* :pr:`2619`: Improve Example for arrange_in_grid + + +* :pr:`2620`: Fixed typo in :meth:`.Animation.is_introducer` + + +* :pr:`2640`: Copyedited Documentation + Reviewed ``tutorials/configurations.rst``. Edited simple mistakes such as Manim not being capitalized and commas. + +* :pr:`2649`: Document and type utils/iterables.py + + +* :pr:`2651`: Update copyright year in documentation to 2020-2022 + +* :pr:`2663`: Added documentation for scene updater functions + + +* :pr:`2686`: Add instructions to install extra dependencies with poetry + + +Changes to our development infrastructure +----------------------------------------- + +* :pr:`2561`: Run tests on Linux-aarch64 + + +* :pr:`2656`: Fixed incompatibility with black version + + +Code quality improvements and similar refactors +----------------------------------------------- + +* :pr:`2630`: Remove WebGL renderer + The WebGL renderer is broken and unmaintained. The support for it in Manim is removed. + +* :pr:`2652`: Update ``cloup`` version to 0.13.0 from 0.7.0 + + +* :pr:`2678`: Require ``backports-cached-property`` only for Python < 3.8 + + +* :pr:`2685`: Migrate from ``os.path`` to ``pathlib`` in testing scripts + This pull request changes a number of instances of ``os.path`` to Pathlib objects and functions. In addition, this PR modifies the SVGMobject constructor to accept both a Pathlib object or a string variable pathname its constructor. + +* :pr:`2691`: Removed :class:`CameraFrame` + + +* :pr:`2696`: Made changelog generation run in parallel plus further improvements to ``scripts/dev_changelog.py`` + + +* :pr:`2697`: Sort PRs by number in changelog sections before writing + + +New releases +------------ + +* :pr:`2694`: Prepared bugfix release v0.15.2 diff --git a/pyproject.toml b/pyproject.toml index c84798f9b2..5929c8f3dc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "manim" -version = "0.15.1" +version = "0.15.2" description = "Animation engine for explanatory math videos." authors = ["The Manim Community Developers ", "3b1b "] license="MIT" From fcb76ee64a6f91fc70cf586f79c6fe7b5af9ec4d Mon Sep 17 00:00:00 2001 From: Lingren Kong <47297555+LingrenKong@users.noreply.github.com> Date: Mon, 2 May 2022 21:51:18 +0800 Subject: [PATCH 038/555] Default to utf-8 when reading files in :class:`.Code` (#2703) * Update code_mobject.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/text/code_mobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/text/code_mobject.py b/manim/mobject/text/code_mobject.py index 0d5e7cb231..5a710396fa 100644 --- a/manim/mobject/text/code_mobject.py +++ b/manim/mobject/text/code_mobject.py @@ -199,7 +199,7 @@ def __init__( self.file_name = file_name if self.file_name: self._ensure_valid_file() - with open(self.file_path) as f: + with open(self.file_path, encoding="utf-8") as f: self.code_string = f.read() elif code: self.code_string = code From c8f64c1cfb07bedf2a3107da5a51d2b4ae2045e0 Mon Sep 17 00:00:00 2001 From: quark67 Date: Mon, 2 May 2022 18:10:46 +0200 Subject: [PATCH 039/555] Updating of old URL (Pango Markup formatting page) (#2704) The old URL https://developer.gnome.org/pango/stable/pango-Markup.html redirects to https://docs.gtk.org/Pango/ which is a generic page, not specific to the Pango Markup formatting. I replace it with the new address of the documentation: https://docs.gtk.org/Pango/pango_markup.html --- manim/mobject/text/text_mobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index f01a88c551..3b12db559a 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -888,7 +888,7 @@ def construct(self): You can find more information about Pango markup formatting at the corresponding documentation page: - `Pango Markup `_. + `Pango Markup `_. Please be aware that not all features are supported by this class and that the ```` tag mentioned above is not supported by Pango. From 7991711dfa8ddb20518d1b24451d050918598fc6 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Wed, 4 May 2022 07:01:06 +0530 Subject: [PATCH 040/555] CI: update python versions (#2700) --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7760788203..300c6c13f4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: strategy: fail-fast: false matrix: - python: ['3.7.12', '3.10.2'] + python: ['3.7.13', '3.10.4'] steps: - name: Checkout the repository uses: actions/checkout@v2 From 8d7e7cdcf539b0cf4b2812cfea32f28a15402a77 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 4 May 2022 01:32:54 +0000 Subject: [PATCH 041/555] [pre-commit.ci] pre-commit autoupdate (#2705) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-mypy: v0.942 → v0.950](https://github.com/pre-commit/mirrors-mypy/compare/v0.942...v0.950) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Darylgolden --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a24b75f639..18af0583f2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -56,7 +56,7 @@ repos: flake8-docstrings==1.6.0, flake8-rst-docstrings==0.2.3, flake8-pytest-style==1.5.0, flake8-simplify==0.14.1, flake8-comprehensions>=3.6.1] - repo: https://github.com/pre-commit/mirrors-mypy - rev: 'v0.942' + rev: 'v0.950' hooks: - id: mypy additional_dependencies: [types-decorator, types-docutils, types-requests, types-setuptools] From affc719a634b9c8cdd654d94818b076a06c50f81 Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Sat, 7 May 2022 15:26:56 +0200 Subject: [PATCH 042/555] Fixed Missing `get_nth_curve_length_pieces` in `OpenGLVMobject` (#2707) * fix(opengl_vectorized_mobject): removed double definition of get_nth_curve_function_with_length * fix(opengl_vectorized_mobject): added definition of get_nth_curve_length_pieces from VMobject to OpenGLVMobject --- .../opengl/opengl_vectorized_mobject.py | 52 ++++++++----------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 643a26da93..c866eb2bf2 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -3,7 +3,7 @@ import itertools as it import operator as op from functools import reduce, wraps -from typing import Callable, Iterable, Sequence +from typing import Callable, Iterable, Optional, Sequence import moderngl import numpy as np @@ -826,12 +826,28 @@ def get_nth_curve_length( return length - def get_nth_curve_function_with_length( + def get_curve_functions( + self, + ) -> Iterable[Callable[[float], np.ndarray]]: + """Gets the functions for the curves of the mobject. + + Returns + ------- + Iterable[Callable[[float], np.ndarray]] + The functions for the curves. + """ + + num_curves = self.get_num_curves() + + for n in range(num_curves): + yield self.get_nth_curve_function(n) + + def get_nth_curve_length_pieces( self, n: int, sample_points: int | None = None, - ) -> tuple[Callable[[float], np.ndarray], float]: - """Returns the expression of the nth curve along with its (approximate) length. + ) -> np.ndarray: + """Returns the array of short line lengths used for length approximation. Parameters ---------- @@ -842,40 +858,18 @@ def get_nth_curve_function_with_length( Returns ------- - curve : typing.Callable[[float], np.ndarray] - The function for the nth curve. - length : :class:`float` - The length of the nth curve. + np.ndarray + The short length-pieces of the nth curve. """ - if sample_points is None: sample_points = 10 curve = self.get_nth_curve_function(n) - points = np.array([curve(a) for a in np.linspace(0, 1, sample_points)]) diffs = points[1:] - points[:-1] norms = np.apply_along_axis(np.linalg.norm, 1, diffs) - length = np.sum(norms) - - return curve, length - - def get_curve_functions( - self, - ) -> Iterable[Callable[[float], np.ndarray]]: - """Gets the functions for the curves of the mobject. - - Returns - ------- - Iterable[Callable[[float], np.ndarray]] - The functions for the curves. - """ - - num_curves = self.get_num_curves() - - for n in range(num_curves): - yield self.get_nth_curve_function(n) + return norms def get_curve_functions_with_lengths( self, **kwargs From 8627f2a27d2b374df8718e8635e10453654ec973 Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Mon, 9 May 2022 12:31:56 +0200 Subject: [PATCH 043/555] fix(constants.py,image_mobject.py,opengl_image_mobject.py): Update deprecated pillow constants (#2715) --- manim/constants.py | 22 ++++++++++---------- manim/mobject/opengl/opengl_image_mobject.py | 3 ++- manim/mobject/types/image_mobject.py | 3 ++- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/manim/constants.py b/manim/constants.py index 6206ec6772..a32bf416ba 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -6,7 +6,7 @@ import numpy as np from cloup import Context -from PIL import Image +from PIL.Image import Resampling __all__ = [ "NOT_SETTING_FONT_MSG", @@ -113,16 +113,16 @@ ULTRAHEAVY: str = "ULTRAHEAVY" RESAMPLING_ALGORITHMS = { - "nearest": Image.NEAREST, - "none": Image.NEAREST, - "lanczos": Image.LANCZOS, - "antialias": Image.LANCZOS, - "bilinear": Image.BILINEAR, - "linear": Image.BILINEAR, - "bicubic": Image.BICUBIC, - "cubic": Image.BICUBIC, - "box": Image.BOX, - "hamming": Image.HAMMING, + "nearest": Resampling.NEAREST, + "none": Resampling.NEAREST, + "lanczos": Resampling.LANCZOS, + "antialias": Resampling.LANCZOS, + "bilinear": Resampling.BILINEAR, + "linear": Resampling.BILINEAR, + "bicubic": Resampling.BICUBIC, + "cubic": Resampling.BICUBIC, + "box": Resampling.BOX, + "hamming": Resampling.HAMMING, } # Geometry: directions diff --git a/manim/mobject/opengl/opengl_image_mobject.py b/manim/mobject/opengl/opengl_image_mobject.py index 59727f2eab..96d69e4a18 100644 --- a/manim/mobject/opengl/opengl_image_mobject.py +++ b/manim/mobject/opengl/opengl_image_mobject.py @@ -8,6 +8,7 @@ import numpy as np from PIL import Image +from PIL.Image import Resampling from manim.mobject.opengl.opengl_surface import OpenGLSurface, OpenGLTexturedSurface from manim.utils.images import get_full_raster_image_path @@ -20,7 +21,7 @@ def __init__( width: float = None, height: float = None, image_mode: str = "RGBA", - resampling_algorithm: int = Image.BICUBIC, + resampling_algorithm: int = Resampling.BICUBIC, opacity: float = 1, gloss: float = 0, shadow: float = 0, diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index 241a7e3fa9..80b8755997 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -9,6 +9,7 @@ import colour import numpy as np from PIL import Image +from PIL.Image import Resampling from manim.mobject.geometry.shape_matchers import SurroundingRectangle @@ -38,7 +39,7 @@ def __init__( self, scale_to_resolution, pixel_array_dtype="uint8", - resampling_algorithm=Image.BICUBIC, + resampling_algorithm=Resampling.BICUBIC, **kwargs, ): self.pixel_array_dtype = pixel_array_dtype From 7802025bf265458e0a83df9640bcb9a60f38ca70 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 9 May 2022 21:34:40 +0200 Subject: [PATCH 044/555] [pre-commit.ci] pre-commit autoupdate (#2717) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v2.32.0 → v2.32.1](https://github.com/asottile/pyupgrade/compare/v2.32.0...v2.32.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 18af0583f2..573ef10df0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v2.32.0 + rev: v2.32.1 hooks: - id: pyupgrade name: Update code to new python versions From cfd006aa7f2b2c53061ca4d88bced79d8af4ea9e Mon Sep 17 00:00:00 2001 From: niklebedenko <98320255+niklebedenko@users.noreply.github.com> Date: Mon, 9 May 2022 20:37:40 +0100 Subject: [PATCH 045/555] Matrix brackets (#2709) * Fixed bracket warping for matrices * fixed bodge for bracket splitting * changed default value, removed old import * updated VectorScene test Co-authored-by: niklebedenko --- manim/mobject/matrix.py | 41 +++++++++++++++--- .../vector_scene/vector_to_coords.npz | Bin 235675 -> 235354 bytes 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/manim/mobject/matrix.py b/manim/mobject/matrix.py index d190146666..f5aadf00e8 100644 --- a/manim/mobject/matrix.py +++ b/manim/mobject/matrix.py @@ -141,6 +141,7 @@ def __init__( element_alignment_corner: Sequence[float] = DR, left_bracket: str = "[", right_bracket: str = "]", + stretch_brackets: bool = True, bracket_config: dict = {}, **kwargs, ): @@ -173,6 +174,8 @@ def __init__( The left bracket type, by default ``"["``. right_bracket The right bracket type, by default ``"]"``. + stretch_brackets + ``True`` if should stretch the brackets to fit the height of matrix contents, by default ``True``. bracket_config Additional arguments to be passed to :class:`~.MathTex` when constructing the brackets. @@ -190,6 +193,7 @@ def __init__( self.element_alignment_corner = element_alignment_corner self.left_bracket = left_bracket self.right_bracket = right_bracket + self.stretch_brackets = stretch_brackets super().__init__(**kwargs) mob_matrix = self._matrix_to_mob_matrix(matrix) self._organize_mob_matrix(mob_matrix) @@ -241,14 +245,41 @@ def _add_brackets(self, left="[", right="]", **kwargs): The current matrix object (self). """ - bracket_pair = MathTex(left, right, **kwargs) - bracket_pair.scale(2) - bracket_pair.stretch_to_fit_height(self.height + 2 * self.bracket_v_buff) - l_bracket, r_bracket = bracket_pair.split() + # Height per row of LaTeX array with default settings + BRACKET_HEIGHT = 0.5977 + + n = int((self.height) / BRACKET_HEIGHT) + 1 + empty_tex_array = "".join( + [ + r"\begin{array}{c}", + *n * [r"\quad \\"], + r"\end{array}", + ] + ) + tex_left = "".join( + [ + r"\left" + left, + empty_tex_array, + r"\right.", + ] + ) + tex_right = "".join( + [ + r"\left.", + empty_tex_array, + r"\right" + right, + ] + ) + l_bracket = MathTex(tex_left, **kwargs) + r_bracket = MathTex(tex_right, **kwargs) + + bracket_pair = VGroup(l_bracket, r_bracket) + if self.stretch_brackets: + bracket_pair.stretch_to_fit_height(self.height + 2 * self.bracket_v_buff) l_bracket.next_to(self, LEFT, self.bracket_h_buff) r_bracket.next_to(self, RIGHT, self.bracket_h_buff) + self.brackets = bracket_pair self.add(l_bracket, r_bracket) - self.brackets = VGroup(l_bracket, r_bracket) return self def get_columns(self): diff --git a/tests/test_graphical_units/control_data/vector_scene/vector_to_coords.npz b/tests/test_graphical_units/control_data/vector_scene/vector_to_coords.npz index a6a6269122334185544d5d0d9d1e6cf190662456..3115797f5a86a8e65144417040c53b0e71a44fec 100644 GIT binary patch delta 80174 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 NmVZ@eg<8tzE+faPOry;#g590h>$ET!QBU^TNz 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

    7YzU+Zr07!sf8UJEP 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

  • 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 Date: Mon, 9 May 2022 15:40:19 -0400 Subject: [PATCH 046/555] Added Axes Tip Resize Functionality according to Axes documentation (#2661) * Added Axes Tip Resize Functionality according to Axes class documentation * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Changed Default Tip Size Values to Conform with Global Defaults * Fixed width kwarg usage on circle/square tips * Fixed ratio-impacted default tip width for vectors * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Removed Left-over Prints :) Co-authored-by: Will Soltas Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/mobject/geometry/arc.py | 24 +++++++++++++----- manim/mobject/geometry/tips.py | 7 +++-- manim/mobject/graphing/number_line.py | 6 ++--- .../plot/axis_tip_custom_width_height.npz | Bin 0 -> 5795 bytes .../plot/axis_tip_default_width_height.npz | Bin 0 -> 4925 bytes tests/test_graphical_units/test_axes.py | 24 ++++++++++++++++++ 6 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 tests/test_graphical_units/control_data/plot/axis_tip_custom_width_height.npz create mode 100644 tests/test_graphical_units/control_data/plot/axis_tip_default_width_height.npz diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index a15debefe0..894ca3d02b 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -101,13 +101,15 @@ def __init__( # Adding, Creating, Modifying tips - def add_tip(self, tip=None, tip_shape=None, tip_length=None, at_start=False): + def add_tip( + self, tip=None, tip_shape=None, tip_length=None, tip_width=None, at_start=False + ): """Adds a tip to the TipableVMobject instance, recognising that the endpoints might need to be switched if it's a 'starting tip' or not. """ if tip is None: - tip = self.create_tip(tip_shape, tip_length, at_start) + tip = self.create_tip(tip_shape, tip_length, tip_width, at_start) else: self.position_tip(tip, at_start) self.reset_endpoints_based_on_tip(tip, at_start) @@ -115,26 +117,36 @@ def add_tip(self, tip=None, tip_shape=None, tip_length=None, at_start=False): self.add(tip) return self - def create_tip(self, tip_shape=None, tip_length=None, at_start=False): + def create_tip( + self, tip_shape=None, tip_length=None, tip_width=None, at_start=False + ): """Stylises the tip, positions it spatially, and returns the newly instantiated tip to the caller. """ - tip = self.get_unpositioned_tip(tip_shape, tip_length) + tip = self.get_unpositioned_tip(tip_shape, tip_length, tip_width) self.position_tip(tip, at_start) return tip - def get_unpositioned_tip(self, tip_shape=None, tip_length=None): + def get_unpositioned_tip(self, tip_shape=None, tip_length=None, tip_width=None): """Returns a tip that has been stylistically configured, but has not yet been given a position in space. """ from manim.mobject.geometry.tips import ArrowTriangleFilledTip + style = {} + if tip_shape is None: tip_shape = ArrowTriangleFilledTip + + if tip_shape is ArrowTriangleFilledTip: + if tip_width is None: + tip_width = self.get_default_tip_length() + style.update({"width": tip_width}) if tip_length is None: tip_length = self.get_default_tip_length() + color = self.get_color() - style = {"fill_color": color, "stroke_color": color} + style.update({"fill_color": color, "stroke_color": color}) style.update(self.tip_style) tip = tip_shape(length=tip_length, **style) return tip diff --git a/manim/mobject/geometry/tips.py b/manim/mobject/geometry/tips.py index 30f71ceb96..b25a5a5380 100644 --- a/manim/mobject/geometry/tips.py +++ b/manim/mobject/geometry/tips.py @@ -185,6 +185,7 @@ def __init__( fill_opacity=0, stroke_width=3, length=DEFAULT_ARROW_TIP_LENGTH, + width=DEFAULT_ARROW_TIP_LENGTH, start_angle=PI, **kwargs, ): @@ -195,8 +196,10 @@ def __init__( start_angle=start_angle, **kwargs, ) - self.width = length - self.stretch_to_fit_height(length) + self.width = width + + self.stretch_to_fit_width(length) + self.stretch_to_fit_height(width) class ArrowTriangleFilledTip(ArrowTriangleTip): diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index c7676a6b23..78f61e4b60 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -138,8 +138,8 @@ def __init__( stroke_width: float = 2.0, # tip include_tip: bool = False, - tip_width: float = 0.25, - tip_height: float = 0.25, + tip_width: float = DEFAULT_ARROW_TIP_LENGTH, + tip_height: float = DEFAULT_ARROW_TIP_LENGTH, # numbers/labels include_numbers: bool = False, font_size: float = 36, @@ -217,7 +217,7 @@ def __init__( self.center() if self.include_tip: - self.add_tip() + self.add_tip(tip_length=self.tip_height, tip_width=self.tip_width) self.tip.set_stroke(self.stroke_color, self.stroke_width) if self.include_ticks: diff --git a/tests/test_graphical_units/control_data/plot/axis_tip_custom_width_height.npz b/tests/test_graphical_units/control_data/plot/axis_tip_custom_width_height.npz new file mode 100644 index 0000000000000000000000000000000000000000..6e0eaae86c8cb64d3c9c06e8ed71e199bc884ef9 GIT binary patch literal 5795 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 Bf4%?! literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/control_data/plot/axis_tip_default_width_height.npz b/tests/test_graphical_units/control_data/plot/axis_tip_default_width_height.npz new file mode 100644 index 0000000000000000000000000000000000000000..91a3e67dc725f5da875e40938ed63af7110ddd65 GIT binary patch literal 4925 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 literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/test_axes.py b/tests/test_graphical_units/test_axes.py index 0683a46825..20843f1dab 100644 --- a/tests/test_graphical_units/test_axes.py +++ b/tests/test_graphical_units/test_axes.py @@ -67,6 +67,30 @@ def test_get_y_axis_label(scene): scene.add(ax, y_label) +@frames_comparison +def test_axis_tip_default_width_height(scene): + ax = Axes( + x_range=(0, 4), + y_range=(0, 4), + axis_config={"include_numbers": True, "include_tip": True}, + ) + + scene.add(ax) + + +@frames_comparison +def test_axis_tip_custom_width_height(scene): + ax = Axes( + x_range=(0, 4), + y_range=(0, 4), + axis_config={"include_numbers": True, "include_tip": True}, + x_axis_config={"tip_width": 1, "tip_height": 0.1}, + y_axis_config={"tip_width": 0.1, "tip_height": 1}, + ) + + scene.add(ax) + + @frames_comparison def test_plot_derivative_graph(scene): ax = NumberPlane(y_range=[-1, 7], background_line_style={"stroke_opacity": 0.4}) From 7099a910b8627a60c20c336411c0c86ff9ae7403 Mon Sep 17 00:00:00 2001 From: fcrozatier <48696601+fcrozatier@users.noreply.github.com> Date: Sun, 15 May 2022 14:22:01 +0200 Subject: [PATCH 047/555] Fix typo in table documentation (#2722) --- manim/mobject/table.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/manim/mobject/table.py b/manim/mobject/table.py index 35690b0788..731b7d1288 100644 --- a/manim/mobject/table.py +++ b/manim/mobject/table.py @@ -979,7 +979,7 @@ def scale(self, scale_factor: float, **kwargs): class MathTable(Table): - """A specialized :class:`~.Table` mobject for use with with LaTeX. + """A specialized :class:`~.Table` mobject for use with LaTeX. Examples -------- @@ -1026,7 +1026,7 @@ def __init__( class MobjectTable(Table): - """A specialized :class:`~.Table` mobject for use with with :class:`~.Mobject`. + """A specialized :class:`~.Table` mobject for use with :class:`~.Mobject`. Examples -------- @@ -1076,7 +1076,7 @@ def __init__( class IntegerTable(Table): - """A specialized :class:`~.Table` mobject for use with with :class:`~.Integer`. + """A specialized :class:`~.Table` mobject for use with :class:`~.Integer`. Examples -------- @@ -1125,7 +1125,7 @@ def __init__( class DecimalTable(Table): - """A specialized :class:`~.Table` mobject for use with with :class:`~.DecimalNumber` to display decimal entries. + """A specialized :class:`~.Table` mobject for use with :class:`~.DecimalNumber` to display decimal entries. Examples -------- From f46a593e0928b1f5661b30db8a6dd89ab666a304 Mon Sep 17 00:00:00 2001 From: conor-oneill-2 <88608731+conor-oneill-2@users.noreply.github.com> Date: Mon, 16 May 2022 06:25:48 +1000 Subject: [PATCH 048/555] docs: Fixed typo in docstring (#2720) Co-authored-by: Conor O'Neill --- manim/mobject/geometry/line.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index cb8d7188d7..cd9e60869d 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -1021,7 +1021,7 @@ def from_three_points( ) -> Angle: """The angle between the lines AB and BC. - This constructs the angle :math:`\angle ABC`. + This constructs the angle :math:`\\angle ABC`. Parameters ---------- From 9148c661f6fbeb9fe7c354a39a0d4d67aaef91a2 Mon Sep 17 00:00:00 2001 From: Ejar Date: Wed, 18 May 2022 11:12:41 +0200 Subject: [PATCH 049/555] Updating the order of the reference manuals (#2716) A deeper look is needed before the building blocks --- docs/source/tutorials.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/tutorials.rst b/docs/source/tutorials.rst index c2407b8afd..0a2d7fa6a4 100644 --- a/docs/source/tutorials.rst +++ b/docs/source/tutorials.rst @@ -6,7 +6,7 @@ Tutorials :maxdepth: 2 tutorials/quickstart - tutorials/building_blocks tutorials/a_deeper_look + tutorials/building_blocks tutorials/configuration tutorials/using_text From 2dba4856c87b2320ba5a183cb0634db568e20e65 Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Mon, 23 May 2022 22:46:04 +0200 Subject: [PATCH 050/555] Slight performance improvement for :class:`.ArrowVectorField` and Bezier curve computation (#2727) * perf(bezier) added explicit definitions of quadratic and cubic in bezier.py * perf(vectorized_mobject): replaced apply_along_axis with direct call to linalg.norm * perf(vector_field): removed unnecessary calls to self.add and added get_vectors (multiple vectors at once) * perf(iterables): removed duplicate calls to len(list) in make_even * revert: removed get_vectors * fix(get_vector): use asarray for point * quickfix(vector_field): removed point asarray --- manim/mobject/types/vectorized_mobject.py | 2 +- manim/mobject/vector_field.py | 10 +++++++--- manim/utils/bezier.py | 17 +++++++++++++++++ manim/utils/iterables.py | 8 +++++--- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index d7bb731346..e4289853e9 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -1102,7 +1102,7 @@ def get_nth_curve_length_pieces( curve = self.get_nth_curve_function(n) points = np.array([curve(a) for a in np.linspace(0, 1, sample_points)]) diffs = points[1:] - points[:-1] - norms = np.apply_along_axis(np.linalg.norm, 1, diffs) + norms = np.linalg.norm(diffs, axis=1) return norms diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index 2c09edcb3c..dd48c039a6 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -575,8 +575,12 @@ def __init__( x_range = np.arange(*self.x_range) y_range = np.arange(*self.y_range) z_range = np.arange(*self.z_range) - for x, y, z in it.product(x_range, y_range, z_range): - self.add(self.get_vector(x * RIGHT + y * UP + z * OUT)) + self.add( + *[ + self.get_vector(x * RIGHT + y * UP + z * OUT) + for x, y, z in it.product(x_range, y_range, z_range) + ] + ) self.set_opacity(self.opacity) def get_vector(self, point: np.ndarray): @@ -594,7 +598,7 @@ def get_vector(self, point: np.ndarray): Additional arguments to be passed to the :class:`~.Vector` constructor """ - output = np.array(self.func(point)) + output = np.asarray(self.func(point)) norm = np.linalg.norm(output) if norm != 0: output *= self.length_func(norm) / norm diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index d96b6af62c..6f8187eef5 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -46,6 +46,23 @@ def bezier( function describing the bezier curve. """ n = len(points) - 1 + + # Cubic Bezier curve + if n == 3: + return ( + lambda t: (1 - t) ** 3 * points[0] + + 3 * t * (1 - t) ** 2 * points[1] + + 3 * (1 - t) * t**2 * points[2] + + t**3 * points[3] + ) + # 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: sum( ((1 - t) ** (n - k)) * (t**k) * choose(n, k) * point for k, point in enumerate(points) diff --git a/manim/utils/iterables.py b/manim/utils/iterables.py index 51a9a6ff23..afcf6d992a 100644 --- a/manim/utils/iterables.py +++ b/manim/utils/iterables.py @@ -182,10 +182,12 @@ def make_even(iterable_1: Iterable, iterable_2: Iterable) -> tuple[list, list]: # ([1, 1, 1, 2, 2], [3, 4, 5, 6, 7]) """ list_1, list_2 = list(iterable_1), list(iterable_2) - length = max(len(list_1), len(list_2)) + len_list_1 = len(list_1) + len_list_2 = len(list_2) + length = max(len_list_1, len_list_2) return ( - [list_1[(n * len(list_1)) // length] for n in range(length)], - [list_2[(n * len(list_2)) // length] for n in range(length)], + [list_1[(n * len_list_1) // length] for n in range(length)], + [list_2[(n * len_list_2) // length] for n in range(length)], ) From bd631f7fb0afe2d481cf748eb1de12f0e6f75773 Mon Sep 17 00:00:00 2001 From: Charalampos Georgiou Date: Mon, 23 May 2022 23:58:45 +0300 Subject: [PATCH 051/555] Edited note on :class:`.NumberPlane` length and added another example (#2726) * docs: edit note on lengths and add example for it * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/mobject/graphing/coordinate_systems.py | 27 +++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 90afe66aa0..3cacbb83b8 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -2228,8 +2228,8 @@ class NumberPlane(Axes): .. note:: - If :attr:`x_length` or :attr:`y_length` are not defined, the plane automatically adjusts its lengths based - on the :attr:`x_range` and :attr:`y_range` values to set the ``unit_size`` to 1. + If :attr:`x_length` or :attr:`y_length` are not defined, they are automatically calculated such that + one unit on each axis is one Manim unit long. Examples -------- @@ -2239,8 +2239,6 @@ class NumberPlane(Axes): class NumberPlaneExample(Scene): def construct(self): number_plane = NumberPlane( - x_range=[-10, 10, 1], - y_range=[-10, 10, 1], background_line_style={ "stroke_color": TEAL, "stroke_width": 4, @@ -2248,6 +2246,27 @@ def construct(self): } ) self.add(number_plane) + + .. manim:: NumberPlaneScaled + :save_last_frame: + + class NumberPlaneScaled(Scene): + def construct(self): + number_plane = NumberPlane( + x_range=(-4, 11, 1), + y_range=(-3, 3, 1), + x_length=5, + y_length=2, + ).move_to(LEFT*3) + + number_plane_scaled_y = NumberPlane( + x_range=(-4, 11, 1), + x_length=5, + y_length=4, + ).move_to(RIGHT*3) + + self.add(number_plane) + self.add(number_plane_scaled_y) """ def __init__( From 1bffb1d7a7cfc8890b18ffabec4ceb4f1a4edc79 Mon Sep 17 00:00:00 2001 From: nyabkun <75878387+nyabkun@users.noreply.github.com> Date: Tue, 24 May 2022 06:05:54 +0900 Subject: [PATCH 052/555] Fix Code mobject wrong indentation (#2725) --- manim/mobject/text/code_mobject.py | 5 +++++ tests/test_code_mobject.py | 15 +++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 tests/test_code_mobject.py diff --git a/manim/mobject/text/code_mobject.py b/manim/mobject/text/code_mobject.py index 5a710396fa..e39cecadb2 100644 --- a/manim/mobject/text/code_mobject.py +++ b/manim/mobject/text/code_mobject.py @@ -404,6 +404,11 @@ def _gen_code_json(self): # print(self.default_color,self.background_color) for i in range(3, -1, -1): self.html_string = self.html_string.replace("", "") + for i in range(10, -1, -1): self.html_string = self.html_string.replace( "" + " " * i, diff --git a/tests/test_code_mobject.py b/tests/test_code_mobject.py new file mode 100644 index 0000000000..b4b522a107 --- /dev/null +++ b/tests/test_code_mobject.py @@ -0,0 +1,15 @@ +from manim.mobject.text.code_mobject import Code + + +def test_code_indentation(): + co = Code( + code="""\ + def test() + print("Hi") + """, + language="Python", + indentation_chars=" ", + ) + + assert co.tab_spaces[0] == 1 + assert co.tab_spaces[1] == 2 From d3bdefbae26cf2fa07750cddc9ff4a0de5c9b7c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 May 2022 10:14:14 +0200 Subject: [PATCH 053/555] Bump pyjwt from 2.3.0 to 2.4.0 (#2735) Bumps [pyjwt](https://github.com/jpadilla/pyjwt) from 2.3.0 to 2.4.0. - [Release notes](https://github.com/jpadilla/pyjwt/releases) - [Changelog](https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst) - [Commits](https://github.com/jpadilla/pyjwt/compare/2.3.0...2.4.0) --- updated-dependencies: - dependency-name: pyjwt dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 122 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 76 insertions(+), 46 deletions(-) diff --git a/poetry.lock b/poetry.lock index 35942fc228..2e797ae7c1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -294,14 +294,14 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "coverage" -version = "6.3.2" +version = "6.4" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] -tomli = {version = "*", optional = true, markers = "extra == \"toml\""} +tomli = {version = "*", optional = true, markers = "python_version < \"3.11\" and extra == \"toml\""} [package.extras] toml = ["tomli"] @@ -1559,7 +1559,7 @@ python-versions = ">=3.5" [[package]] name = "pyjwt" -version = "2.3.0" +version = "2.4.0" description = "JSON Web Token implementation in Python" category = "dev" optional = false @@ -2548,47 +2548,47 @@ commonmark = [ {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] coverage = [ - {file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"}, - {file = "coverage-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37d1141ad6b2466a7b53a22e08fe76994c2d35a5b6b469590424a9953155afac"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9987b0354b06d4df0f4d3e0ec1ae76d7ce7cbca9a2f98c25041eb79eec766f1"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26e2deacd414fc2f97dd9f7676ee3eaecd299ca751412d89f40bc01557a6b1b4"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd8bafa458b5c7d061540f1ee9f18025a68e2d8471b3e858a9dad47c8d41903"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:46191097ebc381fbf89bdce207a6c107ac4ec0890d8d20f3360345ff5976155c"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6f89d05e028d274ce4fa1a86887b071ae1755082ef94a6740238cd7a8178804f"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58303469e9a272b4abdb9e302a780072c0633cdcc0165db7eec0f9e32f901e05"}, - {file = "coverage-6.3.2-cp310-cp310-win32.whl", hash = "sha256:2fea046bfb455510e05be95e879f0e768d45c10c11509e20e06d8fcaa31d9e39"}, - {file = "coverage-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:a2a8b8bcc399edb4347a5ca8b9b87e7524c0967b335fbb08a83c8421489ddee1"}, - {file = "coverage-6.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f1555ea6d6da108e1999b2463ea1003fe03f29213e459145e70edbaf3e004aaa"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5f4e1edcf57ce94e5475fe09e5afa3e3145081318e5fd1a43a6b4539a97e518"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a15dc0a14008f1da3d1ebd44bdda3e357dbabdf5a0b5034d38fcde0b5c234b7"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b7745788866028adeb1e0eca3bf1101109e2dc58456cb49d2d9b99a8c516e6"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8ce257cac556cb03be4a248d92ed36904a59a4a5ff55a994e92214cde15c5bad"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b0be84e5a6209858a1d3e8d1806c46214e867ce1b0fd32e4ea03f4bd8b2e3359"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:acf53bc2cf7282ab9b8ba346746afe703474004d9e566ad164c91a7a59f188a4"}, - {file = "coverage-6.3.2-cp37-cp37m-win32.whl", hash = "sha256:8bdde1177f2311ee552f47ae6e5aa7750c0e3291ca6b75f71f7ffe1f1dab3dca"}, - {file = "coverage-6.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b31651d018b23ec463e95cf10070d0b2c548aa950a03d0b559eaa11c7e5a6fa3"}, - {file = "coverage-6.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d"}, - {file = "coverage-6.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c6dbb42f3ad25760010c45191e9757e7dce981cbfb90e42feef301d71540059"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76aeef1b95aff3905fb2ae2d96e319caca5b76fa41d3470b19d4e4a3a313512"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cf5cfcb1521dc3255d845d9dca3ff204b3229401994ef8d1984b32746bb45ca"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fbbdc8d55990eac1b0919ca69eb5a988a802b854488c34b8f37f3e2025fa90d"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ec6bc7fe73a938933d4178c9b23c4e0568e43e220aef9472c4f6044bfc6dd0f0"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9baff2a45ae1f17c8078452e9e5962e518eab705e50a0aa8083733ea7d45f3a6"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd9e830e9d8d89b20ab1e5af09b32d33e1a08ef4c4e14411e559556fd788e6b2"}, - {file = "coverage-6.3.2-cp38-cp38-win32.whl", hash = "sha256:f7331dbf301b7289013175087636bbaf5b2405e57259dd2c42fdcc9fcc47325e"}, - {file = "coverage-6.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:68353fe7cdf91f109fc7d474461b46e7f1f14e533e911a2a2cbb8b0fc8613cf1"}, - {file = "coverage-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b78e5afb39941572209f71866aa0b206c12f0109835aa0d601e41552f9b3e620"}, - {file = "coverage-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e21876082ed887baed0146fe222f861b5815455ada3b33b890f4105d806128d"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34626a7eee2a3da12af0507780bb51eb52dca0e1751fd1471d0810539cefb536"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ebf730d2381158ecf3dfd4453fbca0613e16eaa547b4170e2450c9707665ce7"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd6fe30bd519694b356cbfcaca9bd5c1737cddd20778c6a581ae20dc8c04def2"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96f8a1cb43ca1422f36492bebe63312d396491a9165ed3b9231e778d43a7fca4"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:dd035edafefee4d573140a76fdc785dc38829fe5a455c4bb12bac8c20cfc3d69"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ca5aeb4344b30d0bec47481536b8ba1181d50dbe783b0e4ad03c95dc1296684"}, - {file = "coverage-6.3.2-cp39-cp39-win32.whl", hash = "sha256:f5fa5803f47e095d7ad8443d28b01d48c0359484fec1b9d8606d0e3282084bc4"}, - {file = "coverage-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:9548f10d8be799551eb3a9c74bbf2b4934ddb330e08a73320123c07f95cc2d92"}, - {file = "coverage-6.3.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:18d520c6860515a771708937d2f78f63cc47ab3b80cb78e86573b0a760161faf"}, - {file = "coverage-6.3.2.tar.gz", hash = "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9"}, + {file = "coverage-6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50ed480b798febce113709846b11f5d5ed1e529c88d8ae92f707806c50297abf"}, + {file = "coverage-6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26f8f92699756cb7af2b30720de0c5bb8d028e923a95b6d0c891088025a1ac8f"}, + {file = "coverage-6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60c2147921da7f4d2d04f570e1838db32b95c5509d248f3fe6417e91437eaf41"}, + {file = "coverage-6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:750e13834b597eeb8ae6e72aa58d1d831b96beec5ad1d04479ae3772373a8088"}, + {file = "coverage-6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af5b9ee0fc146e907aa0f5fb858c3b3da9199d78b7bb2c9973d95550bd40f701"}, + {file = "coverage-6.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a022394996419142b33a0cf7274cb444c01d2bb123727c4bb0b9acabcb515dea"}, + {file = "coverage-6.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5a78cf2c43b13aa6b56003707c5203f28585944c277c1f3f109c7b041b16bd39"}, + {file = "coverage-6.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9229d074e097f21dfe0643d9d0140ee7433814b3f0fc3706b4abffd1e3038632"}, + {file = "coverage-6.4-cp310-cp310-win32.whl", hash = "sha256:fb45fe08e1abc64eb836d187b20a59172053999823f7f6ef4f18a819c44ba16f"}, + {file = "coverage-6.4-cp310-cp310-win_amd64.whl", hash = "sha256:3cfd07c5889ddb96a401449109a8b97a165be9d67077df6802f59708bfb07720"}, + {file = "coverage-6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:03014a74023abaf5a591eeeaf1ac66a73d54eba178ff4cb1fa0c0a44aae70383"}, + {file = "coverage-6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c82f2cd69c71698152e943f4a5a6b83a3ab1db73b88f6e769fabc86074c3b08"}, + {file = "coverage-6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b546cf2b1974ddc2cb222a109b37c6ed1778b9be7e6b0c0bc0cf0438d9e45a6"}, + {file = "coverage-6.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc173f1ce9ffb16b299f51c9ce53f66a62f4d975abe5640e976904066f3c835d"}, + {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c53ad261dfc8695062fc8811ac7c162bd6096a05a19f26097f411bdf5747aee7"}, + {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:eef5292b60b6de753d6e7f2d128d5841c7915fb1e3321c3a1fe6acfe76c38052"}, + {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:543e172ce4c0de533fa892034cce260467b213c0ea8e39da2f65f9a477425211"}, + {file = "coverage-6.4-cp37-cp37m-win32.whl", hash = "sha256:00c8544510f3c98476bbd58201ac2b150ffbcce46a8c3e4fb89ebf01998f806a"}, + {file = "coverage-6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:b84ab65444dcc68d761e95d4d70f3cfd347ceca5a029f2ffec37d4f124f61311"}, + {file = "coverage-6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d548edacbf16a8276af13063a2b0669d58bbcfca7c55a255f84aac2870786a61"}, + {file = "coverage-6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:033ebec282793bd9eb988d0271c211e58442c31077976c19c442e24d827d356f"}, + {file = "coverage-6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:742fb8b43835078dd7496c3c25a1ec8d15351df49fb0037bffb4754291ef30ce"}, + {file = "coverage-6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55fae115ef9f67934e9f1103c9ba826b4c690e4c5bcf94482b8b2398311bf9c"}, + {file = "coverage-6.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd698341626f3c77784858427bad0cdd54a713115b423d22ac83a28303d1d95"}, + {file = "coverage-6.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d382f7d77eeeaff14b30516b17bcbe80f645f5cf02bb755baac376591c653c"}, + {file = "coverage-6.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:016d7f5cf1c8c84f533a3c1f8f36126fbe00b2ec0ccca47cc5731c3723d327c6"}, + {file = "coverage-6.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:69432946f154c6add0e9ede03cc43b96e2ef2733110a77444823c053b1ff5166"}, + {file = "coverage-6.4-cp38-cp38-win32.whl", hash = "sha256:83bd142cdec5e4a5c4ca1d4ff6fa807d28460f9db919f9f6a31babaaa8b88426"}, + {file = "coverage-6.4-cp38-cp38-win_amd64.whl", hash = "sha256:4002f9e8c1f286e986fe96ec58742b93484195defc01d5cc7809b8f7acb5ece3"}, + {file = "coverage-6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e4f52c272fdc82e7c65ff3f17a7179bc5f710ebc8ce8a5cadac81215e8326740"}, + {file = "coverage-6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b5578efe4038be02d76c344007b13119b2b20acd009a88dde8adec2de4f630b5"}, + {file = "coverage-6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8099ea680201c2221f8468c372198ceba9338a5fec0e940111962b03b3f716a"}, + {file = "coverage-6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a00441f5ea4504f5abbc047589d09e0dc33eb447dc45a1a527c8b74bfdd32c65"}, + {file = "coverage-6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e76bd16f0e31bc2b07e0fb1379551fcd40daf8cdf7e24f31a29e442878a827c"}, + {file = "coverage-6.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8d2e80dd3438e93b19e1223a9850fa65425e77f2607a364b6fd134fcd52dc9df"}, + {file = "coverage-6.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:341e9c2008c481c5c72d0e0dbf64980a4b2238631a7f9780b0fe2e95755fb018"}, + {file = "coverage-6.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:21e6686a95025927775ac501e74f5940cdf6fe052292f3a3f7349b0abae6d00f"}, + {file = "coverage-6.4-cp39-cp39-win32.whl", hash = "sha256:968ed5407f9460bd5a591cefd1388cc00a8f5099de9e76234655ae48cfdbe2c3"}, + {file = "coverage-6.4-cp39-cp39-win_amd64.whl", hash = "sha256:e35217031e4b534b09f9b9a5841b9344a30a6357627761d4218818b865d45055"}, + {file = "coverage-6.4-pp36.pp37.pp38-none-any.whl", hash = "sha256:e637ae0b7b481905358624ef2e81d7fb0b1af55f5ff99f9ba05442a444b11e45"}, + {file = "coverage-6.4.tar.gz", hash = "sha256:727dafd7f67a6e1cad808dc884bd9c5a2f6ef1f8f6d2f22b37b96cb0080d4f49"}, ] cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, @@ -3117,8 +3117,14 @@ mistune = [ {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, ] moderngl = [ + {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:186f8ab2b869c56f677dc87de0577a60790fb9306bd5149cedc433a39e9291e5"}, + {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de252103b24a8dc40c7f6e1755e29bc9263c33b92141787b50c7ab0266c74906"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bcfcec3bc3b9a1ee19e94fa524913fd45c37214ea69301a6911e8e53f966029"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d76b0fb489a5dc6da591b979f8c471bb5b67409afaa9fe4569bc0abf25221f4"}, {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_27_x86_64.whl", hash = "sha256:792ffe1ec233ed5fcfb0c14955a7f944d64c0d49713ff8b9c5fa3176d96f05c3"}, {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:1f9ed0bc0d706124a01be2ad59b5774bb3b023e61dcf39faf7c4c7ef4b9f4f75"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7c2fce8b7a68f3df9189a19f424478e1d853cfd3e142efd1eb0d4cdf44148d7"}, + {file = "moderngl-5.6.4-cp310-cp310-win32.whl", hash = "sha256:0c6b482f678641e56bd44acecd10eddf74d2cd31e472eff6cca05493cf01e2c9"}, {file = "moderngl-5.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:28b517fc56c9ab9eb1f5833f7d7b1274d3719b962f95f55ccd8a0f6db884a92b"}, {file = "moderngl-5.6.4-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:bc3764d67f037b67051871345a1d0b7a3d2c19cb5c0c0af0a84c532e802d6642"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:90006d9dfd5333da604a7d26b2a5e70e1a570f291cd745b8bf80e4833d8821b6"}, @@ -3128,21 +3134,45 @@ moderngl = [ {file = "moderngl-5.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:331fd4bce60b10a08eed81a3ed4c70b7c297c38f981fdf3968d03a1c892af247"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1bd864b5cc2fc1255785e33575cec98fa5ded698503c4f8f3fa9230abeaa3a04"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b22534529f5bc52c1fe43336787c06d51123ae978fb56e74e47cabd85056c934"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5151ccf38af80ce8600eac089df1c814eb72aa99c8768307348c1a170104b7e"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ef57f65c639d12d534dce70e5c08965f0856ac371c669c7586904b8db6453eb"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0032c07b31bec50b26bba7ee7999e0f697000b31456bfa84391614bb92dba376"}, {file = "moderngl-5.6.4-cp36-cp36m-win32.whl", hash = "sha256:ee5b1eced39d7f6dc68782c2abf01c1130a40b6d83d333d175ee71adbea7c721"}, {file = "moderngl-5.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:52ee915a559762f0e992344961b35e0d241be32f8aa7464494e958f777e0534c"}, {file = "moderngl-5.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f83f6ab1fafdba2d9c06a7a1c8a4e460689ea1d514146606acc74f14e0831d93"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c350e06affea9fabc636b2350cf6e58d83ee2e7264527eee0f5d142c167f5463"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3eb65afc8ec4a1d4a4c48696fb0f4f6cf7a7ada6bef97818d717dbca73c57b11"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ec09bb3382d36e5ef3e627e85744b719db1175c3a3fdbadf9acde48eb1aca6"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23b6b30c5a16807d9d2b92f343fcdca8713a88801d8afa985decd302bb6ef7e9"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5eb217b7726511d2382bfdd56b2a8ff5489aa7d1d73bf4f854343b07df286fa9"}, {file = "moderngl-5.6.4-cp37-cp37m-win32.whl", hash = "sha256:4fd721eb83e73d34c3f7b5a11aec656fef461b51bbe7503b07ea27370c593cbd"}, {file = "moderngl-5.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:01c71d94dbd59b5d37ead463991e2998c0924426cffa393b9da2b8334551c998"}, + {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:46e7e03360eafa77159e0d6142904de0d2e9400254414820bbc2d0ca16b14388"}, {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2ec6ecd845f21ba44a08c11521cb71f2a9c2ea2ec189b7ed30d17837d392d70"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:40f74a2246e5302f93f2d46f76c0d2a26cbed1eb29731674c4052476f1e9c9ea"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5e158e6881034c7e1d0c583d7c82ff608439606f2359dc6098e4be4fd93cef9d"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eb8fb5efab2716938308732d16d0caf1a195015d84d73f2b73e3adacd228ba6"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59907d8855dd3ccf1950e8f43f5a1a7cdd93910d8edf538bf52e62098be22360"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8037b6934843000d5fecd2b1933d3894687123fc9afdb19af52a9a628971163d"}, {file = "moderngl-5.6.4-cp38-cp38-win32.whl", hash = "sha256:a28dc741469eeb69549ee85b4ddbf8e9cfca6a2b19ce0406df9fde20f78082c8"}, {file = "moderngl-5.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:ce87962b91635d857cac4a753c5d5f647d94dc66dcb0f090bb8d758fd226c3e8"}, + {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d4c56e15a5fb29de0295891ec3b153e2bd8aeada0c0825135aa5851fa481ff28"}, {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fb139bcdd25eae2c546e5788e9d8719f6c4b18a2ba68a9df31699b4ac57d62d"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9645afaa1704b2628d8a58be0760243d9954a62902283b176ea00a55b54eafe"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a3aaa15eb4d43b79e06a46945869feb13f325312ad63666ef2b7d3e216e3a09"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a07531c6b0f3da3058bd8927bc6c75eface98ce1416d8be4072b9b11b314b718"}, {file = "moderngl-5.6.4-cp39-cp39-win32.whl", hash = "sha256:fc5cc1601a3df8f45f1901c6b9960731e0619d1781b0d036e12341fbf2ef55d3"}, {file = "moderngl-5.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:1c74b71c9acee9f0e69807a086d76e92f37c1960c3bb1d6a6e2472fd03f7be5b"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1927a52fd3465c508045a1c4a8ea8c793399830d48458d431936f24f8827f136"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d04747cc9a96f786d04c8a176d5d2cbb51159efd66287d0e676ac674f53e861"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9092c50a2bb293be770f6f0ae5f1cb940848bf03682696c473a6d3f2c7710d2"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571e524fde685e21dbe132f4eb7bb223cfc235dc917a4cf122bc44897be18e89"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ee02dba4b32d7a165a36c797ce495d71deb085a7e29cfa7f1236fa7ccdfc6160"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0c02fdd386c45ad5d5053a436da64181a7821a042f6665c4ae415edfbdfe244c"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e2b40f1e11ee5f251a0d564e6a5d285ff91adf361e84f6912fc10959b92bd83"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d5f918dda6dc1ec5465d7105b06c5525041fbc368df5d4636145006ce3d303"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a6bd0e342388b931954671ccf8300ab36cc7d8c991547581efa6df5628bda8b"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:890caba3795a0288259d76a2cee014c6ffc00619bef179a8d0a87fd9c16a3729"}, {file = "moderngl-5.6.4.tar.gz", hash = "sha256:8c6d04559f5e3bf75a18525cd46d213c0f3a8409363718978e6de691bdb551fb"}, ] moderngl-window = [ @@ -3434,8 +3464,8 @@ pygments = [ {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, ] pyjwt = [ - {file = "PyJWT-2.3.0-py3-none-any.whl", hash = "sha256:e0c4bb8d9f0af0c7f5b1ec4c5036309617d03d56932877f2f7a0beeb5318322f"}, - {file = "PyJWT-2.3.0.tar.gz", hash = "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41"}, + {file = "PyJWT-2.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"}, + {file = "PyJWT-2.4.0.tar.gz", hash = "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba"}, ] pylint = [ {file = "pylint-2.13.7-py3-none-any.whl", hash = "sha256:13ddbbd8872c804574149e81197c28877eba75224ba6b76cd8652fc31df55c1c"}, From 412950500339c519a4471027de20c0ae1021357a Mon Sep 17 00:00:00 2001 From: Noam Zaks Date: Thu, 26 May 2022 15:34:08 +0300 Subject: [PATCH 054/555] Fix OpenGL segfaulting when running self.play or self.wait (#2734) * make play run only on main thread * prefer dict.update --- manim/scene/scene.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 397fab6a8a..1ddcd13bd1 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -1008,6 +1008,24 @@ def play( All other keywords are passed to the renderer. """ + # Make sure this is running on the main thread + if threading.current_thread().name != "MainThread": + kwargs.update( + { + "subcaption": subcaption, + "subcaption_duration": subcaption_duration, + "subcaption_offset": subcaption_offset, + } + ) + self.queue.put( + ( + "play", + args, + kwargs, + ) + ) + return + start_time = self.renderer.time self.renderer.play(self, *args, **kwargs) run_time = self.renderer.time - start_time From 48747a74d932cc36394c1b7a69994b51855be359 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 27 May 2022 10:45:31 +0200 Subject: [PATCH 055/555] Refactored structure of documentation; added :doc:`FAQ section ` (#2732) * move tutorials -> tutorials_guide * change title in tutorials_guides * rename: a_deeper_look -> output_and_config * splitting Tutorials * reorder index (sidebar), move some top level sections elsewhere * rename some tutorials * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * replace recommonmark with rest for rendering md files * fixed broken references * fixed **all** warnings and errors during docbuild * faq: help, more structure for landing page * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix deprecation tests * prepare some sort of skeleton for installation faq * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * ensure that pip from poetry venv is used in pipeline * added myst-parser as dev dependency * remove fixed sphinx version from requirement.txt, don't re-install dependencies * move and improve versions and troubleshooting content to FAQ * resolve broken references * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * help blacken-docs * new: navigating the docs * make different versions question more prominent * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed order of tutorials * added explicit references to building blocks and quickstart tutorial * docs -> doc * change a page-reference to a paragraph-reference * pypi manimlib, split answer regarding chocolatey failing * added a note on #beginner-resources Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- docs/i18n/readyForTranslation | 2 +- docs/requirements.txt | 4 +- docs/source/changelog/0.14.0-changelog.rst | 2 +- docs/source/conf.py | 2 +- docs/source/contributing/development.rst | 7 +- docs/source/faq/general.md | 197 ++++++++++++ docs/source/faq/help.md | 105 ++++++ docs/source/faq/index.rst | 9 + docs/source/faq/installation.md | 170 ++++++++++ .../{internals.rst => faq/internals.md} | 5 +- .../{tutorials => guides}/configuration.rst | 0 docs/source/guides/index.rst | 9 + .../{tutorials => guides}/using_text.rst | 6 +- docs/source/index.rst | 87 ++++- docs/source/installation.rst | 12 +- docs/source/installation/troubleshooting.rst | 299 ------------------ docs/source/installation/versions.rst | 49 --- docs/source/reference.rst | 2 +- .../source/reference_index/utilities_misc.rst | 1 + docs/source/reporting_bugs.rst | 37 --- docs/source/tutorials.rst | 12 - docs/source/tutorials/building_blocks.rst | 2 +- docs/source/tutorials/index.rst | 10 + ..._deeper_look.rst => output_and_config.rst} | 7 +- docs/source/tutorials/quickstart.rst | 8 +- docs/source/tutorials_guides.rst | 10 + manim/_config/utils.py | 2 +- manim/animation/movement.py | 28 +- manim/mobject/graphing/coordinate_systems.py | 17 +- manim/mobject/graphing/probability.py | 2 +- manim/scene/scene.py | 2 +- manim/scene/section.py | 2 +- manim/utils/deprecation.py | 2 +- manim/utils/docbuild/manim_directive.py | 31 +- poetry.lock | 87 ++++- pyproject.toml | 1 + tests/test_deprecation.py | 2 +- 38 files changed, 765 insertions(+), 467 deletions(-) create mode 100644 docs/source/faq/general.md create mode 100644 docs/source/faq/help.md create mode 100644 docs/source/faq/index.rst create mode 100644 docs/source/faq/installation.md rename docs/source/{internals.rst => faq/internals.md} (71%) rename docs/source/{tutorials => guides}/configuration.rst (100%) create mode 100644 docs/source/guides/index.rst rename docs/source/{tutorials => guides}/using_text.rst (99%) delete mode 100644 docs/source/installation/troubleshooting.rst delete mode 100644 docs/source/installation/versions.rst delete mode 100644 docs/source/reporting_bugs.rst delete mode 100644 docs/source/tutorials.rst create mode 100644 docs/source/tutorials/index.rst rename docs/source/tutorials/{a_deeper_look.rst => output_and_config.rst} (98%) create mode 100644 docs/source/tutorials_guides.rst diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 300c6c13f4..b81fb69ad5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: - name: Run doctests in rst files run: | - cd docs && pip install -r requirements.txt && poetry run make doctest O=-tskip-manim + cd docs && poetry run make doctest O=-tskip-manim test: diff --git a/docs/i18n/readyForTranslation b/docs/i18n/readyForTranslation index 5f6d57a20e..9e8328e890 100644 --- a/docs/i18n/readyForTranslation +++ b/docs/i18n/readyForTranslation @@ -9,6 +9,6 @@ examples.po reference.po tutorials.po tutorials/building_blocks.po -tutorials/a_deeper_look.po +tutorials/output_and_config.po tutorials/quickstart.po tutorials/configuration.po diff --git a/docs/requirements.txt b/docs/requirements.txt index a5ff99adb2..0ed8128396 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,5 +1,5 @@ -sphinx==4.1.2 furo -recommonmark>=0.5.0 +myst-parser +sphinx sphinx-copybutton sphinxext-opengraph diff --git a/docs/source/changelog/0.14.0-changelog.rst b/docs/source/changelog/0.14.0-changelog.rst index 8aeef13735..1014987788 100644 --- a/docs/source/changelog/0.14.0-changelog.rst +++ b/docs/source/changelog/0.14.0-changelog.rst @@ -111,7 +111,7 @@ Documentation-related changes * :pr:`2415`: Removed instructions on using and installing Docker in README -* :pr:`2414`: Made improvements to the :doc:`configuration` tutorial +* :pr:`2414`: Made improvements to the :doc:`/guides/configuration` tutorial * :pr:`2423`: Changed recommendation to ``mactex-no-gui`` from ``mactex`` for macOS install diff --git a/docs/source/conf.py b/docs/source/conf.py index 86d8f3aa41..3b5dba7f6b 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -35,7 +35,6 @@ # ones. extensions = [ "sphinx.ext.autodoc", - "recommonmark", "sphinx_copybutton", "sphinx.ext.napoleon", "sphinx.ext.autosummary", @@ -47,6 +46,7 @@ "sphinx.ext.graphviz", "sphinx.ext.inheritance_diagram", "sphinxcontrib.programoutput", + "myst_parser", ] # Automatically generate stub pages when using the .. autosummary directive diff --git a/docs/source/contributing/development.rst b/docs/source/contributing/development.rst index d7e0a947a3..90266e73b1 100644 --- a/docs/source/contributing/development.rst +++ b/docs/source/contributing/development.rst @@ -154,11 +154,6 @@ Develop your contribution Use the :mod:`manim directive for Sphinx ` to add examples to the documentation! - .. autosummary:: - :toctree: ../reference - - manim.utils.docbuild.manim_directive - As far as development on your local machine goes, these are the main steps you should follow. @@ -282,7 +277,7 @@ Further useful guidelines You can find examples for the ``docs`` in several places: -the :doc:`Example Gallery <../examples>`, :doc:`Tutorials <../tutorials>`, +the :doc:`Example Gallery <../examples>`, :doc:`Tutorials <../tutorials/index>`, and :doc:`Reference Classes <../reference>`. In case you are contributing, please have a look at this flowchart: diff --git a/docs/source/faq/general.md b/docs/source/faq/general.md new file mode 100644 index 0000000000..eedb9dfa7f --- /dev/null +++ b/docs/source/faq/general.md @@ -0,0 +1,197 @@ +# FAQ: General Usage + +## Why does Manim say that "there are no scenes inside that module"? + +There are two main reasons why this error appears: if you have edited +the file containing your `Scene` class and forgot to save it, or if you +have accidentally passed the name of a wrong file to `manim`, this is +a likely outcome. Check that you have spelled everything correctly. + +Otherwise you are likely mixing up Manim versions. See {ref}`this FAQ answer ` +for an explanation regarding why there are different versions. Under the assumption +that you are trying to use the `manim` executable from the terminal to run +a scene that has been written for the community version (i.e., there is +`from manim import *`, or more specifically `from manim import Scene`) + +--- + +## No matter what code I put in my file, Manim only renders a black frame! Why? + +If you are using the usual pattern to write a `Scene`, i.e., +```python +class MyAwesomeScene(Scene): + def construct(self): + ... + # your animation code +``` +then double check whether you have spelled `construct` correctly. +If the method containing your code is not called `construct` (or +if you are not calling a different, custom method from `construct`), +Manim will not call your method and simply output a black frame. + +--- + +## I have watched a video where a creator ran command X, but it does not work for me. Why? + +The video you have been watching is likely outdated. If you want to follow +along, you either need to use the same version used in the video, or +modify the code (in many cases it is just a method having been renamed etc.) +accordingly. Check the video description, in some cases creators point out +whether changes need to be applied to the code shown in the video. + +--- + +## When using `Tex` or `MathTex`, some letters are missing. How can I fix this? + +It is possible that you have to (re)build some fonts used by LaTeX. For +some distributions, you can do this manually by running +```bash +fmtutil -sys --all +``` +We recommend consulting the documentation of your LaTeX distribution +for more information. + +--- + +## I want to translate some code from `manimgl` to `manim`, what do I do with `CONFIG` dictionaries? + +The community maintained version has dropped the use of `CONFIG` dictionaries very +early, with {doc}`version v0.2.0 ` released in +January 2021. + +Before that, Manim's classes basically processed `CONFIG` dictionaries +by mimicking inheritance (to properly process `CONFIG` dictionaries set +by parent classes) and then assigning all of the key-value-pairs in the +dictionary as attributes of the corresponding object. + +In situations where there is not much inheritance going on, +or for any custom setting, you should set these attributes yourself. +For example, for an old-style `Scene` with custom attributes like + +```python +class OldStyle(Scene): + CONFIG = {"a": 1, "b": 2} +``` + +should be written as + +```python +class NewStyle(Scene): + a = 1 + b = 2 +``` + +In situations where values should be properly inherited, the arguments +should be added to the initialization function of the class. An old-style +mobject `Thing` could look like + +```python +class Thing(VMobject): + CONFIG = { + "stroke_color": RED, + "fill_opacity": 0.7, + "my_awesome_argument": 42, + } +``` + +where `stroke_color` and `fill_opacity` are arguments that concern the +parent class of `Thing`, and `my_awesome_argument` is a custom argument +that only concerns `Thing`. A version without `CONFIG` could look like this: + +```python +class Thing(VMobject): + def __init__( + self, stroke_color=RED, fill_opacity=0.7, my_awesome_argument=42, **kwargs + ): + self.my_awesome_argument = my_awesome_argument + super().__init__(stroke_color=stroke_color, fill_opacity=fill_opacity, **kwargs) +``` + +--- + +## My installation does not support converting PDF to SVG, help? + +This is an issue with `dvisvgm`, the tool shipped with LaTeX that +transforms LaTeX output to a `.svg` file that +Manim can parse. + +First, make sure your ``dvisvgm`` version is at least 2.4 by +checking the output of + +```bash +dvisvgm --version +``` + +If you do not know how to update `dvisvgm`, please refer to your +LaTeX distributions documentation (or the documentation of your +operating system, if `dvisvgm` was installed as a system package). + +Second, check whether your ``dvisvgm`` supports PostScript specials. This is +needed to convert from PDF to SVG. Run: + +```bash +dvisvgm -l +``` + +If the output to this command does **not** contain `ps dvips PostScript specials`, +this is a bad sign. In this case, run + +```bash +dvisvgm -h +``` + +If the output does **not** contain `--libgs=filename`, this means your +`dvisvgm` does not currently support PostScript. You must get another binary. + +If, however, `--libgs=filename` appears in the help, that means that your +`dvisvgm` needs the Ghostscript library to support PostScript. Search for +`libgs.so` (on Linux, probably in `/usr/local/lib` or `/usr/lib`) or +`gsdll32.dll` (on 32-bit Windows, probably in `C:\windows\system32`) or +`gsdll64.dll` (on 64-bit Windows, also probably in `C:\windows\system32`) +or `libgsl.dylib` (on MacOS, probably in `/usr/local/lib` or +`/opt/local/lib`). Please look carefully, as the file might be located +elsewhere, e.g. in the directory where Ghostscript is installed. + +When you have found the library, try (on MacOS or Linux) + +```bash +export LIBGS= +dvisvgm -l +``` + +or (on Windows) + +```bat +set LIBGS= +dvisvgm -l +``` + +You should now see `ps dvips PostScript specials` in the output. Refer to +your operating system's documentation to find out how you can set or export the +environment variable ``LIBGS`` automatically whenever you open a shell. + +As a last check, you can run + +```bash +dvisvgm -V1 +``` + +(while still having `LIBGS` set to the correct path, of course.) If `dvisvgm` +can find your Ghostscript installation, it will be shown in the output together +with the version number. + +If you do not have the necessary library on your system, please refer to your +operating system's documentation to find out where you can get it and how you +have to install it. + +If you are unable to solve your problem, check out the +[dvisvgm FAQ](https://dvisvgm.de/FAQ/). + +--- + +## Where can I find more resources for learning Manim? + +In our [Discord server](https://manim.community/discord), we have the community maintained +`#beginner-resources` channel in which links to helpful learning resources are collected. +You are welcome to join our Discord and take a look yourself! If you have found some +guides or tutorials yourself that are not on our list yet, feel free to add them! diff --git a/docs/source/faq/help.md b/docs/source/faq/help.md new file mode 100644 index 0000000000..a560b03101 --- /dev/null +++ b/docs/source/faq/help.md @@ -0,0 +1,105 @@ +# FAQ: Getting Help + +## How do I animate X? Why do I get error Y? Can someone help me? + +Before asking the community, please make sure that the issue you are having +is not already discussed in our {doc}`FAQ section ` sufficiently +well so that you can resolve the problem yourself. You can also try to +use your favorite search engine, if you are lucky you might find a blog post, +a question on [StackOverflow](https://stackoverflow.com/questions/tagged/manim), +or a post in the [r/manim subreddit](https://reddit.com/r/manim). + +If this is not the case, please take a moment to properly prepare your question: +the better you manage to explain what exactly it is you are struggling with, +the more efficient people will be able to help you. Regardless of the platform +you choose in the next step, StackOverflow has a good guide on +[asking good questions](https://stackoverflow.com/help/how-to-ask). + +As soon as you have a good idea of what exactly you want to ask, pick one of the +following communication channels: + +- The community is most active [in our Discord server](https://manim.community/discord/). + Click the link to join, then pick one of the `#manim-help` channels in the sidebar, + and post your question there. If you are comfortable with using Discord, try to search + for your problem using the search function of our server; perhaps people have been + talking about it before! +- We are also monitoring questions on + [StackOverflow](https://stackoverflow.com/questions/tagged/manim) that are tagged + with `manim`. +- Many people are also active in our [r/manim subreddit](https://reddit.com/r/manim), + feel free to post there if you are an avid Redditor -- but be aware that Discord + or StackOverflow might be better choices. +- And finally, you can also start a new [discussion on GitHub](https://github.com/ManimCommunity/manim/discussions) + if you dislike all other options. + +In all of these channels, please make sure to abide by Manim's +{doc}`Code of Conduct ` -- in short, be *excellent* to one another: +be friendly and patient, considerate, and respectful. + +--- + +## What should I do if nobody answers my question? + +Try and see whether your question can be improved: did you include all relevant +information (in case of errors: the full stack trace, the code that you were +rendering, and the command you used to run Manim?). In case you used a very long +example, is it possible to construct a more minimal version that has the same +(faulty) behavior? + +If you posted in one of our help channels on Discord and your question got buried, +you are allowed to ping the `@Manim Helper` role to bring it to the attention of +the volunteers who are willing to take a look. Please refrain from pinging the role +immediately when asking your question for the first time, this is considered impolite. + +You can also try to post your question to a different channel if you feel that you +are not having any success with your initial choice -- but please do not spam your +question in all of our communication channels (and in particular for Discord: +please don't use multiple help channels at once). + +In the end, it is as for most open-source projects: our community members are +volunteers. If you do not receive a quick answer to your question, it may be +because nobody knows the answer, or because your question is not clear enough, +or it could be that everyone who can help you with your problem is busy doing +other things. + +--- + +## The library does not behave as documented, or something broke in a new release. What should I do? + +Sounds like you have found a bug. One of the best ways of contributing to the +development of Manim is by reporting it! + +Check our list of known issues and feature requests +[in our GitHub repository](https://github.com/ManimCommunity/manim/issues). If the +problem you have found is not listed there yet (use the search function; also check +whether there is a corresponding closed issue, it is possible that your problem +has already been resolved and will be fixed with the next release), please consider +the following steps to submit a new issue. + +```{note} +If you are unsure whether or not you should file a new issue for some odd behavior +that you found, feel free to ask the community developers, preferably in one of +our `#manim-dev` channels in [our Discord](https://manim.community/discord/). +``` + +1. Make sure you are running the latest released version of Manim, your problem + might otherwise already be fixed in a more recent version. Check the + {doc}`/changelog` for a full list of changes between Manim releases. + +2. Choose the correct category for your report when + [creating a new issue](https://github.com/ManimCommunity/manim/issues/new/choose). + We have dedicated issue templates for *bug reports*, *feature requests*, + *installation issues*, and *suggestions*. If your report falls into one of these + categories, read the issue template carefully! Instructions are given in the + `` sections of the text field. + +3. For bug reports: prepare a minimal example that can be used to illustrate the + issue. Examples with hundreds of lines are very inefficient and tedious to debug. + Your problem needs to be reproducible for others, so please make sure to prepare + a suitable example. + +4. This is mentioned in the bug report template as well, but it is very important: + if you report that some code raises an error, make sure to include the full + terminal output, from the command you used to run the library up to and including + the last line with the error message. Read carefully: if the message mentions + that there is another relevant log file, include this other file as well! diff --git a/docs/source/faq/index.rst b/docs/source/faq/index.rst new file mode 100644 index 0000000000..e500af73f8 --- /dev/null +++ b/docs/source/faq/index.rst @@ -0,0 +1,9 @@ +Frequently Asked Questions +========================== + +.. toctree:: + :caption: Table of Contents + :maxdepth: 2 + :glob: + + * diff --git a/docs/source/faq/installation.md b/docs/source/faq/installation.md new file mode 100644 index 0000000000..9f54b4c4b8 --- /dev/null +++ b/docs/source/faq/installation.md @@ -0,0 +1,170 @@ +# FAQ: Installation + +(different-versions)= +## Why are there different versions of Manim? + +Manim was originally created by Grant Sanderson as a personal project and for use +in his YouTube channel, +[3Blue1Brown](https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw). +As his channel gained popularity, many grew to like the style of his animations and +wanted to use manim for their own projects. However, as manim was only intended for +personal use, it was very difficult for other users to install and use it. + +In late 2019, Grant started working on faster OpenGL rendering in a new branch, +known as the `shaders` branch. In mid-2020, a group of developers forked it into what is +now the community edition; this is the version documented on this website. +In early 2021, Grant merged the shaders branch back into master, making it the default branch in his repository -- and this is what `manimgl` is. +The old version, before merging the `shaders` branch is sometimes referred to as +`ManimCairo` and is, at this point, only useful for one singular purpose: rendering +Grant's old videos locally on your machine. It is still available in his GitHub +repository in form of the `cairo-backend` branch. + +To summarize: +- [**Manim**, or **ManimCE**](https://manim.community) refers to the community + maintained version of the library. This is the version documented on this website; + the package name on PyPI is [`manim`](https://pypi.org/project/manim/). +- [ManimGL](https://github.com/3b1b/manim) is the latest released version of the + version of the library developed by Grant "3b1b" Sanderson. It has more experimental + features and breaking changes between versions are not documented. Check out + its documentation [here](https://3b1b.github.io/manim/index.html); on PyPI the + package name is [`manimgl`](https://pypi.org/project/manimgl/). +- [ManimCairo](https://github.com/3b1b/manim/tree/cairo-backend) is the name that + is sometimes used for the old, pre-OpenGL version of `manimgl`. The latest version + of it is available [on PyPI as `manimlib`](https://pypi.org/project/manimgl/), + but note that if you intend to use it to compile some old project of Grant, + you will likely have to install the exact version from the time the project + was created from source. + +--- + +## Which version should I use? + +We recommend the community maintained version especially for beginners. It has been +developed to be more stable, better tested and documented (!), and quicker to respond +to community contributions. It is also perfectly reasonable to start learning with the +community maintained version and then switch to a different version later on. + +If you do not care so much about documentation or stability, and would like to use +the exact same version that Grant is using, then use ManimGL. + +And as mentioned above, ManimCairo should only be used for (re)rendering old +3Blue1Brown projects (basically 2019 and before). + +--- + +## What are the differences between Manim, ManimGL, ManimCairo? Can I tell for which version a scene was written for? + +You can! The thing that usually gives it away is the `import` statement +at the top of the file; depending on how the code imports Manim you can tell +for which version of the code it was written for: + +- If the code imports from `manim` (i.e., `from manim import *`, `import manim as mn`, etc.), + then the code you are reading is supposed to be run with the community maintained version. +- If the import reads `import manimlib` (or `from manimlib import *`), you are likely + reading a file to be rendered with ManimGL. +- And if the import reads `from manimlib.imports import *`, or perhaps even + `from big_ol_pile_of_manim_imports import *` you are reading a snippet that is + supposed to be rendered with an early, or very early version of ManimCairo, respectively. + +--- + +## How do I know which version of Manim I have installed? + +Assuming you can run `manim` in your terminal and there is some output, check the +first line of the text being produced. If you are using the community maintained +version, the first line of any output will be `Manim Community `. +If it does not say that, you are likely using ManimGL. + +You can also check the list of packages you have installed: if typing `python` +in your terminal spawns the interpreter that corresponds to the Python +installation you use (might also be `py`, or `python3`, depending on your +operating system), running `python -m pip list` will print a list of all +installed packages. Check whether `manim` or `manimgl` appear in that list. + +Similarly, you can use `python -m pip install ` and +`python -m pip uninstall ` to install and uninstall +packages from that list, respectively. + +--- + +## I am following the video guide X to install Manim, but some step fails. What do I do? + +It is only natural that there are many video guides on installing Manim +out there, given that Manim is a library used for creating videos. Unfortunately +however, (YouTube) videos can't be updated easily (without uploading a new one, that is) +when some step in the installation process changes, and so there are many +**severely outdated** resources out there. + +This is why we strongly recommend following our +{doc}`written installation guide ` to guide you through the process. +In case you prefer using a video guide regardless, please check whether the +creator whose guide you have been watching has made a more recent version available, +and otherwise please contact them directly. Asking for help in the community will +likely lead to being suggested to follow our written guide. + +--- + +## Why does ManimPango fail to install when running `pip install manim`? + +This most likely means that pip was not able to use our pre-built wheels +of the `manimpango` dependency. Let us know (via +[Discord](https://www.manim.community/discord/) or by opening a +[new issue on GitHub](https://github.com/ManimCommunity/ManimPango/issues/new)) +which architecture you would like to see supported, and we'll see what we +can do about it. + +To fix errors when installing `manimpango`, you need to make sure you +have all the necessary build requirements. Check out the detailed +instructions given in [the BUILDING section](https://github.com/ManimCommunity/ManimPango#BUILDING) +of [ManimPango's README](https://github.com/ManimCommunity/ManimPango). + +--- + +## I am using Windows and get the error `X is not recognized as an internal or external command, operable program or batch file` + +Regardless of whether `X` says `python` or `manim`, this means that the executable you +are trying to run is not located in one of the directories your system is looking +for them (specified by the `PATH` variable). Take a look at the instructions +{doc}`in the installation guide for Windows `, or +[this StackExchange answer](https://superuser.com/questions/143119/how-do-i-add-python-to-the-windows-path/143121#143121) +to get help with editing the `PATH` variable manually. + +If `python` is recognized but not `manim` or `pip`, you can try running +commands by prepending `python -m`. That is, `manim` becomes `python -m manim`, +and `pip` becomes `python -m pip`. + +--- + +## I have tried using Chocolatey (`choco install manimce`) to install Manim, but it failed! + +Make sure that you were running the command with administrator permissions, +otherwise there can be problems. If this is not the issue, read Chocolatey's +output carefully, it should mention a `.log` file containing information why +the process failed. + +You are welcome to take this file (and any other input you feel might be +relevant) and submit it to Manim's community to ask for help with +your problem. See the {doc}`FAQ on getting help ` for instructions. + +--- + +## On Windows, when typing `python` or `python3` the Windows store is opened, can I fix this? + +Yes: you can remove these aliases with these steps: + +1. Go to the Windows Setting. +2. Under *Apps and Features* you will find application execution aliases. +3. Within this menu, disable the alias(es) that are causing the issue + (`python` and/or `python3`). + +--- + +## I am using Anaconda and get an `ImportError` mentioning that some Symbol is not found. + +This is because Anaconda environments come with their own preinstalled +version of `cairo` which is not compatible with the version of `pycairo` +required by Manim. Usually it can be fixed by running + +```bash +conda install -c conda-forge pycairo +``` diff --git a/docs/source/internals.rst b/docs/source/faq/internals.md similarity index 71% rename from docs/source/internals.rst rename to docs/source/faq/internals.md index aa83f809ef..08cdcd496f 100644 --- a/docs/source/internals.rst +++ b/docs/source/faq/internals.md @@ -1,8 +1,7 @@ -Internal structure -================== +# Where can I learn more about Manim's internal structure? Efforts to document the internal structure of Manim is ongoing on our -`wiki `_. +[wiki](https://github.com/ManimCommunity/manim/wiki/Developer-documentation-(WIP)). Keep in mind that since this is a work in progress, the information you find may be incomplete, outdated or even wrong. Still, it should serve as a good starting point. diff --git a/docs/source/tutorials/configuration.rst b/docs/source/guides/configuration.rst similarity index 100% rename from docs/source/tutorials/configuration.rst rename to docs/source/guides/configuration.rst diff --git a/docs/source/guides/index.rst b/docs/source/guides/index.rst new file mode 100644 index 0000000000..2d32784276 --- /dev/null +++ b/docs/source/guides/index.rst @@ -0,0 +1,9 @@ +Thematic Guides +=============== + +.. toctree:: + :caption: Table of Contents + :maxdepth: 2 + :glob: + + * diff --git a/docs/source/tutorials/using_text.rst b/docs/source/guides/using_text.rst similarity index 99% rename from docs/source/tutorials/using_text.rst rename to docs/source/guides/using_text.rst index 723438e8c5..80393aa608 100644 --- a/docs/source/tutorials/using_text.rst +++ b/docs/source/guides/using_text.rst @@ -1,6 +1,6 @@ -########## -Using Text -########## +########################### +Rendering Text and Formulas +########################### There are two different ways by which you can render **Text** in videos: diff --git a/docs/source/index.rst b/docs/source/index.rst index 1e1ac1836f..b01665e41e 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -3,8 +3,8 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Manim Community Overview -======================== +Manim Community Edition +======================= Animating technical concepts is traditionally pretty tedious since it can be difficult to make the animations precise enough to convey them accurately. @@ -13,23 +13,96 @@ making it convenient to specify exactly how each one should run. Take a look at the :doc:`Example Gallery <../examples>` for some inspiration on how to create beautiful images and videos with Manim. +First Steps +----------- + +Are you new to Manim and are looking for where to get started? Then you are +in the right place! + +.. note:: + + Please be aware that there are different, incompatible versions + of Manim available. Check our :ref:`installation FAQ ` + to learn more! + +- The :doc:`Installation ` section has the latest and + up-to-date installation instructions for Windows, MacOS, and Linux. + You can also find information on Manim's docker images and (online) + notebook environments there. +- Want to try the library before installing it? Take a look at our + interactive online playground at https://try.manim.community in form + of a Jupyter notebook. +- In our :doc:`Tutorials ` section you will find a + collection of resources that will teach you how to use Manim. In particular, + the :doc:`tutorials/quickstart` tutorial teaches you Manim's basics, + and in :doc:`tutorials/building_blocks` the classes used to compose + your animations are described in more detail. + + +Finding Help +------------ + +Are you struggling with installing or using Manim? Don't worry, we've all been +there. Here are some good resources to help you out: + +- Perhaps your problem is one that occurs frequently, then chances are it is + addressed in our :doc:`collection of FAQs `. +- If you are looking for information on some specific class, look for it + in the :doc:`reference manual ` and/or use the search feature + of the documentation. +- Still no luck? Then you are welcome to ask the community for help, together + we usually manage to find a solution for your problem! Consult the + :doc:`FAQ page on getting help ` for instructions. + + +Navigating the Documentation +---------------------------- + +Here are some short summaries for all of the sections in this documentation: + +- The :doc:`Example Gallery ` is a collection of examples (rendered videos + and images together with the code they were generated from) that show a few different, + simple things that you can do with Manim. +- The :doc:`Installation ` section has information on installing Manim. +- In :doc:`Tutorials & Guides ` you can find learning resources: proper + tutorials that guide you through the process of creating a video are in + the :doc:`Tutorial ` section; guides on specific topics are in the + :doc:`Guides ` section, and the answers to frequently asked questions + can be found in the :doc:`FAQ ` section. +- The :doc:`Reference Manual ` contains a comprehensive list of all of Manim's + (documented) modules, classes, and functions. If you are somewhat familiar with Manim's + module structure feel free to browse the manual directly. If you are searching for + something specific, feel free to use the documentation's search feature in the sidebar. + Many classes and methods come with their own illustrated examples too! +- The :doc:`Plugins ` page documents how to install, write, and distribute + plugins (that is, separate Python packages that extend the feature set of the core library). +- Changes between versions are documented in our :doc:`Changelog `. +- If you are looking into contributing to the development of Manim, you can find information + on how to get involved in our :doc:`Contributing ` section. +- And finally, the :doc:`Code of Conduct ` page has a formal description of + the rules you should abide by when interacting within our community. + +Sharing Your Work +----------------- + We'd love to hear from you and see your manimations `on Twitter `_, `Reddit `_, or `Discord `_. If you're using Manim in a scientific context, instructions on how to cite a particular release can be found `in our README `_. +Index +----- + .. toctree:: :maxdepth: 2 - installation - tutorials examples - changelog + installation + tutorials_guides reference plugins - reporting_bugs - internals + changelog contributing conduct diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 160a167bfd..7515edef0d 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -15,8 +15,8 @@ Python, or via Docker). Note that there are several different versions of Manim. The instructions on this website are **only** for the *community edition*. - Find out more about the :doc:`differences between Manim - versions ` if you are unsure which + Find out more about the :ref:`differences between Manim + versions ` if you are unsure which version you should install. #. :ref:`Installing Manim to your system's Python ` @@ -54,18 +54,14 @@ Manim requires Python version ``3.7`` or above to run. installation/windows installation/macos installation/linux - installation/troubleshooting Once Manim is installed locally, you can proceed to our :doc:`quickstart guide ` which walks you through rendering a first simple scene. As mentioned above, do not worry if there are errors or other -problems: consult our :doc:`troubleshooting -guide ` for help, or get in touch -with the community via `GitHub discussions -`__ or -`Discord `__. +problems: consult our :doc:`FAQ section ` for help +(including instructions for how to ask Manim's community for help). diff --git a/docs/source/installation/troubleshooting.rst b/docs/source/installation/troubleshooting.rst deleted file mode 100644 index c5f1ebe2d4..0000000000 --- a/docs/source/installation/troubleshooting.rst +++ /dev/null @@ -1,299 +0,0 @@ -Troubleshooting -=============== - -Version incompatibility -*********************** - -Confusion and conflict between versions are by far the most common reasons -for installation failures. Some errors resulting from this are: - -- ``There are no scenes in that module`` -- ``ModuleNotFoundError: No module named 'manim'`` -- ``ModuleNotFoundError: No module named 'manimlib'`` - -Some reasons that conflict may occur are: - -- You followed any tutorial created before October 2020 (because the community edition did not exist before then) -- You cloned a repository on GitHub (installation of the community version for normal use does not require the cloning of any repository) -- Different import statements (explained below) -- You used documentation for multiple versions (such as the readme for 3b1b/manim and this documentation) - -.. note:: - As this is the documentation for the community version, we can - only help with the installation of this library. If you would like to - install other versions of manim, please refer to their documentation. - -Identifying files written for a different version of manim ----------------------------------------------------------- - -There are some distinctive features of different versions of manim that -can help in identifying what version of manim files are written for: - -+--------------+-------------------------+----------------------------+-----------------------------------------+ -| Feature | ManimCE (this version) | ManimGL | ManimCairo | -+==============+=========================+============================+=========================================+ -| Import | ``from manim import *`` | ``from manimlib import *`` | ``from manimlib.imports import *`` | -| statement | | | | -+--------------+-------------------------+----------------------------+-----------------------------------------+ - -If you are a beginner, you should only attempt to run files written for -your version. Files written for a different version of manim will -generally not work without some modification. - -Identifying the version you are running ---------------------------------------- - -The community edition of manim should always state `Manim Community ` -as its first line of any command you run. - -Identifying and removing conflicting versions of manim ------------------------------------------------------- - -Within the system or environment you are using to run manim, run the -following command in the terminal: - -.. code-block:: bash - - pip list - -The correct package for the community edition is simply ``manim``. If -you do not see this package listed, please refer back to our -installation guide to install it. If you see ``manimlib`` or ``manimce`` -(actually an old version of the community edition), you should remove -them with: - -.. code-block:: bash - - pip uninstall - - -If you cloned manim from GitHub, you should either remove it -or run manim outside that folder. - -Other errors -************ - -``pip install manim`` fails when installing manimpango? -------------------------------------------------------- -This most likely means that pip was not able to use our pre-built wheels -of ``manimpango``. Let us know (via our `Discord `_ -or by opening a -`new issue on GitHub `_) -which architecture you would like to see supported, and we'll see what we -can do about it. - -To fix errors when installing ``manimpango``, you need to make sure you -have all the necessary build requirements. Check out the detailed -instructions given in -`the BUILDING section `_ -of the corresponding `GitHub repository `_. - - -(Windows) OSError: dlopen() failed to load a library: pango ------------------------------------------------------------ - -This should be fixed in Manim's latest version, update -using ``pip install --upgrade manim``. - - - -Some letters are missing from Text/Tex output ---------------------------------------------- - -If you have recently installed TeX you may need to build the fonts it -uses. This can be done by running: - -.. code-block:: bash - - fmtutil -sys --all - - -.. _dvisvgm-troubleshoot: - -Installation does not support converting PDF to SVG ---------------------------------------------------- - -First, make sure your ``dvisvgm`` version is at least 2.4: - -.. code-block:: bash - - dvisvgm --version - - -If you do not know how to update ``dvisvgm``, please refer to your operating system's documentation. - -Second, check whether your ``dvisvgm`` supports PostScript specials. This is -needed to convert from PDF to SVG. - -.. code-block:: bash - - dvisvgm -l - - -If the output to this command does **not** contain ``ps dvips PostScript specials``, -this is a bad sign. In this case, run - -.. code-block:: bash - - dvisvgm -h - - -If the output does **not** contain ``--libgs=filename``, this means your -``dvisvgm`` does not currently support PostScript. You must get another binary. - -If, however, ``--libgs=filename`` appears in the help, that means that your -``dvisvgm`` needs the Ghostscript library to support PostScript. Search for -``libgs.so`` (on Linux, probably in ``/usr/local/lib`` or ``/usr/lib``) or -``gsdll32.dll`` (on 32-bit Windows, probably in ``C:\windows\system32``) or -``gsdll64.dll`` (on 64-bit Windows, probably in ``c:\windows\system32`` -- yes -32) or ``libgsl.dylib`` (on Mac OS, probably in ``/usr/local/lib`` or -``/opt/local/lib``). Please look carefully, as the file might be located -elsewhere, e.g. in the directory where Ghostscript is installed. - -When you have found the library, try (on Mac OS or Linux) - -.. code-block:: bash - - export LIBGS= - dvisvgm -l - -or (on Windows) - -.. code-block:: bat - - set LIBGS= - dvisvgm -l - - -You should now see ``ps dvips PostScript specials`` in the output. Refer to -your operating system's documentation to find out how you can set or export the -environment variable ``LIBGS`` automatically whenever you open a shell. - -As a last check, you can run - -.. code-block:: bash - - dvisvgm -V1 - -(while still having ``LIBGS`` set to the correct path, of course.) If ``dvisvgm`` -can find your Ghostscript installation, it will be shown in the output together -with the version number. - -If you do not have the necessary library on your system, please refer to your -operating system's documentation to find out where you can get it and how you -have to install it. - -If you are unable to solve your problem, check out the `dvisvgm FAQ `_. - -(Windows) ``Python is not recognized as an internal or external command, operable program or batch file.`` ----------------------------------------------------------------------------------------------------------- - -To fix this, you need to add the Python executable to your ``PATH`` environment variable. -Follow the steps in `this StackExchange answer `__. - -``choco install manimce`` failed --------------------------------- - -If ``choco install manimce`` failed, -it is likely because Python was not added to your ``PATH`` variable properly. -Try running the following commands in your terminal: - -1. ``py --version`` -2. ``python --version`` -3. ``py3 --version`` -4. ``python3 --version`` - -Minimally, ``py --version`` and ``python --version`` should return a version. -If none of these commands are recognized, -this means that Python was installed on your system, but was not added to PATH. -See above for directions to add it to your PATH variable. - -If any of these commands open the Windows store, -this is likely interfering with the process. -See below to fix aliases. - -(Windows) Fix Aliases ---------------------- - -1. Go to the Windows Settings. -2. Under Apps and Features, there are application execution aliases. -3. Within this menu disable the alias(es) that are causing the issue (``python`` and/or ``python3``). - -``IndexError: List index out of range`` ---------------------------------------- - -Did you install LaTeX using MiKTeX? If so, open the MiKTeX console, -install the ``cm-super`` package, then delete the ``media`` directory and -try to render the scene again. - -Config ------- - -We've dropped the use of CONFIG in the -Community Version :doc:`version 0.2.0<../changelog/0.2.0-changelog>`, released in January 2021. -This means parameters that were previously specified in the -CONFIG dictionary should now be passed directly into the constructor. -Practically, this means that old constructions like: - -.. code-block:: python - - class SomeMobject(Thing): - CONFIG = { - "stroke_color": RED, - "fill_opacity": 0.7, - "radius": 3, - "my_awesome_property": 42, - } - # add methods here - -should now be defined like: - -.. code-block:: python - - class SomeMobject(VMobject): - def __init__( - self, - stroke_color=RED, - fill_opacity=0.7, - radius=3, - my_awesome_property=42, - **kwargs - ): - self.radius = 3 - self.my_awesome_property = 42 - super().__init__( - stroke_color=stroke_color, fill_opacity=fill_opacity, **kwargs - ) # passing arguments into the parent class - # add methods here - -For scenes, this is even easier: - -.. code-block:: python - - class Test(Scene): - CONFIG = {"a": 1, "b": 2} - -becomes: - -.. code-block:: python - - class Test(Scene): - def construct(self): - self.a = 1 - self.b = 2 - -A python command does not work ------------------------------- - -If a python command does not work, -try adding ``python -m`` in front of it. -For example, if ``pip install manim`` does not work, you can try ``python -m pip install manim``. - -undefined symbol ----------------- - -If you are using anaconda, run the following command: - -.. code-block:: bash - - conda install -c conda-forge pycairo diff --git a/docs/source/installation/versions.rst b/docs/source/installation/versions.rst deleted file mode 100644 index 6bad75c0df..0000000000 --- a/docs/source/installation/versions.rst +++ /dev/null @@ -1,49 +0,0 @@ -Differences between Manim Versions -================================== - -While originally a single library, there are now three main versions of manim, -each with their own advantages, disadvantages, and ideal use cases. -It is important to understand these differences in order to select the best version -for your use case and avoid confusion arising from version mismatches. - -A brief history of Manim -************************ - -Manim was originally created by Grant Sanderson as a personal project and for use in his YouTube channel, -`3Blue1Brown `_. As his channel gained popularity, -many grew to like the style of his animations and wanted to use manim for their own projects. -However, as manim was only intended for personal use, -it was very difficult for other users to install and use it. - -In late 2019, Grant started working on faster OpenGL rendering in a new branch, -known as the shaders branch. In mid-2020, a group of developers forked it into what is now the community edition; -this is the version documented on this website. -In early 2021, Grant merged the shaders branch back into master, making it the default branch in his repository. -The old version is still available as the branch ``cairo-backend``. - -The three versions of Manim -*************************** - -There are currently three main versions of manim. They are as follows: - -- **ManimCE**: The community edition of manim. This is the version documented by this website, and is named `manim `_ on pip. -- `ManimGL `_: The current version of manim that is used by 3blue1brown. It supports OpenGL rendering and interactivity, and is named ``manimgl`` on pip. You can find documentation for it `here `_. -- `ManimCairo `_: The old version of manim originally used by 3blue1brown. It is not available on pip. - -Which version to use -******************** -We recommend using the community edition for most purposes, as it has been developed to be more stable, -better tested, quicker to respond to community contributions, and easier for beginners to use. -It also has partial experimental OpenGL support and should have full support shortly (as of April 2021). - -If you would like to use a version with full OpenGL support or render recent 3Blue1Brown videos (2020 onwards), you should use ManimGL. - -If you would like to render old 3Blue1Brown projects (2019 and before), you should use ManimCairo. - -Notes on installation, documentation, and use -********************************************* -If you are a beginner, it is very important that you only use the documentation for your desired version. -Trying to install or learn manim using documentation or guides made for different versions will likely fail and only lead to more confusion. -As many tutorials and guides on the internet are outdated, we do not recommend you follow them. -You should only read tutorials and documentation for other versions once you are aware of the differences between them -and know how to adapt code for your desired version. diff --git a/docs/source/reference.rst b/docs/source/reference.rst index dec23a6857..f84bde68b6 100644 --- a/docs/source/reference.rst +++ b/docs/source/reference.rst @@ -3,7 +3,7 @@ Reference Manual This reference manual details modules, functions, and variables included in Manim, describing what they are and what they do. For learning how to use -Manim, see :doc:`tutorials`. For a list of changes since the last release, see +Manim, see :doc:`tutorials/index`. For a list of changes since the last release, see the :doc:`changelog`. .. warning:: The pages linked to here are currently a work in progress. diff --git a/docs/source/reference_index/utilities_misc.rst b/docs/source/reference_index/utilities_misc.rst index 862a0930e0..1caab7ecd4 100644 --- a/docs/source/reference_index/utilities_misc.rst +++ b/docs/source/reference_index/utilities_misc.rst @@ -16,6 +16,7 @@ Module Index ~utils.config_ops ~utils.deprecation ~utils.debug + ~utils.docbuild ~utils.hashing ~utils.ipython_magic ~utils.images diff --git a/docs/source/reporting_bugs.rst b/docs/source/reporting_bugs.rst deleted file mode 100644 index f9c21804bf..0000000000 --- a/docs/source/reporting_bugs.rst +++ /dev/null @@ -1,37 +0,0 @@ -Reporting bugs -=============== - -One of the best ways of contributing to Manim is by reporting bugs. If you -have encountered something that you believe is a bug, please follow these -steps: - -1. First of all, make sure you are running the latest version of manim. If - not, update your version and try again. - -2. Search for other users who may have had similar issues in the - past. Search the repository's `issues page `_ (don't forget to search closed - issues), bring it up on our `Discord server `_, use sites like StackOverflow, and exercise - your best Google practices. If you can't find anything helpful, then go to - the next step. - -3. Can reproduce the issue, i.e. that you have some code that - illustrates the bug **every time** (or at least most of the time) it is - executed. - -4. Clarify what behavior you expected, and how the actual behavior - differs from your expectation. - -5. Gather information about your environment, such as your - operating system, python version, and any stack traces that the code may - have generated (if applicable). - -4. Please open an issue only after you have gathered this information. When - submitting an issue, make sure to follow the template (this is the default - text you are shown when first opening the 'New Issue' page). A community - member will (hopefully) respond and start a conversation to address the - issue. - -7. Please give the community a reasonable amount of time before asking again, - or insisting on your issue. Keep in mind that everyone is a volunteer. If - you wait for a reasonable amount of time and you receive no response, feel - free to ask again. diff --git a/docs/source/tutorials.rst b/docs/source/tutorials.rst deleted file mode 100644 index 0a2d7fa6a4..0000000000 --- a/docs/source/tutorials.rst +++ /dev/null @@ -1,12 +0,0 @@ -Tutorials -============ - -.. toctree:: - :caption: Table of Contents - :maxdepth: 2 - - tutorials/quickstart - tutorials/a_deeper_look - tutorials/building_blocks - tutorials/configuration - tutorials/using_text diff --git a/docs/source/tutorials/building_blocks.rst b/docs/source/tutorials/building_blocks.rst index f38aedf024..3f76588b16 100644 --- a/docs/source/tutorials/building_blocks.rst +++ b/docs/source/tutorials/building_blocks.rst @@ -13,7 +13,7 @@ concepts is implemented in manim as a separate class: the :class:`.Mobject`, :class:`.Animation`, and :class:`.Scene` classes. .. note:: It is recommended that you read the tutorials :doc:`quickstart` and - :doc:`a_deeper_look` before reading this page. + :doc:`output_and_config` before reading this page. ******** diff --git a/docs/source/tutorials/index.rst b/docs/source/tutorials/index.rst new file mode 100644 index 0000000000..25750d4b17 --- /dev/null +++ b/docs/source/tutorials/index.rst @@ -0,0 +1,10 @@ +Tutorials +========= + +.. toctree:: + :caption: Table of Contents + :maxdepth: 2 + + quickstart + output_and_config + building_blocks diff --git a/docs/source/tutorials/a_deeper_look.rst b/docs/source/tutorials/output_and_config.rst similarity index 98% rename from docs/source/tutorials/a_deeper_look.rst rename to docs/source/tutorials/output_and_config.rst index d70427e343..483cd88296 100644 --- a/docs/source/tutorials/a_deeper_look.rst +++ b/docs/source/tutorials/output_and_config.rst @@ -1,5 +1,5 @@ -A deeper look -============= +Manim's Output Settings +======================= This document will focus on understanding manim's output files and some of the main command-line flags available. @@ -296,4 +296,5 @@ same folder as the .mp4 files, and with the same name, but a different file extension. This was a quick review of some of the most frequent command-line flags. For a -thorough review of all flags available, see :doc:`configuration`. +thorough review of all flags available, see the +:doc:`thematic guide on Manim's configuration system `. diff --git a/docs/source/tutorials/quickstart.rst b/docs/source/tutorials/quickstart.rst index 24e257608b..2a93e0b1f6 100644 --- a/docs/source/tutorials/quickstart.rst +++ b/docs/source/tutorials/quickstart.rst @@ -86,8 +86,8 @@ You just wrote your first Manim scene from scratch. If you get an error message instead, you do not see a video, or if the video output does not look like the preceding animation, it is likely that Manim has not been -installed correctly. Please refer to the :doc:`../installation/troubleshooting` -page for more information. +installed correctly. Please refer to our :doc:`FAQ section ` +for help with the most common issues. *********** @@ -355,7 +355,7 @@ You're done! With a working installation of Manim and this sample project under your belt, you're ready to start creating animations of your own. To learn more about what Manim is doing under the hood, move on to the next tutorial: -:doc:`a_deeper_look`. For an overview of +:doc:`output_and_config`. For an overview of Manim's features, as well as its configuration and other settings, check out the -other :doc:`../tutorials`. For a list of all available features, refer to the +other :doc:`Tutorials <../tutorials/index>`. For a list of all available features, refer to the :doc:`../reference` page. diff --git a/docs/source/tutorials_guides.rst b/docs/source/tutorials_guides.rst new file mode 100644 index 0000000000..05b318230b --- /dev/null +++ b/docs/source/tutorials_guides.rst @@ -0,0 +1,10 @@ +Tutorials & Guides +================== + +.. toctree:: + :caption: Table of Contents + :maxdepth: 2 + + tutorials/index + guides/index + faq/index diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 2cdc0689c1..cedf0a9fcc 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -6,7 +6,7 @@ (e.g. background color, transparency), and general behavior (e.g. writing a movie vs writing a single frame). -See :doc:`/tutorials/configuration` for an introduction to Manim's configuration system. +See :doc:`/guides/configuration` for an introduction to Manim's configuration system. """ from __future__ import annotations diff --git a/manim/animation/movement.py b/manim/animation/movement.py index 0eb78c7117..816f714477 100644 --- a/manim/animation/movement.py +++ b/manim/animation/movement.py @@ -22,6 +22,30 @@ class Homotopy(Animation): + """A Homotopy. + + This is an animation transforming the points of a mobject according + to the specified transformation function. With the parameter :math:`t` + moving from 0 to 1 throughout the animation and :math:`(x, y, z)` + describing the coordinates of the point of a mobject, + the function passed to the ``homotopy`` keyword argument should + transform the tuple :math:`(x, y, z, t)` to :math:`(x', y', z')`, + the coordinates the original point is transformed to at time :math:`t`. + + Parameters + ---------- + homotopy + A function mapping :math:`(x, y, z, t)` to :math:`(x', y', z')`. + mobject + The mobject transformed under the given homotopy. + run_time + The run time of the animation. + apply_function_kwargs + Keyword arguments propagated to :meth:`.Mobject.apply_function`. + kwargs + Further keyword arguments passed to the parent class. + """ + def __init__( self, homotopy: Callable[[float, float, float, float], tuple[float, float, float]], @@ -30,10 +54,6 @@ def __init__( apply_function_kwargs: dict[str, Any] | None = None, **kwargs, ) -> None: - """ - Homotopy is a function from - (x, y, z, t) to (x', y', z') - """ self.homotopy = homotopy self.apply_function_kwargs = ( apply_function_kwargs if apply_function_kwargs is not None else {} diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 3cacbb83b8..8b5e7cd325 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -54,8 +54,7 @@ class CoordinateSystem: - r""" - Abstract class for Axes and NumberPlane + r"""Abstract base class for Axes and NumberPlane. Examples -------- @@ -193,11 +192,11 @@ def point_to_polar(self, point: np.ndarray) -> tuple[float, float]: return np.sqrt(x**2 + y**2), np.arctan2(y, x) def c2p(self, *coords): - """Abbreviation for coords_to_point""" + """Abbreviation for :meth:`coords_to_point`""" return self.coords_to_point(*coords) def p2c(self, point): - """Abbreviation for point_to_coords""" + """Abbreviation for :meth:`point_to_coords`""" return self.point_to_coords(point) def pr2pt(self, radius: float, azimuth: float) -> np.ndarray: @@ -368,7 +367,9 @@ def get_axis_labels( x_label: float | str | Mobject = "x", y_label: float | str | Mobject = "y", ) -> VGroup: - """Defines labels for the x_axis and y_axis of the graph. For increased control over the position of the labels, + """Defines labels for the x_axis and y_axis of the graph. + + For increased control over the position of the labels, use :meth:`get_x_axis_label` and :meth:`get_y_axis_label`. Parameters @@ -438,7 +439,7 @@ def add_coordinates( ax = Axes(x_range=[0, 7]) x_pos = [x for x in range(1, 8)] - # strings are automatically converted into a `Tex` mobject. + # strings are automatically converted into a Tex mobject. x_vals = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] x_dict = dict(zip(x_pos, x_vals)) ax.add_coordinates(x_dict) @@ -1610,10 +1611,10 @@ def get_T_label( Examples -------- - .. manim:: T_labelExample + .. manim:: TLabelExample :save_last_frame: - class T_labelExample(Scene): + class TLabelExample(Scene): def construct(self): # defines the axes and linear function axes = Axes(x_range=[-1, 10], y_range=[-1, 10], x_length=9, y_length=6) diff --git a/manim/mobject/graphing/probability.py b/manim/mobject/graphing/probability.py index 477b561bec..43c6a11ea8 100644 --- a/manim/mobject/graphing/probability.py +++ b/manim/mobject/graphing/probability.py @@ -305,7 +305,7 @@ def __init__( self.y_axis.add_numbers() def _add_x_axis_labels(self): - """Essentially ``:meth:~.NumberLine.add_labels``, but differs in that + """Essentially :meth`:~.NumberLine.add_labels`, but differs in that the direction of the label with respect to the x_axis changes to UP or DOWN depending on the value. diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 1ddcd13bd1..5b4cae0eed 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -305,7 +305,7 @@ def next_section( ) -> None: """Create separation here; the last section gets finished and a new one gets created. ``skip_animations`` skips the rendering of all animations in this section. - Refer to :doc:`the documentation` on how to use sections. + Refer to :doc:`the documentation` on how to use sections. """ self.renderer.file_writer.next_section(name, type, skip_animations) diff --git a/manim/scene/section.py b/manim/scene/section.py index ce42e1309e..772035361e 100644 --- a/manim/scene/section.py +++ b/manim/scene/section.py @@ -33,7 +33,7 @@ class PresentationSectionType(str, Enum): class Section: """A :class:`.Scene` can be segmented into multiple Sections. - Refer to :doc:`the documentation` for more info. + Refer to :doc:`the documentation` for more info. It consists of multiple animations. Attributes diff --git a/manim/utils/deprecation.py b/manim/utils/deprecation.py index 744aa8348c..b72ecc7508 100644 --- a/manim/utils/deprecation.py +++ b/manim/utils/deprecation.py @@ -193,7 +193,7 @@ def deprecate_docs(func: Callable): """ warning = warning_msg(True) doc_string = func.__doc__ or "" - func.__doc__ = f"{doc_string}\n\n.. admonition:: Deprecated\n :class: attention\n\n {warning}" + func.__doc__ = f"{doc_string}\n\n.. attention:: Deprecated\n {warning}" def deprecate(func: Callable, *args, **kwargs): """The actual decorator used to extend the callables behavior. diff --git a/manim/utils/docbuild/manim_directive.py b/manim/utils/docbuild/manim_directive.py index 155e475c5b..cda4f4dc5f 100644 --- a/manim/utils/docbuild/manim_directive.py +++ b/manim/utils/docbuild/manim_directive.py @@ -94,12 +94,20 @@ def construct(self): classnamedict = {} -class skip_manim_node(nodes.Admonition, nodes.Element): +class SkipManimNode(nodes.Admonition, nodes.Element): + """Auxiliary node class that is used when the ``skip-manim`` tag is present + or ``.pot`` files are being built. + + Skips rendering the manim directive and outputs a placeholder instead. + """ + pass def visit(self, node, name=""): self.visit_admonition(node, name) + if not isinstance(node[0], nodes.title): + node.insert(0, nodes.title("skip-manim", "Example Placeholder")) def depart(self, node): @@ -148,19 +156,24 @@ class ManimDirective(Directive): final_argument_whitespace = True def run(self): - # Render is skipped if the tag skip-manim is present + # Rendering is skipped if the tag skip-manim is present, + # or if we are making the pot-files should_skip = ( "skip-manim" in self.state.document.settings.env.app.builder.tags.tags - ) - # Or if we are making the pot-files - should_skip = ( - should_skip or self.state.document.settings.env.app.builder.name == "gettext" ) if should_skip: - node = skip_manim_node() + node = SkipManimNode() self.state.nested_parse( - StringList(self.content[0]), + StringList( + [ + f"Placeholder block for ``{self.arguments[0]}``.", + "", + ".. code-block:: python", + "", + ] + + [" " + line for line in self.content] + ), self.content_offset, node, ) @@ -342,7 +355,7 @@ def _delete_rendering_times(*args): def setup(app): - app.add_node(skip_manim_node, html=(visit, depart)) + app.add_node(SkipManimNode, html=(visit, depart)) setup.app = app setup.config = app.config diff --git a/poetry.lock b/poetry.lock index 2e797ae7c1..ea4f7c2e71 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1002,6 +1002,28 @@ numpy = "*" [package.extras] test = ["pytest"] +[[package]] +name = "markdown-it-py" +version = "2.1.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +mdurl = ">=0.1,<1.0" +typing_extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] +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"] +profiling = ["gprof2dot"] +rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.1" @@ -1048,6 +1070,30 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "mdit-py-plugins" +version = "0.3.0" +description = "Collection of plugins for markdown-it-py" +category = "dev" +optional = false +python-versions = "~=3.6" + +[package.dependencies] +markdown-it-py = ">=1.0.0,<3.0.0" + +[package.extras] +code_style = ["pre-commit (==2.6)"] +rtd = ["myst-parser (>=0.14.0,<0.15.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.1" +description = "Markdown URL utilities" +category = "dev" +optional = false +python-versions = ">=3.7" + [[package]] name = "mistune" version = "0.8.4" @@ -1129,6 +1175,29 @@ category = "dev" optional = false python-versions = "*" +[[package]] +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" + +[package.dependencies] +docutils = ">=0.15,<0.18" +jinja2 = "*" +markdown-it-py = ">=1.0.0,<3.0.0" +mdit-py-plugins = ">=0.3.0,<0.4.0" +pyyaml = "*" +sphinx = ">=3.1,<5" +typing-extensions = "*" + +[package.extras] +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)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)", "sphinxcontrib.mermaid (>=0.7.1,<0.8.0)", "sphinxext-opengraph (>=0.6.3,<0.7.0)"] +testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest (>=6,<7)", "pytest-cov", "pytest-regressions", "pytest-param-files (>=0.3.4,<0.4.0)"] + [[package]] name = "nbclassic" version = "0.3.7" @@ -2357,7 +2426,7 @@ jupyterlab = ["jupyterlab"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "30528079fd9e1880d63fbbb4fe28e72f90fb1815a48a553d089c9e990a2a79aa" +content-hash = "052b9b3efc49510cbcf8618fda2856ca5842b7b29742a53f59728268cd096227" [metadata.files] alabaster = [ @@ -3025,6 +3094,10 @@ mapbox-earcut = [ {file = "mapbox_earcut-0.12.11-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6542cc54b330c876e62dad15e98dd4df18e2fd75ffb5b9c84d0629bd085ea123"}, {file = "mapbox_earcut-0.12.11.tar.gz", hash = "sha256:2808757f8a95eb816d3ce225528c9cb15355afe175f3bcb6837eb7700972e0b9"}, ] +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"}, @@ -3112,6 +3185,14 @@ 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.0.tar.gz", hash = "sha256:ecc24f51eeec6ab7eecc2f9724e8272c2fb191c2e93cf98109120c2cace69750"}, + {file = "mdit_py_plugins-0.3.0-py3-none-any.whl", hash = "sha256:b1279701cee2dbf50e188d3da5f51fee8d78d038cdf99be57c6b9d1aa93b4073"}, +] +mdurl = [ + {file = "mdurl-0.1.1-py3-none-any.whl", hash = "sha256:6a8f6804087b7128040b2fb2ebe242bdc2affaeaa034d5fc9feeed30b443651b"}, + {file = "mdurl-0.1.1.tar.gz", hash = "sha256:f79c9709944df218a4cdb0fcc0b0c7ead2f44594e3e84dc566606f04ad749c20"}, +] mistune = [ {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, @@ -3210,6 +3291,10 @@ 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.3.7-py3-none-any.whl", hash = "sha256:89184baa2d66b8ac3c8d3df57cbcf16f34148954d410a2fb3e897d7c18f2479d"}, {file = "nbclassic-0.3.7.tar.gz", hash = "sha256:36dbaa88ffaf5dc05d149deb97504b86ba648f4a80a60b8a58ac94acab2daeb5"}, diff --git a/pyproject.toml b/pyproject.toml index 5929c8f3dc..45261d98e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -94,6 +94,7 @@ sphinxcontrib-programoutput = "^0.17" data-science-types = "^0.2.23" psutil-wheels = {version = "5.8.0", python = ">=3.10"} psutil = {version = "^5.8.0", python = "<3.10"} +myst-parser = "^0.17.2" [tool.poetry.urls] diff --git a/tests/test_deprecation.py b/tests/test_deprecation.py index 9e587c1fd1..8fb7b9675a 100644 --- a/tests/test_deprecation.py +++ b/tests/test_deprecation.py @@ -74,7 +74,7 @@ def __init__(self): pass -doc_admonition = "\n\n.. admonition:: Deprecated\n :class: attention\n\n " +doc_admonition = "\n\n.. attention:: Deprecated\n " def test_deprecate_class_no_args(warn_caplog_manim): From 4a99cead08b59136bb8f8d0ae05c8d13d60fabc0 Mon Sep 17 00:00:00 2001 From: Raghav Goel Date: Sat, 28 May 2022 01:33:11 -0400 Subject: [PATCH 056/555] Fix Cylinder.get_direction docstring (#2740) --- manim/mobject/three_d/three_dimensions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 80aa100788..6f04b7ccf6 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -687,6 +687,7 @@ def set_direction(self, direction): self._rotate_to_direction() def get_direction(self): + """Returns the direction of the central axis of the cylinder.""" return self.direction From 083ffe00140a3a97d1e506dfa5bee89f3beb9cd3 Mon Sep 17 00:00:00 2001 From: TornaxO7 <50843046+TornaxO7@users.noreply.github.com> Date: Sat, 28 May 2022 07:39:47 +0200 Subject: [PATCH 057/555] Added note to let users find documentation of default CLI subcommand easier (#2730) * adding hint in the help page that the `render` command is invoked automatically for if you call `manim` * fixing format string * fixed note for the epilog * replaced the backticks with the normal (') ones * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * removing the trailing free line in constants.py * fixing import issue * adjusted the help-page output note * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/__main__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/manim/__main__.py b/manim/__main__.py index 2272002ac3..d1b0fff204 100644 --- a/manim/__main__.py +++ b/manim/__main__.py @@ -29,7 +29,10 @@ def exit_early(ctx, param, value): default="render", no_args_is_help=True, help="Animation engine for explanatory math videos.", - epilog="See 'manim ' to read about a specific subcommand.\n\n" + EPILOG, + epilog="See 'manim ' to read about a specific subcommand.\n\n" + "Note: the subcommand 'manim render' is called if no other subcommand " + "is specified. Run 'manim render --help' if you would like to know what the " + f"'-ql' or '-p' flags do, for example.\n\n{EPILOG}", ) @click.option( "--version", From 7941e183190005ad37c3d86a47735a181ecdef45 Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Sat, 28 May 2022 07:47:37 +0200 Subject: [PATCH 058/555] enhancement(vector_field): added fit_to_coordinate_system (#2728) * enhancement(vector_field): added fit_to_coordinate_system * tmp(vector_field) decision stage for implementation * Update vector_field.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix OpenGL segfaulting when running self.play or self.wait (#2734) * make play run only on main thread * prefer dict.update Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Noam Zaks Co-authored-by: Benjamin Hackl --- manim/mobject/vector_field.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index dd48c039a6..16074017f6 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -19,6 +19,7 @@ from manim.animation.updaters.update import UpdateFromAlphaFunc from manim.mobject.geometry.line import Vector +from manim.mobject.graphing.coordinate_systems import CoordinateSystem from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject from .. import config @@ -168,6 +169,22 @@ def construct(self): """ return lambda p: func(p * scalar) + def fit_to_coordinate_system(self, coordinate_system: CoordinateSystem): + """Scale the vector field to fit a coordinate system. + + This method is useful when the vector field is defined in a coordinate system + different from the one used to display the vector field. + + This method can only be used once because it transforms the origin of each vector. + + Parameters + ---------- + coordinate_system + The coordinate system to fit the vector field to. + + """ + self.apply_function(lambda pos: coordinate_system.coords_to_point(*pos)) + def nudge( self, mob: Mobject, From bdb80fddf49056ef8885837d5de577aceb302880 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 31 May 2022 20:24:50 +0530 Subject: [PATCH 059/555] [pre-commit.ci] pre-commit autoupdate (#2747) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-mypy: v0.950 → v0.960](https://github.com/pre-commit/mirrors-mypy/compare/v0.950...v0.960) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 573ef10df0..a98867ca68 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -56,7 +56,7 @@ repos: flake8-docstrings==1.6.0, flake8-rst-docstrings==0.2.3, flake8-pytest-style==1.5.0, flake8-simplify==0.14.1, flake8-comprehensions>=3.6.1] - repo: https://github.com/pre-commit/mirrors-mypy - rev: 'v0.950' + rev: 'v0.960' hooks: - id: mypy additional_dependencies: [types-decorator, types-docutils, types-requests, types-setuptools] From a7ad01df7c27b463099e086bba7b462054871604 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jun 2022 00:40:21 -0400 Subject: [PATCH 060/555] Bump pillow from 9.1.0 to 9.1.1 (#2748) Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.1.0 to 9.1.1. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/9.1.0...9.1.1) --- updated-dependencies: - dependency-name: pillow dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 78 ++++++++++++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/poetry.lock b/poetry.lock index ea4f7c2e71..0da11b4800 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,7 +1425,7 @@ python-versions = "*" [[package]] name = "pillow" -version = "9.1.0" +version = "9.1.1" description = "Python Imaging Library (Fork)" category = "main" optional = false @@ -3389,44 +3389,44 @@ pickleshare = [ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] pillow = [ - {file = "Pillow-9.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:af79d3fde1fc2e33561166d62e3b63f0cc3e47b5a3a2e5fea40d4917754734ea"}, - {file = "Pillow-9.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:55dd1cf09a1fd7c7b78425967aacae9b0d70125f7d3ab973fadc7b5abc3de652"}, - {file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66822d01e82506a19407d1afc104c3fcea3b81d5eb11485e593ad6b8492f995a"}, - {file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5eaf3b42df2bcda61c53a742ee2c6e63f777d0e085bbc6b2ab7ed57deb13db7"}, - {file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01ce45deec9df310cbbee11104bae1a2a43308dd9c317f99235b6d3080ddd66e"}, - {file = "Pillow-9.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:aea7ce61328e15943d7b9eaca87e81f7c62ff90f669116f857262e9da4057ba3"}, - {file = "Pillow-9.1.0-cp310-cp310-win32.whl", hash = "sha256:7a053bd4d65a3294b153bdd7724dce864a1d548416a5ef61f6d03bf149205160"}, - {file = "Pillow-9.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:97bda660702a856c2c9e12ec26fc6d187631ddfd896ff685814ab21ef0597033"}, - {file = "Pillow-9.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:21dee8466b42912335151d24c1665fcf44dc2ee47e021d233a40c3ca5adae59c"}, - {file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b6d4050b208c8ff886fd3db6690bf04f9a48749d78b41b7a5bf24c236ab0165"}, - {file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5cfca31ab4c13552a0f354c87fbd7f162a4fafd25e6b521bba93a57fe6a3700a"}, - {file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed742214068efa95e9844c2d9129e209ed63f61baa4d54dbf4cf8b5e2d30ccf2"}, - {file = "Pillow-9.1.0-cp37-cp37m-win32.whl", hash = "sha256:c9efef876c21788366ea1f50ecb39d5d6f65febe25ad1d4c0b8dff98843ac244"}, - {file = "Pillow-9.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:de344bcf6e2463bb25179d74d6e7989e375f906bcec8cb86edb8b12acbc7dfef"}, - {file = "Pillow-9.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:17869489de2fce6c36690a0c721bd3db176194af5f39249c1ac56d0bb0fcc512"}, - {file = "Pillow-9.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:25023a6209a4d7c42154073144608c9a71d3512b648a2f5d4465182cb93d3477"}, - {file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8782189c796eff29dbb37dd87afa4ad4d40fc90b2742704f94812851b725964b"}, - {file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:463acf531f5d0925ca55904fa668bb3461c3ef6bc779e1d6d8a488092bdee378"}, - {file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f42364485bfdab19c1373b5cd62f7c5ab7cc052e19644862ec8f15bb8af289e"}, - {file = "Pillow-9.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3fddcdb619ba04491e8f771636583a7cc5a5051cd193ff1aa1ee8616d2a692c5"}, - {file = "Pillow-9.1.0-cp38-cp38-win32.whl", hash = "sha256:4fe29a070de394e449fd88ebe1624d1e2d7ddeed4c12e0b31624561b58948d9a"}, - {file = "Pillow-9.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c24f718f9dd73bb2b31a6201e6db5ea4a61fdd1d1c200f43ee585fc6dcd21b34"}, - {file = "Pillow-9.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fb89397013cf302f282f0fc998bb7abf11d49dcff72c8ecb320f76ea6e2c5717"}, - {file = "Pillow-9.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c870193cce4b76713a2b29be5d8327c8ccbe0d4a49bc22968aa1e680930f5581"}, - {file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e5ddc609230d4408277af135c5b5c8fe7a54b2bdb8ad7c5100b86b3aab04c6"}, - {file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35be4a9f65441d9982240e6966c1eaa1c654c4e5e931eaf580130409e31804d4"}, - {file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82283af99c1c3a5ba1da44c67296d5aad19f11c535b551a5ae55328a317ce331"}, - {file = "Pillow-9.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a325ac71914c5c043fa50441b36606e64a10cd262de12f7a179620f579752ff8"}, - {file = "Pillow-9.1.0-cp39-cp39-win32.whl", hash = "sha256:a598d8830f6ef5501002ae85c7dbfcd9c27cc4efc02a1989369303ba85573e58"}, - {file = "Pillow-9.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c51cb9edac8a5abd069fd0758ac0a8bfe52c261ee0e330f363548aca6893595"}, - {file = "Pillow-9.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a336a4f74baf67e26f3acc4d61c913e378e931817cd1e2ef4dfb79d3e051b481"}, - {file = "Pillow-9.1.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb1b89b11256b5b6cad5e7593f9061ac4624f7651f7a8eb4dfa37caa1dfaa4d0"}, - {file = "Pillow-9.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:255c9d69754a4c90b0ee484967fc8818c7ff8311c6dddcc43a4340e10cd1636a"}, - {file = "Pillow-9.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5a3ecc026ea0e14d0ad7cd990ea7f48bfcb3eb4271034657dc9d06933c6629a7"}, - {file = "Pillow-9.1.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5b0ff59785d93b3437c3703e3c64c178aabada51dea2a7f2c5eccf1bcf565a3"}, - {file = "Pillow-9.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7110ec1701b0bf8df569a7592a196c9d07c764a0a74f65471ea56816f10e2c8"}, - {file = "Pillow-9.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8d79c6f468215d1a8415aa53d9868a6b40c4682165b8cb62a221b1baa47db458"}, - {file = "Pillow-9.1.0.tar.gz", hash = "sha256:f401ed2bbb155e1ade150ccc63db1a4f6c1909d3d378f7d1235a44e90d75fb97"}, + {file = "Pillow-9.1.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:42dfefbef90eb67c10c45a73a9bc1599d4dac920f7dfcbf4ec6b80cb620757fe"}, + {file = "Pillow-9.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"}, + {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c857532c719fb30fafabd2371ce9b7031812ff3889d75273827633bca0c4602"}, + {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59789a7d06c742e9d13b883d5e3569188c16acb02eeed2510fd3bfdbc1bd1530"}, + {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d45dbe4b21a9679c3e8b3f7f4f42a45a7d3ddff8a4a16109dff0e1da30a35b2"}, + {file = "Pillow-9.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e9ed59d1b6ee837f4515b9584f3d26cf0388b742a11ecdae0d9237a94505d03a"}, + {file = "Pillow-9.1.1-cp310-cp310-win32.whl", hash = "sha256:b3fe2ff1e1715d4475d7e2c3e8dabd7c025f4410f79513b4ff2de3d51ce0fa9c"}, + {file = "Pillow-9.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5b650dbbc0969a4e226d98a0b440c2f07a850896aed9266b6fedc0f7e7834108"}, + {file = "Pillow-9.1.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:0b4d5ad2cd3a1f0d1df882d926b37dbb2ab6c823ae21d041b46910c8f8cd844b"}, + {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9370d6744d379f2de5d7fa95cdbd3a4d92f0b0ef29609b4b1687f16bc197063d"}, + {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b761727ed7d593e49671d1827044b942dd2f4caae6e51bab144d4accf8244a84"}, + {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a66fe50386162df2da701b3722781cbe90ce043e7d53c1fd6bd801bca6b48d4"}, + {file = "Pillow-9.1.1-cp37-cp37m-win32.whl", hash = "sha256:2b291cab8a888658d72b575a03e340509b6b050b62db1f5539dd5cd18fd50578"}, + {file = "Pillow-9.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:1d4331aeb12f6b3791911a6da82de72257a99ad99726ed6b63f481c0184b6fb9"}, + {file = "Pillow-9.1.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8844217cdf66eabe39567118f229e275f0727e9195635a15e0e4b9227458daaf"}, + {file = "Pillow-9.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b6617221ff08fbd3b7a811950b5c3f9367f6e941b86259843eab77c8e3d2b56b"}, + {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20d514c989fa28e73a5adbddd7a171afa5824710d0ab06d4e1234195d2a2e546"}, + {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088df396b047477dd1bbc7de6e22f58400dae2f21310d9e2ec2933b2ef7dfa4f"}, + {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53c27bd452e0f1bc4bfed07ceb235663a1df7c74df08e37fd6b03eb89454946a"}, + {file = "Pillow-9.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3f6c1716c473ebd1649663bf3b42702d0d53e27af8b64642be0dd3598c761fb1"}, + {file = "Pillow-9.1.1-cp38-cp38-win32.whl", hash = "sha256:c67db410508b9de9c4694c57ed754b65a460e4812126e87f5052ecf23a011a54"}, + {file = "Pillow-9.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:f054b020c4d7e9786ae0404278ea318768eb123403b18453e28e47cdb7a0a4bf"}, + {file = "Pillow-9.1.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c17770a62a71718a74b7548098a74cd6880be16bcfff5f937f900ead90ca8e92"}, + {file = "Pillow-9.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a"}, + {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f372d0f08eff1475ef426344efe42493f71f377ec52237bf153c5713de987251"}, + {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09e67ef6e430f90caa093528bd758b0616f8165e57ed8d8ce014ae32df6a831d"}, + {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66daa16952d5bf0c9d5389c5e9df562922a59bd16d77e2a276e575d32e38afd1"}, + {file = "Pillow-9.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d78ca526a559fb84faaaf84da2dd4addef5edb109db8b81677c0bb1aad342601"}, + {file = "Pillow-9.1.1-cp39-cp39-win32.whl", hash = "sha256:55e74faf8359ddda43fee01bffbc5bd99d96ea508d8a08c527099e84eb708f45"}, + {file = "Pillow-9.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c150dbbb4a94ea4825d1e5f2c5501af7141ea95825fadd7829f9b11c97aaf6c"}, + {file = "Pillow-9.1.1-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:769a7f131a2f43752455cc72f9f7a093c3ff3856bf976c5fb53a59d0ccc704f6"}, + {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:488f3383cf5159907d48d32957ac6f9ea85ccdcc296c14eca1a4e396ecc32098"}, + {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b525a356680022b0af53385944026d3486fc8c013638cf9900eb87c866afb4c"}, + {file = "Pillow-9.1.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6e760cf01259a1c0a50f3c845f9cad1af30577fd8b670339b1659c6d0e7a41dd"}, + {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4165205a13b16a29e1ac57efeee6be2dfd5b5408122d59ef2145bc3239fa340"}, + {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937a54e5694684f74dcbf6e24cc453bfc5b33940216ddd8f4cd8f0f79167f765"}, + {file = "Pillow-9.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8"}, + {file = "Pillow-9.1.1.tar.gz", hash = "sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0"}, ] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, From f88d64a821bafe370b08d7159b3e1a2afe1277da Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Mon, 6 Jun 2022 15:11:37 +0200 Subject: [PATCH 061/555] Fixed flake C417 and improved a comment (#2751) * fixed flake c417 and improved a comment * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/utils/ipython_magic.py | 4 +++- manim/utils/testing/frames_comparison.py | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/manim/utils/ipython_magic.py b/manim/utils/ipython_magic.py index 61caf706b9..f41a3fb13b 100644 --- a/manim/utils/ipython_magic.py +++ b/manim/utils/ipython_magic.py @@ -131,7 +131,9 @@ def construct(self): if config.renderer == "opengl": # Check if the imported mobjects extend the OpenGLMobject class # meaning ConvertToOpenGL did its job - if "OpenGLMobject" in map(lambda cls: cls.__name__, Group.mro()): + if "OpenGLMobject" in [ + parent_class.__name__ for parent_class in Group.mro() + ]: from manim.renderer.opengl_renderer import OpenGLRenderer renderer = OpenGLRenderer() diff --git a/manim/utils/testing/frames_comparison.py b/manim/utils/testing/frames_comparison.py index e839145e28..05a771f5e5 100644 --- a/manim/utils/testing/frames_comparison.py +++ b/manim/utils/testing/frames_comparison.py @@ -89,10 +89,12 @@ def wrapper(*args, request: FixtureRequest, tmp_path, **kwargs): construct = functools.partial(tested_scene_construct, *args, **kwargs) # Kwargs contains the eventual parametrization arguments. - # This modify the test_name so the it is defined by the parametrization arguments too. - # Ex : if "length" is parametrized from 0 to 20, the kwargs will be with once with {"length" : 1}, etc. + # This modifies the test_name so that it is defined by the parametrization + # arguments too. + # Example: if "length" is parametrized from 0 to 20, the kwargs + # will be once with {"length" : 1}, etc. test_name_with_param = test_name + "_".join( - map(lambda tup: f"{str(tup[0])}:{str(tup[1])}", kwargs.items()), + [f"{str(tup[0])}:{str(tup[1])}" for tup in kwargs.items()], ) config_tests = _config_test(last_frame) From c106b91c93ddb25df758427159827704c8f9d515 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Mon, 6 Jun 2022 23:13:18 +0530 Subject: [PATCH 062/555] CI: add a workflow to publish docker image after release (#2701) * CI: add a workflow to publish docker image after release * add on push event * fixup * add amd64 build process * lint * final version * fixup * don't remove `v` and add it back * reword a name * Build and push latest tags when pushed to main --- .github/workflows/publish.yml | 117 ++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000000..0eef3cfbf1 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,117 @@ +name: Publish Docker Image + +on: + push: + branches: + - main + release: + types: [released] + +jobs: + docker-arm64: + runs-on: [self-hosted, linux, ARM64, docker-installed] + if: github.event_name != 'release' + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v2 + with: + push: true + file: docker/Dockerfile + tags: | + manimcommunity/manim:latest + + docker-amd64: + runs-on: ubuntu-latest + if: github.event_name != 'release' + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v2 + with: + push: true + file: docker/Dockerfile + tags: | + manimcommunity/manim:latest + + docker-arm64-release: + runs-on: [self-hosted, linux, ARM64, docker-installed] + if: github.event_name == 'release' + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Get Version + id: create_release + shell: python + env: + tag_act: ${{ github.ref }} + run: | + import os + ref_tag = os.getenv('tag_act').split('/')[-1] + print(f"::set-output name=tag_name::{ref_tag}") + + - name: Build and push + uses: docker/build-push-action@v2 + with: + push: true + file: docker/Dockerfile + tags: | + manimcommunity/manim:stable + manimcommunity/manim:latest + manimcommunity/manim:${{ steps.create_release.outputs.tag_name }} + + docker-amd64-release: + runs-on: ubuntu-latest + if: github.event_name == 'release' + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Get Version + id: create_release + shell: python + env: + tag_act: ${{ github.ref }} + run: | + import os + ref_tag = os.getenv('tag_act').split('/')[-1] + print(f"::set-output name=tag_name::{ref_tag}") + + - name: Build and push + uses: docker/build-push-action@v2 + with: + push: true + file: docker/Dockerfile + tags: | + manimcommunity/manim:stable + manimcommunity/manim:latest + manimcommunity/manim:${{ steps.create_release.outputs.tag_name }} From 2c5d6c2e6d921fb3a725264eac1b37fa7faa14e5 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Tue, 7 Jun 2022 03:08:02 +0200 Subject: [PATCH 063/555] Fixed multiplatform builds for docker images in pipeline (#2753) * fixed (?) multi-platform builds * rename workflow file --- .github/workflows/publish-docker.yml | 71 ++++++++++++++++ .github/workflows/publish.yml | 117 --------------------------- 2 files changed, 71 insertions(+), 117 deletions(-) create mode 100644 .github/workflows/publish-docker.yml delete mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml new file mode 100644 index 0000000000..4ca4298721 --- /dev/null +++ b/.github/workflows/publish-docker.yml @@ -0,0 +1,71 @@ +name: Publish Docker Image + +on: + push: + branches: + - main + release: + types: [released] + +jobs: + docker-latest: + runs-on: ubuntu-latest + if: github.event_name != 'release' + steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v3 + with: + platforms: linux/arm64,linux/amd64 + push: true + file: docker/Dockerfile + tags: | + manimcommunity/manim:latest + + docker-release: + runs-on: ubuntu-latest + if: github.event_name == 'release' + steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Get Version + id: create_release + shell: python + env: + tag_act: ${{ github.ref }} + run: | + import os + ref_tag = os.getenv('tag_act').split('/')[-1] + print(f"::set-output name=tag_name::{ref_tag}") + + - name: Build and push + uses: docker/build-push-action@v3 + with: + platforms: linux/arm64,linux/amd64 + push: true + file: docker/Dockerfile + tags: | + manimcommunity/manim:stable + manimcommunity/manim:latest + manimcommunity/manim:${{ steps.create_release.outputs.tag_name }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 0eef3cfbf1..0000000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,117 +0,0 @@ -name: Publish Docker Image - -on: - push: - branches: - - main - release: - types: [released] - -jobs: - docker-arm64: - runs-on: [self-hosted, linux, ARM64, docker-installed] - if: github.event_name != 'release' - steps: - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v2 - with: - push: true - file: docker/Dockerfile - tags: | - manimcommunity/manim:latest - - docker-amd64: - runs-on: ubuntu-latest - if: github.event_name != 'release' - steps: - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v2 - with: - push: true - file: docker/Dockerfile - tags: | - manimcommunity/manim:latest - - docker-arm64-release: - runs-on: [self-hosted, linux, ARM64, docker-installed] - if: github.event_name == 'release' - steps: - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Get Version - id: create_release - shell: python - env: - tag_act: ${{ github.ref }} - run: | - import os - ref_tag = os.getenv('tag_act').split('/')[-1] - print(f"::set-output name=tag_name::{ref_tag}") - - - name: Build and push - uses: docker/build-push-action@v2 - with: - push: true - file: docker/Dockerfile - tags: | - manimcommunity/manim:stable - manimcommunity/manim:latest - manimcommunity/manim:${{ steps.create_release.outputs.tag_name }} - - docker-amd64-release: - runs-on: ubuntu-latest - if: github.event_name == 'release' - steps: - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Get Version - id: create_release - shell: python - env: - tag_act: ${{ github.ref }} - run: | - import os - ref_tag = os.getenv('tag_act').split('/')[-1] - print(f"::set-output name=tag_name::{ref_tag}") - - - name: Build and push - uses: docker/build-push-action@v2 - with: - push: true - file: docker/Dockerfile - tags: | - manimcommunity/manim:stable - manimcommunity/manim:latest - manimcommunity/manim:${{ steps.create_release.outputs.tag_name }} From bdf7b73ce1fa76eab959348502e77d95836acfbc Mon Sep 17 00:00:00 2001 From: Baroudi Aymen <56048219+Jaguar16@users.noreply.github.com> Date: Tue, 7 Jun 2022 13:39:35 +0200 Subject: [PATCH 064/555] Replace assert with np.testing assertions (#2743) * Replace assert with np.testing assertions Using np.testing.assert_array_equal() gives a more readable output. * Replace assert of np.all with assert_array_equal() * Replace assert with np.testing assertions for np.allclose assertions * Fix np.testing assertion assert_array_equal takes two argument * changed some more asserts to np.testing.assert_* Co-authored-by: Benjamin Hackl --- tests/opengl/test_axes_shift_opengl.py | 8 ++- tests/opengl/test_color_opengl.py | 12 +++-- tests/opengl/test_config_opengl.py | 22 ++++---- tests/opengl/test_coordinate_system_opengl.py | 12 ++--- tests/opengl/test_family_opengl.py | 2 +- .../opengl/test_opengl_vectorized_mobject.py | 2 +- tests/opengl/test_unit_geometry_opengl.py | 4 +- tests/test_axes_shift.py | 26 ++++++---- tests/test_boolean_ops.py | 2 +- tests/test_color.py | 16 ++++-- tests/test_config.py | 26 +++++----- tests/test_coordinate_system.py | 12 ++--- tests/test_family.py | 2 +- tests/test_set_attr.py | 10 ++-- tests/test_space_ops.py | 52 ++++++++++--------- tests/test_unit_geometry.py | 4 +- tests/test_units.py | 13 ++--- tests/test_vectorized_mobject.py | 10 ++-- 18 files changed, 136 insertions(+), 99 deletions(-) diff --git a/tests/opengl/test_axes_shift_opengl.py b/tests/opengl/test_axes_shift_opengl.py index 731db633f0..1ae58afff4 100644 --- a/tests/opengl/test_axes_shift_opengl.py +++ b/tests/opengl/test_axes_shift_opengl.py @@ -7,5 +7,9 @@ def test_axes_origin_shift(using_opengl_renderer): ax = Axes(x_range=(5, 10, 1), y_range=(40, 45, 0.5)) - assert np.allclose(ax.coords_to_point(5.0, 40.0), ax.x_axis.number_to_point(5)) - assert np.allclose(ax.coords_to_point(5.0, 40.0), ax.y_axis.number_to_point(40)) + np.testing.assert_allclose( + ax.coords_to_point(5.0, 40.0), ax.x_axis.number_to_point(5) + ) + np.testing.assert_allclose( + ax.coords_to_point(5.0, 40.0), ax.y_axis.number_to_point(40) + ) diff --git a/tests/opengl/test_color_opengl.py b/tests/opengl/test_color_opengl.py index e3f6940ac4..32f9dfbdda 100644 --- a/tests/opengl/test_color_opengl.py +++ b/tests/opengl/test_color_opengl.py @@ -18,15 +18,21 @@ def test_background_color(using_opengl_renderer): S = Scene() S.renderer.background_color = "#ff0000" S.renderer.update_frame(S) - assert np.all(S.renderer.get_frame()[0, 0] == np.array([255, 0, 0, 255])) + np.testing.assert_array_equal( + S.renderer.get_frame()[0, 0], np.array([255, 0, 0, 255]) + ) S.renderer.background_color = "#436f80" S.renderer.update_frame(S) - assert np.all(S.renderer.get_frame()[0, 0] == np.array([67, 111, 128, 255])) + np.testing.assert_array_equal( + S.renderer.get_frame()[0, 0], np.array([67, 111, 128, 255]) + ) S.renderer.background_color = "#fff" S.renderer.update_frame(S) - assert np.all(S.renderer.get_frame()[0, 0] == np.array([255, 255, 255, 255])) + np.testing.assert_array_equal( + S.renderer.get_frame()[0, 0], np.array([255, 255, 255, 255]) + ) def test_set_color(using_opengl_renderer): diff --git a/tests/opengl/test_config_opengl.py b/tests/opengl/test_config_opengl.py index f3013800dc..378ba33558 100644 --- a/tests/opengl/test_config_opengl.py +++ b/tests/opengl/test_config_opengl.py @@ -26,7 +26,7 @@ def test_tempconfig(using_opengl_renderer): # check that config is correctly restored for k, v in original.items(): if isinstance(v, np.ndarray): - assert np.allclose(config[k], v) + np.testing.assert_allclose(config[k], v) else: assert config[k] == v @@ -43,7 +43,7 @@ def test_background_color(using_opengl_renderer): scene = MyScene() scene.render() frame = scene.renderer.get_frame() - assert np.allclose(frame[0, 0], [255, 255, 255, 255]) + np.testing.assert_allclose(frame[0, 0], [255, 255, 255, 255]) def test_digest_file(using_opengl_renderer, tmp_path): @@ -67,8 +67,10 @@ def test_digest_file(using_opengl_renderer, tmp_path): def test_frame_size(using_opengl_renderer, tmp_path): """Test that the frame size can be set via config file.""" - assert np.allclose(config.aspect_ratio, config.pixel_width / config.pixel_height) - assert np.allclose(config.frame_height, 8.0) + np.testing.assert_allclose( + config.aspect_ratio, config.pixel_width / config.pixel_height + ) + np.testing.assert_allclose(config.frame_height, 8.0) with tempconfig({}): tmp_cfg = tempfile.NamedTemporaryFile("w", dir=tmp_path, delete=False) @@ -83,10 +85,10 @@ def test_frame_size(using_opengl_renderer, tmp_path): config.digest_file(tmp_cfg.name) # aspect ratio is set using pixel measurements - assert np.allclose(config.aspect_ratio, 1.0) + np.testing.assert_allclose(config.aspect_ratio, 1.0) # if not specified in the cfg file, frame_width is set using the aspect ratio - assert np.allclose(config.frame_height, 8.0) - assert np.allclose(config.frame_width, 8.0) + np.testing.assert_allclose(config.frame_height, 8.0) + np.testing.assert_allclose(config.frame_width, 8.0) with tempconfig({}): tmp_cfg = tempfile.NamedTemporaryFile("w", dir=tmp_path, delete=False) @@ -102,10 +104,10 @@ def test_frame_size(using_opengl_renderer, tmp_path): tmp_cfg.close() config.digest_file(tmp_cfg.name) - assert np.allclose(config.aspect_ratio, 1.0) + np.testing.assert_allclose(config.aspect_ratio, 1.0) # if both are specified in the cfg file, the aspect ratio is ignored - assert np.allclose(config.frame_height, 10.0) - assert np.allclose(config.frame_width, 10.0) + np.testing.assert_allclose(config.frame_height, 10.0) + np.testing.assert_allclose(config.frame_width, 10.0) def test_temporary_dry_run(using_opengl_renderer): diff --git a/tests/opengl/test_coordinate_system_opengl.py b/tests/opengl/test_coordinate_system_opengl.py index 8e1d778e52..fb0a51748a 100644 --- a/tests/opengl/test_coordinate_system_opengl.py +++ b/tests/opengl/test_coordinate_system_opengl.py @@ -21,8 +21,8 @@ def test_initial_config(using_opengl_renderer): assert cs.y_range[2] == 1.0 ax = Axes() - assert np.allclose(ax.get_center(), ORIGIN) - assert np.allclose(ax.y_axis_config["label_direction"], LEFT) + np.testing.assert_allclose(ax.get_center(), ORIGIN) + np.testing.assert_allclose(ax.y_axis_config["label_direction"], LEFT) with tempconfig({"frame_x_radius": 100, "frame_y_radius": 200}): cs = CS() @@ -102,7 +102,7 @@ def test_point_to_coords(using_opengl_renderer): # get the coordinates of the circle with respect to the axes coords = np.around(ax.point_to_coords(circ.get_right()), decimals=4) - assert np.array_equal(coords, (7.0833, 2.6667)) + np.testing.assert_array_equal(coords, (7.0833, 2.6667)) def test_coords_to_point(using_opengl_renderer): @@ -110,7 +110,7 @@ def test_coords_to_point(using_opengl_renderer): # a point with respect to the axes c2p_coord = np.around(ax.coords_to_point(2, 2), decimals=4) - assert np.array_equal(c2p_coord, (1.7143, 1.5, 0)) + np.testing.assert_array_equal(c2p_coord, (1.7143, 1.5, 0)) def test_input_to_graph_point(using_opengl_renderer): @@ -122,8 +122,8 @@ def test_input_to_graph_point(using_opengl_renderer): # move a square to PI on the cosine curve. position = np.around(ax.input_to_graph_point(x=PI, graph=curve), decimals=4) - assert np.array_equal(position, (2.6928, -0.75, 0)) + np.testing.assert_array_equal(position, (2.6928, -0.75, 0)) # test the line_graph implementation position = np.around(ax.input_to_graph_point(x=PI, graph=line_graph), decimals=4) - assert np.array_equal(position, (2.6928, 1.2876, 0)) + np.testing.assert_array_equal(position, (2.6928, 1.2876, 0)) diff --git a/tests/opengl/test_family_opengl.py b/tests/opengl/test_family_opengl.py index a7dd35e93b..96a4814d76 100644 --- a/tests/opengl/test_family_opengl.py +++ b/tests/opengl/test_family_opengl.py @@ -82,4 +82,4 @@ def test_shift_family(using_opengl_renderer): positions_after = {m: m.get_center().copy() for m in family} for m in family: - assert np.allclose(positions_before[m] + RIGHT, positions_after[m]) + np.testing.assert_allclose(positions_before[m] + RIGHT, positions_after[m]) diff --git a/tests/opengl/test_opengl_vectorized_mobject.py b/tests/opengl/test_opengl_vectorized_mobject.py index 64b53641c0..8e0ba22582 100644 --- a/tests/opengl/test_opengl_vectorized_mobject.py +++ b/tests/opengl/test_opengl_vectorized_mobject.py @@ -22,7 +22,7 @@ def test_opengl_vmobject_point_from_propotion(using_opengl_renderer): # Total length of 6, so halfway along the object # would be at length 3, which lands in the first, long line. - assert np.all(obj.point_from_proportion(0.5) == np.array([3, 0, 0])) + np.testing.assert_array_equal(obj.point_from_proportion(0.5), np.array([3, 0, 0])) with pytest.raises(ValueError, match="between 0 and 1"): obj.point_from_proportion(2) diff --git a/tests/opengl/test_unit_geometry_opengl.py b/tests/opengl/test_unit_geometry_opengl.py index c92b5978ce..f92bc9ff37 100644 --- a/tests/opengl/test_unit_geometry_opengl.py +++ b/tests/opengl/test_unit_geometry_opengl.py @@ -6,4 +6,6 @@ def test_get_arc_center(using_opengl_renderer): - assert np.all(Sector(arc_center=[1, 2, 0]).get_arc_center() == [1, 2, 0]) + np.testing.assert_array_equal( + Sector(arc_center=[1, 2, 0]).get_arc_center(), [1, 2, 0] + ) diff --git a/tests/test_axes_shift.py b/tests/test_axes_shift.py index 6697f5d830..b733ffe507 100644 --- a/tests/test_axes_shift.py +++ b/tests/test_axes_shift.py @@ -8,8 +8,8 @@ def test_axes_origin_shift(): ax = Axes(x_range=(5, 10, 1), y_range=(40, 45, 0.5)) - assert np.allclose(ax.coords_to_point(5, 40), ax.x_axis.number_to_point(5)) - assert np.allclose(ax.coords_to_point(5, 40), ax.y_axis.number_to_point(40)) + np.testing.assert_allclose(ax.coords_to_point(5, 40), ax.x_axis.number_to_point(5)) + np.testing.assert_allclose(ax.coords_to_point(5, 40), ax.y_axis.number_to_point(40)) def test_axes_origin_shift_logbase(): @@ -19,19 +19,25 @@ def test_axes_origin_shift_logbase(): x_axis_config={"scaling": LogBase()}, y_axis_config={"scaling": LogBase()}, ) - assert np.allclose( + np.testing.assert_allclose( ax.coords_to_point(10**5, 10**3), ax.x_axis.number_to_point(10**5) ) - assert np.allclose( + np.testing.assert_allclose( ax.coords_to_point(10**5, 10**3), ax.y_axis.number_to_point(10**3) ) def test_3daxes_origin_shift(): ax = ThreeDAxes(x_range=(3, 9, 1), y_range=(6, 12, 1), z_range=(-1, 1, 0.5)) - assert np.allclose(ax.coords_to_point(3, 6, 0), ax.x_axis.number_to_point(3)) - assert np.allclose(ax.coords_to_point(3, 6, 0), ax.y_axis.number_to_point(6)) - assert np.allclose(ax.coords_to_point(3, 6, 0), ax.z_axis.number_to_point(0)) + np.testing.assert_allclose( + ax.coords_to_point(3, 6, 0), ax.x_axis.number_to_point(3) + ) + np.testing.assert_allclose( + ax.coords_to_point(3, 6, 0), ax.y_axis.number_to_point(6) + ) + np.testing.assert_allclose( + ax.coords_to_point(3, 6, 0), ax.z_axis.number_to_point(0) + ) def test_3daxes_origin_shift_logbase(): @@ -43,15 +49,15 @@ def test_3daxes_origin_shift_logbase(): y_axis_config={"scaling": LogBase()}, z_axis_config={"scaling": LogBase()}, ) - assert np.allclose( + np.testing.assert_allclose( ax.coords_to_point(10**3, 10**6, 10**2), ax.x_axis.number_to_point(10**3), ) - assert np.allclose( + np.testing.assert_allclose( ax.coords_to_point(10**3, 10**6, 10**2), ax.y_axis.number_to_point(10**6), ) - assert np.allclose( + np.testing.assert_allclose( ax.coords_to_point(10**3, 10**6, 10**2), ax.z_axis.number_to_point(10**2), ) diff --git a/tests/test_boolean_ops.py b/tests/test_boolean_ops.py index 30ea229062..844a9f2b51 100644 --- a/tests/test_boolean_ops.py +++ b/tests/test_boolean_ops.py @@ -55,4 +55,4 @@ def test_vmobject_to_skia_path_and_inverse(test_input): new_vmobject = a._convert_skia_path_to_vmobject(path) # for some reason there is an extra 4 points in new vmobject than original - assert np.where(np.isclose(new_vmobject.points[:-4], test_input.points)) + np.testing.assert_allclose(new_vmobject.points[:-4], test_input.points) diff --git a/tests/test_color.py b/tests/test_color.py index 1a84052dff..fa9e22a774 100644 --- a/tests/test_color.py +++ b/tests/test_color.py @@ -15,20 +15,28 @@ def test_background_color(): S = Scene() S.camera.background_color = "#ff0000" S.renderer.update_frame(S) - assert np.all(S.renderer.get_frame()[0, 0] == np.array([255, 0, 0, 255])) + np.testing.assert_array_equal( + S.renderer.get_frame()[0, 0], np.array([255, 0, 0, 255]) + ) S.camera.background_color = "#436f80" S.renderer.update_frame(S) - assert np.all(S.renderer.get_frame()[0, 0] == np.array([67, 111, 128, 255])) + np.testing.assert_array_equal( + S.renderer.get_frame()[0, 0], np.array([67, 111, 128, 255]) + ) S.camera.background_color = "#fff" S.renderer.update_frame(S) - assert np.all(S.renderer.get_frame()[0, 0] == np.array([255, 255, 255, 255])) + np.testing.assert_array_equal( + S.renderer.get_frame()[0, 0], np.array([255, 255, 255, 255]) + ) S.camera.background_color = "#bbffbb" S.camera.background_opacity = 0.5 S.renderer.update_frame(S) - assert np.all(S.renderer.get_frame()[0, 0] == np.array([93, 127, 93, 127])) + np.testing.assert_array_equal( + S.renderer.get_frame()[0, 0], np.array([93, 127, 93, 127]) + ) def test_set_color(): diff --git a/tests/test_config.py b/tests/test_config.py index cab3334460..c54b738773 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -28,7 +28,7 @@ def test_tempconfig(): # check that config is correctly restored for k, v in original.items(): if isinstance(v, np.ndarray): - assert np.allclose(config[k], v) + np.testing.assert_allclose(config[k], v) else: assert config[k] == v @@ -50,13 +50,13 @@ def test_transparent(): scene = MyScene() scene.render() frame = scene.renderer.get_frame() - assert np.allclose(frame[0, 0], [0, 0, 0, 255]) + np.testing.assert_allclose(frame[0, 0], [0, 0, 0, 255]) with tempconfig({"transparent": True, "dry_run": True}): scene = MyScene() scene.render() frame = scene.renderer.get_frame() - assert np.allclose(frame[0, 0], [0, 0, 0, 0]) + np.testing.assert_allclose(frame[0, 0], [0, 0, 0, 0]) config["verbosity"] = orig_verbosity @@ -67,7 +67,7 @@ def test_background_color(): scene = MyScene() scene.render() frame = scene.renderer.get_frame() - assert np.allclose(frame[0, 0], [255, 255, 255, 255]) + np.testing.assert_allclose(frame[0, 0], [255, 255, 255, 255]) def test_digest_file(tmp_path): @@ -136,8 +136,10 @@ def test_custom_dirs(tmp_path): def test_frame_size(tmp_path): """Test that the frame size can be set via config file.""" - assert np.allclose(config.aspect_ratio, config.pixel_width / config.pixel_height) - assert np.allclose(config.frame_height, 8.0) + np.testing.assert_allclose( + config.aspect_ratio, config.pixel_width / config.pixel_height + ) + np.testing.assert_allclose(config.frame_height, 8.0) with tempconfig({}): tmp_cfg = tempfile.NamedTemporaryFile("w", dir=tmp_path, delete=False) @@ -152,10 +154,10 @@ def test_frame_size(tmp_path): config.digest_file(tmp_cfg.name) # aspect ratio is set using pixel measurements - assert np.allclose(config.aspect_ratio, 1.0) + np.testing.assert_allclose(config.aspect_ratio, 1.0) # if not specified in the cfg file, frame_width is set using the aspect ratio - assert np.allclose(config.frame_height, 8.0) - assert np.allclose(config.frame_width, 8.0) + np.testing.assert_allclose(config.frame_height, 8.0) + np.testing.assert_allclose(config.frame_width, 8.0) with tempconfig({}): tmp_cfg = tempfile.NamedTemporaryFile("w", dir=tmp_path, delete=False) @@ -171,10 +173,10 @@ def test_frame_size(tmp_path): tmp_cfg.close() config.digest_file(tmp_cfg.name) - assert np.allclose(config.aspect_ratio, 1.0) + np.testing.assert_allclose(config.aspect_ratio, 1.0) # if both are specified in the cfg file, the aspect ratio is ignored - assert np.allclose(config.frame_height, 10.0) - assert np.allclose(config.frame_width, 10.0) + np.testing.assert_allclose(config.frame_height, 10.0) + np.testing.assert_allclose(config.frame_width, 10.0) def test_temporary_dry_run(): diff --git a/tests/test_coordinate_system.py b/tests/test_coordinate_system.py index 8a359d7a1d..e463ef1669 100644 --- a/tests/test_coordinate_system.py +++ b/tests/test_coordinate_system.py @@ -21,8 +21,8 @@ def test_initial_config(): assert cs.y_range[2] == 1.0 ax = Axes() - assert np.allclose(ax.get_center(), ORIGIN) - assert np.allclose(ax.y_axis_config["label_direction"], LEFT) + np.testing.assert_allclose(ax.get_center(), ORIGIN) + np.testing.assert_allclose(ax.y_axis_config["label_direction"], LEFT) with tempconfig({"frame_x_radius": 100, "frame_y_radius": 200}): cs = CS() @@ -99,7 +99,7 @@ def test_point_to_coords(): # get the coordinates of the circle with respect to the axes coords = np.around(ax.point_to_coords(circ.get_right()), decimals=4) - assert np.array_equal(coords, (7.0833, 2.6667)) + np.testing.assert_array_equal(coords, (7.0833, 2.6667)) def test_coords_to_point(): @@ -107,7 +107,7 @@ def test_coords_to_point(): # a point with respect to the axes c2p_coord = np.around(ax.coords_to_point(2, 2), decimals=4) - assert np.array_equal(c2p_coord, (1.7143, 1.5, 0)) + np.testing.assert_array_equal(c2p_coord, (1.7143, 1.5, 0)) def test_input_to_graph_point(): @@ -119,8 +119,8 @@ def test_input_to_graph_point(): # move a square to PI on the cosine curve. position = np.around(ax.input_to_graph_point(x=PI, graph=curve), decimals=4) - assert np.array_equal(position, (2.6928, -0.75, 0)) + np.testing.assert_array_equal(position, (2.6928, -0.75, 0)) # test the line_graph implementation position = np.around(ax.input_to_graph_point(x=PI, graph=line_graph), decimals=4) - assert np.array_equal(position, (2.6928, 1.2876, 0)) + np.testing.assert_array_equal(position, (2.6928, 1.2876, 0)) diff --git a/tests/test_family.py b/tests/test_family.py index 0e0c1e518b..90b55ebff1 100644 --- a/tests/test_family.py +++ b/tests/test_family.py @@ -81,4 +81,4 @@ def test_shift_family(): positions_after = {m: m.get_center() for m in family} for m in family: - assert np.allclose(positions_before[m] + RIGHT, positions_after[m]) + np.testing.assert_allclose(positions_before[m] + RIGHT, positions_after[m]) diff --git a/tests/test_set_attr.py b/tests/test_set_attr.py index e04a2286f3..2e483062e4 100644 --- a/tests/test_set_attr.py +++ b/tests/test_set_attr.py @@ -11,16 +11,16 @@ def test_Data(): config.renderer = "opengl" a = Square().move_to(RIGHT) data_bb = a.data["bounding_box"] - assert np.array_equal( + np.testing.assert_array_equal( data_bb, np.array([[0.0, -1.0, 0.0], [1.0, 0.0, 0.0], [2.0, 1.0, 0.0]]), ) # test that calling the attribute equals calling it from self.data - assert np.array_equal(a.bounding_box, data_bb) + np.testing.assert_array_equal(a.bounding_box, data_bb) # test that the array can be indexed - assert np.array_equal( + np.testing.assert_array_equal( a.bounding_box[1], np.array( [1.0, 0.0, 0.0], @@ -33,10 +33,10 @@ def test_Data(): # test that both the attr and self.data arrays match after adjusting a value data_bb = a.data["bounding_box"] - assert np.array_equal( + np.testing.assert_array_equal( data_bb, np.array([[0.0, -1.0, 0.0], [300.0, 300.0, 300.0], [2.0, 1.0, 0.0]]), ) - assert np.array_equal(a.bounding_box, data_bb) + np.testing.assert_array_equal(a.bounding_box, data_bb) config.renderer = "cairo" # needs to be here or else the following cairo tests fail diff --git a/tests/test_space_ops.py b/tests/test_space_ops.py index 108f586e0c..8ca826d0a1 100644 --- a/tests/test_space_ops.py +++ b/tests/test_space_ops.py @@ -12,15 +12,15 @@ def test_rotate_vector(): rotated = rotate_vector(vec, np.pi / 2) assert np.round(rotated[0], 5) == -1.0 assert not np.round(rotated[1:], 5).any() - assert np.all(rotate_vector(np.zeros(3), np.pi / 4) == np.zeros(3)) + np.testing.assert_array_equal(rotate_vector(np.zeros(3), np.pi / 4), np.zeros(3)) def test_rotation_matrices(): ang = np.pi / 6 ax = np.array([1, 1, 1]) - assert np.all( - np.round(rotation_matrix(ang, ax, True), 5) - == np.round( + np.testing.assert_array_equal( + np.round(rotation_matrix(ang, ax, True), 5), + np.round( np.array( [ [0.91068, -0.24402, 0.33333, 0.0], @@ -30,27 +30,27 @@ def test_rotation_matrices(): ] ), 5, - ) + ), ) - assert np.all( - np.round(rotation_about_z(np.pi / 3), 5) - == np.array( + np.testing.assert_array_equal( + np.round(rotation_about_z(np.pi / 3), 5), + np.array( [ [0.5, -0.86603, 0.0], [0.86603, 0.5, 0.0], [0.0, 0.0, 1.0], ] - ) + ), ) - assert np.all( - np.round(z_to_vector(np.array([1, 2, 3])), 5) - == np.array( + np.testing.assert_array_equal( + np.round(z_to_vector(np.array([1, 2, 3])), 5), + np.array( [ [0.96362, 0.0, 0.26726], [-0.14825, 0.83205, 0.53452], [-0.22237, -0.5547, 0.80178], ] - ) + ), ) @@ -64,16 +64,18 @@ def test_angle_of_vector(): def test_center_of_mass(): - assert np.all(center_of_mass([[0, 0, 0], [1, 2, 3]]) == np.array([0.5, 1.0, 1.5])) + np.testing.assert_array_equal( + center_of_mass([[0, 0, 0], [1, 2, 3]]), np.array([0.5, 1.0, 1.5]) + ) def test_line_intersection(): - assert np.all( + np.testing.assert_array_equal( line_intersection( [[0, 0, 0], [3, 3, 0]], [[0, 3, 0], [3, 0, 0]], - ) - == np.array([1.5, 1.5, 0.0]) + ), + np.array([1.5, 1.5, 0.0]), ) with pytest.raises(ValueError): line_intersection( # parallel lines @@ -90,12 +92,12 @@ def test_line_intersection(): [[2, 2, 0], [3, 1, 0]], [[2, 2, 0], [3, 1, 0]], ) - assert np.all( + np.testing.assert_array_equal( line_intersection( # lines with ends out of bounds [[0, 0, 0], [1, 1, 0]], [[0, 4, 0], [1, 3, 0]], - ) - == np.array([2, 2, 0]) + ), + np.array([2, 2, 0]), ) @@ -106,8 +108,10 @@ def test_shoelace(): def test_polar_coords(): a = np.array([1, 1, 0]) b = (2, np.pi / 2, np.pi / 2) - assert np.all( - np.round(cartesian_to_spherical(a), 4) - == np.round([2**0.5, np.pi / 4, np.pi / 2], 4), + np.testing.assert_array_equal( + np.round(cartesian_to_spherical(a), 4), + np.round([2**0.5, np.pi / 4, np.pi / 2], 4), + ) + np.testing.assert_array_equal( + np.round(spherical_to_cartesian(b), 4), np.array([0, 2, 0]) ) - assert np.all(np.round(spherical_to_cartesian(b), 4) == np.array([0, 2, 0])) diff --git a/tests/test_unit_geometry.py b/tests/test_unit_geometry.py index 23b944ece2..1729752fff 100644 --- a/tests/test_unit_geometry.py +++ b/tests/test_unit_geometry.py @@ -10,7 +10,9 @@ def test_get_arc_center(): - assert np.all(Sector(arc_center=[1, 2, 0]).get_arc_center() == [1, 2, 0]) + np.testing.assert_array_equal( + Sector(arc_center=[1, 2, 0]).get_arc_center(), [1, 2, 0] + ) def test_BackgroundRectangle(caplog): diff --git a/tests/test_units.py b/tests/test_units.py index ff1ad78862..6c2cba1ac1 100644 --- a/tests/test_units.py +++ b/tests/test_units.py @@ -10,21 +10,22 @@ def test_units(): # make sure we are using the right frame geometry assert config.pixel_width == 1920 - assert np.isclose(config.frame_height, 8.0) + + np.testing.assert_allclose(config.frame_height, 8.0) # Munits should be equivalent to the internal logical units - assert np.isclose(8.0 * Munits, config.frame_height) + np.testing.assert_allclose(8.0 * Munits, config.frame_height) # Pixels should convert from pixels to Munits - assert np.isclose(1920 * Pixels, config.frame_width) + np.testing.assert_allclose(1920 * Pixels, config.frame_width) # Percent should give the fractional length of the frame - assert np.isclose(50 * Percent(X_AXIS), config.frame_width / 2) - assert np.isclose(50 * Percent(Y_AXIS), config.frame_height / 2) + np.testing.assert_allclose(50 * Percent(X_AXIS), config.frame_width / 2) + np.testing.assert_allclose(50 * Percent(Y_AXIS), config.frame_height / 2) # The length of the Z axis is not defined with pytest.raises(NotImplementedError): Percent(Z_AXIS) # Degrees should convert from degrees to radians - assert np.isclose(180 * Degrees, PI) + np.testing.assert_allclose(180 * Degrees, PI) diff --git a/tests/test_vectorized_mobject.py b/tests/test_vectorized_mobject.py index b6013c92fe..181efc0444 100644 --- a/tests/test_vectorized_mobject.py +++ b/tests/test_vectorized_mobject.py @@ -21,7 +21,7 @@ def test_vmobject_point_from_propotion(): # Total length of 6, so halfway along the object # would be at length 3, which lands in the first, long line. - assert np.all(obj.point_from_proportion(0.5) == np.array([3, 0, 0])) + np.testing.assert_array_equal(obj.point_from_proportion(0.5), np.array([3, 0, 0])) with pytest.raises(ValueError, match="between 0 and 1"): obj.point_from_proportion(2) @@ -271,7 +271,7 @@ def test_vmobject_same_points_become(): a = Square() b = Circle() a.become(b) - assert np.array_equal(a.points, b.points) + np.testing.assert_array_equal(a.points, b.points) assert len(a.submobjects) == len(b.submobjects) @@ -279,7 +279,7 @@ def test_vmobject_same_num_submobjects_become(): a = Square() b = RegularPolygon(n=6) a.become(b) - assert np.array_equal(a.points, b.points) + np.testing.assert_array_equal(a.points, b.points) assert len(a.submobjects) == len(b.submobjects) @@ -287,11 +287,11 @@ def test_vmobject_different_num_points_and_submobjects_become(): a = Square() b = VGroup(Circle(), Square()) a.become(b) - assert np.array_equal(a.points, b.points) + np.testing.assert_array_equal(a.points, b.points) assert len(a.submobjects) == len(b.submobjects) def test_vmobject_point_at_angle(): a = Circle() p = a.point_at_angle(4 * PI) - assert np.array_equal(a.points[0], p) + np.testing.assert_array_equal(a.points[0], p) From adf3e20ea81a9a45caf2a7c105bb65a775fc480a Mon Sep 17 00:00:00 2001 From: Jacob Evan Shreve Date: Tue, 7 Jun 2022 07:46:30 -0400 Subject: [PATCH 065/555] Installed ghostscript in the docker image (#2746) * Configure ghostscript in the docker image * removed setting LIBGS Co-authored-by: Benjamin Hackl --- docker/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 0661546b9c..9272106712 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -12,7 +12,8 @@ RUN apt-get update -qq \ freeglut3-dev \ pkg-config \ make \ - wget + wget \ + ghostscript # setup a minimal texlive installation COPY docker/texlive-profile.txt /tmp/ From b1c44d3ff74d125ef0eafc6bcb200543071973e8 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 10 Jun 2022 10:04:16 +0200 Subject: [PATCH 066/555] hotfix: added missing __init__.py file for manim.utils.docbuild (#2757) --- manim/utils/docbuild/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 manim/utils/docbuild/__init__.py diff --git a/manim/utils/docbuild/__init__.py b/manim/utils/docbuild/__init__.py new file mode 100644 index 0000000000..e69de29bb2 From e8124bb95609237e53f0be3e7dd208e3e2dfd255 Mon Sep 17 00:00:00 2001 From: Jaime Santos <50669048+JaimePSantos@users.noreply.github.com> Date: Fri, 10 Jun 2022 12:06:02 +0100 Subject: [PATCH 067/555] Fix vm.get_end_anchors() docstring (#2755) Co-authored-by: Benjamin Hackl --- 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 e4289853e9..fd2140ef3d 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -1331,7 +1331,7 @@ def get_start_anchors(self) -> np.ndarray: return self.points[0 :: self.n_points_per_cubic_curve] def get_end_anchors(self) -> np.ndarray: - """Return the starting anchors of the bezier curves. + """Return the end anchors of the bezier curves. Returns ------- From 8dee0c2ded79ea8567b165f074daa3d34849d6e1 Mon Sep 17 00:00:00 2001 From: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> Date: Mon, 13 Jun 2022 16:44:42 +0530 Subject: [PATCH 068/555] Remove cmake (#2760) --- docs/source/installation/macos.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/installation/macos.rst b/docs/source/installation/macos.rst index 42d43ae27e..ead8f41f8a 100644 --- a/docs/source/installation/macos.rst +++ b/docs/source/installation/macos.rst @@ -34,7 +34,7 @@ are required, namely: .. code-block:: bash - brew install cmake pango scipy + brew install pango scipy After all required dependencies are installed, simply run: From 1ed4d464e6547c923daa987dbb4853790068a4af Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 15 Jun 2022 19:40:11 +0530 Subject: [PATCH 069/555] [pre-commit.ci] pre-commit autoupdate (#2768) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v4.2.0 → v4.3.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.2.0...v4.3.0) - [github.com/asottile/pyupgrade: v2.32.1 → v2.34.0](https://github.com/asottile/pyupgrade/compare/v2.32.1...v2.34.0) - [github.com/pre-commit/mirrors-mypy: v0.960 → v0.961](https://github.com/pre-commit/mirrors-mypy/compare/v0.960...v0.961) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a98867ca68..f8b256a42a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ fail_fast: false exclude: ^(manim/grpc/gen/|docs/i18n/) repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.2.0 + rev: v4.3.0 hooks: - id: check-ast name: Validate Python @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v2.32.1 + rev: v2.34.0 hooks: - id: pyupgrade name: Update code to new python versions @@ -56,7 +56,7 @@ repos: flake8-docstrings==1.6.0, flake8-rst-docstrings==0.2.3, flake8-pytest-style==1.5.0, flake8-simplify==0.14.1, flake8-comprehensions>=3.6.1] - repo: https://github.com/pre-commit/mirrors-mypy - rev: 'v0.960' + rev: 'v0.961' hooks: - id: mypy additional_dependencies: [types-decorator, types-docutils, types-requests, types-setuptools] From 83106f1c62b2fa1aeb11bb59c72376654521622f Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 17 Jun 2022 09:58:50 +0200 Subject: [PATCH 070/555] Added more questions and answers to FAQ section, new OpenGL FAQ (#2767) * faq: scene measurements, transparent background, available kwargs * new FAQ section: opengl rendering * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Apply suggestions from code review Co-authored-by: Naveen M K * ReST -> markdown syntax Co-authored-by: Naveen M K Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Naveen M K --- docs/source/faq/general.md | 38 ++++++++++++++++++++++++++++++++++++++ docs/source/faq/opengl.md | 20 ++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 docs/source/faq/opengl.md diff --git a/docs/source/faq/general.md b/docs/source/faq/general.md index eedb9dfa7f..7696f976a0 100644 --- a/docs/source/faq/general.md +++ b/docs/source/faq/general.md @@ -31,6 +31,44 @@ Manim will not call your method and simply output a black frame. --- +## What are the default measurements for Manim's scene? + +The scene measures 8 units in height and has a default ratio of 16:9, +which means that it measures {math}`8 \cdot 16 / 9 = 14 + 2/9` units in width. +The origin is in the center of the scene, which means that, for example, the +upper left corner of the scene has coordinates `[-7-1/9, 4, 0]`. + +--- + +## How do I find out which keyword arguments I can pass when creating a `Mobject`? + +Let us consider some specific example, like the {class}`.Circle` class. When looking +at its documentation page, only two specific keyword arguments are listed +(`radius`, and `color`). Besides these concrete arguments, there is also a +catchall `**kwargs` argument which captures all other arguments that are passed +to `Circle`, and passes them on to the base class of {class}`.Circle`, {class}`.Arc`. + +The same holds for {class}`.Arc`: some arguments are explicitly documented, and +there is again a catchall `**kwargs` argument that passes unprocessed arguments +to the next base class -- and so on. + +The most important keyword arguments relevant to styling your mobjects are the +ones that are documented for the base classes {class}`.VMobject` and +{class}`.Mobject`. + +--- + +## Can Manim render a video with transparent background? + +Yes: simply pass the CLI flag `-t` (or its long form `--transparent`). +Note that the default video file format does not support transparency, +which is why Manim will output a `.mov` instead of a `.mp4` when +rendering with a transparent background. Other movie file formats +that support transparency can be obtained by passing +`--format=webm` or `--format=gif`. + +--- + ## I have watched a video where a creator ran command X, but it does not work for me. Why? The video you have been watching is likely outdated. If you want to follow diff --git a/docs/source/faq/opengl.md b/docs/source/faq/opengl.md new file mode 100644 index 0000000000..2efb43660c --- /dev/null +++ b/docs/source/faq/opengl.md @@ -0,0 +1,20 @@ +# FAQ: OpenGL rendering + +## Are there any resources on how the OpenGL renderer in the community maintained version can be used? + +Yes. Unfortunately, at this point, the official online documentation does +not contain the relevant base classes like `OpenGLMobject` and `OpenGLVMobject` +or specific OpenGL classes like `OpenGLSurface`, but documentation for some of +them is available in form of docstrings +[in the source code](https://github.com/ManimCommunity/manim/tree/main/manim/mobject/opengl). + +Furthermore, [this user guide by *aquabeam*](https://www.aquabeam.me/manim/opengl_guide/) +can be helpful to get started using the OpenGL renderer. + +--- + +## I am trying to run an interactive scene with `--renderer=opengl` and `Scene.interactive_embed`, but an error (`sqlite3.ProgrammingError`) is raised. How can I fix this? + +This seems to be an issue with a recent IPython release, +in our experience it helps to downgrade the installed `IPython` +package to `8.0.1`: `pip install IPython==8.0.1`. From b58a574bc22964514406a41cfd9ad619a32ca9d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 08:05:10 +0000 Subject: [PATCH 071/555] Bump notebook from 6.4.11 to 6.4.12 (#2825) Bumps [notebook](http://jupyter.org) from 6.4.11 to 6.4.12. --- updated-dependencies: - dependency-name: notebook dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 178 ++++++++++++++++++++++++++-------------------------- 1 file changed, 89 insertions(+), 89 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0da11b4800..b201641d26 100644 --- a/poetry.lock +++ b/poetry.lock @@ -29,7 +29,7 @@ name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" category = "main" -optional = true +optional = false python-versions = "*" [[package]] @@ -37,7 +37,7 @@ name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." category = "main" -optional = true +optional = false python-versions = ">=3.6" [package.dependencies] @@ -54,7 +54,7 @@ name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" category = "main" -optional = true +optional = false python-versions = ">=3.6" [package.dependencies] @@ -124,7 +124,7 @@ name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" category = "main" -optional = true +optional = false python-versions = "*" [[package]] @@ -178,7 +178,7 @@ name = "bleach" version = "5.0.0" description = "An easy safelist-based HTML-sanitizing tool." category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -294,14 +294,14 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "coverage" -version = "6.4" +version = "6.4.1" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] -tomli = {version = "*", optional = true, markers = "python_version < \"3.11\" and extra == \"toml\""} +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] toml = ["tomli"] @@ -346,7 +346,7 @@ name = "debugpy" version = "1.6.0" description = "An implementation of the Debug Adapter Protocol for Python" category = "main" -optional = true +optional = false python-versions = ">=3.7" [[package]] @@ -362,7 +362,7 @@ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" category = "main" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] @@ -411,7 +411,7 @@ name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." category = "main" -optional = true +optional = false python-versions = ">=3.6" [[package]] @@ -430,7 +430,7 @@ name = "fastjsonschema" version = "2.15.3" description = "Fastest Python implementation of JSON schema" category = "main" -optional = true +optional = false python-versions = "*" [package.extras] @@ -679,7 +679,7 @@ name = "importlib-resources" version = "5.7.1" description = "Read resources from Python packages" category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -702,7 +702,7 @@ name = "ipykernel" version = "6.13.0" description = "IPython Kernel for Jupyter" category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -725,7 +725,7 @@ name = "ipython" version = "7.32.0" description = "IPython: Productive Interactive Computing" category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -757,7 +757,7 @@ name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" category = "main" -optional = true +optional = false python-versions = "*" [[package]] @@ -790,7 +790,7 @@ name = "jedi" version = "0.18.1" description = "An autocompletion tool for Python that can be used for text editors." category = "main" -optional = true +optional = false python-versions = ">=3.6" [package.dependencies] @@ -830,7 +830,7 @@ name = "jsonschema" version = "4.4.0" description = "An implementation of JSON Schema validation for Python" category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -849,7 +849,7 @@ name = "jupyter-client" version = "7.2.2" description = "Jupyter protocol implementation and client libraries" category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -870,7 +870,7 @@ name = "jupyter-core" version = "4.10.0" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -936,7 +936,7 @@ name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" category = "main" -optional = true +optional = false python-versions = ">=3.7" [[package]] @@ -1056,7 +1056,7 @@ name = "matplotlib-inline" version = "0.1.3" description = "Inline Matplotlib backend for Jupyter" category = "main" -optional = true +optional = false python-versions = ">=3.5" [package.dependencies] @@ -1099,7 +1099,7 @@ name = "mistune" version = "0.8.4" description = "The fastest markdown parser in pure Python" category = "main" -optional = true +optional = false python-versions = "*" [[package]] @@ -1219,7 +1219,7 @@ name = "nbclient" version = "0.6.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "main" -optional = true +optional = false python-versions = ">=3.7.0" [package.dependencies] @@ -1237,7 +1237,7 @@ name = "nbconvert" version = "6.5.0" description = "Converting Jupyter Notebooks" category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -1270,7 +1270,7 @@ name = "nbformat" version = "5.3.0" description = "The Jupyter Notebook format" category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -1287,7 +1287,7 @@ name = "nest-asyncio" version = "1.5.5" description = "Patch asyncio to allow nested event loops" category = "main" -optional = true +optional = false python-versions = ">=3.5" [[package]] @@ -1315,10 +1315,10 @@ python-versions = "*" [[package]] name = "notebook" -version = "6.4.11" +version = "6.4.12" description = "A web-based notebook environment for interactive computing" category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -1381,7 +1381,7 @@ name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" category = "main" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] @@ -1389,7 +1389,7 @@ name = "parso" version = "0.8.3" description = "A Python Parser" category = "main" -optional = true +optional = false python-versions = ">=3.6" [package.extras] @@ -1409,7 +1409,7 @@ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." category = "main" -optional = true +optional = false python-versions = "*" [package.dependencies] @@ -1420,7 +1420,7 @@ name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" category = "main" -optional = true +optional = false python-versions = "*" [[package]] @@ -1484,7 +1484,7 @@ name = "prometheus-client" version = "0.14.1" description = "Python client for the Prometheus monitoring system." category = "main" -optional = true +optional = false python-versions = ">=3.6" [package.extras] @@ -1495,7 +1495,7 @@ name = "prompt-toolkit" version = "3.0.29" description = "Library for building powerful interactive command lines in Python" category = "main" -optional = true +optional = false python-versions = ">=3.6.2" [package.dependencies] @@ -1528,7 +1528,7 @@ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" category = "main" -optional = true +optional = false python-versions = "*" [[package]] @@ -1723,7 +1723,7 @@ name = "pyrsistent" version = "0.18.1" description = "Persistent/Functional/Immutable data structures" category = "main" -optional = true +optional = false python-versions = ">=3.7" [[package]] @@ -1817,7 +1817,7 @@ name = "pywin32" version = "303" description = "Python for Window Extensions" category = "main" -optional = true +optional = false python-versions = "*" [[package]] @@ -1825,7 +1825,7 @@ name = "pywinpty" version = "2.0.5" description = "Pseudo terminal support for Windows from Python." category = "main" -optional = true +optional = false python-versions = ">=3.7" [[package]] @@ -1841,7 +1841,7 @@ name = "pyzmq" version = "22.3.0" description = "Python bindings for 0MQ" category = "main" -optional = true +optional = false python-versions = ">=3.6" [package.dependencies] @@ -1934,7 +1934,7 @@ name = "send2trash" version = "1.8.0" description = "Send file to trash natively under Mac OS X, Windows and Linux." category = "main" -optional = true +optional = false python-versions = "*" [package.extras] @@ -2162,7 +2162,7 @@ name = "terminado" version = "0.13.3" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -2178,7 +2178,7 @@ name = "tinycss2" version = "1.1.1" description = "A tiny CSS parser" category = "main" -optional = true +optional = false python-versions = ">=3.6" [package.dependencies] @@ -2209,7 +2209,7 @@ name = "tornado" version = "6.1" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." category = "main" -optional = true +optional = false python-versions = ">= 3.5" [[package]] @@ -2234,7 +2234,7 @@ name = "traitlets" version = "5.1.1" description = "Traitlets Python configuration system" category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.extras] @@ -2375,7 +2375,7 @@ name = "wcwidth" version = "0.2.5" description = "Measures the displayed width of unicode strings in a terminal" category = "main" -optional = true +optional = false python-versions = "*" [[package]] @@ -2383,7 +2383,7 @@ name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" category = "main" -optional = true +optional = false python-versions = "*" [[package]] @@ -2617,47 +2617,47 @@ commonmark = [ {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] coverage = [ - {file = "coverage-6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50ed480b798febce113709846b11f5d5ed1e529c88d8ae92f707806c50297abf"}, - {file = "coverage-6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26f8f92699756cb7af2b30720de0c5bb8d028e923a95b6d0c891088025a1ac8f"}, - {file = "coverage-6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60c2147921da7f4d2d04f570e1838db32b95c5509d248f3fe6417e91437eaf41"}, - {file = "coverage-6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:750e13834b597eeb8ae6e72aa58d1d831b96beec5ad1d04479ae3772373a8088"}, - {file = "coverage-6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af5b9ee0fc146e907aa0f5fb858c3b3da9199d78b7bb2c9973d95550bd40f701"}, - {file = "coverage-6.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a022394996419142b33a0cf7274cb444c01d2bb123727c4bb0b9acabcb515dea"}, - {file = "coverage-6.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5a78cf2c43b13aa6b56003707c5203f28585944c277c1f3f109c7b041b16bd39"}, - {file = "coverage-6.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9229d074e097f21dfe0643d9d0140ee7433814b3f0fc3706b4abffd1e3038632"}, - {file = "coverage-6.4-cp310-cp310-win32.whl", hash = "sha256:fb45fe08e1abc64eb836d187b20a59172053999823f7f6ef4f18a819c44ba16f"}, - {file = "coverage-6.4-cp310-cp310-win_amd64.whl", hash = "sha256:3cfd07c5889ddb96a401449109a8b97a165be9d67077df6802f59708bfb07720"}, - {file = "coverage-6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:03014a74023abaf5a591eeeaf1ac66a73d54eba178ff4cb1fa0c0a44aae70383"}, - {file = "coverage-6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c82f2cd69c71698152e943f4a5a6b83a3ab1db73b88f6e769fabc86074c3b08"}, - {file = "coverage-6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b546cf2b1974ddc2cb222a109b37c6ed1778b9be7e6b0c0bc0cf0438d9e45a6"}, - {file = "coverage-6.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc173f1ce9ffb16b299f51c9ce53f66a62f4d975abe5640e976904066f3c835d"}, - {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c53ad261dfc8695062fc8811ac7c162bd6096a05a19f26097f411bdf5747aee7"}, - {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:eef5292b60b6de753d6e7f2d128d5841c7915fb1e3321c3a1fe6acfe76c38052"}, - {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:543e172ce4c0de533fa892034cce260467b213c0ea8e39da2f65f9a477425211"}, - {file = "coverage-6.4-cp37-cp37m-win32.whl", hash = "sha256:00c8544510f3c98476bbd58201ac2b150ffbcce46a8c3e4fb89ebf01998f806a"}, - {file = "coverage-6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:b84ab65444dcc68d761e95d4d70f3cfd347ceca5a029f2ffec37d4f124f61311"}, - {file = "coverage-6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d548edacbf16a8276af13063a2b0669d58bbcfca7c55a255f84aac2870786a61"}, - {file = "coverage-6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:033ebec282793bd9eb988d0271c211e58442c31077976c19c442e24d827d356f"}, - {file = "coverage-6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:742fb8b43835078dd7496c3c25a1ec8d15351df49fb0037bffb4754291ef30ce"}, - {file = "coverage-6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55fae115ef9f67934e9f1103c9ba826b4c690e4c5bcf94482b8b2398311bf9c"}, - {file = "coverage-6.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd698341626f3c77784858427bad0cdd54a713115b423d22ac83a28303d1d95"}, - {file = "coverage-6.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d382f7d77eeeaff14b30516b17bcbe80f645f5cf02bb755baac376591c653c"}, - {file = "coverage-6.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:016d7f5cf1c8c84f533a3c1f8f36126fbe00b2ec0ccca47cc5731c3723d327c6"}, - {file = "coverage-6.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:69432946f154c6add0e9ede03cc43b96e2ef2733110a77444823c053b1ff5166"}, - {file = "coverage-6.4-cp38-cp38-win32.whl", hash = "sha256:83bd142cdec5e4a5c4ca1d4ff6fa807d28460f9db919f9f6a31babaaa8b88426"}, - {file = "coverage-6.4-cp38-cp38-win_amd64.whl", hash = "sha256:4002f9e8c1f286e986fe96ec58742b93484195defc01d5cc7809b8f7acb5ece3"}, - {file = "coverage-6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e4f52c272fdc82e7c65ff3f17a7179bc5f710ebc8ce8a5cadac81215e8326740"}, - {file = "coverage-6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b5578efe4038be02d76c344007b13119b2b20acd009a88dde8adec2de4f630b5"}, - {file = "coverage-6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8099ea680201c2221f8468c372198ceba9338a5fec0e940111962b03b3f716a"}, - {file = "coverage-6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a00441f5ea4504f5abbc047589d09e0dc33eb447dc45a1a527c8b74bfdd32c65"}, - {file = "coverage-6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e76bd16f0e31bc2b07e0fb1379551fcd40daf8cdf7e24f31a29e442878a827c"}, - {file = "coverage-6.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8d2e80dd3438e93b19e1223a9850fa65425e77f2607a364b6fd134fcd52dc9df"}, - {file = "coverage-6.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:341e9c2008c481c5c72d0e0dbf64980a4b2238631a7f9780b0fe2e95755fb018"}, - {file = "coverage-6.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:21e6686a95025927775ac501e74f5940cdf6fe052292f3a3f7349b0abae6d00f"}, - {file = "coverage-6.4-cp39-cp39-win32.whl", hash = "sha256:968ed5407f9460bd5a591cefd1388cc00a8f5099de9e76234655ae48cfdbe2c3"}, - {file = "coverage-6.4-cp39-cp39-win_amd64.whl", hash = "sha256:e35217031e4b534b09f9b9a5841b9344a30a6357627761d4218818b865d45055"}, - {file = "coverage-6.4-pp36.pp37.pp38-none-any.whl", hash = "sha256:e637ae0b7b481905358624ef2e81d7fb0b1af55f5ff99f9ba05442a444b11e45"}, - {file = "coverage-6.4.tar.gz", hash = "sha256:727dafd7f67a6e1cad808dc884bd9c5a2f6ef1f8f6d2f22b37b96cb0080d4f49"}, + {file = "coverage-6.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1d5aa2703e1dab4ae6cf416eb0095304f49d004c39e9db1d86f57924f43006b"}, + {file = "coverage-6.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4ce1b258493cbf8aec43e9b50d89982346b98e9ffdfaae8ae5793bc112fb0068"}, + {file = "coverage-6.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c4e737f60c6936460c5be330d296dd5b48b3963f48634c53b3f7deb0f34ec4"}, + {file = "coverage-6.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84e65ef149028516c6d64461b95a8dbcfce95cfd5b9eb634320596173332ea84"}, + {file = "coverage-6.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f69718750eaae75efe506406c490d6fc5a6161d047206cc63ce25527e8a3adad"}, + {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e57816f8ffe46b1df8f12e1b348f06d164fd5219beba7d9433ba79608ef011cc"}, + {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:01c5615d13f3dd3aa8543afc069e5319cfa0c7d712f6e04b920431e5c564a749"}, + {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75ab269400706fab15981fd4bd5080c56bd5cc07c3bccb86aab5e1d5a88dc8f4"}, + {file = "coverage-6.4.1-cp310-cp310-win32.whl", hash = "sha256:a7f3049243783df2e6cc6deafc49ea123522b59f464831476d3d1448e30d72df"}, + {file = "coverage-6.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:ee2ddcac99b2d2aec413e36d7a429ae9ebcadf912946b13ffa88e7d4c9b712d6"}, + {file = "coverage-6.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb73e0011b8793c053bfa85e53129ba5f0250fdc0392c1591fd35d915ec75c46"}, + {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106c16dfe494de3193ec55cac9640dd039b66e196e4641fa8ac396181578b982"}, + {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f4f3df85aa39da00fd3ec4b5abeb7407e82b68c7c5ad181308b0e2526da5d4"}, + {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:961e2fb0680b4f5ad63234e0bf55dfb90d302740ae9c7ed0120677a94a1590cb"}, + {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cec3a0f75c8f1031825e19cd86ee787e87cf03e4fd2865c79c057092e69e3a3b"}, + {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:129cd05ba6f0d08a766d942a9ed4b29283aff7b2cccf5b7ce279d50796860bb3"}, + {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bf5601c33213d3cb19d17a796f8a14a9eaa5e87629a53979a5981e3e3ae166f6"}, + {file = "coverage-6.4.1-cp37-cp37m-win32.whl", hash = "sha256:269eaa2c20a13a5bf17558d4dc91a8d078c4fa1872f25303dddcbba3a813085e"}, + {file = "coverage-6.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f02cbbf8119db68455b9d763f2f8737bb7db7e43720afa07d8eb1604e5c5ae28"}, + {file = "coverage-6.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ffa9297c3a453fba4717d06df579af42ab9a28022444cae7fa605af4df612d54"}, + {file = "coverage-6.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:145f296d00441ca703a659e8f3eb48ae39fb083baba2d7ce4482fb2723e050d9"}, + {file = "coverage-6.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d44996140af8b84284e5e7d398e589574b376fb4de8ccd28d82ad8e3bea13"}, + {file = "coverage-6.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2bd9a6fc18aab8d2e18f89b7ff91c0f34ff4d5e0ba0b33e989b3cd4194c81fd9"}, + {file = "coverage-6.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3384f2a3652cef289e38100f2d037956194a837221edd520a7ee5b42d00cc605"}, + {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9b3e07152b4563722be523e8cd0b209e0d1a373022cfbde395ebb6575bf6790d"}, + {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1480ff858b4113db2718848d7b2d1b75bc79895a9c22e76a221b9d8d62496428"}, + {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:865d69ae811a392f4d06bde506d531f6a28a00af36f5c8649684a9e5e4a85c83"}, + {file = "coverage-6.4.1-cp38-cp38-win32.whl", hash = "sha256:664a47ce62fe4bef9e2d2c430306e1428ecea207ffd68649e3b942fa8ea83b0b"}, + {file = "coverage-6.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:26dff09fb0d82693ba9e6231248641d60ba606150d02ed45110f9ec26404ed1c"}, + {file = "coverage-6.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9c80df769f5ec05ad21ea34be7458d1dc51ff1fb4b2219e77fe24edf462d6df"}, + {file = "coverage-6.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:39ee53946bf009788108b4dd2894bf1349b4e0ca18c2016ffa7d26ce46b8f10d"}, + {file = "coverage-6.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5b66caa62922531059bc5ac04f836860412f7f88d38a476eda0a6f11d4724f4"}, + {file = "coverage-6.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd180ed867e289964404051a958f7cccabdeed423f91a899829264bb7974d3d3"}, + {file = "coverage-6.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84631e81dd053e8a0d4967cedab6db94345f1c36107c71698f746cb2636c63e3"}, + {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8c08da0bd238f2970230c2a0d28ff0e99961598cb2e810245d7fc5afcf1254e8"}, + {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d42c549a8f41dc103a8004b9f0c433e2086add8a719da00e246e17cbe4056f72"}, + {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:309ce4a522ed5fca432af4ebe0f32b21d6d7ccbb0f5fcc99290e71feba67c264"}, + {file = "coverage-6.4.1-cp39-cp39-win32.whl", hash = "sha256:fdb6f7bd51c2d1714cea40718f6149ad9be6a2ee7d93b19e9f00934c0f2a74d9"}, + {file = "coverage-6.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:342d4aefd1c3e7f620a13f4fe563154d808b69cccef415415aece4c786665397"}, + {file = "coverage-6.4.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:4803e7ccf93230accb928f3a68f00ffa80a88213af98ed338a57ad021ef06815"}, + {file = "coverage-6.4.1.tar.gz", hash = "sha256:4321f075095a096e70aff1d002030ee612b65a205a0a0f5b815280d5dc58100c"}, ] cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, @@ -3324,8 +3324,8 @@ nodeenv = [ {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, ] notebook = [ - {file = "notebook-6.4.11-py3-none-any.whl", hash = "sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505"}, - {file = "notebook-6.4.11.tar.gz", hash = "sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a"}, + {file = "notebook-6.4.12-py3-none-any.whl", hash = "sha256:8c07a3bb7640e371f8a609bdbb2366a1976c6a2589da8ef917f761a61e3ad8b1"}, + {file = "notebook-6.4.12.tar.gz", hash = "sha256:6268c9ec9048cff7a45405c990c29ac9ca40b0bc3ec29263d218c5e01f2b4e86"}, ] notebook-shim = [ {file = "notebook_shim-0.1.0-py3-none-any.whl", hash = "sha256:02432d55a01139ac16e2100888aa2b56c614720cec73a27e71f40a5387e45324"}, From 8bebfb907bcbf6d0f564fbaf6a99f186fc58d473 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 18 Jun 2022 13:45:40 +0200 Subject: [PATCH 072/555] Removed suggestion issue template, added FAQ answer regarding proposing new features (#2828) * removed suggestion template * added FAQ answer regarding proposing new features * added link to project board in contributing.rst Co-authored-by: Tristan Schulz --- .github/ISSUE_TEMPLATE/suggestion.md | 17 ----------------- docs/source/contributing.rst | 5 ++++- docs/source/faq/help.md | 22 +++++++++++++++++++--- 3 files changed, 23 insertions(+), 21 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/suggestion.md diff --git a/.github/ISSUE_TEMPLATE/suggestion.md b/.github/ISSUE_TEMPLATE/suggestion.md deleted file mode 100644 index 0d758dd5d8..0000000000 --- a/.github/ISSUE_TEMPLATE/suggestion.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: Suggestion -about: Make a suggestion for the enhancement of existing features -title: "" -labels: enhancement -assignees: '' - ---- - -## Enhancement proposal - - - -## Additional comments - diff --git a/docs/source/contributing.rst b/docs/source/contributing.rst index 79408d984e..a9f7037d28 100644 --- a/docs/source/contributing.rst +++ b/docs/source/contributing.rst @@ -6,7 +6,7 @@ Contributing contributions implementing new features will not be accepted in this period. Other contributions unrelated to cleaning up the codebase may also take a longer period of time to be reviewed. This guide may quickly become outdated quickly; we - highly recommend joining our `Discord server `_ + highly recommend joining our `Discord server `__ to discuss any potential contributions and keep up to date with the latest developments. Thank you for your interest in contributing to Manim! However you have decided to contribute @@ -27,6 +27,9 @@ some are detailed below: * Website design and development * Translating documentation and docstrings +To get an overview of what our community is currently working on, check out +`our development project board `__. + .. note:: Please ensure that you are reading the latest version of this guide by ensuring that "latest" is selected in the version switcher. diff --git a/docs/source/faq/help.md b/docs/source/faq/help.md index a560b03101..c0c7a5e6d1 100644 --- a/docs/source/faq/help.md +++ b/docs/source/faq/help.md @@ -88,10 +88,12 @@ our `#manim-dev` channels in [our Discord](https://manim.community/discord/). 2. Choose the correct category for your report when [creating a new issue](https://github.com/ManimCommunity/manim/issues/new/choose). - We have dedicated issue templates for *bug reports*, *feature requests*, - *installation issues*, and *suggestions*. If your report falls into one of these + We have dedicated issue templates for *bug reports*, *feature requests*, and + *installation issues*. If your report falls into one of these categories, read the issue template carefully! Instructions are given in the - `` sections of the text field. + `` sections of the text field. If you want to suggest a new feature + without concrete implementation details, see + {ref}`the instructions given in this answer `. 3. For bug reports: prepare a minimal example that can be used to illustrate the issue. Examples with hundreds of lines are very inefficient and tedious to debug. @@ -103,3 +105,17 @@ our `#manim-dev` channels in [our Discord](https://manim.community/discord/). terminal output, from the command you used to run the library up to and including the last line with the error message. Read carefully: if the message mentions that there is another relevant log file, include this other file as well! + +--- + +(creating-suggestions)= +## I have an idea for a really cool feature that should be implemented, where should I share my idea? + +New suggestions and proposals should be made by +[creating a new discussion](https://github.com/ManimCommunity/manim/discussions/new?category=suggestions-and-proposals) +in the [*Suggestions and Proposals* category](https://github.com/ManimCommunity/manim/discussions/categories/suggestions-and-proposals) +in our GitHub repository. Once the raw idea has been formed into a more concrete, +implementable proposal that is supported by the community, and someone has expressed +interest in working on the new feature, a corresponding +[issue](https://github.com/ManimCommunity/manim/issues) will be created. Do **not** create +issues for suggesting new features directly, they will be closed down. From b583720ac26832db2fcdb8b4aeb0508996dcedae Mon Sep 17 00:00:00 2001 From: mooncaker816 Date: Sun, 19 Jun 2022 00:23:16 +0800 Subject: [PATCH 073/555] Fixed bug in :meth:`.VMobject.proportion_from_point` that caused proportions greater than 1 to be returned (#2770) * fix bug #2627 * Update manim/utils/bezier.py Co-authored-by: Benjamin Hackl * add test case for bug #2627 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Tristan Schulz --- manim/utils/bezier.py | 2 +- tests/test_vectorized_mobject.py | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index 6f8187eef5..4a489318bd 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -478,7 +478,7 @@ def proportions_along_bezier_curve_for_point( 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]) + roots = np.array([r.real for r in roots if 0 <= r.real <= 1]) return roots diff --git a/tests/test_vectorized_mobject.py b/tests/test_vectorized_mobject.py index 181efc0444..5e87c820ca 100644 --- a/tests/test_vectorized_mobject.py +++ b/tests/test_vectorized_mobject.py @@ -3,7 +3,17 @@ import numpy as np import pytest -from manim import Circle, Line, Mobject, RegularPolygon, Square, VDict, VGroup, VMobject +from manim import ( + Circle, + Line, + Mobject, + Polygon, + RegularPolygon, + Square, + VDict, + VGroup, + VMobject, +) from manim.constants import PI @@ -295,3 +305,14 @@ def test_vmobject_point_at_angle(): a = Circle() p = a.point_at_angle(4 * PI) np.testing.assert_array_equal(a.points[0], p) + + +def test_proportion_from_point(): + A = np.sqrt(3) * np.array([0, 1, 0]) + B = np.array([-1, 0, 0]) + C = np.array([1, 0, 0]) + abc = Polygon(A, B, C) + abc.shift(np.array([-1, 0, 0])) + abc.scale(0.8) + props = [abc.proportion_from_point(p) for p in abc.get_vertices()] + np.testing.assert_allclose(props, [0, 1 / 3, 2 / 3]) From bcb5233259c34e8d6f8cfe23a6bd2aa71db4f2ec Mon Sep 17 00:00:00 2001 From: Simeon Widdis Date: Sat, 18 Jun 2022 17:56:15 -0600 Subject: [PATCH 074/555] Add documentation and testing for Transform's path_func behavior (#2771) * Add graphical tests for Transform with paths * Rewrite path function setting in Transform Currently setting the path function in Transform is done unintuitively, this commit reorders the path_func assignment to make it more clear what it's doing. Passes 609 tests / Skips 12 tests * Add Parameter DocString to Transform class * Add Transform test for conflicting path settings * Apply suggestions from code review Co-authored-by: Benjamin Hackl * Update manim/animation/transform.py Co-authored-by: Tristan Schulz Co-authored-by: Benjamin Hackl Co-authored-by: Tristan Schulz --- manim/animation/transform.py | 36 +++++++++++++++++- .../TransformWithConflictingPaths.npz | Bin 0 -> 4213 bytes .../transform/TransformWithPathArcCenters.npz | Bin 0 -> 4253 bytes .../transform/TransformWithPathFunc.npz | Bin 0 -> 4213 bytes tests/test_graphical_units/test_transform.py | 36 ++++++++++++++++++ 5 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 tests/test_graphical_units/control_data/transform/TransformWithConflictingPaths.npz create mode 100644 tests/test_graphical_units/control_data/transform/TransformWithPathArcCenters.npz create mode 100644 tests/test_graphical_units/control_data/transform/TransformWithPathFunc.npz diff --git a/manim/animation/transform.py b/manim/animation/transform.py index 624d36f004..77bed1defb 100644 --- a/manim/animation/transform.py +++ b/manim/animation/transform.py @@ -46,6 +46,36 @@ class Transform(Animation): + """A Transform transforms a Mobject into a target Mobject. + + Parameters + ---------- + mobject + The :class:`.Mobject` to be transformed. It will be mutated to become the ``target_mobject``. + target_mobject + The target of the transformation. + path_func + A function defining the path that the points of the ``mobject`` are being moved + along until they match the points of the ``target_mobject``, see :mod:`.utils.paths`. + path_arc + The arc angle (in radians) that the points of ``mobject`` will follow to reach + the points of the target if using a circular path arc, see ``path_arc_centers``. + path_arc_axis + The axis to rotate along if using a circular path arc, see ``path_arc_centers``. + path_arc_centers + The center of the circular arcs along which the points of ``mobject`` are + moved by the transformation. + + If this is set and ``path_func`` is not set, then a ``path_along_circles`` path will be generated + using the ``path_arc`` parameters and stored in ``path_func``. If ``path_func`` is set, this and the + other ``path_arc`` fields are set as attributes, but a ``path_func`` is not generated from it. + replace_mobject_with_target_in_scene + Controls which mobject is replaced when the transformation is complete. + + If set to True, ``mobject`` will be removed from the scene and ``target_mobject`` will + replace it. Otherwise, ``target_mobject`` is never added and ``mobject`` just takes its shape. + """ + def __init__( self, mobject: Mobject | None, @@ -61,14 +91,16 @@ def __init__( self.path_arc_centers: np.ndarray = path_arc_centers self.path_arc: float = path_arc - if self.path_arc_centers is not None: + # path_func is a property a few lines below so it doesn't need to be set in any case + if path_func is not None: + self.path_func: Callable = path_func + elif self.path_arc_centers is not None: self.path_func = path_along_circles( path_arc, self.path_arc_centers, self.path_arc_axis, ) - self.path_func: Callable | None = path_func self.replace_mobject_with_target_in_scene: bool = ( replace_mobject_with_target_in_scene ) diff --git a/tests/test_graphical_units/control_data/transform/TransformWithConflictingPaths.npz b/tests/test_graphical_units/control_data/transform/TransformWithConflictingPaths.npz new file mode 100644 index 0000000000000000000000000000000000000000..541684c6f9aed02ce869dbac6da76a621e4cf5bf GIT binary patch literal 4213 zcmeHLdo+}37=MwiO|^Ct5viO=g_L&E#MtVrEn&i_gCV(<7{+agG<(syL~WE?4BB;R z4jO90m>Fy{a_=0M#e{KZnhV2>+hD)ZZhO|*zxJHnlTPn%tc^hm86j#K|+o+Lgf*DVpzuJ)YETcH6cYvN7HZ>yu)||EcT}J;RP8b^_ zo-QbSSQ!QPLs{rr1>Ju{EKjPGXNNrH@#6=Ri)-1lr$tBLd6bJ1 zjm-t=0Mp((r9y4zzRMsh#P%Wa}Q+3=X@=Qjj5)Ppz2 z*QJ9j&;C=qRyeAZGl3N9gZ#PrdUH>%ooCalsX7YC%0(VzCi+DhQEh)jP?aq$lJ^P* z#6C_X`p+;M3C;I<-eK6SJIwD21Wg6d3L_U-u%^z(^vxQvHR@xs_%v};Ja)13TaMM@ zVyYH4hxoAaQ{dUamwc&Lj&Rt)x9FAqKq9o3&8T|a_N44+2z4p_SkPo#=Oo9Gl;v?= zs107S=DLgB{39-RcW6rXglz>wB9~boraf<&ZL`7_{|fW;LA4ZU?)8(!SI*l6`s`dd z!wp|f?3^AbPw9J=1ciIm;Cl?)*gAEVYAuDjyHwIV&}}MlQ0ndy)K{B8pmm7XSiv8% z1jr-wi_td|)YC~Qx}YbuQUM4}2_h!g*T(WX#w~5_~9v<`7-|HuX@7g~+jCGs6axP(u9ilXl1EmwiVZ4xUXBlGE1HlJ* zBfcCX*0@B6n}Lxmu4UBoZL2k&$+ZbL51K~hwAouhNKyK1Rkwq3jyh`aXFtQAaFnld z!nJC!^>KL6XwsFw(eJ?OUw)+j@W4`_LM$T`H##!==2iCWso^&yY+Vjicz0psBDl8s z`rJhiwwbiZ7bYfskC6Ab+PDy)D)gq6R|GPxZbbT9OPL4G&GFrcgF;wl^c01z){w3S zRpq^0n7s2DHIzAIEAgrbRZgZTY+h|K~%qbOmG_RPZs^Fju!QT63?7!EC-D{IlQZ8ER zoUa<-v=oGcT?VY&K3>;OY12;@^Aajf?haD{Z4tg*a?mCt@JZzfDarM732C)Ap$hwl z&;S|ef;KENX@^m5Zyv8eoE1$a;vlqcl~inZ?on+qE!mUClO9ag;#k&V%+FuMvcCz^ z)Qn+vtWTT)X3p6cZ|n5U`)*3Gw$oUeb}-UIKaf_5a&WMz=Cw&^bKp;|_Tf+2lBB{I2(ij@dO+tmsAk)ES%Qs9}9FgRB2?kj{B5v07qRLH#^-lB*v*9o`n x_x+F0tyT0H1EhtFtP*q?@Xwb7?}7>NE6MoxD+8p3{3lWg8R$6y&0305>UV5r1;PLT literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/control_data/transform/TransformWithPathArcCenters.npz b/tests/test_graphical_units/control_data/transform/TransformWithPathArcCenters.npz new file mode 100644 index 0000000000000000000000000000000000000000..3a0bc9a554365e343cf34ff243057fb89bd21c68 GIT binary patch literal 4253 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 literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/test_transform.py b/tests/test_graphical_units/test_transform.py index aa13c3dcc9..aa5e740470 100644 --- a/tests/test_graphical_units/test_transform.py +++ b/tests/test_graphical_units/test_transform.py @@ -163,3 +163,39 @@ def test_ReplacementTransform(scene): v2 = Vector() v3 = Line() scene.play(ReplacementTransform(VGroup(v1, v2), v3)) + + +@frames_comparison(last_frame=False) +def test_TransformWithPathFunc(scene): + dots_start = VGroup(*[Dot(LEFT, color=BLUE), Dot(3 * RIGHT, color=RED)]) + dots_end = VGroup(*[Dot(LEFT + 2 * DOWN, color=BLUE), Dot(2 * UP, color=RED)]) + scene.play(Transform(dots_start, dots_end, path_func=clockwise_path())) + + +@frames_comparison(last_frame=False) +def test_TransformWithPathArcCenters(scene): + dots_start = VGroup(*[Dot(LEFT, color=BLUE), Dot(3 * RIGHT, color=RED)]) + dots_end = VGroup(*[Dot(LEFT + 2 * DOWN, color=BLUE), Dot(2 * UP, color=RED)]) + scene.play( + Transform( + dots_start, + dots_end, + path_arc=2 * PI, + path_arc_centers=ORIGIN, + ) + ) + + +@frames_comparison(last_frame=False) +def test_TransformWithConflictingPaths(scene): + dots_start = VGroup(*[Dot(LEFT, color=BLUE), Dot(3 * RIGHT, color=RED)]) + dots_end = VGroup(*[Dot(LEFT + 2 * DOWN, color=BLUE), Dot(2 * UP, color=RED)]) + scene.play( + Transform( + dots_start, + dots_end, + path_func=clockwise_path(), + path_arc=2 * PI, + path_arc_centers=ORIGIN, + ) + ) From 3ae46a4c133f87461e63508406786fba399bd67d Mon Sep 17 00:00:00 2001 From: Simeon Widdis Date: Sun, 19 Jun 2022 02:39:54 -0600 Subject: [PATCH 075/555] Fix TransformMatchingAbstractBase Mobject leaks (#2826) * Clean up ghost Mobject in TransformMatchingAbstractBase TransformMatchingAbstractBase does Fade transitions when no mismatch handling is defined, the current implementation leaves an invisible object behind when it's applied. This commit adds handling to clean it up. Co-Authored-By: Andrew Yang <4412798+AndrewYY@users.noreply.github.com> * Add tests for TransformMatching default mismatch behavior * Document new interpolation behavior * Add TransformMatching code review changes * Revert "Add TransformMatching code review changes" This reverts commit 6de61ecbbaf1d480f8042467fd1a4ac4e7879be0. * Revert "Revert "Add TransformMatching code review changes"" Mistakes were made, we need to revert deeper. This reverts commit 7bd9f4ebea823a5f3aaf5f699e1f6b487f88eade. Co-authored-by: Andrew Yang <4412798+AndrewYY@users.noreply.github.com> Co-authored-by: Tristan Schulz --- manim/animation/transform_matching_parts.py | 8 ++++-- .../TransformMatchingDisplaysCorrect.npz | Bin 0 -> 32994 bytes .../TransformMatchingLeavesOneObject.npz | Bin 0 -> 5687 bytes .../test_transform_matching_parts.py | 27 ++++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingDisplaysCorrect.npz create mode 100644 tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingLeavesOneObject.npz create mode 100644 tests/test_graphical_units/test_transform_matching_parts.py diff --git a/manim/animation/transform_matching_parts.py b/manim/animation/transform_matching_parts.py index 7cac274777..85fe5b4aa1 100644 --- a/manim/animation/transform_matching_parts.py +++ b/manim/animation/transform_matching_parts.py @@ -122,6 +122,7 @@ def __init__( fade_source.add(source_map[key]) for key in set(target_map).difference(source_map): fade_target.add(target_map[key]) + fade_target_copy = fade_target.copy() if transform_mismatches: if "replace_mobject_with_target_in_scene" not in kwargs: @@ -132,12 +133,12 @@ def __init__( else: anims.append(FadeOut(fade_source, target_position=fade_target, **kwargs)) anims.append( - FadeIn(fade_target.copy(), target_position=fade_target, **kwargs), + FadeIn(fade_target_copy, target_position=fade_target, **kwargs), ) super().__init__(*anims) - self.to_remove = mobject + self.to_remove = [mobject, fade_target_copy] self.to_add = target_mobject def get_shape_map(self, mobject: Mobject) -> dict: @@ -153,10 +154,11 @@ def get_shape_map(self, mobject: Mobject) -> dict: return shape_map def clean_up_from_scene(self, scene: Scene) -> None: + # Interpolate all animations back to 0 to ensure source mobjects remain unchanged. for anim in self.animations: anim.interpolate(0) scene.remove(self.mobject) - scene.remove(self.to_remove) + scene.remove(*self.to_remove) scene.add(self.to_add) @staticmethod diff --git a/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingDisplaysCorrect.npz b/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingDisplaysCorrect.npz new file mode 100644 index 0000000000000000000000000000000000000000..01d1afb311b9f71196b58ac192a8f57454daae1f GIT binary patch literal 32994 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 Date: Sun, 19 Jun 2022 18:10:34 +0200 Subject: [PATCH 076/555] Add vectorized plotting functionality to improve performance (#2739) * enhancement(ParametricFunction, CoordinateSystem, Axes, NumberLine): vectorized coords_to_points,plot,plot_parametric_function; added Numberline:number_to_point_array * test(plot_log_x_axis_vectorized): added test for vectorized plotting * extend(angle_of_vector): added test for angle_of_vector with ndarray as input * fix(frames_comparison): fix naming of test data to be able to write and read the file name because ':' is forbidden * test(plot): add more vectorized tests, added use_vectorized fixture to make life simpler * fix(coordinate_system,number_line,scale): vectorizing functions and fixing bugs * enhancement(NumberLine): vectorized number_to_point and added test * enhancement(NumberLine): added tests for point_to_number, added example to doc * enhancement(CoordinateSystem): added test for coords_to_point_vectorized and vectorized coords_to_point * enhancement(Axes): vectorized point_to_coords and added tests * Minor formatting fixes and doctests * fixed flake hint with generator expression * Create __init__.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update documentation for antiderivative * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Raghav Goel * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl * Update manim/mobject/graphing/functions.py Co-authored-by: Benjamin Hackl * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl * fixed wrong indentation * stop doctest from leaking change in global config * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * change code block type * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Raghav Goel Co-authored-by: Benjamin Hackl --- manim/_config/utils.py | 15 ++- manim/mobject/graphing/coordinate_systems.py | 112 ++++++++++++++++-- manim/mobject/graphing/functions.py | 17 ++- manim/mobject/graphing/number_line.py | 44 +++++-- manim/mobject/graphing/scale.py | 13 +- manim/mobject/types/vectorized_mobject.py | 3 + manim/utils/space_ops.py | 9 +- manim/utils/testing/frames_comparison.py | 2 +- tests/test_coordinate_system.py | 48 ++++++++ tests/test_graphical_units/conftest.py | 5 + .../plot_log_x_axis_vectorized.npz | Bin 0 -> 6666 bytes ...mann_rectangles_use_vectorized[False].npz} | Bin ...iemann_rectangles_use_vectorized[True].npz | Bin 0 -> 18863 bytes ...erivative_graph_use_vectorized[False].npz} | Bin ..._derivative_graph_use_vectorized[True].npz | Bin 0 -> 31734 bytes ... plot_functions_use_vectorized[False].npz} | Bin .../plot_functions_use_vectorized[True].npz | Bin 0 -> 10390 bytes ...lot.npz => plot_use_vectorized[False].npz} | Bin .../plot/plot_use_vectorized[True].npz | Bin 0 -> 13525 bytes tests/test_graphical_units/test_axes.py | 31 +++-- .../test_coordinate_systems.py | 14 +++ tests/test_number_line.py | 55 +++++++++ tests/test_space_ops.py | 8 +- 23 files changed, 336 insertions(+), 40 deletions(-) create mode 100644 tests/test_graphical_units/control_data/coordinate_system/plot_log_x_axis_vectorized.npz rename tests/test_graphical_units/control_data/plot/{get_riemann_rectangles.npz => get_riemann_rectangles_use_vectorized[False].npz} (100%) create mode 100644 tests/test_graphical_units/control_data/plot/get_riemann_rectangles_use_vectorized[True].npz rename tests/test_graphical_units/control_data/plot/{plot_derivative_graph.npz => plot_derivative_graph_use_vectorized[False].npz} (100%) create mode 100644 tests/test_graphical_units/control_data/plot/plot_derivative_graph_use_vectorized[True].npz rename tests/test_graphical_units/control_data/plot/{plot_functions.npz => plot_functions_use_vectorized[False].npz} (100%) create mode 100644 tests/test_graphical_units/control_data/plot/plot_functions_use_vectorized[True].npz rename tests/test_graphical_units/control_data/plot/{plot.npz => plot_use_vectorized[False].npz} (100%) create mode 100644 tests/test_graphical_units/control_data/plot/plot_use_vectorized[True].npz diff --git a/manim/_config/utils.py b/manim/_config/utils.py index cedf0a9fcc..98bc88609b 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -150,12 +150,22 @@ class ManimConfig(MutableMapping): Examples -------- + We use a copy of the global configuration object in the following + examples for the sake of demonstration; you can skip these lines + and just import ``config`` directly if you actually want to modify + the configuration: + + .. code-block:: pycon + + >>> from manim import config as global_config + >>> config = global_config.copy() + Each config option allows for dict syntax and attribute syntax. For example, the following two lines are equivalent, .. code-block:: pycon - >>> from manim import config, WHITE + >>> from manim import WHITE >>> config.background_color = WHITE >>> config["background_color"] = WHITE @@ -1326,7 +1336,8 @@ def get_dir(self, key: str, **kwargs: str) -> Path: .. code-block:: pycon - >>> from manim import config + >>> from manim import config as globalconfig + >>> config = globalconfig.copy() >>> config.tex_dir '{media_dir}/Tex' >>> config.media_dir diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 8b5e7cd325..73e398bbed 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -629,6 +629,7 @@ def plot( self, function: Callable[[float], float], x_range: Sequence[float] | None = None, + use_vectorized: bool = False, **kwargs, ): """Generates a curve based on a function. @@ -639,6 +640,9 @@ def plot( The function used to construct the :class:`~.ParametricFunction`. x_range The range of the curve along the axes. ``x_range = [x_min, x_max, x_step]``. + use_vectorized + Whether to pass in the generated t value array to the function. Only use this if your function supports it. + Output should be a numpy array of shape ``[y_0, y_1, ...]`` kwargs Additional parameters to be passed to :class:`~.ParametricFunction`. @@ -714,6 +718,7 @@ def log_func(x): lambda t: self.coords_to_point(t, function(t)), t_range=t_range, scaling=self.x_axis.scaling, + use_vectorized=use_vectorized, **kwargs, ) graph.underlying_function = function @@ -767,10 +772,12 @@ def construct(self): ) return graph - def plot_parametric_curve(self, function, **kwargs): + def plot_parametric_curve(self, function, use_vectorized=False, **kwargs): dim = self.dimension graph = ParametricFunction( - lambda t: self.coords_to_point(*function(t)[:dim]), **kwargs + lambda t: self.coords_to_point(*function(t)[:dim]), + use_vectorized=use_vectorized, + **kwargs, ) graph.underlying_function = function return graph @@ -1342,6 +1349,7 @@ def plot_antiderivative_graph( graph: ParametricFunction, y_intercept: float = 0, samples: int = 50, + use_vectorized: bool = False, **kwargs, ): """Plots an antiderivative graph. @@ -1354,6 +1362,10 @@ def plot_antiderivative_graph( The y-value at which the graph intercepts the y-axis. samples The number of points to take the area under the graph. + use_vectorized + Whether to use the vectorized version of the antiderivative. This means + to pass in the generated t value array to the function. Only use this if your function supports it. + Output should be a numpy array of shape ``[y_0, y_1, ...]`` kwargs Any valid keyword argument of :class:`~.ParametricFunction`. @@ -1385,12 +1397,12 @@ def construct(self): """ def antideriv(x): - x_vals = np.linspace(0, x, samples) + x_vals = np.linspace(0, x, samples, axis=1 if use_vectorized else 0) f_vec = np.vectorize(graph.underlying_function) y_vals = f_vec(x_vals) return np.trapz(y_vals, x_vals) + y_intercept - return self.plot(antideriv, **kwargs) + return self.plot(antideriv, use_vectorized=use_vectorized, **kwargs) def get_secant_slope_group( self, @@ -1829,7 +1841,9 @@ def _create_axis( axis.shift(-axis.number_to_point(self._origin_shift([axis.x_min, axis.x_max]))) return axis - def coords_to_point(self, *coords: Sequence[float]) -> np.ndarray: + def coords_to_point( + self, *coords: Sequence[float] | Sequence[Sequence[float]] | np.ndarray + ) -> np.ndarray: """Accepts coordinates from the axes and returns a point with respect to the scene. Parameters @@ -1837,13 +1851,39 @@ def coords_to_point(self, *coords: Sequence[float]) -> np.ndarray: coords The coordinates. Each coord is passed as a separate argument: ``ax.coords_to_point(1, 2, 3)``. + Also accepts a list of coordinates + + ``ax.coords_to_point( [x_0, x_1, ...], [y_0, y_1, ...], ... )`` + + ``ax.coords_to_point( [[x_0, y_0, z_0], [x_1, y_1, z_1]] )`` + Returns ------- np.ndarray A point with respect to the scene's coordinate system. + The shape of the array will be similar to the shape of the input. Examples -------- + + .. code-block:: pycon + + >>> from manim import Axes + >>> import numpy as np + >>> ax = Axes() + >>> np.around(ax.coords_to_point(1, 0, 0), 2) + array([0.86, 0. , 0. ]) + >>> np.around(ax.coords_to_point([[0, 1], [1, 1], [1, 0]]), 2) + array([[0. , 0.75, 0. ], + [0.86, 0.75, 0. ], + [0.86, 0. , 0. ]]) + >>> np.around( + ... ax.coords_to_point([0, 1, 1], [1, 1, 0]), 2 + ... ) # Transposed version of the above + array([[0. , 0.86, 0.86], + [0.75, 0.75, 0. ], + [0. , 0. , 0. ]]) + .. manim:: CoordsToPointExample :save_last_frame: @@ -1865,26 +1905,68 @@ def construct(self): origin = self.x_axis.number_to_point( self._origin_shift([self.x_axis.x_min, self.x_axis.x_max]), ) - result = np.array(origin) - for axis, coord in zip(self.get_axes(), coords): - result += axis.number_to_point(coord) - origin - return result - def point_to_coords(self, point: Sequence[float]) -> tuple[float]: + coords = np.asarray(coords) + + # if called like coords_to_point(1, 2, 3), then coords is a 1x3 array + transposed = False + if coords.ndim == 1: + # original implementation of coords_to_point for performance in the legacy case + result = np.array(origin) + for axis, number in zip(self.get_axes(), coords): + result += axis.number_to_point(number) - origin + return result + # if called like coords_to_point([1, 2, 3],[4, 5, 6]), then it shall be used as [1,4], [2,5], [3,6] and return the points as ([x_0,x_1],[y_0,y_1],[z_0,z_1]) + elif coords.ndim == 2: + coords = coords.T + transposed = True + # if called like coords_to_point(np.array([[1, 2, 3],[4,5,6]])), reduce dimension by 1 + elif coords.ndim == 3: + coords = np.squeeze(coords) + # else the coords is a Nx1, Nx2, Nx3 array so we do not need to modify the array + + points = origin + np.sum( + [ + axis.number_to_point(number) - origin + for number, axis in zip(coords.T, self.get_axes()) + ], + axis=0, + ) + # if called with single coord, then return a point instead of a list of points + if transposed: + return points.T + return points + + def point_to_coords(self, point: Sequence[float]) -> np.ndarray: """Accepts a point from the scene and returns its coordinates with respect to the axes. Parameters ---------- point The point, i.e. ``RIGHT`` or ``[0, 1, 0]``. + Also accepts a list of points as ``[RIGHT, [0, 1, 0]]``. Returns ------- - Tuple[float] - The coordinates on the axes, i.e. ``(4.0, 7.0)``. + np.ndarray[float] + The coordinates on the axes, i.e. ``[4.0, 7.0]``. + Or a list of coordinates if `point` is a list of points. Examples -------- + + .. code-block:: pycon + + >>> from manim import Axes, RIGHT + >>> import numpy as np + >>> ax = Axes(x_range=[0, 10, 2]) + >>> np.around(ax.point_to_coords(RIGHT), 2) + array([5.83, 0. ]) + >>> np.around(ax.point_to_coords([[0, 0, 1], [1, 0, 0]]), 2) + array([[5. , 0. ], + [5.83, 0. ]]) + + .. manim:: PointToCoordsExample :save_last_frame: @@ -1902,7 +1984,11 @@ def construct(self): self.add(ax, circ, label, Dot(circ.get_right())) """ - return tuple(axis.point_to_number(point) for axis in self.get_axes()) + point = np.asarray(point) + result = np.asarray([axis.point_to_number(point) for axis in self.get_axes()]) + if point.ndim == 2: + return result.T + return result def get_axes(self) -> VGroup: """Gets the axes. diff --git a/manim/mobject/graphing/functions.py b/manim/mobject/graphing/functions.py index e937420570..4e40d463bb 100644 --- a/manim/mobject/graphing/functions.py +++ b/manim/mobject/graphing/functions.py @@ -31,6 +31,11 @@ class ParametricFunction(VMobject, metaclass=ConvertToOpenGL): use_smoothing Whether to interpolate between the points of the function after they have been created. (Will have odd behaviour with a low number of points) + use_vectorized + Whether to pass in the generated t value array to the function as ``[t_0, t_1, ...]``. + Only use this if your function supports it. Output should be a numpy array + of shape ``[[x_0, x_1, ...], [y_0, y_1, ...], [z_0, z_1, ...]]`` but ``z`` can + also be 0 if the Axes is 2D discontinuities Values of t at which the function experiences discontinuity. dt @@ -98,6 +103,7 @@ def __init__( dt: float = 1e-8, discontinuities: Iterable[float] | None = None, use_smoothing: bool = True, + use_vectorized: bool = False, **kwargs, ): self.function = function @@ -110,6 +116,7 @@ def __init__( self.dt = dt self.discontinuities = discontinuities self.use_smoothing = use_smoothing + self.use_vectorized = use_vectorized self.t_min, self.t_max, self.t_step = t_range super().__init__(**kwargs) @@ -147,7 +154,15 @@ def generate_points(self): self.scaling.function(t2), ], ) - points = np.array([self.function(t) for t in t_range]) + + if self.use_vectorized: + x, y, z = self.function(t_range) + if not isinstance(z, np.ndarray): + z = np.zeros_like(x) + points = np.stack(zip(x, y, z), axis=0) + else: + points = np.array([self.function(t) for t in t_range]) + self.start_new_path(points[0]) self.add_points_as_corners(points[1:]) if self.use_smoothing: diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index 78f61e4b60..cafea17c9b 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -324,24 +324,40 @@ def get_tick_range(self) -> np.ndarray: return self.scaling.function(tick_range) - def number_to_point(self, number: float) -> np.ndarray: + def number_to_point(self, number: float | np.ndarray) -> np.ndarray: """Accepts a value along the number line and returns a point with respect to the scene. Parameters ---------- number - The value to be transformed into a coordinate. + The value to be transformed into a coordinate. Or a list of values. Returns ------- np.ndarray - A point with respect to the scene's coordinate system. + A point with respect to the scene's coordinate system. Or a list of points. + + Examples + -------- + + >>> from manim import NumberLine + >>> number_line = NumberLine() + >>> number_line.number_to_point(0) + array([0., 0., 0.]) + >>> number_line.number_to_point(1) + array([1., 0., 0.]) + >>> number_line.number_to_point([1,2,3]) + array([[1., 0., 0.], + [2., 0., 0.], + [3., 0., 0.]]) """ - + number = np.asarray(number) + scalar = number.ndim == 0 number = self.scaling.inverse_function(number) - alpha = float(number - self.x_range[0]) / (self.x_range[1] - self.x_range[0]) - val = interpolate(self.get_start(), self.get_end(), alpha) + alphas = (number - self.x_range[0]) / (self.x_range[1] - self.x_range[0]) + alphas = float(alphas) if scalar else np.vstack(alphas) + val = interpolate(self.get_start(), self.get_end(), alphas) return val def point_to_number(self, point: Sequence[float]) -> float: @@ -357,13 +373,27 @@ def point_to_number(self, point: Sequence[float]) -> float: ------- float A float representing a value along the number line. + + Examples + -------- + + >>> from manim import NumberLine + >>> number_line = NumberLine() + >>> number_line.point_to_number((0,0,0)) + 0.0 + >>> number_line.point_to_number((1,0,0)) + 1.0 + >>> number_line.point_to_number([[0.5,0,0],[1,0,0],[1.5,0,0]]) + array([0.5, 1. , 1.5]) + """ + point = np.asarray(point) start, end = self.get_start_and_end() unit_vect = normalize(end - start) proportion = np.dot(point - start, unit_vect) / np.dot(end - start, unit_vect) return interpolate(self.x_min, self.x_max, proportion) - def n2p(self, number: float) -> np.ndarray: + def n2p(self, number: float | np.ndarray) -> np.ndarray: """Abbreviation for :meth:`~.NumberLine.number_to_point`.""" return self.number_to_point(number) diff --git a/manim/mobject/graphing/scale.py b/manim/mobject/graphing/scale.py index 2aaae7a5a6..0e570a6a1a 100644 --- a/manim/mobject/graphing/scale.py +++ b/manim/mobject/graphing/scale.py @@ -3,6 +3,8 @@ import math from typing import TYPE_CHECKING, Any, Iterable +import numpy as np + __all__ = ["LogBase", "LinearBase"] from manim.mobject.text.numbers import Integer @@ -141,11 +143,18 @@ def function(self, value: float) -> float: def inverse_function(self, value: float) -> float: """Inverse of ``function``. The value must be greater than 0""" - if value <= 0: + if isinstance(value, np.ndarray): + condition = value.any() <= 0 + func = lambda value, base: np.log(value) / np.log(base) + else: + condition = value <= 0 + func = math.log + + if condition: raise ValueError( "log(0) is undefined. Make sure the value is in the domain of the function" ) - value = math.log(value, self.base) + value = func(value, self.base) return value def get_custom_labels( diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index fd2140ef3d..b524822dec 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -649,6 +649,9 @@ def add_cubic_bezier_curve( # TODO, check the len(self.points) % 4 == 0? self.append_points([anchor1, handle1, handle2, anchor2]) + def add_cubic_bezier_curves(self, curves): + self.append_points(curves.flatten()) + def add_cubic_bezier_curve_to( self, handle1: np.ndarray, diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 7f14c27500..d74a6dd593 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -301,7 +301,7 @@ def z_to_vector(vector: np.ndarray) -> np.ndarray: return np.array([axis_x, axis_y, axis_z]).T -def angle_of_vector(vector: Sequence[float]) -> float: +def angle_of_vector(vector: Sequence[float] | np.ndarray) -> float: """Returns polar coordinate theta when vector is projected on xy plane. Parameters @@ -314,6 +314,13 @@ def angle_of_vector(vector: Sequence[float]) -> float: float The angle of the vector projected. """ + if isinstance(vector, np.ndarray) and len(vector.shape) > 1: + if vector.shape[0] < 2: + raise ValueError("Vector must have the correct dimensions. (2, n)") + c_vec = np.empty(vector.shape[1], dtype=np.complex128) + c_vec.real = vector[0] + c_vec.imag = vector[1] + return np.angle(c_vec) return np.angle(complex(*vector[:2])) diff --git a/manim/utils/testing/frames_comparison.py b/manim/utils/testing/frames_comparison.py index 05a771f5e5..775219a87c 100644 --- a/manim/utils/testing/frames_comparison.py +++ b/manim/utils/testing/frames_comparison.py @@ -94,7 +94,7 @@ def wrapper(*args, request: FixtureRequest, tmp_path, **kwargs): # Example: if "length" is parametrized from 0 to 20, the kwargs # will be once with {"length" : 1}, etc. test_name_with_param = test_name + "_".join( - [f"{str(tup[0])}:{str(tup[1])}" for tup in kwargs.items()], + f"_{str(tup[0])}[{str(tup[1])}]" for tup in kwargs.items() ) config_tests = _config_test(last_frame) diff --git a/tests/test_coordinate_system.py b/tests/test_coordinate_system.py index e463ef1669..c01946322a 100644 --- a/tests/test_coordinate_system.py +++ b/tests/test_coordinate_system.py @@ -102,6 +102,19 @@ def test_point_to_coords(): np.testing.assert_array_equal(coords, (7.0833, 2.6667)) +def test_point_to_coords_vectorized(): + ax = Axes(x_range=[0, 10, 2]) + circ = Circle(radius=0.5).shift(UR * 2) + points = np.array( + [circ.get_right(), circ.get_left(), circ.get_bottom(), circ.get_top()] + ) + # get the coordinates of the circle with respect to the axes + expected = [np.around(ax.point_to_coords(point), decimals=4) for point in points] + actual = np.around(ax.point_to_coords(points), decimals=4) + + np.testing.assert_array_equal(expected, actual) + + def test_coords_to_point(): ax = Axes() @@ -110,6 +123,41 @@ def test_coords_to_point(): np.testing.assert_array_equal(c2p_coord, (1.7143, 1.5, 0)) +def test_coords_to_point_vectorized(): + plane = NumberPlane(x_range=[2, 4]) + + origin = plane.x_axis.number_to_point( + plane._origin_shift([plane.x_axis.x_min, plane.x_axis.x_max]), + ) + + def ref_func(*coords): + result = np.array(origin) + for axis, number in zip(plane.get_axes(), coords): + result += axis.number_to_point(number) - origin + return result + + coords = [[1], [1, 2], [2, 2], [3, 4]] + + print(f"\n\nTesting coords_to_point {coords}") + expected = np.round([ref_func(*coord) for coord in coords], 4) + actual1 = np.round([plane.coords_to_point(*coord) for coord in coords], 4) + coords[0] = [ + 1, + 0, + ] # Extend the first coord because you can't vectorize items with different dimensions + actual2 = np.round( + plane.coords_to_point(coords), 4 + ) # Test [x_0,y_0,z_0], [x_1,y_1,z_1], ... + actual3 = np.round( + plane.coords_to_point(*np.array(coords).T), 4 + ) # Test [x_0,x_1,...], [y_0,y_1,...], ... + print(actual3) + + np.testing.assert_array_equal(expected, actual1) + np.testing.assert_array_equal(expected, actual2) + np.testing.assert_array_equal(expected, actual3.T) + + def test_input_to_graph_point(): ax = Axes() curve = ax.plot(lambda x: np.cos(x)) diff --git a/tests/test_graphical_units/conftest.py b/tests/test_graphical_units/conftest.py index 01bec579d8..9a00b02648 100644 --- a/tests/test_graphical_units/conftest.py +++ b/tests/test_graphical_units/conftest.py @@ -6,3 +6,8 @@ @pytest.fixture def show_diff(request): return request.config.getoption("show_diff") + + +@pytest.fixture(params=[True, False]) +def use_vectorized(request): + yield request.param diff --git a/tests/test_graphical_units/control_data/coordinate_system/plot_log_x_axis_vectorized.npz b/tests/test_graphical_units/control_data/coordinate_system/plot_log_x_axis_vectorized.npz new file mode 100644 index 0000000000000000000000000000000000000000..f215752d0d7be046e06f312d91990e2ca37c6399 GIT binary patch literal 6666 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 G|NaSz8DcE} literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/control_data/plot/get_riemann_rectangles.npz b/tests/test_graphical_units/control_data/plot/get_riemann_rectangles_use_vectorized[False].npz similarity index 100% rename from tests/test_graphical_units/control_data/plot/get_riemann_rectangles.npz rename to tests/test_graphical_units/control_data/plot/get_riemann_rectangles_use_vectorized[False].npz diff --git a/tests/test_graphical_units/control_data/plot/get_riemann_rectangles_use_vectorized[True].npz b/tests/test_graphical_units/control_data/plot/get_riemann_rectangles_use_vectorized[True].npz new file mode 100644 index 0000000000000000000000000000000000000000..f756d25445f7471000171a802bcfd4d7bc2acb64 GIT binary patch literal 18863 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 literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/control_data/plot/plot_derivative_graph.npz b/tests/test_graphical_units/control_data/plot/plot_derivative_graph_use_vectorized[False].npz similarity index 100% rename from tests/test_graphical_units/control_data/plot/plot_derivative_graph.npz rename to tests/test_graphical_units/control_data/plot/plot_derivative_graph_use_vectorized[False].npz diff --git a/tests/test_graphical_units/control_data/plot/plot_derivative_graph_use_vectorized[True].npz b/tests/test_graphical_units/control_data/plot/plot_derivative_graph_use_vectorized[True].npz new file mode 100644 index 0000000000000000000000000000000000000000..bf393eb228aa881a5c285f8c53c79675bf5a2c6d GIT binary patch literal 31734 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

    @(i3qS^AB{ev*RRC~{Mie80K|thbKq_~ynE(N)g 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 literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/control_data/plot/plot.npz b/tests/test_graphical_units/control_data/plot/plot_use_vectorized[False].npz similarity index 100% rename from tests/test_graphical_units/control_data/plot/plot.npz rename to tests/test_graphical_units/control_data/plot/plot_use_vectorized[False].npz diff --git a/tests/test_graphical_units/control_data/plot/plot_use_vectorized[True].npz b/tests/test_graphical_units/control_data/plot/plot_use_vectorized[True].npz new file mode 100644 index 0000000000000000000000000000000000000000..b886543329425c205422fbcd2af8556a84c68ea4 GIT binary patch literal 13525 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 Date: Sun, 19 Jun 2022 09:59:33 -0700 Subject: [PATCH 077/555] Migrate from os.path to pathlib in SVGMobject and other locations (#2687) * fixed style * fixed changes * Update group.py * Remove extra `Path` call Co-authored-by: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> * Remove unused context manager Sorry, just committing here myself so that the PR can be reviewed and merged. This is the only thing left to alter so thought I might as well do it myself. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Use `with_suffix` * Remove extra `Path` calls Co-authored-by: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> Co-authored-by: Darylgolden Co-authored-by: Raghav Goel Co-authored-by: Raghav Goel Co-authored-by: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/cli/cfg/group.py | 19 +++++++++++-------- manim/mobject/svg/svg_mobject.py | 29 +++++++++++++++-------------- manim/mobject/text/text_mobject.py | 24 ++++++++++++------------ manim/utils/tex_file_writing.py | 23 ++++++++++++----------- 4 files changed, 50 insertions(+), 45 deletions(-) diff --git a/manim/cli/cfg/group.py b/manim/cli/cfg/group.py index 474de60f92..eea9185e32 100644 --- a/manim/cli/cfg/group.py +++ b/manim/cli/cfg/group.py @@ -9,6 +9,7 @@ import os from ast import literal_eval +from pathlib import Path import click import cloup @@ -257,10 +258,11 @@ def show(): @cfg.command(context_settings=cli_ctx_settings) -@click.option("-d", "--directory", default=os.getcwd()) +@click.option("-d", "--directory", default=Path.cwd()) @click.pass_context def export(ctx, directory): - if os.path.abspath(directory) == os.path.abspath(os.getcwd()): + directory_path = Path(directory) + if directory_path.absolute == Path.cwd().absolute: console.print( """You are reading the config from the same directory you are exporting to. This means that the exported config will overwrite the config for this directory. @@ -272,13 +274,14 @@ def export(ctx, directory): else: proceed = True if proceed: - if not os.path.isdir(directory): + if not directory_path.is_dir(): console.print(f"Creating folder: {directory}.", style="red bold") - os.mkdir(directory) - with open(os.path.join(directory, "manim.cfg"), "w") as outpath: - ctx.invoke(write) - from_path = os.path.join(os.getcwd(), "manim.cfg") - to_path = os.path.join(directory, "manim.cfg") + directory_path.mkdir(parents=True) + + ctx.invoke(write) + from_path = Path.cwd() / "manim.cfg" + to_path = directory_path / "manim.cfg" + console.print(f"Exported final Config at {from_path} to {to_path}.") else: console.print("Aborted...", style="red bold") diff --git a/manim/mobject/svg/svg_mobject.py b/manim/mobject/svg/svg_mobject.py index b5ebd856d7..ec838a7a10 100644 --- a/manim/mobject/svg/svg_mobject.py +++ b/manim/mobject/svg/svg_mobject.py @@ -9,6 +9,7 @@ import re import string import warnings +from pathlib import Path from xml.dom.minidom import Element as MinidomElement from xml.dom.minidom import parse as minidom_parse @@ -46,7 +47,7 @@ def construct(self): Parameters -------- - file_name : :class:`str` + file_name : :class:`str` or :class:`pathlib.Path` The file's path name. When possible, the full path is preferred but a relative path may be used as well. Relative paths are relative to the directory specified by the `--assets_dir` command line argument. @@ -87,7 +88,7 @@ def __init__( ): self.def_map = {} - self.file_name = file_name or self.file_name + self.file_name = Path(file_name) self._ensure_valid_file() self.should_center = should_center self.unpack_groups = unpack_groups @@ -124,28 +125,28 @@ def _ensure_valid_file(self): if self.file_name is None: raise Exception("Must specify file for SVGMobject") - if os.path.exists(self.file_name): + if self.file_name.exists(): self.file_path = self.file_name return - relative = os.path.join(os.getcwd(), self.file_name) - if os.path.exists(relative): + relative = Path.cwd() / self.file_name + if relative.exists(): self.file_path = relative return possible_paths = [ - os.path.join(config.get_dir("assets_dir"), self.file_name), - os.path.join(config.get_dir("assets_dir"), self.file_name + ".svg"), - os.path.join(config.get_dir("assets_dir"), self.file_name + ".xdv"), - self.file_name, - self.file_name + ".svg", - self.file_name + ".xdv", + config.get_dir("assets_dir") / self.file_name, + config.get_dir("assets_dir") / self.file_name.with_suffix(".svg"), + config.get_dir("assets_dir") / self.file_name.with_suffix(".xdv"), + self.file_path, + self.file_path.with_suffix(".svg"), + self.file_path.with_suffix(".xdv"), ] for path in possible_paths: - if os.path.exists(path): + if path.exists(): self.file_path = path return - error = f"From: {os.getcwd()}, could not find {self.file_name} at either of these locations: {possible_paths}" + error = f"From: {Path.cwd()}, could not find {self.file_name} at either of these locations: {possible_paths}" raise OSError(error) def generate_points(self): @@ -153,7 +154,7 @@ def generate_points(self): the SVGMobject's points from XML tags, populating self.mobjects, and any submobjects within self.mobjects. """ - doc = minidom_parse(self.file_path) + doc = minidom_parse(str(self.file_path)) for node in doc.childNodes: if not isinstance(node, MinidomElement) or node.tagName != "svg": continue diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 3b12db559a..2ed192ecfd 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -752,13 +752,13 @@ def _text2svg(self, color: Color): line_spacing /= TEXT2SVG_ADJUSTMENT_FACTOR dir_name = config.get_dir("text_dir") - if not os.path.exists(dir_name): - os.makedirs(dir_name) + if not dir_name.is_dir(): + dir_name.mkdir(parents=True) hash_name = self._text2hash(color) - file_name = os.path.join(dir_name, hash_name) + ".svg" + file_name = dir_name / (hash_name + ".svg") - if os.path.exists(file_name): - svg_file = file_name + if file_name.exists(): + svg_file = str(file_name.resolve()) else: settings = self._text2settings(color) width = config["pixel_width"] @@ -769,7 +769,7 @@ def _text2svg(self, color: Color): size, line_spacing, self.disable_ligatures, - file_name, + str(file_name.resolve()), START_X, START_Y, width, @@ -1245,12 +1245,12 @@ def _text2svg(self, color: Color | None): line_spacing /= TEXT2SVG_ADJUSTMENT_FACTOR dir_name = config.get_dir("text_dir") - if not os.path.exists(dir_name): - os.makedirs(dir_name) + if not dir_name.exists(): + dir_name.mkdir(parents=True) hash_name = self._text2hash(color) - file_name = os.path.join(dir_name, hash_name) + ".svg" - if os.path.exists(file_name): - svg_file = file_name + file_name = dir_name / (hash_name + ".svg") + if file_name.exists(): + svg_file = str(file_name.resolve()) else: final_text = ( f'{self.text}' @@ -1266,7 +1266,7 @@ def _text2svg(self, color: Color | None): size, line_spacing, self.disable_ligatures, - file_name, + str(file_name.resolve()), START_X, START_Y, 600, # width diff --git a/manim/utils/tex_file_writing.py b/manim/utils/tex_file_writing.py index 8bdb0c3c44..d335691da3 100644 --- a/manim/utils/tex_file_writing.py +++ b/manim/utils/tex_file_writing.py @@ -79,18 +79,18 @@ def generate_tex_file(expression, environment=None, tex_template=None): output = tex_template.get_texcode_for_expression(expression) tex_dir = config.get_dir("tex_dir") - if not os.path.exists(tex_dir): - os.makedirs(tex_dir) + if not tex_dir.exists(): + tex_dir.mkdir() - result = os.path.join(tex_dir, tex_hash(output)) + ".tex" - if not os.path.exists(result): + result = Path(tex_dir) / (tex_hash(output) + ".tex") + if not result.exists(): logger.info( "Writing %(expression)s to %(path)s", {"expression": expression, "path": f"{result}"}, ) with open(result, "w", encoding="utf-8") as outfile: outfile.write(output) - return result + return result.as_posix() def tex_compilation_command(tex_compiler, output_format, tex_file, tex_dir): @@ -178,7 +178,7 @@ def compile_tex(tex_file, tex_compiler, output_format): result = Path(result).as_posix() tex_file = Path(tex_file).as_posix() tex_dir = Path(config.get_dir("tex_dir")).as_posix() - if not os.path.exists(result): + if not Path(result).exists(): command = tex_compilation_command( tex_compiler, output_format, @@ -215,9 +215,10 @@ def convert_to_svg(dvi_file, extension, page=1): Path to generated SVG file. """ result = dvi_file.replace(extension, ".svg") - result = Path(result).as_posix() + result = Path(result) + result_str = result.as_posix() dvi_file = Path(dvi_file).as_posix() - if not os.path.exists(result): + if not result.exists(): commands = [ "dvisvgm", "--pdf" if extension == ".pdf" else "", @@ -225,14 +226,14 @@ def convert_to_svg(dvi_file, extension, page=1): f'"{dvi_file}"', "-n", "-v 0", - "-o " + f'"{result}"', + "-o " + f'"{result_str}"', ">", os.devnull, ] os.system(" ".join(commands)) # if the file does not exist now, this means conversion failed - if not os.path.exists(result): + if not result.exists(): raise ValueError( f"Your installation does not support converting {extension} files to SVG." f" Consider updating dvisvgm to at least version 2.4." @@ -240,7 +241,7 @@ def convert_to_svg(dvi_file, extension, page=1): f" https://docs.manim.community/en/stable/installation/troubleshooting.html", ) - return result + return result_str def print_all_tex_errors(log_file, tex_compiler, tex_file): From b5681fd905ed053ce1886e9a71f868313ea4eef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Manr=C3=ADquez=20Novoa?= <49853152+chopan050@users.noreply.github.com> Date: Mon, 20 Jun 2022 15:48:56 -0400 Subject: [PATCH 078/555] fix: fixed bad text slicing for Paragraph's lines (#2721) * fix: fixed bad text slicing for Paragraph's lines Inside Paragraph's _gen_chars method, a bad string slicing caused the text's characters to be obtained in an incorrect order. This would cause chars (and thus self.chars and self.lines in __init__) to store incorrect values. If Paragraph's alignment parameter was None, nothing wrong seemed to happen, but if alignment was 'left', 'center or 'right', the text's lines would not display correctly. This happened because the slicing was of the form [begin : begin + string_length + 1]. This bug was fixed by changing it to [begin : begin + char_count], where char_count is the number of characters in the corresponding string which are not " ", "\n" or "\t". I've also cleaned __init__'s code: - There was a redundant fragment of code which did exactly the same thing as _gen_chars, storing data in chars_lines_text_list. I deleted this code and used self.chars instead. - lines_str joins the text strings with '\n', but then lines_str_list split lines_str again, with '\n' as delimiter. I rewrote lines_str_list as just list(text). - self.lines is a list which essentially stores list(self.chars) as its first element. The original code used a for loop to append self.chars' lines, one by one, to self.lines[0]. I replaced this for loop with list(self.chars). - self.lines' second element was rewritten as a repetition of [self.alignment], self.chars.__len()__ times. - I replaced the for loop used to append the line centers to self.lines_initial_positions, and instead used [line.get_center() for line in self.lines[0]]. * revert: reverted lines_str and lines_str_list changes * fix: added Paragraph.consider_spaces_as_chars to fix issue * fix: changed `config` kwargs name to `kwargs` Using `config` as a name for keyword arguments in `Paragraph.__init__` is inconsistent with the use of `kwargs` everywhere else and also shadows the `config` global variable, which is why this variable was renamed as `kwargs`. * refactor: changed `var.__len__()` to `len(var)` Changed 8 appearances (1 in `remove_invisible_chars`, 6 in `Paragraph` and 1 in `Text`) of magic method `__len__` (as in `var.__len__()`) to `len(var)`. * refactor: changed docstrings and added type hints * fix: changed space char hardcoding to isspace() string method Co-authored-by: Tristan Schulz --- manim/mobject/text/text_mobject.py | 146 ++++++++++++++--------------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 2ed192ecfd..9d4aeca731 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -79,12 +79,12 @@ def construct(self): TEXT2SVG_ADJUSTMENT_FACTOR = 4.8 -def remove_invisible_chars(mobject): +def remove_invisible_chars(mobject: SVGMobject) -> SVGMobject: """Function to remove unwanted invisible characters from some mobjects. Parameters ---------- - mobject : :class:`~.SVGMobject` + mobject Any SVGMobject from which we want to remove unwanted invisible characters. Returns @@ -102,7 +102,7 @@ def remove_invisible_chars(mobject): mobject = mobject.code mobject_without_dots = VGroup() if mobject[0].__class__ == VGroup: - for i in range(mobject.__len__()): + for i in range(len(mobject)): mobject_without_dots.add(VGroup()) mobject_without_dots[i].add(*(k for k in mobject[i] if k.__class__ != Dot)) else: @@ -123,10 +123,10 @@ class Paragraph(VGroup): Parameters ---------- - line_spacing : :class:`float`, optional - Represents the spacing between lines. Default to -1, which means auto. - alignment : :class:`str`, optional - Defines the alignment of paragraph. Default to "left". Possible values are "left", "right", "center" + line_spacing + Represents the spacing between lines. Defaults to -1, which means auto. + alignment + Defines the alignment of paragraph. Defaults to None. Possible values are "left", "right" or "center". Examples -------- @@ -144,50 +144,37 @@ class Paragraph(VGroup): """ - def __init__(self, *text, line_spacing=-1, alignment=None, **config): + def __init__( + self, + *text: Sequence[str], + line_spacing: float = -1, + alignment: Optional[str] = None, + **kwargs, + ) -> None: self.line_spacing = line_spacing self.alignment = alignment + self.consider_spaces_as_chars = kwargs.get("disable_ligatures", False) super().__init__() lines_str = "\n".join(list(text)) - self.lines_text = Text(lines_str, line_spacing=line_spacing, **config) + self.lines_text = Text(lines_str, line_spacing=line_spacing, **kwargs) lines_str_list = lines_str.split("\n") self.chars = self._gen_chars(lines_str_list) - chars_lines_text_list = self.get_group_class()() - char_index_counter = 0 - for line_index in range(lines_str_list.__len__()): - chars_lines_text_list.add( - self.lines_text[ - char_index_counter : char_index_counter - + lines_str_list[line_index].__len__() - + 1 - ], - ) - char_index_counter += lines_str_list[line_index].__len__() + 1 - self.lines = [] - self.lines.append([]) - for line_no in range(chars_lines_text_list.__len__()): - self.lines[0].append(chars_lines_text_list[line_no]) - self.lines_initial_positions = [] - for line_no in range(self.lines[0].__len__()): - self.lines_initial_positions.append(self.lines[0][line_no].get_center()) - self.lines.append([]) - self.lines[1].extend( - [self.alignment for _ in range(chars_lines_text_list.__len__())], - ) + self.lines = [list(self.chars), [self.alignment] * len(self.chars)] + self.lines_initial_positions = [line.get_center() for line in self.lines[0]] self.add(*self.lines[0]) self.move_to(np.array([0, 0, 0])) if self.alignment: self._set_all_lines_alignments(self.alignment) - def _gen_chars(self, lines_str_list): - """Function to convert plain string to 2d-VGroup of chars. 2d-VGroup mean "VGroup of VGroup". + def _gen_chars(self, lines_str_list: list) -> VGroup: + """Function to convert a list of plain strings to a VGroup of VGroups of chars. Parameters ---------- - lines_str_list : :class:`str` - Plain text string. + lines_str_list + List of plain text strings. Returns ------- @@ -196,72 +183,85 @@ def _gen_chars(self, lines_str_list): """ char_index_counter = 0 chars = self.get_group_class()() - for line_no in range(lines_str_list.__len__()): + for line_no in range(len(lines_str_list)): + line_str = lines_str_list[line_no] + # Count all the characters in line_str + # Spaces may or may not count as characters + if self.consider_spaces_as_chars: + char_count = len(line_str) + else: + char_count = 0 + for char in line_str: + if not char.isspace(): + char_count += 1 + chars.add(self.get_group_class()()) chars[line_no].add( *self.lines_text.chars[ - char_index_counter : char_index_counter - + lines_str_list[line_no].__len__() - + 1 + char_index_counter : char_index_counter + char_count ] ) - char_index_counter += lines_str_list[line_no].__len__() + 1 + char_index_counter += char_count + if self.consider_spaces_as_chars: + # If spaces count as characters, count the extra \n character + # which separates Paragraph's lines to avoid issues + char_index_counter += 1 return chars - def _set_all_lines_alignments(self, alignment): + def _set_all_lines_alignments(self, alignment: str) -> Paragraph: """Function to set all line's alignment to a specific value. Parameters ---------- - alignment : :class:`str` + alignment Defines the alignment of paragraph. Possible values are "left", "right", "center". """ - for line_no in range(0, self.lines[0].__len__()): + for line_no in range(len(self.lines[0])): self._change_alignment_for_a_line(alignment, line_no) return self - def _set_line_alignment(self, alignment, line_no): + def _set_line_alignment(self, alignment: str, line_no: int) -> Paragraph: """Function to set one line's alignment to a specific value. Parameters ---------- - alignment : :class:`str` + alignment Defines the alignment of paragraph. Possible values are "left", "right", "center". - line_no : :class:`int` + line_no Defines the line number for which we want to set given alignment. """ self._change_alignment_for_a_line(alignment, line_no) return self - def _set_all_lines_to_initial_positions(self): + def _set_all_lines_to_initial_positions(self) -> Paragraph: """Set all lines to their initial positions.""" - self.lines[1] = [None for _ in range(self.lines[0].__len__())] - for line_no in range(0, self.lines[0].__len__()): + self.lines[1] = [None] * len(self.lines[0]) + for line_no in range(len(self.lines[0])): self[line_no].move_to( self.get_center() + self.lines_initial_positions[line_no], ) return self - def _set_line_to_initial_position(self, line_no): + def _set_line_to_initial_position(self, line_no: int) -> Paragraph: """Function to set one line to initial positions. Parameters ---------- - line_no : :class:`int` + line_no Defines the line number for which we want to set given alignment. """ self.lines[1][line_no] = None self[line_no].move_to(self.get_center() + self.lines_initial_positions[line_no]) return self - def _change_alignment_for_a_line(self, alignment, line_no): + def _change_alignment_for_a_line(self, alignment: str, line_no: int) -> None: """Function to change one line's alignment to a specific value. Parameters ---------- - alignment : :class:`str` + alignment Defines the alignment of paragraph. Possible values are "left", "right", "center". - line_no : :class:`int` + line_no Defines the line number for which we want to set given alignment. """ self.lines[1][line_no] = alignment @@ -299,13 +299,13 @@ class Text(SVGMobject): Parameters ---------- - text : :class:`str` - The text that need to created as mobject. + text + The text that needs to be created as a mobject. Returns ------- :class:`Text` - The mobject like :class:`.VGroup`. + The mobject-like :class:`.VGroup`. Examples --------- @@ -426,7 +426,7 @@ def __init__( unpack_groups: bool = True, disable_ligatures: bool = False, **kwargs, - ): + ) -> None: self.line_spacing = line_spacing self.font = font @@ -540,8 +540,8 @@ def font_size(self, font_val): def _gen_chars(self): chars = self.get_group_class()() submobjects_char_index = 0 - for char_index in range(self.text.__len__()): - if self.text[char_index] in (" ", "\t", "\n"): + for char_index in range(len(self.text)): + if self.text[char_index].isspace(): space = Dot(radius=0, fill_opacity=0, stroke_opacity=0) if char_index == 0: space.move_to(self.submobjects[submobjects_char_index].get_center()) @@ -895,23 +895,23 @@ def construct(self): Parameters ---------- - text : :class:`str` - The text that need to created as mobject. - fill_opacity : :class:`int` - The fill opacity with 1 meaning opaque and 0 meaning transparent. - stroke_width : :class:`int` + text + The text that needs to be created as mobject. + fill_opacity + The fill opacity, with 1 meaning opaque and 0 meaning transparent. + stroke_width Stroke width. - font_size : :class:`float` + font_size Font size. - line_spacing : :class:`int` + line_spacing Line spacing. - font : :class:`str` + font Global font setting for the entire text. Local overrides are possible. - slant : :class:`str` + slant Global slant setting, e.g. `NORMAL` or `ITALIC`. Local overrides are possible. - weight : :class:`str` + weight Global weight setting, e.g. `NORMAL` or `BOLD`. Local overrides are possible. - gradient: :class:`tuple` + gradient Global gradient setting. Local overrides are possible. @@ -1107,7 +1107,7 @@ def __init__( unpack_groups: bool = True, disable_ligatures: bool = False, **kwargs, - ): + ) -> None: self.text = text self.line_spacing = line_spacing @@ -1385,7 +1385,7 @@ def register_font(font_file: str | Path): Parameters ---------- - font_file : + font_file The font file to add. Examples From fba3b5e1f3ace8814fbe91c183c5850b0f4a9631 Mon Sep 17 00:00:00 2001 From: Francesco Frassinelli Date: Mon, 4 Jul 2022 21:29:05 +0200 Subject: [PATCH 079/555] polish: Add implicit docker.io/ URL base (#2855) * Add implicit docker.io/ URL base * Fix double-column typo --- docs/source/installation/jupyter.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/installation/jupyter.rst b/docs/source/installation/jupyter.rst index e2a61114f6..3b9942e5ec 100644 --- a/docs/source/installation/jupyter.rst +++ b/docs/source/installation/jupyter.rst @@ -26,7 +26,7 @@ a way that allows them to be shared interactively via Binder as well: .. code-block:: dockerfile - FROM manimcommunity/manim:v0.9.0 + FROM docker.io/manimcommunity/manim:v0.9.0 COPY --chown=manimuser:manimuser . /manim From 4d9cca208dd22634b75ca09ac3f74246031651d2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 22:15:53 +0000 Subject: [PATCH 080/555] [pre-commit.ci] pre-commit autoupdate (#2858) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 22.3.0 → 22.6.0](https://github.com/psf/black/compare/22.3.0...22.6.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f8b256a42a..b051b84fcf 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -35,7 +35,7 @@ repos: - id: python-check-blanket-noqa name: Precision flake ignores - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 22.6.0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs From 6c58f4a7778906de1492bdfd40db2712fe5213d2 Mon Sep 17 00:00:00 2001 From: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> Date: Wed, 6 Jul 2022 20:09:55 +0530 Subject: [PATCH 081/555] Added :class:`.ChangeSpeed`, an animation wrapper that allows to smoothly change the speed at which an animation is played (#2749) * Added speedmodifier.py * fix bugs, stable state * rate_func, comments * Add docs * add `ChangedWait` * run_time override for AnimationGroup * fix AnimationGroup * change example * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix docstrings * small improvements [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci fix AnimationGroup fix AnimationGroup... * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add_updater for changed speed * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * rename vars * Remove `ChangedWait`, Set default `rate_func` for `Wait` to `linear` * fix `Succession` * fix updaters * fix docs * rename vars * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Apply suggestions from code review Co-authored-by: Benjamin Hackl * convert lambdas into funcs * Add tests. * reduced test run time and regenerated control data * Update manim/animation/speedmodifier.py Co-authored-by: Benjamin Hackl * include new module in docbuild * added module docstring * fixed non-rendering examples in documentation Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl Co-authored-by: Tristan Schulz Co-authored-by: Benjamin Hackl --- docs/source/reference.rst | 1 + docs/source/reference_index/animations.rst | 1 + manim/__init__.py | 1 + manim/animation/animation.py | 5 +- manim/animation/composition.py | 9 +- manim/animation/speedmodifier.py | 293 ++++++++++++++++++ .../control_data/speed/SpeedModifier.npz | Bin 0 -> 19400 bytes tests/test_graphical_units/test_speed.py | 36 +++ 8 files changed, 341 insertions(+), 5 deletions(-) create mode 100644 manim/animation/speedmodifier.py create mode 100644 tests/test_graphical_units/control_data/speed/SpeedModifier.npz create mode 100644 tests/test_graphical_units/test_speed.py diff --git a/docs/source/reference.rst b/docs/source/reference.rst index f84bde68b6..5352f83223 100644 --- a/docs/source/reference.rst +++ b/docs/source/reference.rst @@ -26,6 +26,7 @@ Animations manim.animation.numbers manim.animation.rotation manim.animation.specialized + manim.animation.speedmodifier manim.animation.transform manim.animation.transform_matching_parts manim.animation.updaters.mobject_update_utils diff --git a/docs/source/reference_index/animations.rst b/docs/source/reference_index/animations.rst index 2afb09180b..a25c61fdd5 100644 --- a/docs/source/reference_index/animations.rst +++ b/docs/source/reference_index/animations.rst @@ -17,6 +17,7 @@ Animations ~animation.numbers ~animation.rotation ~animation.specialized + ~animation.speedmodifier ~animation.transform ~animation.transform_matching_parts ~animation.updaters diff --git a/manim/__init__.py b/manim/__init__.py index a3fafb7314..7734f32a20 100644 --- a/manim/__init__.py +++ b/manim/__init__.py @@ -42,6 +42,7 @@ from .animation.numbers import * from .animation.rotation import * from .animation.specialized import * +from .animation.speedmodifier import * from .animation.transform import * from .animation.transform_matching_parts import * from .animation.updaters.mobject_update_utils import * diff --git a/manim/animation/animation.py b/manim/animation/animation.py index 385917e162..65b45c3004 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -9,7 +9,7 @@ from ..mobject import mobject from ..mobject.mobject import Mobject from ..mobject.opengl import opengl_mobject -from ..utils.rate_functions import smooth +from ..utils.rate_functions import linear, smooth __all__ = ["Animation", "Wait", "override_animation"] @@ -545,6 +545,7 @@ def __init__( run_time: float = 1, stop_condition: Callable[[], bool] | None = None, frozen_frame: bool | None = None, + rate_func: Callable[[float], float] = linear, **kwargs, ): if stop_condition and frozen_frame: @@ -553,7 +554,7 @@ def __init__( self.duration: float = run_time self.stop_condition = stop_condition self.is_static_wait: bool = frozen_frame - super().__init__(None, run_time=run_time, **kwargs) + super().__init__(None, run_time=run_time, rate_func=rate_func, **kwargs) # quick fix to work in opengl setting: self.mobject.shader_wrapper_list = [] diff --git a/manim/animation/composition.py b/manim/animation/composition.py index 6a541c97c1..4c4f1db52a 100644 --- a/manim/animation/composition.py +++ b/manim/animation/composition.py @@ -38,6 +38,7 @@ def __init__( **kwargs, ) -> None: self.animations = [prepare_animation(anim) for anim in animations] + self.rate_func = rate_func self.group = group if self.group is None: mobjects = remove_list_redundancies( @@ -47,7 +48,9 @@ def __init__( self.group = OpenGLGroup(*mobjects) else: self.group = Group(*mobjects) - super().__init__(self.group, rate_func=rate_func, lag_ratio=lag_ratio, **kwargs) + super().__init__( + self.group, rate_func=self.rate_func, lag_ratio=lag_ratio, **kwargs + ) self.run_time: float = self.init_run_time(run_time) def get_all_mobjects(self) -> Sequence[Mobject]: @@ -108,7 +111,7 @@ def interpolate(self, alpha: float) -> None: # times might not correspond to actual times, # e.g. of the surrounding scene. Instead they'd # be a rescaled version. But that's okay! - time = alpha * self.max_end_time + time = self.rate_func(alpha) * self.max_end_time for anim, start_time, end_time in self.anims_with_timings: anim_time = end_time - start_time if anim_time == 0: @@ -163,7 +166,7 @@ def next_animation(self) -> None: self.update_active_animation(self.active_index + 1) def interpolate(self, alpha: float) -> None: - current_time = alpha * self.run_time + current_time = self.rate_func(alpha) * self.run_time while self.active_end_time is not None and current_time >= self.active_end_time: self.next_animation() if self.active_animation is not None and self.active_start_time is not None: diff --git a/manim/animation/speedmodifier.py b/manim/animation/speedmodifier.py new file mode 100644 index 0000000000..311bd62851 --- /dev/null +++ b/manim/animation/speedmodifier.py @@ -0,0 +1,293 @@ +"""Utilities for modifying the speed at which animations are played.""" + +from __future__ import annotations + +import types +from typing import Callable + +from numpy import piecewise + +from manim.utils.simple_functions import get_parameters + +from ..animation.animation import Animation, Wait, prepare_animation +from ..animation.composition import AnimationGroup +from ..mobject.mobject import Mobject, Updater, _AnimationBuilder +from ..scene.scene import Scene + + +class ChangeSpeed(Animation): + """Modifies the speed of passed animation. + :class:`AnimationGroup` with different ``lag_ratio`` can also be used + which combines multiple animations into one. + The ``run_time`` of the passed animation is changed to modify the speed. + + Parameters + ---------- + anim + Animation of which the speed is to be modified. + speedinfo + Contains nodes (percentage of ``run_time``) and its corresponding speed factor. + rate_func + Overrides ``rate_func`` of passed animation, applied before changing speed. + + Examples + -------- + + .. manim:: SpeedModifierExample + + class SpeedModifierExample(Scene): + def construct(self): + a = Dot().shift(LEFT * 4) + b = Dot().shift(RIGHT * 4) + self.add(a, b) + self.play( + ChangeSpeed( + AnimationGroup( + a.animate(run_time=1).shift(RIGHT * 8), + b.animate(run_time=1).shift(LEFT * 8), + ), + speedinfo={0.3: 1, 0.4: 0.1, 0.6: 0.1, 1: 1}, + rate_func=linear, + ) + ) + + .. manim:: SpeedModifierUpdaterExample + + class SpeedModifierUpdaterExample(Scene): + def construct(self): + a = Dot().shift(LEFT * 4) + self.add(a) + + ChangeSpeed.add_updater(a, lambda x, dt: x.shift(RIGHT * 4 * dt)) + self.play( + ChangeSpeed( + Wait(2), + speedinfo={0.4: 1, 0.5: 0.2, 0.8: 0.2, 1: 1}, + affects_speed_updaters=True, + ) + ) + + .. manim:: SpeedModifierUpdaterExample2 + + class SpeedModifierUpdaterExample2(Scene): + def construct(self): + a = Dot().shift(LEFT * 4) + self.add(a) + + ChangeSpeed.add_updater(a, lambda x, dt: x.shift(RIGHT * 4 * dt)) + self.wait() + self.play( + ChangeSpeed( + Wait(), + speedinfo={1: 0}, + affects_speed_updaters=True, + ) + ) + + """ + + dt = 0 + is_changing_dt = False + + def __init__( + self, + anim: Animation | _AnimationBuilder, + speedinfo: dict[float, float], + rate_func: Callable[[float], float] | None = None, + affects_speed_updaters: bool = True, + **kwargs, + ) -> None: + + if issubclass(type(anim), AnimationGroup): + self.anim = type(anim)( + *map(self.setup, anim.animations), + group=anim.group, + run_time=anim.run_time, + rate_func=anim.rate_func, + lag_ratio=anim.lag_ratio, + ) + else: + self.anim = self.setup(anim) + + if affects_speed_updaters: + assert ( + ChangeSpeed.is_changing_dt is False + ), "Only one animation at a time can play that changes speed (dt) for ChangeSpeed updaters" + ChangeSpeed.is_changing_dt = True + self.t = 0 + self.affects_speed_updaters = affects_speed_updaters + + self.rate_func = self.anim.rate_func if rate_func is None else rate_func + + # A function where, f(0) = 0, f'(0) = initial speed, f'( f-1(1) ) = final speed + # Following function obtained when conditions applied to vertical parabola + self.speed_modifier = lambda x, init_speed, final_speed: ( + (final_speed**2 - init_speed**2) * x**2 / 4 + init_speed * x + ) + + # f-1(1), returns x for which f(x) = 1 in `speed_modifier` function + self.f_inv_1 = lambda init_speed, final_speed: 2 / (init_speed + final_speed) + + # if speed factors for the starting node (0) and the final node (1) are + # not set, set them to 1 and the penultimate factor, respectively + if 0 not in speedinfo: + speedinfo[0] = 1 + if 1 not in speedinfo: + speedinfo[1] = sorted(speedinfo.items())[-1][1] + + self.speedinfo = dict(sorted(speedinfo.items())) + self.functions = [] + self.conditions = [] + + # Get the time taken by amimation if `run_time` is assumed to be 1 + scaled_total_time = self.get_scaled_total_time() + + prevnode = 0 + init_speed = self.speedinfo[0] + curr_time = 0 + for node, final_speed in list(self.speedinfo.items())[1:]: + dur = node - prevnode + + def condition( + t, + curr_time=curr_time, + init_speed=init_speed, + final_speed=final_speed, + dur=dur, + ): + lower_bound = curr_time / scaled_total_time + upper_bound = ( + curr_time + self.f_inv_1(init_speed, final_speed) * dur + ) / scaled_total_time + return lower_bound <= t <= upper_bound + + self.conditions.append(condition) + + def function( + t, + curr_time=curr_time, + init_speed=init_speed, + final_speed=final_speed, + dur=dur, + prevnode=prevnode, + ): + return ( + self.speed_modifier( + (scaled_total_time * t - curr_time) / dur, + init_speed, + final_speed, + ) + * dur + + prevnode + ) + + self.functions.append(function) + + curr_time += self.f_inv_1(init_speed, final_speed) * dur + prevnode = node + init_speed = final_speed + + def func(t): + if t == 1: + ChangeSpeed.is_changing_dt = False + new_t = piecewise( + self.rate_func(t), + [condition(self.rate_func(t)) for condition in self.conditions], + self.functions, + ) + if self.affects_speed_updaters: + ChangeSpeed.dt = (new_t - self.t) * self.anim.run_time + self.t = new_t + return new_t + + self.anim.set_rate_func(func) + + super().__init__( + self.anim.mobject, + rate_func=self.rate_func, + run_time=scaled_total_time * self.anim.run_time, + **kwargs, + ) + + def setup(self, anim): + if type(anim) is Wait: + anim.interpolate = types.MethodType( + lambda self, alpha: self.rate_func(alpha), anim + ) + return prepare_animation(anim) + + def get_scaled_total_time(self) -> float: + """The time taken by the animation under the assumption that the ``run_time`` is 1.""" + prevnode = 0 + init_speed = self.speedinfo[0] + total_time = 0 + for node, final_speed in list(self.speedinfo.items())[1:]: + dur = node - prevnode + total_time += dur * self.f_inv_1(init_speed, final_speed) + prevnode = node + init_speed = final_speed + return total_time + + @classmethod + def add_updater( + self, + mobject: Mobject, + update_function: Updater, + index: int | None = None, + call_updater: bool = False, + ): + """This static method can be used to apply speed change to updaters. + + This updater will follow speed and rate function of any :class:`.ChangeSpeed` + animation that is playing with ``affects_speed_updaters=True``. By default, + updater functions added via the usual :meth:`.Mobject.add_updater` method + do not respect the change of animation speed. + + Parameters + ---------- + mobject + The mobject to which the updater should be attached. + update_function + The function that is called whenever a new frame is rendered. + index + The position in the list of the mobject's updaters at which the + function should be inserted. + call_updater + If ``True``, calls the update function when attaching it to the + mobject. + + See also + -------- + :class:`.ChangeSpeed` + :meth:`.Mobject.add_updater` + """ + parameters = get_parameters(update_function) + if "dt" in parameters: + mobject.add_updater( + lambda mob, dt: update_function( + mob, ChangeSpeed.dt if ChangeSpeed.is_changing_dt else dt + ), + index=index, + call_updater=call_updater, + ) + else: + mobject.add_updater(update_function, index=index, call_updater=call_updater) + + def interpolate(self, alpha: float) -> None: + self.anim.interpolate(alpha) + + def update_mobjects(self, dt: float) -> None: + self.anim.update_mobjects(dt) + + def finish(self) -> None: + ChangeSpeed.is_changing_dt = False + self.anim.finish() + + def begin(self) -> None: + self.anim.begin() + + def clean_up_from_scene(self, scene: Scene) -> None: + self.anim.clean_up_from_scene(scene) + + def _setup_scene(self, scene) -> None: + self.anim._setup_scene(scene) diff --git a/tests/test_graphical_units/control_data/speed/SpeedModifier.npz b/tests/test_graphical_units/control_data/speed/SpeedModifier.npz new file mode 100644 index 0000000000000000000000000000000000000000..f02482e5a7eab6fc482a72bd3982adc852380a60 GIT binary patch literal 19400 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 Date: Wed, 6 Jul 2022 21:55:31 +0200 Subject: [PATCH 082/555] =?UTF-8?q?addition(bezier.py):=20adding=20subdivi?= =?UTF-8?q?de=5Fquadratic=5Fbezier=20and=20split=5Fquad=E2=80=A6=20(#2841)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * addition(bezier.py): adding subdivide_quadratic_bezier and split_quadratic_bezier functions, change(OpenGLVMobject) get_bezier_tuples_from_points now uses reshape instead of manually creating a list * Update manim/utils/bezier.py Co-authored-by: Benjamin Hackl * Update manim/utils/bezier.py Co-authored-by: Benjamin Hackl * Update manim/utils/bezier.py Co-authored-by: Benjamin Hackl * Update manim/utils/bezier.py Co-authored-by: Benjamin Hackl * Update manim/utils/bezier.py Co-authored-by: Benjamin Hackl * Update manim/utils/bezier.py Co-authored-by: Benjamin Hackl * Update manim/utils/bezier.py Co-authored-by: Benjamin Hackl * Update manim/utils/bezier.py Co-authored-by: Benjamin Hackl * Update manim/utils/bezier.py Co-authored-by: Benjamin Hackl * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Added example and changed documentation of the code * Added another example * Fix raw string issue in docs * nvm because i forgot this only works for opengl renderer * Added image Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../_static/bezier_subdivision_example.png | Bin 0 -> 107790 bytes .../opengl/opengl_vectorized_mobject.py | 2 +- manim/utils/bezier.py | 56 ++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 docs/source/_static/bezier_subdivision_example.png diff --git a/docs/source/_static/bezier_subdivision_example.png b/docs/source/_static/bezier_subdivision_example.png new file mode 100644 index 0000000000000000000000000000000000000000..8cdb8f241d3dc146c5aeb2adf79980eb746cbd1b GIT binary patch literal 107790 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 e;r|wf1GGr~`+3o-M|#Nr^|$ np.ndarray: + """Split a quadratic Bézier curve at argument ``t`` into two quadratic curves. + + Parameters + ---------- + points + The control points of the bezier curve + has shape ``[a1, h1, b1]`` + + t + The ``t``-value at which to split the Bézier curve + + Returns + ------- + The two Bézier curves as a list of tuples, + has the shape ``[a1, h1, b1], [a2, h2, b2]`` + """ + a1, h1, a2 = points + s1 = interpolate(a1, h1, t) + s2 = interpolate(h1, a2, t) + p = interpolate(s1, s2, t) + + return np.array([a1, s1, p, p, s2, a2]) + + +def subdivide_quadratic_bezier(points: Iterable[float], n: int) -> np.ndarray: + """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 + arguments :math:`t = i/n` for :math:`i = 1, ..., n-1`. + + Parameters + ---------- + points + The control points of the Bézier curve in form ``[a1, h1, b1]`` + + n + The number of curves to subdivide the Bézier curve into + + Returns + ------- + The new points for the Bézier curve in the form ``[a1, h1, b1, a2, h2, b2, ...]`` + + .. image:: /_static/bezier_subdivision_example.png + + """ + beziers = [] + current = points + for i in range(n, 0, -1): + tmp = split_quadratic_bezier(current, 1 / i) + beziers.append(tmp[:3]) + current = tmp[3:] + return np.asarray(beziers).reshape(-1, 3) + + # Linear interpolation variants From 8dd88606e0480ab0382210a2c1f2dbd3cfe5f607 Mon Sep 17 00:00:00 2001 From: Pedro Lamkowski Date: Thu, 7 Jul 2022 16:33:56 -0300 Subject: [PATCH 083/555] New example to graph.py documentation (#2851) * Update graph.py Example scene of rendering a linear neural network using partite graph * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed variable in wrong place on example. * Update manim/mobject/graph.py added requested pr changes Co-authored-by: Benjamin Hackl * Apply suggestions from code review Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/mobject/graph.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/manim/mobject/graph.py b/manim/mobject/graph.py index 20d430a5a5..2f24bbbf2c 100644 --- a/manim/mobject/graph.py +++ b/manim/mobject/graph.py @@ -382,6 +382,40 @@ def construct(self): graph = Graph(list(G.nodes), list(G.edges), layout="partite", partitions=[[0, 1]]) self.play(Create(graph)) + The representation of a linear artificial neural network is facilitated + by the use of the partite layout and defining partitions for each layer. + + .. manim:: LinearNN + :save_last_frame: + + class LinearNN(Scene): + def construct(self): + edges = [] + partitions = [] + c = 0 + layers = [2, 3, 3, 2] # the number of neurons in each layer + + for i in layers: + partitions.append(list(range(c + 1, c + i + 1))) + c += i + for i, v in enumerate(layers[1:]): + last = sum(layers[:i+1]) + for j in range(v): + for k in range(last - layers[i], last): + edges.append((k + 1, j + last + 1)) + + vertices = np.arange(1, sum(layers) + 1) + + graph = Graph( + vertices, + edges, + layout='partite', + partitions=partitions, + layout_scale=3, + vertex_config={'radius': 0.20}, + ) + self.add(graph) + The custom tree layout can be used to show the graph by distance from the root vertex. You must pass the root vertex of the tree. From a78c8e312b7f2c22f816388e053defc89df79af5 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 8 Jul 2022 06:49:04 +0200 Subject: [PATCH 084/555] ran poetry update (#2864) --- poetry.lock | 1621 ++++++++++++++++++++++----------------------------- 1 file changed, 699 insertions(+), 922 deletions(-) diff --git a/poetry.lock b/poetry.lock index b201641d26..991b663c0c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,7 +8,7 @@ python-versions = "*" [[package]] name = "anyio" -version = "3.5.0" +version = "3.6.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" category = "main" optional = true @@ -21,7 +21,7 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] doc = ["packaging", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"] +test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"] trio = ["trio (>=0.16)"] [[package]] @@ -29,7 +29,7 @@ name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -37,7 +37,7 @@ name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." category = "main" -optional = false +optional = true python-versions = ">=3.6" [package.dependencies] @@ -54,7 +54,7 @@ name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" category = "main" -optional = false +optional = true python-versions = ">=3.6" [package.dependencies] @@ -74,7 +74,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [[package]] name = "astroid" -version = "2.11.3" +version = "2.11.6" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -110,7 +110,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "babel" -version = "2.10.1" +version = "2.10.3" description = "Internationalization utilities" category = "main" optional = false @@ -124,12 +124,12 @@ name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" category = "main" -optional = false +optional = true python-versions = "*" [[package]] name = "backports.cached-property" -version = "1.0.1" +version = "1.0.2" description = "cached_property() - computed once per instance, cached as attribute" category = "main" optional = false @@ -152,7 +152,7 @@ lxml = ["lxml"] [[package]] name = "black" -version = "22.3.0" +version = "22.6.0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -163,7 +163,7 @@ click = ">=8.0.0" mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} @@ -175,10 +175,10 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bleach" -version = "5.0.0" +version = "5.0.1" description = "An easy safelist-based HTML-sanitizing tool." category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.dependencies] @@ -186,20 +186,20 @@ six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0)"] -dev = ["pip-tools (==6.5.1)", "pytest (==7.1.1)", "flake8 (==4.0.1)", "tox (==3.24.5)", "sphinx (==4.3.2)", "twine (==4.0.0)", "wheel (==0.37.1)", "hashin (==0.17.0)", "black (==22.3.0)", "mypy (==0.942)"] +css = ["tinycss2 (>=1.1.0,<1.2)"] +dev = ["build (0.8.0)", "flake8 (4.0.1)", "hashin (0.17.0)", "pip-tools (6.6.2)", "pytest (7.1.2)", "Sphinx (4.3.2)", "tox (3.25.0)", "twine (4.0.1)", "wheel (0.37.1)", "black (22.3.0)", "mypy (0.961)"] [[package]] name = "certifi" -version = "2021.10.8" +version = "2022.6.15" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "cffi" -version = "1.15.0" +version = "1.15.1" description = "Foreign Function Interface for Python calling C code." category = "main" optional = false @@ -218,18 +218,18 @@ python-versions = ">=3.6.1" [[package]] name = "charset-normalizer" -version = "2.0.12" +version = "2.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.5.0" +python-versions = ">=3.6.0" [package.extras] unicode_backport = ["unicodedata2"] [[package]] name = "click" -version = "8.1.2" +version = "8.1.3" description = "Composable command line interface toolkit" category = "main" optional = false @@ -252,7 +252,7 @@ click = "*" [[package]] name = "cloup" -version = "0.13.0" +version = "0.13.1" description = "Adds features to Click: option groups, constraints, subcommand sections and help themes." category = "main" optional = false @@ -264,7 +264,7 @@ typing-extensions = {version = "*", markers = "python_version <= \"3.8\""} [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.5" description = "Cross-platform colored terminal text." category = "main" optional = false @@ -290,7 +290,7 @@ optional = false python-versions = "*" [package.extras] -test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] +test = ["flake8 (3.7.8)", "hypothesis (3.55.3)"] [[package]] name = "coverage" @@ -316,7 +316,7 @@ python-versions = ">=3.6" [[package]] name = "cython" -version = "0.29.28" +version = "0.29.30" description = "The Cython compiler for writing C extensions for the Python language." category = "main" optional = false @@ -331,11 +331,11 @@ optional = false python-versions = ">=3.6" [package.extras] -dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", "pandas", "pytest"] +dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (0.770)", "numpy", "pandas", "pytest"] [[package]] name = "dearpygui" -version = "1.5.1" +version = "1.6.2" description = "DearPyGui: A simple Python GUI Toolkit" category = "main" optional = true @@ -343,10 +343,10 @@ python-versions = ">=3.7" [[package]] name = "debugpy" -version = "1.6.0" +version = "1.6.2" description = "An implementation of the Debug Adapter Protocol for Python" category = "main" -optional = false +optional = true python-versions = ">=3.7" [[package]] @@ -362,7 +362,7 @@ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" category = "main" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] @@ -381,11 +381,11 @@ dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "im [[package]] name = "dill" -version = "0.3.4" +version = "0.3.5.1" description = "serialize all of python" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" [package.extras] graph = ["objgraph (>=1.7.2)"] @@ -411,7 +411,7 @@ name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." category = "main" -optional = false +optional = true python-versions = ">=3.6" [[package]] @@ -430,7 +430,7 @@ name = "fastjsonschema" version = "2.15.3" description = "Fastest Python implementation of JSON schema" category = "main" -optional = false +optional = true python-versions = "*" [package.extras] @@ -438,7 +438,7 @@ devel = ["colorama", "jsonschema", "json-spec", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.6.0" +version = "3.7.1" description = "A platform independent file lock." category = "dev" optional = false @@ -493,7 +493,7 @@ test = ["coverage", "coveralls", "mock", "pytest", "pytest-cov"] [[package]] name = "flake8-comprehensions" -version = "3.8.0" +version = "3.10.0" description = "A flake8 plugin to help you write better list/set/dict comprehensions." category = "dev" optional = false @@ -536,11 +536,11 @@ flake8-plugin-utils = ">=1.3.2,<2.0.0" [[package]] name = "flake8-rst-docstrings" -version = "0.2.5" +version = "0.2.6" description = "Python docstring reStructuredText (RST) validator" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] flake8 = ">=3.0.0" @@ -562,7 +562,7 @@ importlib-metadata = {version = ">=0.9", markers = "python_version < \"3.8\""} [[package]] name = "fonttools" -version = "4.33.2" +version = "4.34.4" description = "Tools to manipulate font files" category = "dev" optional = false @@ -624,7 +624,7 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\"" [[package]] name = "glcontext" -version = "2.3.5" +version = "2.3.6" description = "Portable OpenGL Context" category = "main" optional = false @@ -632,7 +632,7 @@ python-versions = "*" [[package]] name = "identify" -version = "2.4.12" +version = "2.5.1" description = "File identification library for Python" category = "dev" optional = false @@ -651,7 +651,7 @@ python-versions = ">=3.5" [[package]] name = "imagesize" -version = "1.3.0" +version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" category = "dev" optional = false @@ -659,7 +659,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.11.3" +version = "4.12.0" description = "Read metadata from Python packages" category = "main" optional = false @@ -672,14 +672,14 @@ zipp = ">=0.5" [package.extras] docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] [[package]] name = "importlib-resources" -version = "5.7.1" +version = "5.8.0" description = "Read resources from Python packages" category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.dependencies] @@ -699,10 +699,10 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.13.0" +version = "6.15.0" description = "IPython Kernel for Jupyter" category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.dependencies] @@ -714,18 +714,19 @@ matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" psutil = "*" +pyzmq = ">=17" tornado = ">=6.1" traitlets = ">=5.1.0" [package.extras] -test = ["pytest (>=6.0)", "pytest-cov", "flaky", "ipyparallel", "pre-commit", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest-cov", "pytest-timeout", "pytest (>=6.0)"] [[package]] name = "ipython" -version = "7.32.0" +version = "7.34.0" description = "IPython: Productive Interactive Computing" category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.dependencies] @@ -757,7 +758,7 @@ name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -790,19 +791,19 @@ name = "jedi" version = "0.18.1" description = "An autocompletion tool for Python that can be used for text editors." category = "main" -optional = false +optional = true python-versions = ">=3.6" [package.dependencies] parso = ">=0.8.0,<0.9.0" [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (3.8.3)", "mypy (0.782)"] testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.1" +version = "3.1.2" description = "A very fast and expressive template engine." category = "main" optional = false @@ -816,7 +817,7 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.9.6" +version = "0.9.8" description = "A Python implementation of the JSON5 data format." category = "main" optional = true @@ -827,10 +828,10 @@ dev = ["hypothesis"] [[package]] name = "jsonschema" -version = "4.4.0" +version = "4.6.2" description = "An implementation of JSON Schema validation for Python" category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.dependencies] @@ -842,14 +843,14 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] [[package]] name = "jupyter-client" -version = "7.2.2" +version = "7.3.4" description = "Jupyter protocol implementation and client libraries" category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.dependencies] @@ -857,20 +858,20 @@ entrypoints = "*" jupyter-core = ">=4.9.2" nest-asyncio = ">=1.5.4" python-dateutil = ">=2.8.2" -pyzmq = ">=22.3" +pyzmq = ">=23.0" tornado = ">=6.0" traitlets = "*" [package.extras] -doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +doc = ["ipykernel", "myst-parser", "sphinx-rtd-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt"] test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-core" -version = "4.10.0" +version = "4.11.0" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.dependencies] @@ -882,14 +883,14 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-server" -version = "1.16.0" +version = "1.18.1" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "main" optional = true python-versions = ">=3.7" [package.dependencies] -anyio = ">=3.1.0" +anyio = ">=3.1.0,<4" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=6.1.12" @@ -903,15 +904,15 @@ pyzmq = ">=17" Send2Trash = "*" terminado = ">=0.8.3" tornado = ">=6.1.0" -traitlets = ">=5.1.0" +traitlets = ">=5.1" websocket-client = "*" [package.extras] -test = ["coverage", "pytest (>=6.0)", "pytest-cov", "pytest-mock", "pytest-timeout", "requests", "pytest-tornasync", "pytest-console-scripts", "ipykernel", "pre-commit"] +test = ["coverage", "ipykernel", "pre-commit", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "pytest (>=6.0)", "requests"] [[package]] name = "jupyterlab" -version = "3.3.4" +version = "3.4.3" description = "JupyterLab computational environment" category = "main" optional = true @@ -921,7 +922,7 @@ python-versions = ">=3.7" ipython = "*" jinja2 = ">=2.1" jupyter-core = "*" -jupyter-server = ">=1.4,<2.0" +jupyter-server = ">=1.16,<2.0" jupyterlab-server = ">=2.10,<3.0" nbclassic = ">=0.2,<1.0" packaging = "*" @@ -936,13 +937,13 @@ name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" category = "main" -optional = false +optional = true python-versions = ">=3.7" [[package]] name = "jupyterlab-server" -version = "2.13.0" -description = "A set of server components for JupyterLab and JupyterLab like applications ." +version = "2.15.0" +description = "A set of server components for JupyterLab and JupyterLab like applications." category = "main" optional = true python-versions = ">=3.7" @@ -958,12 +959,12 @@ packaging = "*" requests = "*" [package.extras] -openapi = ["openapi-core (>=0.14.2)", "ruamel.yaml"] -test = ["openapi-core (>=0.14.2)", "ruamel.yaml", "codecov", "ipykernel", "jupyter-server", "openapi-spec-validator (<0.5)", "pytest-console-scripts", "pytest-cov", "pytest (>=5.3.2)", "strict-rfc3339", "wheel"] +openapi = ["openapi-core (>=0.14.2)", "ruamel-yaml"] +test = ["codecov", "ipykernel", "jupyter-server", "openapi-core (>=0.14.2)", "openapi-spec-validator (<0.5)", "pytest-console-scripts", "pytest-cov", "pytest (>=5.3.2)", "ruamel-yaml", "strict-rfc3339"] [[package]] name = "kiwisolver" -version = "1.4.2" +version = "1.4.3" description = "A fast implementation of the Cassowary constraint solver" category = "dev" optional = false @@ -1016,7 +1017,7 @@ typing_extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [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"] @@ -1034,7 +1035,7 @@ python-versions = ">=3.7" [[package]] name = "matplotlib" -version = "3.5.1" +version = "3.5.2" description = "Python plotting package" category = "dev" optional = false @@ -1056,7 +1057,7 @@ name = "matplotlib-inline" version = "0.1.3" description = "Inline Matplotlib backend for Jupyter" category = "main" -optional = false +optional = true python-versions = ">=3.5" [package.dependencies] @@ -1082,7 +1083,7 @@ python-versions = "~=3.6" markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -code_style = ["pre-commit (==2.6)"] +code_style = ["pre-commit (2.6)"] rtd = ["myst-parser (>=0.14.0,<0.15.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] @@ -1099,7 +1100,7 @@ name = "mistune" version = "0.8.4" description = "The fastest markdown parser in pure Python" category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -1200,36 +1201,52 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest [[package]] name = "nbclassic" -version = "0.3.7" -description = "Jupyter Notebook as a Jupyter Server extension." +version = "0.4.2" +description = "A web-based notebook environment for interactive computing" category = "main" optional = true python-versions = ">=3.7" [package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=6.1.1" +jupyter-core = ">=4.6.1" jupyter-server = ">=1.8" -notebook = "<7" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" notebook-shim = ">=0.1.0" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" [package.extras] -test = ["pytest", "pytest-tornasync", "pytest-console-scripts"] +docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] +json-logging = ["json-logging"] +test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium (4.1.5)", "pytest-cov", "pytest-tornasync", "requests-unixsocket"] [[package]] name = "nbclient" -version = "0.6.0" +version = "0.6.6" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "main" -optional = false +optional = true python-versions = ">=3.7.0" [package.dependencies] jupyter-client = ">=6.1.5" nbformat = ">=5.0" nest-asyncio = "*" -traitlets = ">=5.0.0" +traitlets = ">=5.2.2" [package.extras] -sphinx = ["mock", "moto", "myst-parser", "Sphinx (>=1.7)", "sphinx-book-theme"] +sphinx = ["autodoc-traits", "mock", "moto", "myst-parser", "Sphinx (>=1.7)", "sphinx-book-theme"] test = ["black", "check-manifest", "flake8", "ipykernel", "ipython (<8.0.0)", "ipywidgets (<8.0.0)", "mypy", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"] [[package]] @@ -1237,7 +1254,7 @@ name = "nbconvert" version = "6.5.0" description = "Converting Jupyter Notebooks" category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.dependencies] @@ -1267,17 +1284,17 @@ webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.3.0" +version = "5.4.0" description = "The Jupyter Notebook format" category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.dependencies] fastjsonschema = "*" jsonschema = ">=2.6" jupyter-core = "*" -traitlets = ">=4.1" +traitlets = ">=5.1" [package.extras] test = ["check-manifest", "testpath", "pytest", "pre-commit"] @@ -1287,7 +1304,7 @@ name = "nest-asyncio" version = "1.5.5" description = "Patch asyncio to allow nested event loops" category = "main" -optional = false +optional = true python-versions = ">=3.5" [[package]] @@ -1299,49 +1316,19 @@ optional = false python-versions = ">=3.7" [package.extras] -default = ["numpy (>=1.19)", "scipy (>=1.5,!=1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] -developer = ["black (==21.5b1)", "pre-commit (>=2.12)"] +default = ["numpy (>=1.19)", "scipy (>=1.5,<1.6.1 || >1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] +developer = ["black (21.5b1)", "pre-commit (>=2.12)"] doc = ["sphinx (>=4.0,<5.0)", "pydata-sphinx-theme (>=0.6,<1.0)", "sphinx-gallery (>=0.9,<1.0)", "numpydoc (>=1.1)", "pillow (>=8.2)", "nb2plots (>=0.6)", "texext (>=0.6.6)"] extra = ["lxml (>=4.5)", "pygraphviz (>=1.7)", "pydot (>=1.4.1)"] test = ["pytest (>=6.2)", "pytest-cov (>=2.12)", "codecov (>=2.1)"] [[package]] name = "nodeenv" -version = "1.6.0" +version = "1.7.0" description = "Node.js virtual environment builder" category = "dev" optional = false -python-versions = "*" - -[[package]] -name = "notebook" -version = "6.4.12" -description = "A web-based notebook environment for interactive computing" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=5.3.4" -jupyter-core = ">=4.6.1" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" - -[package.extras] -docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] -json-logging = ["json-logging"] -test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" [[package]] name = "notebook-shim" @@ -1381,7 +1368,7 @@ name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" category = "main" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] @@ -1389,11 +1376,11 @@ name = "parso" version = "0.8.3" description = "A Python Parser" category = "main" -optional = false +optional = true python-versions = ">=3.6" [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (3.8.3)", "mypy (0.782)"] testing = ["docopt", "pytest (<6.0.0)"] [[package]] @@ -1409,7 +1396,7 @@ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." category = "main" -optional = false +optional = true python-versions = "*" [package.dependencies] @@ -1420,19 +1407,19 @@ name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" category = "main" -optional = false +optional = true python-versions = "*" [[package]] name = "pillow" -version = "9.1.1" +version = "9.2.0" description = "Python Imaging Library (Fork)" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinx-rtd-theme (>=1.0)", "sphinxext-opengraph"] +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]] @@ -1445,7 +1432,7 @@ python-versions = ">=3.7" [package.extras] docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +test = ["appdirs (1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pluggy" @@ -1464,7 +1451,7 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "2.18.1" +version = "2.19.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." category = "dev" optional = false @@ -1484,7 +1471,7 @@ name = "prometheus-client" version = "0.14.1" description = "Python client for the Prometheus monitoring system." category = "main" -optional = false +optional = true python-versions = ">=3.6" [package.extras] @@ -1492,10 +1479,10 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.29" +version = "3.0.30" description = "Library for building powerful interactive command lines in Python" category = "main" -optional = false +optional = true python-versions = ">=3.6.2" [package.dependencies] @@ -1503,14 +1490,14 @@ wcwidth = "*" [[package]] name = "psutil" -version = "5.9.0" +version = "5.9.1" description = "Cross-platform lib for process and system monitoring in Python." category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] -test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"] +test = ["ipaddress", "mock", "enum34", "pywin32", "wmi"] [[package]] name = "psutil-wheels" @@ -1528,7 +1515,7 @@ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -1612,7 +1599,7 @@ integrations = ["cryptography"] [[package]] name = "pyglet" -version = "1.5.23" +version = "1.5.26" description = "Cross-platform windowing and multimedia library" category = "main" optional = false @@ -1620,11 +1607,11 @@ python-versions = "*" [[package]] name = "pygments" -version = "2.11.2" +version = "2.12.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" [[package]] name = "pyjwt" @@ -1636,20 +1623,20 @@ python-versions = ">=3.6" [package.extras] crypto = ["cryptography (>=3.3.1)"] -dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"] +dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (5.0.4)", "mypy", "pre-commit"] docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] +tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (5.0.4)"] [[package]] name = "pylint" -version = "2.13.7" +version = "2.13.9" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -astroid = ">=2.11.3,<=2.12.0-dev0" +astroid = ">=2.11.5,<=2.12.0-dev0" colorama = {version = "*", markers = "sys_platform == \"win32\""} dill = ">=0.2" isort = ">=4.2.5,<6" @@ -1674,7 +1661,7 @@ cffi = ">=1.4.1" [package.extras] docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] -tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] +tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)", "hypothesis (>=3.27.0)"] [[package]] name = "pyobjc-core" @@ -1697,7 +1684,7 @@ pyobjc-core = ">=8.5" [[package]] name = "pyparsing" -version = "3.0.8" +version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" category = "main" optional = false @@ -1723,7 +1710,7 @@ name = "pyrsistent" version = "0.18.1" description = "Persistent/Functional/Immutable data structures" category = "main" -optional = false +optional = true python-versions = ">=3.7" [[package]] @@ -1814,18 +1801,18 @@ python-versions = "*" [[package]] name = "pywin32" -version = "303" +version = "304" description = "Python for Window Extensions" category = "main" -optional = false +optional = true python-versions = "*" [[package]] name = "pywinpty" -version = "2.0.5" +version = "2.0.6" description = "Pseudo terminal support for Windows from Python." category = "main" -optional = false +optional = true python-versions = ">=3.7" [[package]] @@ -1838,10 +1825,10 @@ python-versions = ">=3.6" [[package]] name = "pyzmq" -version = "22.3.0" +version = "23.2.0" description = "Python bindings for 0MQ" category = "main" -optional = false +optional = true python-versions = ">=3.6" [package.dependencies] @@ -1863,21 +1850,21 @@ sphinx = ">=1.3.1" [[package]] name = "requests" -version = "2.27.1" +version = "2.28.1" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7, <4" [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} -idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +charset-normalizer = ">=2,<3" +idna = ">=2.5,<4" urllib3 = ">=1.21.1,<1.27" [package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "restructuredtext-lint" @@ -1892,7 +1879,7 @@ docutils = ">=0.11,<1.0" [[package]] name = "rich" -version = "12.2.0" +version = "12.4.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -1934,7 +1921,7 @@ name = "send2trash" version = "1.8.0" description = "Send file to trash natively under Mac OS X, Windows and Linux." category = "main" -optional = false +optional = true python-versions = "*" [package.extras] @@ -1944,15 +1931,17 @@ win32 = ["pywin32"] [[package]] name = "setuptools-scm" -version = "6.4.2" +version = "7.0.4" description = "the blessed package to manage your versions by scm tags" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} packaging = ">=20.0" tomli = ">=1.0.0" +typing-extensions = "*" [package.extras] test = ["pytest (>=6.2)", "virtualenv (>20)"] @@ -2053,7 +2042,7 @@ python-versions = ">=3.6" sphinx = ">=1.8" [package.extras] -code_style = ["pre-commit (==2.12.1)"] +code_style = ["pre-commit (2.12.1)"] rtd = ["sphinx", "ipython", "sphinx-book-theme"] [[package]] @@ -2159,26 +2148,26 @@ python-versions = ">=2.7" [[package]] name = "terminado" -version = "0.13.3" +version = "0.15.0" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.dependencies] ptyprocess = {version = "*", markers = "os_name != \"nt\""} pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} -tornado = ">=4" +tornado = ">=6.1.0" [package.extras] -test = ["pytest"] +test = ["pre-commit", "pytest-timeout", "pytest (>=6.0)"] [[package]] name = "tinycss2" version = "1.1.1" description = "A tiny CSS parser" category = "main" -optional = false +optional = true python-versions = ">=3.6" [package.dependencies] @@ -2206,11 +2195,11 @@ python-versions = ">=3.7" [[package]] name = "tornado" -version = "6.1" +version = "6.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." category = "main" -optional = false -python-versions = ">= 3.5" +optional = true +python-versions = ">= 3.7" [[package]] name = "tqdm" @@ -2231,18 +2220,18 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.1.1" -description = "Traitlets Python configuration system" +version = "5.3.0" +description = "" category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.extras] -test = ["pytest"] +test = ["pre-commit", "pytest"] [[package]] name = "typed-ast" -version = "1.5.3" +version = "1.5.4" description = "a fork of Python 2 and 3 ast modules with type comment support" category = "dev" optional = false @@ -2274,7 +2263,7 @@ python-versions = "*" [[package]] name = "types-protobuf" -version = "3.19.18" +version = "3.19.22" description = "Typing stubs for protobuf" category = "dev" optional = false @@ -2282,7 +2271,7 @@ python-versions = "*" [[package]] name = "types-pygments" -version = "2.9.19" +version = "2.12.1" description = "Typing stubs for Pygments" category = "dev" optional = false @@ -2294,7 +2283,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.27.20" +version = "2.28.0" description = "Typing stubs for requests" category = "dev" optional = false @@ -2305,7 +2294,7 @@ types-urllib3 = "<1.27" [[package]] name = "types-setuptools" -version = "57.4.14" +version = "57.4.18" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -2313,7 +2302,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.13" +version = "1.26.16" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -2321,7 +2310,7 @@ python-versions = "*" [[package]] name = "typing-extensions" -version = "4.2.0" +version = "4.3.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false @@ -2329,20 +2318,20 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.9" +version = "1.26.10" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.14.1" +version = "20.15.1" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -2361,7 +2350,7 @@ testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", [[package]] name = "watchdog" -version = "2.1.7" +version = "2.1.9" description = "Filesystem events monitoring" category = "main" optional = false @@ -2375,7 +2364,7 @@ name = "wcwidth" version = "0.2.5" description = "Measures the displayed width of unicode strings in a terminal" category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -2383,12 +2372,12 @@ name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" category = "main" -optional = false +optional = true python-versions = "*" [[package]] name = "websocket-client" -version = "1.3.2" +version = "1.3.3" description = "WebSocket client for Python with low level API options" category = "main" optional = true @@ -2401,7 +2390,7 @@ test = ["websockets"] [[package]] name = "wrapt" -version = "1.14.0" +version = "1.14.1" description = "Module for decorators, wrappers and monkey patching." category = "dev" optional = false @@ -2434,8 +2423,8 @@ alabaster = [ {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, ] anyio = [ - {file = "anyio-3.5.0-py3-none-any.whl", hash = "sha256:b5fa16c5ff93fa1046f2eeb5bbff2dad4d3514d6cda61d02816dba34fa8c3c2e"}, - {file = "anyio-3.5.0.tar.gz", hash = "sha256:a0aeffe2fb1fdf374a8e4b471444f0f3ac4fb9f5a5b542b48824475e0042a5a6"}, + {file = "anyio-3.6.1-py3-none-any.whl", hash = "sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be"}, + {file = "anyio-3.6.1.tar.gz", hash = "sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b"}, ] appnope = [ {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, @@ -2473,8 +2462,8 @@ astor = [ {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, ] astroid = [ - {file = "astroid-2.11.3-py3-none-any.whl", hash = "sha256:f1af57483cd17e963b2eddce8361e00fc593d1520fe19948488e94ff6476bd71"}, - {file = "astroid-2.11.3.tar.gz", hash = "sha256:4e5ba10571e197785e312966ea5efb2f5783176d4c1a73fa922d474ae2be59f7"}, + {file = "astroid-2.11.6-py3-none-any.whl", hash = "sha256:ba33a82a9a9c06a5ceed98180c5aab16e29c285b828d94696bf32d6015ea82a9"}, + {file = "astroid-2.11.6.tar.gz", hash = "sha256:4f933d0bf5e408b03a6feb5d23793740c27e07340605f236496cd6ce552043d6"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -2485,128 +2474,71 @@ attrs = [ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, ] babel = [ - {file = "Babel-2.10.1-py3-none-any.whl", hash = "sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2"}, - {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, + {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, + {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, ] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] -"backports.cached-property" = [ - {file = "backports.cached-property-1.0.1.tar.gz", hash = "sha256:1a5ef1e750f8bc7d0204c807aae8e0f450c655be0cf4b30407a35fd4bb27186c"}, - {file = "backports.cached_property-1.0.1-py3-none-any.whl", hash = "sha256:687b5fe14be40aadcf547cae91337a1fdb84026046a39370274e54d3fe4fb4f9"}, -] +"backports.cached-property" = [] 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.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"}, - {file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"}, - {file = "black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a"}, - {file = "black-22.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968"}, - {file = "black-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"}, - {file = "black-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce"}, - {file = "black-22.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82"}, - {file = "black-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b"}, - {file = "black-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015"}, - {file = "black-22.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b"}, - {file = "black-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a"}, - {file = "black-22.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163"}, - {file = "black-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464"}, - {file = "black-22.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0"}, - {file = "black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176"}, - {file = "black-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0"}, - {file = "black-22.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20"}, - {file = "black-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a"}, - {file = "black-22.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad"}, - {file = "black-22.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21"}, - {file = "black-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265"}, - {file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"}, - {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"}, + {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, + {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, + {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, + {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, + {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, + {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, + {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, + {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, + {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, + {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, + {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, + {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, + {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, + {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, + {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, + {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, + {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, + {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, + {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, + {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, + {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, + {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, + {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, ] bleach = [ - {file = "bleach-5.0.0-py3-none-any.whl", hash = "sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1"}, - {file = "bleach-5.0.0.tar.gz", hash = "sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"}, + {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-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, - {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, -] -cffi = [ - {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, - {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, - {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, - {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, - {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, - {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, - {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, - {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, - {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, - {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, - {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, - {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, - {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, - {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, - {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, - {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, - {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, - {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, - {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, - {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, - {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, - {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, - {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, - {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, - {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, + {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, + {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, ] +cffi = [] cfgv = [ {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, - {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, -] -click = [ - {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"}, - {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"}, + {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, + {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, ] +click = [] click-default-group = [ {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, ] cloup = [ - {file = "cloup-0.13.0-py2.py3-none-any.whl", hash = "sha256:2b389c85f26e910a27c491ffa8ebc41a79431a320b8f1a49b1614fdd2f2b43cf"}, - {file = "cloup-0.13.0.tar.gz", hash = "sha256:b9f1925d087dcf52d731797b27885d6d8c80d67d85d4e8e40cdc2c085948b921"}, + {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.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, ] colour = [ {file = "colour-0.1.5-py2.py3-none-any.whl", hash = "sha256:33f6db9d564fadc16e59921a56999b79571160ce09916303d35346dddc17978c"}, @@ -2664,83 +2596,68 @@ cycler = [ {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, ] cython = [ - {file = "Cython-0.29.28-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:75686c586e37b1fed0fe4a2c053474f96fc07da0063bbfc98023454540515d31"}, - {file = "Cython-0.29.28-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:16f2e74fcac223c53e298ecead62c353d3cffa107bea5d8232e4b2ba40781634"}, - {file = "Cython-0.29.28-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b6c77cc24861a33714e74212abfab4e54bf42e1ad602623f193b8e369389af2f"}, - {file = "Cython-0.29.28-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:59f4e86b415620a097cf0ec602adf5a7ee3cc33e8220567ded96566f753483f8"}, - {file = "Cython-0.29.28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:31465dce7fd3f058d02afb98b13af962848cc607052388814428dc801cc26f57"}, - {file = "Cython-0.29.28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5658fa477e80d96c49d5ff011938dd4b62da9aa428f771b91f1a7c49af45aad8"}, - {file = "Cython-0.29.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:33b69ac9bbf2b93d8cae336cfe48889397a857e6ceeb5cef0b2f0b31b6c54f2b"}, - {file = "Cython-0.29.28-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9d39ee7ddef6856413f950b8959e852d83376d9db1c509505e3f4873df32aa70"}, - {file = "Cython-0.29.28-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c9848a423a14e8f51bd4bbf8e2ff37031764ce66bdc7c6bc06c70d4084eb23c7"}, - {file = "Cython-0.29.28-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:09448aadb818387160ca4d1e1b82dbb7001526b6d0bed7529c4e8ac12e3b6f4c"}, - {file = "Cython-0.29.28-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:341917bdb2c95bcf8322aacfe50bbe6b4794880b16fa8b2300330520e123a5e5"}, - {file = "Cython-0.29.28-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fdcef7abb09fd827691e3abe6fd42c6c34beaccfa0bc2df6074f0a49949df6a8"}, - {file = "Cython-0.29.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:43eca77169f855dd04be11921a585c8854a174f30bc925257e92bc7b9197fbd2"}, - {file = "Cython-0.29.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7962a78ceb80cdec21345fb5088e675060fa65982030d446069f2d675d30e3cd"}, - {file = "Cython-0.29.28-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ed32c206e1d68056a34b21d2ec0cf0f23d338d6531476a68c73e21e20bd7bb63"}, - {file = "Cython-0.29.28-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a0ed39c63ba52edd03a39ea9d6da6f5326aaee5d333c317feba543270a1b3af5"}, - {file = "Cython-0.29.28-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:ded4fd3da4dee2f4414c35214244e29befa7f6fede3e9be317e765169df2cbc7"}, - {file = "Cython-0.29.28-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e24bd94946ffa37f30fcb865f2340fb6d429a3c7bf87b47b22f7d22e0e68a15c"}, - {file = "Cython-0.29.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:076aa8da83383e2bed0ca5f92c13a7e76e684bc41fe8e438bbed735f5b1c2731"}, - {file = "Cython-0.29.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:004387d8b94c64681ee05660d6a234e125396097726cf2f419c0fa2ac38034d6"}, - {file = "Cython-0.29.28-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d6036f6a5a0c7fb1af88889872268b15bf20dd9cefe33a6602d79ba18b8db20f"}, - {file = "Cython-0.29.28-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1612d7439590ba3b8de5f907bf0e54bd8e024eafb8c59261531a7988030c182d"}, - {file = "Cython-0.29.28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d7d7beb600d5dd551e9322e1393b74286f4a3d4aa387f7bfbaccc1495a98603b"}, - {file = "Cython-0.29.28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5e82f6b3dc2133b2e0e2c5c63d352d40a695e40cc7ed99f4cbe83334bcf9ab39"}, - {file = "Cython-0.29.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:49076747b731ed78acf203666c3b3c5d664754ea01ca4527f62f6d8675703688"}, - {file = "Cython-0.29.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f2b7c86a73db0d8dbbd885fe67f04c7b787df37a3848b9867270d3484101fbd"}, - {file = "Cython-0.29.28-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a3b27812ac9e9737026bfbb1dd47434f3e84013f430bafe1c6cbaf1cd51b5518"}, - {file = "Cython-0.29.28-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0378a14d2580dcea234d7a2dc8d75f60c091105885096e6dd5b032be97542c16"}, - {file = "Cython-0.29.28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d7c98727397c2547a56aa0c3c98140f1873c69a0642edc9446c6c870d0d8a5b5"}, - {file = "Cython-0.29.28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6626f9691ce2093ccbcc9932f449efe3b6e1c893b556910881d177c61612e8ff"}, - {file = "Cython-0.29.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:e9cc6af0c9c477c5e175e807dce439509934efefc24ea2da9fced7fbc8170591"}, - {file = "Cython-0.29.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05edfa51c0ff31a8df3cb291b90ca93ab499686d023b9b81c216cd3509f73def"}, - {file = "Cython-0.29.28-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4b3089255b6b1cc69e4b854626a41193e6acae5332263d24707976b3cb8ca644"}, - {file = "Cython-0.29.28-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:03b749e4f0bbf631cee472add2806d338a7d496f8383f6fb28cc5fdc34b7fdb8"}, - {file = "Cython-0.29.28-py2.py3-none-any.whl", hash = "sha256:26d8d0ededca42be50e0ac377c08408e18802b1391caa3aea045a72c1bff47ac"}, - {file = "Cython-0.29.28.tar.gz", hash = "sha256:d6fac2342802c30e51426828fe084ff4deb1b3387367cf98976bb2e64b6f8e45"}, + {file = "Cython-0.29.30-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5cb144728a335d7a7fd0a61dff6abb7a9aeff9acd46d50b886b7d9a95bb7311"}, + {file = "Cython-0.29.30-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d52d5733dcb144deca8985f0a197c19cf71e6bd6bd9d8034f3f67b2dea68d12b"}, + {file = "Cython-0.29.30-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0cd6c932e945af15ae4ddcf8fdc0532bda48784c92ed0a53cf4fae897067ccd1"}, + {file = "Cython-0.29.30-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a30092c6e2d24255fbfe0525f9a750554f96a263ed986d12ac3c9f7d9a85a424"}, + {file = "Cython-0.29.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:abcaf99f90cddc0f53600613eaafc81d27c4ac0671f0df8bce5466d4e86d54a1"}, + {file = "Cython-0.29.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9826981308802c61a76f967875b31b7c683b7fc369eabaa6cbc22efeb12c90e8"}, + {file = "Cython-0.29.30-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:d166d9f853db436f5e10733a9bd615699ddb4238feadcbdf5ae50dc0b18b18f5"}, + {file = "Cython-0.29.30-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0b83a342a071c4f14e7410568e0c0bd95e2f20c0b32944e3a721649a1357fda4"}, + {file = "Cython-0.29.30-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:ffa8c09617833ff0824aa7926fa4fa9d2ec3929c67168e89105f276b7f36a63e"}, + {file = "Cython-0.29.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6b389a94b42909ff56d3491fde7c44802053a103701a7d210dcdd449a5b4f7b4"}, + {file = "Cython-0.29.30-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:7eff71c39b98078deaad1d1bdbf10864d234e2ab5d5257e980a6926a8523f697"}, + {file = "Cython-0.29.30-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8e08f18d249b9b65e272a5a60f3360a8922c4c149036b98fc821fe1afad5bdae"}, + {file = "Cython-0.29.30-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3993aafd68a7311ef94e00e44a137f6a50a69af0575ebcc8a0a074ad4152a2b2"}, + {file = "Cython-0.29.30-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5c7cfd908efc77306ddd41ef07f5a7a352c9205ced5c1e00a0e5ece4391707c4"}, + {file = "Cython-0.29.30-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e605635a92ae862cb46d84d1d6883324518f9aaff4a71cede6d61df20b6a410c"}, + {file = "Cython-0.29.30-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:786ee7b0cdb508b6de64c0f1f9c74f207186dfafad1ef938f25b7494cc481a80"}, + {file = "Cython-0.29.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:1e078943bbde703ca08d43e719480eb8b187d9023cbd91798619f5b5e18d0d71"}, + {file = "Cython-0.29.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5183356c756b56c2df12d96300d602e47ffb89943c5a0bded66faca5d3da7be0"}, + {file = "Cython-0.29.30-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e36755e71fd20eceb410cc441b7f2586654c2edb013f4663842fdaf60b96c1ca"}, + {file = "Cython-0.29.30-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e29d3487f357108b711f2f29319811d92166643d29aec1b8e063aad46a346775"}, + {file = "Cython-0.29.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5a8a3709ad9343a1dc02b8ec9cf6bb284be248d2c64af85464d9c3525eec74a5"}, + {file = "Cython-0.29.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b17639b6a155abaa61a89f6f1323fb57b138d0529911ca03978d594945d062ba"}, + {file = "Cython-0.29.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:9462e9cf284d9b1d2c5b53d62188e3c09cc5c7a0018ba349d99b73cf930238de"}, + {file = "Cython-0.29.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:58d2b734250c1093bc69c1c3a6f5736493b9f8b34eb765f0a28a4a09468c0b00"}, + {file = "Cython-0.29.30-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:28db751e2d8365b39664d9cb62dc1668688b8fcc5b954e9ca9d20e0b8e03d8b0"}, + {file = "Cython-0.29.30-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5f2dae7dd56860018d5fd5032a71f11fdc224020932b463d0511a1536f27df85"}, + {file = "Cython-0.29.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d0859a958e0155b6ae4dee04170ccfac2c3d613a7e3bee8749614530b9e3b4a4"}, + {file = "Cython-0.29.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:d0f34b44078e3e0b2f1be2b99044619b37127128e7d55c54bbd2438adcaf31d3"}, + {file = "Cython-0.29.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:80a7255ad84620f53235c0720cdee2bc7431d9e3db7b3742823a606c329eb539"}, + {file = "Cython-0.29.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0239c7a22a0f3fb1deec75cab0078eba4dd17868aa992a54a178851e0c8684"}, + {file = "Cython-0.29.30-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c299c5b250ae9f81c38200441b6f1d023aeee9d8e7f61c04001c7437181ccb06"}, + {file = "Cython-0.29.30-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:019d330ac580b2ca4a457c464ac0b8c35009d820ef5d09f328d6e31a10e1ce89"}, + {file = "Cython-0.29.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:71fd1d910aced510c001936667fc7f2901c49b2ca7a2ad67358979c94a7f42ac"}, + {file = "Cython-0.29.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:60d370c33d56077d30e5f425026e58c2559e93b4784106f61581cf54071f6270"}, + {file = "Cython-0.29.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:20778297c8bcba201ca122a2f792a9899d6e64c68a92363dd7eb24306d54d7ce"}, + {file = "Cython-0.29.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f1fe924c920b699af27aefebd722df4cfbb85206291623cd37d1a7ddfd57792"}, + {file = "Cython-0.29.30-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c79685dd4631a188e2385dc6a232896c7b67ea2e3e5f8b5555b4b743f475d6d7"}, + {file = "Cython-0.29.30-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:88c5e2f92f16cd999ddfc43d572639679e8a057587088e627e98118e46a803e6"}, + {file = "Cython-0.29.30-py2.py3-none-any.whl", hash = "sha256:acb72e0b42079862cf2f894964b41f261e941e75677e902c5f4304b3eb00af33"}, + {file = "Cython-0.29.30.tar.gz", hash = "sha256:2235b62da8fe6fa8b99422c8e583f2fb95e143867d337b5c75e4b9a1a865f9e3"}, ] 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.5.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:e831d33fd9fddc8a58e9c63ae5da328f3a6224cb976e3cdcd7ed81a0a5e3b6b8"}, - {file = "dearpygui-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a6724a07edc2740ed8beb3a23c7572f0cbf842ce470385a9c3708c477ed78a9"}, - {file = "dearpygui-1.5.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:e42f7329268d1145937e20927d5014dfbc0050285968d71a73b6339f18b0be1e"}, - {file = "dearpygui-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce79101e7b82217eda38ceabeb2dc52b98d1198ae887377c78a465a58d4422a8"}, - {file = "dearpygui-1.5.1-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:f27d92529feedf4a934f771063201ebbdcf5f73fef5138fc62685659a582abe4"}, - {file = "dearpygui-1.5.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7fbd3c15190deadeb3ce15f498de096ee3423e9d2bdd4401053435ecaf1737f0"}, - {file = "dearpygui-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:01a1b9b781c4a9396bfc65eb4c81b6648e99d37eafc7448c6f57dfe70b823aed"}, - {file = "dearpygui-1.5.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:0c3b118e2441d6f16f69e1963bdd8d30271d97ca9f1203e993ad21d4ca904c5a"}, - {file = "dearpygui-1.5.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b02c03a3beb1413ad6ac2568f104c85f6d97f105da3136e46e3cc9aa6e07ce2f"}, - {file = "dearpygui-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:6d0186f5bc8e51177ac3459ac8e8c1e45f6321e448c6c099425a14346fd87ed2"}, - {file = "dearpygui-1.5.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:e3db4afe5cfe66599c86ef9a2d1a0585877077f2acfd1b5667cf009d66bbc8f5"}, - {file = "dearpygui-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e29b45218c22c7974abd7e7db290527b229ad820fc251bed3384c0c89d9c969e"}, - {file = "dearpygui-1.5.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1201f73fdd1e786965ad1e36112ee2c2a1bd8e97955afe445b65de2131d4adba"}, - {file = "dearpygui-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:4f047d016efe45244949af1db7197fc277ab528f488e2cd3501383cd2a08c030"}, -] -debugpy = [ - {file = "debugpy-1.6.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad"}, - {file = "debugpy-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f"}, - {file = "debugpy-1.6.0-cp310-cp310-win32.whl", hash = "sha256:5c492235d6b68f879df3bdbdb01f25c15be15682665517c2c7d0420e5658d71f"}, - {file = "debugpy-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:40de9ba137d355538432209d05e0f5fe5d0498dce761c39119ad4b950b51db31"}, - {file = "debugpy-1.6.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:0d383b91efee57dbb923ba20801130cf60450a0eda60bce25bccd937de8e323a"}, - {file = "debugpy-1.6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1ff853e60e77e1c16f85a31adb8360bb2d98ca588d7ed645b7f0985b240bdb5e"}, - {file = "debugpy-1.6.0-cp37-cp37m-win32.whl", hash = "sha256:8e972c717d95f56b6a3a7a29a5ede1ee8f2c3802f6f0e678203b0778eb322bf1"}, - {file = "debugpy-1.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a8aaeb53e87225141fda7b9081bd87155c1debc13e2f5a532d341112d1983b65"}, - {file = "debugpy-1.6.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:132defb585b518955358321d0f42f6aa815aa15b432be27db654807707c70b2f"}, - {file = "debugpy-1.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ee75844242b4537beb5899f3e60a578454d1f136b99e8d57ac424573797b94a"}, - {file = "debugpy-1.6.0-cp38-cp38-win32.whl", hash = "sha256:a65a2499761d47df3e9ea9567109be6e73d412e00ac3ffcf74839f3ddfcdf028"}, - {file = "debugpy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:bd980d533d0ddfc451e03a3bb32acb2900049fec39afc3425b944ebf0889be62"}, - {file = "debugpy-1.6.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:245c7789a012f86210847ec7ee9f38c30a30d4c2223c3e111829a76c9006a5d0"}, - {file = "debugpy-1.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e3aa2368883e83e7b689ddff3cafb595f7b711f6a065886b46a96a7fef874e7"}, - {file = "debugpy-1.6.0-cp39-cp39-win32.whl", hash = "sha256:72bcfa97f3afa0064afc77ab811f48ad4a06ac330f290b675082c24437730366"}, - {file = "debugpy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:30abefefd2ff5a5481162d613cb70e60e2fa80a5eb4c994717c0f008ed25d2e1"}, - {file = "debugpy-1.6.0-py2.py3-none-any.whl", hash = "sha256:4de7777842da7e08652f2776c552070bbdd758557fdec73a15d7be0e4aab95ce"}, - {file = "debugpy-1.6.0.zip", hash = "sha256:7b79c40852991f7b6c3ea65845ed0f5f6b731c37f4f9ad9c61e2ab4bd48a9275"}, -] + {file = "dearpygui-1.6.2-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:55f1034d431febc550935c71bad603afcccb6f2ac333a1ecb6d132df2fbfaef1"}, + {file = "dearpygui-1.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:402618f3f523c8c368710b1fd6961c076a0096a6166927d2a3846f8b1b5df8bf"}, + {file = "dearpygui-1.6.2-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:721a1bd6a95bc8c0da486116eeffc475799b39144c941f4af604d19d7d063d88"}, + {file = "dearpygui-1.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:54a3b692c6d20ead2d8c3d0358252803737043a83ebea03129024a6d77816df3"}, + {file = "dearpygui-1.6.2-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:57818d203639d2956ebe209669c371b8055e314971d6cac3ac3095d659f7ea4a"}, + {file = "dearpygui-1.6.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1ac323778cfb860281065a8ca9a1aae53ccb86ea92f55d0612305639eaa59bd5"}, + {file = "dearpygui-1.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6c842f71a930a93a076c549ae4e46ef482c918a350f8cd011a98d0a8774b925d"}, + {file = "dearpygui-1.6.2-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:fd6218f1bfd5e4d8dad65dd8a148dc0526b2c14a552f5b662523632143a71ad9"}, + {file = "dearpygui-1.6.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:398e2ccccab38092faa3d4ebf1c08d9898a516d626fa7b8aa026eef74fa4126f"}, + {file = "dearpygui-1.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:3260ce78879f22f5ca2345a4ee7f940ddd725527cdb3de16ab0fccdd79f88490"}, + {file = "dearpygui-1.6.2-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:b92537106ce321cc1e3a830a6bbdc5ffc48120e2936120af45c87c41bd10a83c"}, + {file = "dearpygui-1.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ea650b8c3fdf2076816d6e3374bb906c92394377c603bc119082a9e14828095"}, + {file = "dearpygui-1.6.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b0c77bd722eb0168c4ea30bf46e0b493ce398c7398e315996ab27535781dc99a"}, + {file = "dearpygui-1.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:7cf534cb7662e9f49ee93cb4ca34d6c245913b6dfb887d8a5e0b630597a34677"}, +] +debugpy = [] decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -2754,8 +2671,8 @@ deprecated = [ {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, ] dill = [ - {file = "dill-0.3.4-py2.py3-none-any.whl", hash = "sha256:7e40e4a70304fd9ceab3535d36e58791d9c4a776b38ec7f7ec9afc8d3dca4d4f"}, - {file = "dill-0.3.4.zip", hash = "sha256:9f9734205146b2b353ab3fec9af0070237b6ddae78452af83d2fca84d739e675"}, + {file = "dill-0.3.5.1-py2.py3-none-any.whl", hash = "sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302"}, + {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, ] distlib = [ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, @@ -2778,8 +2695,8 @@ fastjsonschema = [ {file = "fastjsonschema-2.15.3.tar.gz", hash = "sha256:0a572f0836962d844c1fc435e200b2e4f4677e4e6611a2e3bdd01ba697c275ec"}, ] filelock = [ - {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"}, - {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"}, + {file = "filelock-3.7.1-py3-none-any.whl", hash = "sha256:37def7b658813cda163b56fc564cdc75e86d338246458c4c28ae84cabefa2404"}, + {file = "filelock-3.7.1.tar.gz", hash = "sha256:3a0fd85166ad9dbab54c9aec96737b744106dc5f15c0b09a6744a445299fcf04"}, ] flake8 = [ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, @@ -2794,8 +2711,8 @@ flake8-builtins = [ {file = "flake8_builtins-1.5.3-py2.py3-none-any.whl", hash = "sha256:7706babee43879320376861897e5d1468e396a40b8918ed7bccf70e5f90b8687"}, ] flake8-comprehensions = [ - {file = "flake8-comprehensions-3.8.0.tar.gz", hash = "sha256:8e108707637b1d13734f38e03435984f6b7854fa6b5a4e34f93e69534be8e521"}, - {file = "flake8_comprehensions-3.8.0-py3-none-any.whl", hash = "sha256:9406314803abe1193c064544ab14fdc43c58424c0882f6ff8a581eb73fc9bb58"}, + {file = "flake8-comprehensions-3.10.0.tar.gz", hash = "sha256:181158f7e7aa26a63a0a38e6017cef28c6adee71278ce56ce11f6ec9c4905058"}, + {file = "flake8_comprehensions-3.10.0-py3-none-any.whl", hash = "sha256:dad454fd3d525039121e98fa1dd90c46bc138708196a4ebbc949ad3c859adedb"}, ] flake8-docstrings = [ {file = "flake8-docstrings-1.6.0.tar.gz", hash = "sha256:9fe7c6a306064af8e62a055c2f61e9eb1da55f84bb39caef2b84ce53708ac34b"}, @@ -2809,18 +2726,12 @@ 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.5.tar.gz", hash = "sha256:4fe93f997dea45d9d3c8bd220f12f0b6c359948fb943b5b48021a3f927edd816"}, - {file = "flake8_rst_docstrings-0.2.5-py3-none-any.whl", hash = "sha256:b99d9041b769b857efe45a448dc8c71b1bb311f9cacbdac5de82f96498105082"}, -] +flake8-rst-docstrings = [] 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.33.2-py3-none-any.whl", hash = "sha256:b4da40696829845ea8c1cb33ce51c552179754cbee7ab4e8b96a6bcf421f437a"}, - {file = "fonttools-4.33.2.zip", hash = "sha256:696fe922a271584c3ec8325ba31d4001a4fd6c4953b22900b767f1cb53ce1044"}, -] +fonttools = [] furo = [ {file = "furo-2021.11.23-py3-none-any.whl", hash = "sha256:6d396451ad1aadce380c662fca9362cb10f4fd85f296d74fe3ca32006eb641d7"}, {file = "furo-2021.11.23.tar.gz", hash = "sha256:54cecac5f3b688b5c7370d72ecdf1cd91a6c53f0f42751f4a719184b562cde70"}, @@ -2833,83 +2744,32 @@ gitpython = [ {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, ] -glcontext = [ - {file = "glcontext-2.3.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9ab27d42e2247defd047b067b011c41e46a2fa23b679d89203d426cc074fbc08"}, - {file = "glcontext-2.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b7df77de7b4b34b24b0d528c48e298876c9072bdf70f31afb899081dd95fc625"}, - {file = "glcontext-2.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d39a7c042198eb52986771cbf30837d5b29247cb915b162474a28eb7c40f3dc"}, - {file = "glcontext-2.3.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1af56c80d0b28bdb7e0cef879986e95fddfe9e8f2c16cd7ae9839e7202483776"}, - {file = "glcontext-2.3.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52be87a32884663525d2ce62b2f3af73b6e27271e3a7beb646da20afb2c47f7f"}, - {file = "glcontext-2.3.5-cp310-cp310-win32.whl", hash = "sha256:cd5b3dbba97328d3dbc8d00c74aedb1b67462e0f6c2dfee9123015047dac86ef"}, - {file = "glcontext-2.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:9439f79b4cbff5102ff609e1fc8b507c808bc8a17dcf5764d6d3736c0aeea8df"}, - {file = "glcontext-2.3.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a1046141afc30b60f92bc9707a5537b5d08788c2c7027fccc1aafafaff33be2f"}, - {file = "glcontext-2.3.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:929c395fd22e648929e0e959865e7dae3c0c113c0dbb0a221523aa1450ff3580"}, - {file = "glcontext-2.3.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a80321b5b081a9c8836680e460f6b52b0bbfbe1aae722ad402207a8488d40e4"}, - {file = "glcontext-2.3.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09891760b2027a3a690b0f506d82ac34ed0abd58fe54ff65cf8816df4398d75f"}, - {file = "glcontext-2.3.5-cp36-cp36m-win32.whl", hash = "sha256:f9472db9e98f92ed91f86f0838419071ec3e33b4c99e1b910c5beff677df14f5"}, - {file = "glcontext-2.3.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b19bdcc17e298991e54185235f0a9d1158bd683077353f31b3df14b577d6ab2f"}, - {file = "glcontext-2.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95d1cf0ea4cb7868a336746ac4fdbb6e17afb98fcdbd04c2aa16f52bf035f213"}, - {file = "glcontext-2.3.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f16493a72d9caab2c707a1f916f6dea5349c3ee8d293f39cbc6617c3f9fa68fe"}, - {file = "glcontext-2.3.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31146dcf54e3538dbffce5ee6b6f92710ed69d513a1838a1eba39f727c7d330a"}, - {file = "glcontext-2.3.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7eb4600ab24fa5f7007833bf9f309f78e6f31240d7b80f7b1beae76e21800a7"}, - {file = "glcontext-2.3.5-cp37-cp37m-win32.whl", hash = "sha256:2ff68c5d08e00246967440c2b72816bcbd01c8cde0ad30b979f0fb1149e7ebb8"}, - {file = "glcontext-2.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:f20a7065b3191f2244579ea19c0cb6967b5c623142c585616f5dbdab508e7aa4"}, - {file = "glcontext-2.3.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1348b3e82e92d04f1ddc6ebd08210951f4c37c0f2b9334adf00c43d84763ea45"}, - {file = "glcontext-2.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:418a89c8563eba061e3e8a26eafa4d720199d3945a9e46548d3bd13bfdc72f73"}, - {file = "glcontext-2.3.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86bdd828320144a70d6687e63dd0132dbcfc0723c86aa7c214dfd78998eedca1"}, - {file = "glcontext-2.3.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8809ebf227203405f7dea672859d996168e53aac2b65e2dbb99f860632c3d33"}, - {file = "glcontext-2.3.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7e6063ba81b4028af3d8960376f26eac63b3393677d19c805678febfb908e94"}, - {file = "glcontext-2.3.5-cp38-cp38-win32.whl", hash = "sha256:2286d4fe22a95147a917cb887a2c298f37ec56ef57c52e5969a56463f7540cb4"}, - {file = "glcontext-2.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:db3f3a3df661f0c2ac2994b6012650d997a9e3520abe543eb6f8f71567facb26"}, - {file = "glcontext-2.3.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2669694475924e283b3c429bf53c5867e0fe7dd3fc674f857f13ebd566eea71e"}, - {file = "glcontext-2.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d6e90642e102de51015dcfebe656dffa1339834db3215b5ea44f6fa7109f5f54"}, - {file = "glcontext-2.3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:088be0e62c874a376b3eecc95fbe6b8c469b97087696232c616b70e89b5cdf52"}, - {file = "glcontext-2.3.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2559a9a83f53de9f6cbc79a96b97c62617b990d6828b96d6d8cf6ec2883e65df"}, - {file = "glcontext-2.3.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5aadb61aece5648f9b82a6cd9c83074b44bc3568440175d7aac6533add7486b"}, - {file = "glcontext-2.3.5-cp39-cp39-win32.whl", hash = "sha256:f9fe81003daf6a0b43e6467a7d53765c3703dc9f684b30e50c95d9a2b11a97b1"}, - {file = "glcontext-2.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:2da4f13cff095e637bf817e3f41dcc28c3ee9dca9544a0c6223196705a3b8c43"}, - {file = "glcontext-2.3.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:45b27269fdaff3c937166b8f06b625bf74fa13c8d3e5eb2d4a7c316d94e345aa"}, - {file = "glcontext-2.3.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfda32c812a739665f2bc91252b75a86d8256cfea75279a5d56b434e1df36fc8"}, - {file = "glcontext-2.3.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7107df7f83abe00637ea27fa33e75b7407e3c819a06cb8e16dfbe4be25023b20"}, - {file = "glcontext-2.3.5-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e4ae8a67d6fd2fa3a4019e9b476be2e5a35aeff2a995aa23019d8cf47a03ebb"}, - {file = "glcontext-2.3.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7a7edda12bab73ff9520a2a980292b1d82e432a7008ff545e24032248a746f77"}, - {file = "glcontext-2.3.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94f1881a7e1e64c6a0c2d3eb5038e12bd18176c3e4c922c93ecbcdf069cfedcc"}, - {file = "glcontext-2.3.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773850860e81b219db9593e54955b6f3b2b3ccd9f699aaf693214b353cc053e5"}, - {file = "glcontext-2.3.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:accb0d14d5aff08af629937361cdfef07261a521479dcb228214a90f371460e2"}, - {file = "glcontext-2.3.5-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cedf181a5a05feb710c12557b988c8755a25674f41133bde02504a42f3b8ddb3"}, - {file = "glcontext-2.3.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:abfc26acc5397b07d7b7e3e463b6e318de7512faddbb52a344afb5b07c6ba5ed"}, - {file = "glcontext-2.3.5.tar.gz", hash = "sha256:44d3ef950e39930c6aefc038c9f43f1e2b6bc5c03914a4c68ac187bdc8e7636c"}, -] +glcontext = [] identify = [ - {file = "identify-2.4.12-py2.py3-none-any.whl", hash = "sha256:5f06b14366bd1facb88b00540a1de05b69b310cbc2654db3c7e07fa3a4339323"}, - {file = "identify-2.4.12.tar.gz", hash = "sha256:3f3244a559290e7d3deb9e9adc7b33594c1bc85a9dd82e0f1be519bf12a1ec17"}, + {file = "identify-2.5.1-py2.py3-none-any.whl", hash = "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa"}, + {file = "identify-2.5.1.tar.gz", hash = "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] imagesize = [ - {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, - {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, - {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, + {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 = [] importlib-resources = [ - {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"}, - {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"}, + {file = "importlib_resources-5.8.0-py3-none-any.whl", hash = "sha256:7952325ffd516c05a8ad0858c74dff2c3343f136fe66a6002b2623dd1d43f223"}, + {file = "importlib_resources-5.8.0.tar.gz", hash = "sha256:568c9f16cb204f9decc8d6d24a572eeea27dacbb4cee9e6b03a8025736769751"}, ] 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.13.0-py3-none-any.whl", hash = "sha256:2b0987af43c0d4b62cecb13c592755f599f96f29aafe36c01731aaa96df30d39"}, - {file = "ipykernel-6.13.0.tar.gz", hash = "sha256:0e28273e290858393e86e152b104e5506a79c13d25b951ac6eca220051b4be60"}, -] +ipykernel = [] ipython = [ - {file = "ipython-7.32.0-py3-none-any.whl", hash = "sha256:86df2cf291c6c70b5be6a7b608650420e89180c8ec74f376a34e2dc15c3400e7"}, - {file = "ipython-7.32.0.tar.gz", hash = "sha256:468abefc45c15419e3c8e8c0a6a5c115b2127bafa34d7c641b1d443658793909"}, + {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, + {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, ] ipython-genutils = [ {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, @@ -2928,85 +2788,84 @@ jedi = [ {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, ] jinja2 = [ - {file = "Jinja2-3.1.1-py3-none-any.whl", hash = "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119"}, - {file = "Jinja2-3.1.1.tar.gz", hash = "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"}, + {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.6-py2.py3-none-any.whl", hash = "sha256:823e510eb355949bed817e1f3e2d682455dc6af9daf6066d5698d6a2ca4481c2"}, - {file = "json5-0.9.6.tar.gz", hash = "sha256:9175ad1bc248e22bb8d95a8e8d765958bf0008fef2fe8abab5bc04e0f1ac8302"}, + {file = "json5-0.9.8.tar.gz", hash = "sha256:0fa6e4d3ef062f93ba9cf2a9103fe8e68c7917dfa33519ae3ac8c7e48e3c84ff"}, ] jsonschema = [ - {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"}, - {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"}, + {file = "jsonschema-4.6.2-py3-none-any.whl", hash = "sha256:e331e32e29743014fa59fa77895b5d8669382a4904c8ef23144f7f078ec031c7"}, + {file = "jsonschema-4.6.2.tar.gz", hash = "sha256:b19f62322b0f06927e8ae6215c01654e1885857cdcaf58ae1772b1aa97f1faf2"}, ] jupyter-client = [ - {file = "jupyter_client-7.2.2-py3-none-any.whl", hash = "sha256:44045448eadc12493d819d965eb1dc9d10d1927698adbb9b14eb9a3a4a45ba53"}, - {file = "jupyter_client-7.2.2.tar.gz", hash = "sha256:8fdbad344a8baa6a413d86d25bbf87ce21cb2b4aa5a8e0413863b9754eb8eb8a"}, + {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"}, + {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"}, ] jupyter-core = [ - {file = "jupyter_core-4.10.0-py3-none-any.whl", hash = "sha256:e7f5212177af7ab34179690140f188aa9bf3d322d8155ed972cbded19f55b6f3"}, - {file = "jupyter_core-4.10.0.tar.gz", hash = "sha256:a6de44b16b7b31d7271130c71a6792c4040f077011961138afed5e5e73181aec"}, + {file = "jupyter_core-4.11.0-py3-none-any.whl", hash = "sha256:3ac8784dd2740257a82551fbdaacad48956f1326290fbcc5e47a808347422cee"}, + {file = "jupyter_core-4.11.0.tar.gz", hash = "sha256:7cf01bed6579e83241b655c76910f5d608c4b1265dbffc0ffd4df3244628e31e"}, ] jupyter-server = [ - {file = "jupyter_server-1.16.0-py3-none-any.whl", hash = "sha256:72dd1ff5373d2def94e80632ba4397e504cc9200c5b5f44b5b0af2e062a73353"}, - {file = "jupyter_server-1.16.0.tar.gz", hash = "sha256:c756f87ad64b84e2aa522ef482445e1a93f7fe4a5fc78358f4636e53c9a0463a"}, + {file = "jupyter_server-1.18.1-py3-none-any.whl", hash = "sha256:022759b09c96a4e2feb95de59ce4283e04e17782efe197b91d23a47521609b77"}, + {file = "jupyter_server-1.18.1.tar.gz", hash = "sha256:2b72fc595bccae292260aad8157a0ead8da2c703ec6ae1bb7b36dbad0e267ea7"}, ] jupyterlab = [ - {file = "jupyterlab-3.3.4-py3-none-any.whl", hash = "sha256:87121636963027a0477e50ea8f366acf1ab06bb05d7e581cd2ec8c00f6e741a5"}, - {file = "jupyterlab-3.3.4.tar.gz", hash = "sha256:e04355848b3d91ac4d95c2e3846a0429b33e9c2edc79668fb4fc4d212f1e5107"}, + {file = "jupyterlab-3.4.3-py3-none-any.whl", hash = "sha256:f028f4c6a4171785c4a1d592ca9bf36812047703e4aa981482cd3872eb0fc169"}, + {file = "jupyterlab-3.4.3.tar.gz", hash = "sha256:e2dcc40e94366dde5de4b19e8c43ee133cf041b852d01a3625a7cf29532da49d"}, ] 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.13.0-py3-none-any.whl", hash = "sha256:fc9e86d4e7c4b139de59b0a96b53071e670bee1ed106a3389daecd68f1221aeb"}, - {file = "jupyterlab_server-2.13.0.tar.gz", hash = "sha256:2040298a133458aa22f287a877d6bb91ff973f6298d562264f9f7b75e92a5ace"}, + {file = "jupyterlab_server-2.15.0-py3-none-any.whl", hash = "sha256:0e327d7a346874fd8e94c1bcbd69906d18a8558df8f13115c5afd183c3107756"}, + {file = "jupyterlab_server-2.15.0.tar.gz", hash = "sha256:a91c515e0e7971a8f7c3c9834b748857f7dac502f93604bf283987991fd987ef"}, ] kiwisolver = [ - {file = "kiwisolver-1.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e395ece147f0692ca7cdb05a028d31b83b72c369f7b4a2c1798f4b96af1e3d8"}, - {file = "kiwisolver-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0b7f50a1a25361da3440f07c58cd1d79957c2244209e4f166990e770256b6b0b"}, - {file = "kiwisolver-1.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c032c41ae4c3a321b43a3650e6ecc7406b99ff3e5279f24c9b310f41bc98479"}, - {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1dcade8f6fe12a2bb4efe2cbe22116556e3b6899728d3b2a0d3b367db323eacc"}, - {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e45e780a74416ef2f173189ef4387e44b5494f45e290bcb1f03735faa6779bf"}, - {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d2bb56309fb75a811d81ed55fbe2208aa77a3a09ff5f546ca95e7bb5fac6eff"}, - {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b2d6c12f2ad5f55104a36a356192cfb680c049fe5e7c1f6620fc37f119cdc2"}, - {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:262c248c60f22c2b547683ad521e8a3db5909c71f679b93876921549107a0c24"}, - {file = "kiwisolver-1.4.2-cp310-cp310-win32.whl", hash = "sha256:1008346a7741620ab9cc6c96e8ad9b46f7a74ce839dbb8805ddf6b119d5fc6c2"}, - {file = "kiwisolver-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:6ece2e12e4b57bc5646b354f436416cd2a6f090c1dadcd92b0ca4542190d7190"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b978afdb913ca953cf128d57181da2e8798e8b6153be866ae2a9c446c6162f40"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f88c4b8e449908eeddb3bbd4242bd4dc2c7a15a7aa44bb33df893203f02dc2d"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e348f1904a4fab4153407f7ccc27e43b2a139752e8acf12e6640ba683093dd96"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c839bf28e45d7ddad4ae8f986928dbf5a6d42ff79760d54ec8ada8fb263e097c"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8ae5a071185f1a93777c79a9a1e67ac46544d4607f18d07131eece08d415083a"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c222f91a45da9e01a9bc4f760727ae49050f8e8345c4ff6525495f7a164c8973"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:a4e8f072db1d6fb7a7cc05a6dbef8442c93001f4bb604f1081d8c2db3ca97159"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:be9a650890fb60393e60aacb65878c4a38bb334720aa5ecb1c13d0dac54dd73b"}, - {file = "kiwisolver-1.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ec2e55bf31b43aabe32089125dca3b46fdfe9f50afbf0756ae11e14c97b80ca"}, - {file = "kiwisolver-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d1078ba770d6165abed3d9a1be1f9e79b61515de1dd00d942fa53bba79f01ae"}, - {file = "kiwisolver-1.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cbb5eb4a2ea1ffec26268d49766cafa8f957fe5c1b41ad00733763fae77f9436"}, - {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e6cda72db409eefad6b021e8a4f964965a629f577812afc7860c69df7bdb84a"}, - {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1605c7c38cc6a85212dfd6a641f3905a33412e49f7c003f35f9ac6d71f67720"}, - {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81237957b15469ea9151ec8ca08ce05656090ffabc476a752ef5ad7e2644c526"}, - {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:240009fdf4fa87844f805e23f48995537a8cb8f8c361e35fda6b5ac97fcb906f"}, - {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:240c2d51d098395c012ddbcb9bd7b3ba5de412a1d11840698859f51d0e643c4f"}, - {file = "kiwisolver-1.4.2-cp38-cp38-win32.whl", hash = "sha256:8b6086aa6936865962b2cee0e7aaecf01ab6778ce099288354a7229b4d9f1408"}, - {file = "kiwisolver-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:0d98dca86f77b851350c250f0149aa5852b36572514d20feeadd3c6b1efe38d0"}, - {file = "kiwisolver-1.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:91eb4916271655dfe3a952249cb37a5c00b6ba68b4417ee15af9ba549b5ba61d"}, - {file = "kiwisolver-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa4d97d7d2b2c082e67907c0b8d9f31b85aa5d3ba0d33096b7116f03f8061261"}, - {file = "kiwisolver-1.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:71469b5845b9876b8d3d252e201bef6f47bf7456804d2fbe9a1d6e19e78a1e65"}, - {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8ff3033e43e7ca1389ee59fb7ecb8303abb8713c008a1da49b00869e92e3dd7c"}, - {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89b57c2984f4464840e4b768affeff6b6809c6150d1166938ade3e22fbe22db8"}, - {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffbdb9a96c536f0405895b5e21ee39ec579cb0ed97bdbd169ae2b55f41d73219"}, - {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a830a03970c462d1a2311c90e05679da56d3bd8e78a4ba9985cb78ef7836c9f"}, - {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f74f2a13af201559e3d32b9ddfc303c94ae63d63d7f4326d06ce6fe67e7a8255"}, - {file = "kiwisolver-1.4.2-cp39-cp39-win32.whl", hash = "sha256:e677cc3626287f343de751e11b1e8a5b915a6ac897e8aecdbc996cd34de753a0"}, - {file = "kiwisolver-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b3e251e5c38ac623c5d786adb21477f018712f8c6fa54781bd38aa1c60b60fc2"}, - {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c380bb5ae20d829c1a5473cfcae64267b73aaa4060adc091f6df1743784aae0"}, - {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:484f2a5f0307bc944bc79db235f41048bae4106ffa764168a068d88b644b305d"}, - {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8afdf533b613122e4bbaf3c1e42c2a5e9e2d1dd3a0a017749a7658757cb377"}, - {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42f6ef9b640deb6f7d438e0a371aedd8bef6ddfde30683491b2e6f568b4e884e"}, - {file = "kiwisolver-1.4.2.tar.gz", hash = "sha256:7f606d91b8a8816be476513a77fd30abe66227039bd6f8b406c348cb0247dcc9"}, + {file = "kiwisolver-1.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fd2842a0faed9ab9aba0922c951906132d9384be89690570f0ed18cd4f20e658"}, + {file = "kiwisolver-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:caa59e2cae0e23b1e225447d7a9ddb0f982f42a6a22d497a484dfe62a06f7c0e"}, + {file = "kiwisolver-1.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1d2c744aeedce22c122bb42d176b4aa6d063202a05a4abdacb3e413c214b3694"}, + {file = "kiwisolver-1.4.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:afe173ac2646c2636305ab820cc0380b22a00a7bca4290452e7166b4f4fa49d0"}, + {file = "kiwisolver-1.4.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40240da438c0ebfe2aa76dd04b844effac6679423df61adbe3437d32f23468d9"}, + {file = "kiwisolver-1.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21a3a98f0a21fc602663ca9bce2b12a4114891bdeba2dea1e9ad84db59892fca"}, + {file = "kiwisolver-1.4.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51078855a16b7a4984ed2067b54e35803d18bca9861cb60c60f6234b50869a56"}, + {file = "kiwisolver-1.4.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c16635f8dddbeb1b827977d0b00d07b644b040aeb9ff8607a9fc0997afa3e567"}, + {file = "kiwisolver-1.4.3-cp310-cp310-win32.whl", hash = "sha256:2d76780d9c65c7529cedd49fa4802d713e60798d8dc3b0d5b12a0a8f38cca51c"}, + {file = "kiwisolver-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:3a297d77b3d6979693f5948df02b89431ae3645ec95865e351fb45578031bdae"}, + {file = "kiwisolver-1.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ca3eefb02ef17257fae8b8555c85e7c1efdfd777f671384b0e4ef27409b02720"}, + {file = "kiwisolver-1.4.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d248c46c0aa406695bda2abf99632db991f8b3a6d46018721a2892312a99f069"}, + {file = "kiwisolver-1.4.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb55258931448d61e2d50187de4ee66fc9d9f34908b524949b8b2b93d0c57136"}, + {file = "kiwisolver-1.4.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86bcf0009f2012847a688f2f4f9b16203ca4c835979a02549aa0595d9f457cc8"}, + {file = "kiwisolver-1.4.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e7cf940af5fee00a92e281eb157abe8770227a5255207818ea9a34e54a29f5b2"}, + {file = "kiwisolver-1.4.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dd22085446f3eca990d12a0878eeb5199dc9553b2e71716bfe7bed9915a472ab"}, + {file = "kiwisolver-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:d2578e5149ff49878934debfacf5c743fab49eca5ecdb983d0b218e1e554c498"}, + {file = "kiwisolver-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:5fb73cc8a34baba1dfa546ae83b9c248ef6150c238b06fc53d2773685b67ec67"}, + {file = "kiwisolver-1.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f70f3d028794e31cf9d1a822914efc935aadb2438ec4e8d4871d95eb1ce032d6"}, + {file = "kiwisolver-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:71af5b43e4fa286a35110fc5bb740fdeae2b36ca79fbcf0a54237485baeee8be"}, + {file = "kiwisolver-1.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26b5a70bdab09e6a2f40babc4f8f992e3771751e144bda1938084c70d3001c09"}, + {file = "kiwisolver-1.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1858ad3cb686eccc7c6b7c5eac846a1cfd45aacb5811b2cf575e80b208f5622a"}, + {file = "kiwisolver-1.4.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dc350cb65fe4e3f737d50f0465fa6ea0dcae0e5722b7edf5d5b0a0e3cd2c3c7"}, + {file = "kiwisolver-1.4.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:007799c7fa934646318fc128b033bb6e6baabe7fbad521bfb2279aac26225cd7"}, + {file = "kiwisolver-1.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:46fb56fde006b7ef5f8eaa3698299b0ea47444238b869ff3ced1426aa9fedcb5"}, + {file = "kiwisolver-1.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b9eb88593159a53a5ee0b0159daee531ff7dd9c87fa78f5d807ca059c7eb1b2b"}, + {file = "kiwisolver-1.4.3-cp38-cp38-win32.whl", hash = "sha256:3b1dcbc49923ac3c973184a82832e1f018dec643b1e054867d04a3a22255ec6a"}, + {file = "kiwisolver-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:7118ca592d25b2957ff7b662bc0fe4f4c2b5d5b27814b9b1bc9f2fb249a970e7"}, + {file = "kiwisolver-1.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:747190fcdadc377263223f8f72b038381b3b549a8a3df5baf4d067da4749b046"}, + {file = "kiwisolver-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fd628e63ffdba0112e3ddf1b1e9f3db29dd8262345138e08f4938acbc6d0805a"}, + {file = "kiwisolver-1.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:22ccba48abae827a0f952a78a7b1a7ff01866131e5bbe1f826ce9bda406bf051"}, + {file = "kiwisolver-1.4.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:af24b21c2283ca69c416a8a42cde9764dc36c63d3389645d28c69b0e93db3cd7"}, + {file = "kiwisolver-1.4.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:547111ef7cf13d73546c2de97ce434935626c897bdec96a578ca100b5fcd694b"}, + {file = "kiwisolver-1.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f85adfebd7d3c3db649efdf73659e1677a2cf3fa6e2556a3f373578af14bf7"}, + {file = "kiwisolver-1.4.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffd7cf165ff71afb202b3f36daafbf298932bee325aac9f58e1c9cd55838bef0"}, + {file = "kiwisolver-1.4.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b3136eecf7e1b4a4d23e4b19d6c4e7a8e0b42d55f30444e3c529700cdacaa0d"}, + {file = "kiwisolver-1.4.3-cp39-cp39-win32.whl", hash = "sha256:46c6e5018ba31d5ee7582f323d8661498a154dea1117486a571db4c244531f24"}, + {file = "kiwisolver-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:8395064d63b26947fa2c9faeea9c3eee35e52148c5339c37987e1d96fbf009b3"}, + {file = "kiwisolver-1.4.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:325fa1b15098e44fe4590a6c5c09a212ca10c6ebb5d96f7447d675f6c8340e4e"}, + {file = "kiwisolver-1.4.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:654280c5f41831ddcc5a331c0e3ce2e480bbc3d7c93c18ecf6236313aae2d61a"}, + {file = "kiwisolver-1.4.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae7aa0784aeadfbd693c27993727792fbe1455b84d49970bad5886b42976b18"}, + {file = "kiwisolver-1.4.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:130c6c35eded399d3967cf8a542c20b671f5ba85bd6f210f8b939f868360e9eb"}, + {file = "kiwisolver-1.4.3.tar.gz", hash = "sha256:ab8a15c2750ae8d53e31f77a94f846d0a00772240f1c12817411fa2344351f86"}, ] lazy-object-proxy = [ {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, @@ -3140,43 +2999,7 @@ markupsafe = [ {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.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:456cc8334f6d1124e8ff856b42d2cc1c84335375a16448189999496549f7182b"}, - {file = "matplotlib-3.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8a77906dc2ef9b67407cec0bdbf08e3971141e535db888974a915be5e1e3efc6"}, - {file = "matplotlib-3.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e70ae6475cfd0fad3816dcbf6cac536dc6f100f7474be58d59fa306e6e768a4"}, - {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53273c5487d1c19c3bc03b9eb82adaf8456f243b97ed79d09dded747abaf1235"}, - {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3b6f3fd0d8ca37861c31e9a7cab71a0ef14c639b4c95654ea1dd153158bf0df"}, - {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8c87cdaf06fd7b2477f68909838ff4176f105064a72ca9d24d3f2a29f73d393"}, - {file = "matplotlib-3.5.1-cp310-cp310-win32.whl", hash = "sha256:e2f28a07b4f82abb40267864ad7b3a4ed76f1b1663e81c7efc84a9b9248f672f"}, - {file = "matplotlib-3.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:d70a32ee1f8b55eed3fd4e892f0286df8cccc7e0475c11d33b5d0a148f5c7599"}, - {file = "matplotlib-3.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:68fa30cec89b6139dc559ed6ef226c53fd80396da1919a1b5ef672c911aaa767"}, - {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e3484d8455af3fdb0424eae1789af61f6a79da0c80079125112fd5c1b604218"}, - {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e293b16cf303fe82995e41700d172a58a15efc5331125d08246b520843ef21ee"}, - {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e3520a274a0e054e919f5b3279ee5dbccf5311833819ccf3399dab7c83e90a25"}, - {file = "matplotlib-3.5.1-cp37-cp37m-win32.whl", hash = "sha256:2252bfac85cec7af4a67e494bfccf9080bcba8a0299701eab075f48847cca907"}, - {file = "matplotlib-3.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf67e05a1b7f86583f6ebd01f69b693b9c535276f4e943292e444855870a1b8"}, - {file = "matplotlib-3.5.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6c094e4bfecd2fa7f9adffd03d8abceed7157c928c2976899de282f3600f0a3d"}, - {file = "matplotlib-3.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:506b210cc6e66a0d1c2bb765d055f4f6bc2745070fb1129203b67e85bbfa5c18"}, - {file = "matplotlib-3.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b04fc29bcef04d4e2d626af28d9d892be6aba94856cb46ed52bcb219ceac8943"}, - {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577ed20ec9a18d6bdedb4616f5e9e957b4c08563a9f985563a31fd5b10564d2a"}, - {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e486f60db0cd1c8d68464d9484fd2a94011c1ac8593d765d0211f9daba2bd535"}, - {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b71f3a7ca935fc759f2aed7cec06cfe10bc3100fadb5dbd9c435b04e557971e1"}, - {file = "matplotlib-3.5.1-cp38-cp38-win32.whl", hash = "sha256:d24e5bb8028541ce25e59390122f5e48c8506b7e35587e5135efcb6471b4ac6c"}, - {file = "matplotlib-3.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:778d398c4866d8e36ee3bf833779c940b5f57192fa0a549b3ad67bc4c822771b"}, - {file = "matplotlib-3.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bb1c613908f11bac270bc7494d68b1ef6e7c224b7a4204d5dacf3522a41e2bc3"}, - {file = "matplotlib-3.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:edf5e4e1d5fb22c18820e8586fb867455de3b109c309cb4fce3aaed85d9468d1"}, - {file = "matplotlib-3.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:40e0d7df05e8efe60397c69b467fc8f87a2affeb4d562fe92b72ff8937a2b511"}, - {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a350ca685d9f594123f652ba796ee37219bf72c8e0fc4b471473d87121d6d34"}, - {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3e66497cd990b1a130e21919b004da2f1dc112132c01ac78011a90a0f9229778"}, - {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:87900c67c0f1728e6db17c6809ec05c025c6624dcf96a8020326ea15378fe8e7"}, - {file = "matplotlib-3.5.1-cp39-cp39-win32.whl", hash = "sha256:b8a4fb2a0c5afbe9604f8a91d7d0f27b1832c3e0b5e365f95a13015822b4cd65"}, - {file = "matplotlib-3.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:fe8d40c434a8e2c68d64c6d6a04e77f21791a93ff6afe0dce169597c110d3079"}, - {file = "matplotlib-3.5.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:34a1fc29f8f96e78ec57a5eff5e8d8b53d3298c3be6df61e7aa9efba26929522"}, - {file = "matplotlib-3.5.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b19a761b948e939a9e20173aaae76070025f0024fc8f7ba08bef22a5c8573afc"}, - {file = "matplotlib-3.5.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6803299cbf4665eca14428d9e886de62e24f4223ac31ab9c5d6d5339a39782c7"}, - {file = "matplotlib-3.5.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14334b9902ec776461c4b8c6516e26b450f7ebe0b3ef8703bf5cdfbbaecf774a"}, - {file = "matplotlib-3.5.1.tar.gz", hash = "sha256:b2e9810e09c3a47b73ce9cab5a72243a1258f61e7900969097a817232246ce1c"}, -] +matplotlib = [] matplotlib-inline = [ {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, @@ -3198,15 +3021,6 @@ mistune = [ {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, ] moderngl = [ - {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:186f8ab2b869c56f677dc87de0577a60790fb9306bd5149cedc433a39e9291e5"}, - {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de252103b24a8dc40c7f6e1755e29bc9263c33b92141787b50c7ab0266c74906"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bcfcec3bc3b9a1ee19e94fa524913fd45c37214ea69301a6911e8e53f966029"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d76b0fb489a5dc6da591b979f8c471bb5b67409afaa9fe4569bc0abf25221f4"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_27_x86_64.whl", hash = "sha256:792ffe1ec233ed5fcfb0c14955a7f944d64c0d49713ff8b9c5fa3176d96f05c3"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:1f9ed0bc0d706124a01be2ad59b5774bb3b023e61dcf39faf7c4c7ef4b9f4f75"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7c2fce8b7a68f3df9189a19f424478e1d853cfd3e142efd1eb0d4cdf44148d7"}, - {file = "moderngl-5.6.4-cp310-cp310-win32.whl", hash = "sha256:0c6b482f678641e56bd44acecd10eddf74d2cd31e472eff6cca05493cf01e2c9"}, - {file = "moderngl-5.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:28b517fc56c9ab9eb1f5833f7d7b1274d3719b962f95f55ccd8a0f6db884a92b"}, {file = "moderngl-5.6.4-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:bc3764d67f037b67051871345a1d0b7a3d2c19cb5c0c0af0a84c532e802d6642"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:90006d9dfd5333da604a7d26b2a5e70e1a570f291cd745b8bf80e4833d8821b6"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:af44437545380a840dafd09658eb56592831dbd4fb481d320249d0d42c591bae"}, @@ -3215,45 +3029,21 @@ moderngl = [ {file = "moderngl-5.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:331fd4bce60b10a08eed81a3ed4c70b7c297c38f981fdf3968d03a1c892af247"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1bd864b5cc2fc1255785e33575cec98fa5ded698503c4f8f3fa9230abeaa3a04"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b22534529f5bc52c1fe43336787c06d51123ae978fb56e74e47cabd85056c934"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5151ccf38af80ce8600eac089df1c814eb72aa99c8768307348c1a170104b7e"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ef57f65c639d12d534dce70e5c08965f0856ac371c669c7586904b8db6453eb"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0032c07b31bec50b26bba7ee7999e0f697000b31456bfa84391614bb92dba376"}, {file = "moderngl-5.6.4-cp36-cp36m-win32.whl", hash = "sha256:ee5b1eced39d7f6dc68782c2abf01c1130a40b6d83d333d175ee71adbea7c721"}, {file = "moderngl-5.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:52ee915a559762f0e992344961b35e0d241be32f8aa7464494e958f777e0534c"}, {file = "moderngl-5.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f83f6ab1fafdba2d9c06a7a1c8a4e460689ea1d514146606acc74f14e0831d93"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c350e06affea9fabc636b2350cf6e58d83ee2e7264527eee0f5d142c167f5463"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3eb65afc8ec4a1d4a4c48696fb0f4f6cf7a7ada6bef97818d717dbca73c57b11"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ec09bb3382d36e5ef3e627e85744b719db1175c3a3fdbadf9acde48eb1aca6"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23b6b30c5a16807d9d2b92f343fcdca8713a88801d8afa985decd302bb6ef7e9"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5eb217b7726511d2382bfdd56b2a8ff5489aa7d1d73bf4f854343b07df286fa9"}, {file = "moderngl-5.6.4-cp37-cp37m-win32.whl", hash = "sha256:4fd721eb83e73d34c3f7b5a11aec656fef461b51bbe7503b07ea27370c593cbd"}, {file = "moderngl-5.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:01c71d94dbd59b5d37ead463991e2998c0924426cffa393b9da2b8334551c998"}, - {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:46e7e03360eafa77159e0d6142904de0d2e9400254414820bbc2d0ca16b14388"}, {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2ec6ecd845f21ba44a08c11521cb71f2a9c2ea2ec189b7ed30d17837d392d70"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:40f74a2246e5302f93f2d46f76c0d2a26cbed1eb29731674c4052476f1e9c9ea"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5e158e6881034c7e1d0c583d7c82ff608439606f2359dc6098e4be4fd93cef9d"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eb8fb5efab2716938308732d16d0caf1a195015d84d73f2b73e3adacd228ba6"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59907d8855dd3ccf1950e8f43f5a1a7cdd93910d8edf538bf52e62098be22360"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8037b6934843000d5fecd2b1933d3894687123fc9afdb19af52a9a628971163d"}, {file = "moderngl-5.6.4-cp38-cp38-win32.whl", hash = "sha256:a28dc741469eeb69549ee85b4ddbf8e9cfca6a2b19ce0406df9fde20f78082c8"}, {file = "moderngl-5.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:ce87962b91635d857cac4a753c5d5f647d94dc66dcb0f090bb8d758fd226c3e8"}, - {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d4c56e15a5fb29de0295891ec3b153e2bd8aeada0c0825135aa5851fa481ff28"}, {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fb139bcdd25eae2c546e5788e9d8719f6c4b18a2ba68a9df31699b4ac57d62d"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9645afaa1704b2628d8a58be0760243d9954a62902283b176ea00a55b54eafe"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a3aaa15eb4d43b79e06a46945869feb13f325312ad63666ef2b7d3e216e3a09"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a07531c6b0f3da3058bd8927bc6c75eface98ce1416d8be4072b9b11b314b718"}, {file = "moderngl-5.6.4-cp39-cp39-win32.whl", hash = "sha256:fc5cc1601a3df8f45f1901c6b9960731e0619d1781b0d036e12341fbf2ef55d3"}, {file = "moderngl-5.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:1c74b71c9acee9f0e69807a086d76e92f37c1960c3bb1d6a6e2472fd03f7be5b"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1927a52fd3465c508045a1c4a8ea8c793399830d48458d431936f24f8827f136"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d04747cc9a96f786d04c8a176d5d2cbb51159efd66287d0e676ac674f53e861"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9092c50a2bb293be770f6f0ae5f1cb940848bf03682696c473a6d3f2c7710d2"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571e524fde685e21dbe132f4eb7bb223cfc235dc917a4cf122bc44897be18e89"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ee02dba4b32d7a165a36c797ce495d71deb085a7e29cfa7f1236fa7ccdfc6160"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0c02fdd386c45ad5d5053a436da64181a7821a042f6665c4ae415edfbdfe244c"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e2b40f1e11ee5f251a0d564e6a5d285ff91adf361e84f6912fc10959b92bd83"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d5f918dda6dc1ec5465d7105b06c5525041fbc368df5d4636145006ce3d303"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a6bd0e342388b931954671ccf8300ab36cc7d8c991547581efa6df5628bda8b"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:890caba3795a0288259d76a2cee014c6ffc00619bef179a8d0a87fd9c16a3729"}, {file = "moderngl-5.6.4.tar.gz", hash = "sha256:8c6d04559f5e3bf75a18525cd46d213c0f3a8409363718978e6de691bdb551fb"}, ] moderngl-window = [ @@ -3295,21 +3085,18 @@ 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.3.7-py3-none-any.whl", hash = "sha256:89184baa2d66b8ac3c8d3df57cbcf16f34148954d410a2fb3e897d7c18f2479d"}, - {file = "nbclassic-0.3.7.tar.gz", hash = "sha256:36dbaa88ffaf5dc05d149deb97504b86ba648f4a80a60b8a58ac94acab2daeb5"}, -] +nbclassic = [] nbclient = [ - {file = "nbclient-0.6.0-py3-none-any.whl", hash = "sha256:2eed35fc954716cdf0a01ea8cbdd9f9316761479008570059e2f5de29e139423"}, - {file = "nbclient-0.6.0.tar.gz", hash = "sha256:3f89a403c6badf24d2855a455b69a80985b3b27e04111243fdb6a88a28d27031"}, + {file = "nbclient-0.6.6-py3-none-any.whl", hash = "sha256:09bae4ea2df79fa6bc50aeb8278d8b79d2036792824337fa6eee834afae17312"}, + {file = "nbclient-0.6.6.tar.gz", hash = "sha256:0df76a7961d99a681b4796c74a1f2553b9f998851acc01896dce064ad19a9027"}, ] nbconvert = [ {file = "nbconvert-6.5.0-py3-none-any.whl", hash = "sha256:c56dd0b8978a1811a5654f74c727ff16ca87dd5a43abd435a1c49b840fcd8360"}, {file = "nbconvert-6.5.0.tar.gz", hash = "sha256:223e46e27abe8596b8aed54301fadbba433b7ffea8196a68fd7b1ff509eee99d"}, ] nbformat = [ - {file = "nbformat-5.3.0-py3-none-any.whl", hash = "sha256:38856d97de49e8292e2d5d8f595e9d26f02abfd87e075d450af4511870b40538"}, - {file = "nbformat-5.3.0.tar.gz", hash = "sha256:fcc5ab8cb74e20b19570b5be809e2dba9b82836fd2761a89066ad43394ba29f5"}, + {file = "nbformat-5.4.0-py3-none-any.whl", hash = "sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad"}, + {file = "nbformat-5.4.0.tar.gz", hash = "sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"}, ] nest-asyncio = [ {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, @@ -3320,12 +3107,8 @@ networkx = [ {file = "networkx-2.6.3.tar.gz", hash = "sha256:c0946ed31d71f1b732b5aaa6da5a0388a345019af232ce2f49c766e2d6795c51"}, ] nodeenv = [ - {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, - {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, -] -notebook = [ - {file = "notebook-6.4.12-py3-none-any.whl", hash = "sha256:8c07a3bb7640e371f8a609bdbb2366a1976c6a2589da8ef917f761a61e3ad8b1"}, - {file = "notebook-6.4.12.tar.gz", hash = "sha256:6268c9ec9048cff7a45405c990c29ac9ca40b0bc3ec29263d218c5e01f2b4e86"}, + {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, + {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, ] notebook-shim = [ {file = "notebook_shim-0.1.0-py3-none-any.whl", hash = "sha256:02432d55a01139ac16e2100888aa2b56c614720cec73a27e71f40a5387e45324"}, @@ -3389,44 +3172,64 @@ pickleshare = [ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] pillow = [ - {file = "Pillow-9.1.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:42dfefbef90eb67c10c45a73a9bc1599d4dac920f7dfcbf4ec6b80cb620757fe"}, - {file = "Pillow-9.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"}, - {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c857532c719fb30fafabd2371ce9b7031812ff3889d75273827633bca0c4602"}, - {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59789a7d06c742e9d13b883d5e3569188c16acb02eeed2510fd3bfdbc1bd1530"}, - {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d45dbe4b21a9679c3e8b3f7f4f42a45a7d3ddff8a4a16109dff0e1da30a35b2"}, - {file = "Pillow-9.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e9ed59d1b6ee837f4515b9584f3d26cf0388b742a11ecdae0d9237a94505d03a"}, - {file = "Pillow-9.1.1-cp310-cp310-win32.whl", hash = "sha256:b3fe2ff1e1715d4475d7e2c3e8dabd7c025f4410f79513b4ff2de3d51ce0fa9c"}, - {file = "Pillow-9.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5b650dbbc0969a4e226d98a0b440c2f07a850896aed9266b6fedc0f7e7834108"}, - {file = "Pillow-9.1.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:0b4d5ad2cd3a1f0d1df882d926b37dbb2ab6c823ae21d041b46910c8f8cd844b"}, - {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9370d6744d379f2de5d7fa95cdbd3a4d92f0b0ef29609b4b1687f16bc197063d"}, - {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b761727ed7d593e49671d1827044b942dd2f4caae6e51bab144d4accf8244a84"}, - {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a66fe50386162df2da701b3722781cbe90ce043e7d53c1fd6bd801bca6b48d4"}, - {file = "Pillow-9.1.1-cp37-cp37m-win32.whl", hash = "sha256:2b291cab8a888658d72b575a03e340509b6b050b62db1f5539dd5cd18fd50578"}, - {file = "Pillow-9.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:1d4331aeb12f6b3791911a6da82de72257a99ad99726ed6b63f481c0184b6fb9"}, - {file = "Pillow-9.1.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8844217cdf66eabe39567118f229e275f0727e9195635a15e0e4b9227458daaf"}, - {file = "Pillow-9.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b6617221ff08fbd3b7a811950b5c3f9367f6e941b86259843eab77c8e3d2b56b"}, - {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20d514c989fa28e73a5adbddd7a171afa5824710d0ab06d4e1234195d2a2e546"}, - {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088df396b047477dd1bbc7de6e22f58400dae2f21310d9e2ec2933b2ef7dfa4f"}, - {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53c27bd452e0f1bc4bfed07ceb235663a1df7c74df08e37fd6b03eb89454946a"}, - {file = "Pillow-9.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3f6c1716c473ebd1649663bf3b42702d0d53e27af8b64642be0dd3598c761fb1"}, - {file = "Pillow-9.1.1-cp38-cp38-win32.whl", hash = "sha256:c67db410508b9de9c4694c57ed754b65a460e4812126e87f5052ecf23a011a54"}, - {file = "Pillow-9.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:f054b020c4d7e9786ae0404278ea318768eb123403b18453e28e47cdb7a0a4bf"}, - {file = "Pillow-9.1.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c17770a62a71718a74b7548098a74cd6880be16bcfff5f937f900ead90ca8e92"}, - {file = "Pillow-9.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a"}, - {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f372d0f08eff1475ef426344efe42493f71f377ec52237bf153c5713de987251"}, - {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09e67ef6e430f90caa093528bd758b0616f8165e57ed8d8ce014ae32df6a831d"}, - {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66daa16952d5bf0c9d5389c5e9df562922a59bd16d77e2a276e575d32e38afd1"}, - {file = "Pillow-9.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d78ca526a559fb84faaaf84da2dd4addef5edb109db8b81677c0bb1aad342601"}, - {file = "Pillow-9.1.1-cp39-cp39-win32.whl", hash = "sha256:55e74faf8359ddda43fee01bffbc5bd99d96ea508d8a08c527099e84eb708f45"}, - {file = "Pillow-9.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c150dbbb4a94ea4825d1e5f2c5501af7141ea95825fadd7829f9b11c97aaf6c"}, - {file = "Pillow-9.1.1-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:769a7f131a2f43752455cc72f9f7a093c3ff3856bf976c5fb53a59d0ccc704f6"}, - {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:488f3383cf5159907d48d32957ac6f9ea85ccdcc296c14eca1a4e396ecc32098"}, - {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b525a356680022b0af53385944026d3486fc8c013638cf9900eb87c866afb4c"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6e760cf01259a1c0a50f3c845f9cad1af30577fd8b670339b1659c6d0e7a41dd"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4165205a13b16a29e1ac57efeee6be2dfd5b5408122d59ef2145bc3239fa340"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937a54e5694684f74dcbf6e24cc453bfc5b33940216ddd8f4cd8f0f79167f765"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8"}, - {file = "Pillow-9.1.1.tar.gz", hash = "sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0"}, + {file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"}, + {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7888310f6214f19ab2b6df90f3f06afa3df7ef7355fc025e78a3044737fab1f5"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831e648102c82f152e14c1a0938689dbb22480c548c8d4b8b248b3e50967b88c"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cc1d2451e8a3b4bfdb9caf745b58e6c7a77d2e469159b0d527a4554d73694d1"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:136659638f61a251e8ed3b331fc6ccd124590eeff539de57c5f80ef3a9594e58"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6e8c66f70fb539301e064f6478d7453e820d8a2c631da948a23384865cd95544"}, + {file = "Pillow-9.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37ff6b522a26d0538b753f0b4e8e164fdada12db6c6f00f62145d732d8a3152e"}, + {file = "Pillow-9.2.0-cp310-cp310-win32.whl", hash = "sha256:c79698d4cd9318d9481d89a77e2d3fcaeff5486be641e60a4b49f3d2ecca4e28"}, + {file = "Pillow-9.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d"}, + {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:408673ed75594933714482501fe97e055a42996087eeca7e5d06e33218d05aa8"}, + {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:727dd1389bc5cb9827cbd1f9d40d2c2a1a0c9b32dd2261db522d22a604a6eec9"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50dff9cc21826d2977ef2d2a205504034e3a4563ca6f5db739b0d1026658e004"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6259196a589123d755380b65127ddc60f4c64b21fc3bb46ce3a6ea663659b0"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0554af24df2bf96618dac71ddada02420f946be943b181108cac55a7a2dcd4"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:15928f824870535c85dbf949c09d6ae7d3d6ac2d6efec80f3227f73eefba741c"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bdd0de2d64688ecae88dd8935012c4a72681e5df632af903a1dca8c5e7aa871a"}, + {file = "Pillow-9.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5b87da55a08acb586bad5c3aa3b86505f559b84f39035b233d5bf844b0834b1"}, + {file = "Pillow-9.2.0-cp311-cp311-win32.whl", hash = "sha256:b6d5e92df2b77665e07ddb2e4dbd6d644b78e4c0d2e9272a852627cdba0d75cf"}, + {file = "Pillow-9.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6bf088c1ce160f50ea40764f825ec9b72ed9da25346216b91361eef8ad1b8f8c"}, + {file = "Pillow-9.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:2c58b24e3a63efd22554c676d81b0e57f80e0a7d3a5874a7e14ce90ec40d3069"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef7592281f7c174d3d6cbfbb7ee5984a671fcd77e3fc78e973d492e9bf0eb3f"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dcd7b9c7139dc8258d164b55696ecd16c04607f1cc33ba7af86613881ffe4ac8"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a138441e95562b3c078746a22f8fca8ff1c22c014f856278bdbdd89ca36cff1b"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:93689632949aff41199090eff5474f3990b6823404e45d66a5d44304e9cdc467"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:f3fac744f9b540148fa7715a435d2283b71f68bfb6d4aae24482a890aed18b59"}, + {file = "Pillow-9.2.0-cp37-cp37m-win32.whl", hash = "sha256:fa768eff5f9f958270b081bb33581b4b569faabf8774726b283edb06617101dc"}, + {file = "Pillow-9.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:69bd1a15d7ba3694631e00df8de65a8cb031911ca11f44929c97fe05eb9b6c1d"}, + {file = "Pillow-9.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:030e3460861488e249731c3e7ab59b07c7853838ff3b8e16aac9561bb345da14"}, + {file = "Pillow-9.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:74a04183e6e64930b667d321524e3c5361094bb4af9083db5c301db64cd341f3"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d33a11f601213dcd5718109c09a52c2a1c893e7461f0be2d6febc2879ec2402"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fd6f5e3c0e4697fa7eb45b6e93996299f3feee73a3175fa451f49a74d092b9f"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a647c0d4478b995c5e54615a2e5360ccedd2f85e70ab57fbe817ca613d5e63b8"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4134d3f1ba5f15027ff5c04296f13328fecd46921424084516bdb1b2548e66ff"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:bc431b065722a5ad1dfb4df354fb9333b7a582a5ee39a90e6ffff688d72f27a1"}, + {file = "Pillow-9.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1536ad017a9f789430fb6b8be8bf99d2f214c76502becc196c6f2d9a75b01b76"}, + {file = "Pillow-9.2.0-cp38-cp38-win32.whl", hash = "sha256:2ad0d4df0f5ef2247e27fc790d5c9b5a0af8ade9ba340db4a73bb1a4a3e5fb4f"}, + {file = "Pillow-9.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ec52c351b35ca269cb1f8069d610fc45c5bd38c3e91f9ab4cbbf0aebc136d9c8"}, + {file = "Pillow-9.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ed2c4ef2451de908c90436d6e8092e13a43992f1860275b4d8082667fbb2ffc"}, + {file = "Pillow-9.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ad2f835e0ad81d1689f1b7e3fbac7b01bb8777d5a985c8962bedee0cc6d43da"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea98f633d45f7e815db648fd7ff0f19e328302ac36427343e4432c84432e7ff4"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7761afe0126d046974a01e030ae7529ed0ca6a196de3ec6937c11df0df1bc91c"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a54614049a18a2d6fe156e68e188da02a046a4a93cf24f373bffd977e943421"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:5aed7dde98403cd91d86a1115c78d8145c83078e864c1de1064f52e6feb61b20"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:13b725463f32df1bfeacbf3dd197fb358ae8ebcd8c5548faa75126ea425ccb60"}, + {file = "Pillow-9.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:808add66ea764ed97d44dda1ac4f2cfec4c1867d9efb16a33d158be79f32b8a4"}, + {file = "Pillow-9.2.0-cp39-cp39-win32.whl", hash = "sha256:337a74fd2f291c607d220c793a8135273c4c2ab001b03e601c36766005f36885"}, + {file = "Pillow-9.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:fac2d65901fb0fdf20363fbd345c01958a742f2dc62a8dd4495af66e3ff502a4"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ad2277b185ebce47a63f4dc6302e30f05762b688f8dc3de55dbae4651872cdf3"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7b502bc34f6e32ba022b4a209638f9e097d7a9098104ae420eb8186217ebbb"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1f14f5f691f55e1b47f824ca4fdcb4b19b4323fe43cc7bb105988cad7496be"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:dfe4c1fedfde4e2fbc009d5ad420647f7730d719786388b7de0999bf32c0d9fd"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:f07f1f00e22b231dd3d9b9208692042e29792d6bd4f6639415d2f23158a80013"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1802f34298f5ba11d55e5bb09c31997dc0c6aed919658dfdf0198a2fe75d5490"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17d4cafe22f050b46d983b71c707162d63d796a1235cdf8b9d7a112e97b15bac"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96b5e6874431df16aee0c1ba237574cb6dff1dcb173798faa6a9d8b399a05d0e"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"}, + {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"}, ] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, @@ -3436,51 +3239,45 @@ 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.18.1-py2.py3-none-any.whl", hash = "sha256:02226e69564ebca1a070bd1f046af866aa1c318dbc430027c50ab832ed2b73f2"}, - {file = "pre_commit-2.18.1.tar.gz", hash = "sha256:5d445ee1fa8738d506881c5d84f83c62bb5be6b2838e32207433647e8e5ebe10"}, -] +pre-commit = [] prometheus-client = [ {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, ] -prompt-toolkit = [ - {file = "prompt_toolkit-3.0.29-py3-none-any.whl", hash = "sha256:62291dad495e665fca0bda814e342c69952086afb0f4094d0893d357e5c78752"}, - {file = "prompt_toolkit-3.0.29.tar.gz", hash = "sha256:bd640f60e8cecd74f0dc249713d433ace2ddc62b65ee07f96d358e0b152b6ea7"}, -] +prompt-toolkit = [] psutil = [ - {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b"}, - {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:7336292a13a80eb93c21f36bde4328aa748a04b68c13d01dfddd67fc13fd0618"}, - {file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cb8d10461c1ceee0c25a64f2dd54872b70b89c26419e147a05a10b753ad36ec2"}, - {file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:7641300de73e4909e5d148e90cc3142fb890079e1525a840cf0dfd39195239fd"}, - {file = "psutil-5.9.0-cp27-none-win32.whl", hash = "sha256:ea42d747c5f71b5ccaa6897b216a7dadb9f52c72a0fe2b872ef7d3e1eacf3ba3"}, - {file = "psutil-5.9.0-cp27-none-win_amd64.whl", hash = "sha256:ef216cc9feb60634bda2f341a9559ac594e2eeaadd0ba187a4c2eb5b5d40b91c"}, - {file = "psutil-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90a58b9fcae2dbfe4ba852b57bd4a1dded6b990a33d6428c7614b7d48eccb492"}, - {file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff0d41f8b3e9ebb6b6110057e40019a432e96aae2008951121ba4e56040b84f3"}, - {file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:742c34fff804f34f62659279ed5c5b723bb0195e9d7bd9907591de9f8f6558e2"}, - {file = "psutil-5.9.0-cp310-cp310-win32.whl", hash = "sha256:8293942e4ce0c5689821f65ce6522ce4786d02af57f13c0195b40e1edb1db61d"}, - {file = "psutil-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:9b51917c1af3fa35a3f2dabd7ba96a2a4f19df3dec911da73875e1edaf22a40b"}, - {file = "psutil-5.9.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e9805fed4f2a81de98ae5fe38b75a74c6e6ad2df8a5c479594c7629a1fe35f56"}, - {file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c51f1af02334e4b516ec221ee26b8fdf105032418ca5a5ab9737e8c87dafe203"}, - {file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32acf55cb9a8cbfb29167cd005951df81b567099295291bcfd1027365b36591d"}, - {file = "psutil-5.9.0-cp36-cp36m-win32.whl", hash = "sha256:e5c783d0b1ad6ca8a5d3e7b680468c9c926b804be83a3a8e95141b05c39c9f64"}, - {file = "psutil-5.9.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d62a2796e08dd024b8179bd441cb714e0f81226c352c802fca0fd3f89eeacd94"}, - {file = "psutil-5.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d00a664e31921009a84367266b35ba0aac04a2a6cad09c550a89041034d19a0"}, - {file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7779be4025c540d1d65a2de3f30caeacc49ae7a2152108adeaf42c7534a115ce"}, - {file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072664401ae6e7c1bfb878c65d7282d4b4391f1bc9a56d5e03b5a490403271b5"}, - {file = "psutil-5.9.0-cp37-cp37m-win32.whl", hash = "sha256:df2c8bd48fb83a8408c8390b143c6a6fa10cb1a674ca664954de193fdcab36a9"}, - {file = "psutil-5.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1d7b433519b9a38192dfda962dd8f44446668c009833e1429a52424624f408b4"}, - {file = "psutil-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3400cae15bdb449d518545cbd5b649117de54e3596ded84aacabfbb3297ead2"}, - {file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2237f35c4bbae932ee98902a08050a27821f8f6dfa880a47195e5993af4702d"}, - {file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1070a9b287846a21a5d572d6dddd369517510b68710fca56b0e9e02fd24bed9a"}, - {file = "psutil-5.9.0-cp38-cp38-win32.whl", hash = "sha256:76cebf84aac1d6da5b63df11fe0d377b46b7b500d892284068bacccf12f20666"}, - {file = "psutil-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:3151a58f0fbd8942ba94f7c31c7e6b310d2989f4da74fcbf28b934374e9bf841"}, - {file = "psutil-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:539e429da49c5d27d5a58e3563886057f8fc3868a5547b4f1876d9c0f007bccf"}, - {file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58c7d923dc209225600aec73aa2c4ae8ea33b1ab31bc11ef8a5933b027476f07"}, - {file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3611e87eea393f779a35b192b46a164b1d01167c9d323dda9b1e527ea69d697d"}, - {file = "psutil-5.9.0-cp39-cp39-win32.whl", hash = "sha256:4e2fb92e3aeae3ec3b7b66c528981fd327fb93fd906a77215200404444ec1845"}, - {file = "psutil-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:7d190ee2eaef7831163f254dc58f6d2e2a22e27382b936aab51c835fc080c3d3"}, - {file = "psutil-5.9.0.tar.gz", hash = "sha256:869842dbd66bb80c3217158e629d6fceaecc3a3166d3d1faee515b05dd26ca25"}, + {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"}, + {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"}, + {file = "psutil-5.9.1-cp27-cp27m-win32.whl", hash = "sha256:0904727e0b0a038830b019551cf3204dd48ef5c6868adc776e06e93d615fc5fc"}, + {file = "psutil-5.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e7e10454cb1ab62cc6ce776e1c135a64045a11ec4c6d254d3f7689c16eb3efd2"}, + {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:56960b9e8edcca1456f8c86a196f0c3d8e3e361320071c93378d41445ffd28b0"}, + {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:44d1826150d49ffd62035785a9e2c56afcea66e55b43b8b630d7706276e87f22"}, + {file = "psutil-5.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7be9d7f5b0d206f0bbc3794b8e16fb7dbc53ec9e40bbe8787c6f2d38efcf6c9"}, + {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd9246e4cdd5b554a2ddd97c157e292ac11ef3e7af25ac56b08b455c829dca8"}, + {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29a442e25fab1f4d05e2655bb1b8ab6887981838d22effa2396d584b740194de"}, + {file = "psutil-5.9.1-cp310-cp310-win32.whl", hash = "sha256:20b27771b077dcaa0de1de3ad52d22538fe101f9946d6dc7869e6f694f079329"}, + {file = "psutil-5.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:58678bbadae12e0db55186dc58f2888839228ac9f41cc7848853539b70490021"}, + {file = "psutil-5.9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3a76ad658641172d9c6e593de6fe248ddde825b5866464c3b2ee26c35da9d237"}, + {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6a11e48cb93a5fa606306493f439b4aa7c56cb03fc9ace7f6bfa21aaf07c453"}, + {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:068935df39055bf27a29824b95c801c7a5130f118b806eee663cad28dca97685"}, + {file = "psutil-5.9.1-cp36-cp36m-win32.whl", hash = "sha256:0f15a19a05f39a09327345bc279c1ba4a8cfb0172cc0d3c7f7d16c813b2e7d36"}, + {file = "psutil-5.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:db417f0865f90bdc07fa30e1aadc69b6f4cad7f86324b02aa842034efe8d8c4d"}, + {file = "psutil-5.9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:91c7ff2a40c373d0cc9121d54bc5f31c4fa09c346528e6a08d1845bce5771ffc"}, + {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fea896b54f3a4ae6f790ac1d017101252c93f6fe075d0e7571543510f11d2676"}, + {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3054e923204b8e9c23a55b23b6df73a8089ae1d075cb0bf711d3e9da1724ded4"}, + {file = "psutil-5.9.1-cp37-cp37m-win32.whl", hash = "sha256:d2d006286fbcb60f0b391741f520862e9b69f4019b4d738a2a45728c7e952f1b"}, + {file = "psutil-5.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b14ee12da9338f5e5b3a3ef7ca58b3cba30f5b66f7662159762932e6d0b8f680"}, + {file = "psutil-5.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:19f36c16012ba9cfc742604df189f2f28d2720e23ff7d1e81602dbe066be9fd1"}, + {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:944c4b4b82dc4a1b805329c980f270f170fdc9945464223f2ec8e57563139cf4"}, + {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b6750a73a9c4a4e689490ccb862d53c7b976a2a35c4e1846d049dcc3f17d83b"}, + {file = "psutil-5.9.1-cp38-cp38-win32.whl", hash = "sha256:a8746bfe4e8f659528c5c7e9af5090c5a7d252f32b2e859c584ef7d8efb1e689"}, + {file = "psutil-5.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:79c9108d9aa7fa6fba6e668b61b82facc067a6b81517cab34d07a84aa89f3df0"}, + {file = "psutil-5.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28976df6c64ddd6320d281128817f32c29b539a52bdae5e192537bc338a9ec81"}, + {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b88f75005586131276634027f4219d06e0561292be8bd6bc7f2f00bdabd63c4e"}, + {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:645bd4f7bb5b8633803e0b6746ff1628724668681a434482546887d22c7a9537"}, + {file = "psutil-5.9.1-cp39-cp39-win32.whl", hash = "sha256:32c52611756096ae91f5d1499fe6c53b86f4a9ada147ee42db4991ba1520e574"}, + {file = "psutil-5.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:f65f9a46d984b8cd9b3750c2bdb419b2996895b005aefa6cbaba9a143b1ce2c5"}, + {file = "psutil-5.9.1.tar.gz", hash = "sha256:57f1819b5d9e95cdfb0c881a8a5b7d542ed0b7c522d575706a80bedc848c8954"}, ] psutil-wheels = [ {file = "psutil-wheels-5.8.0.tar.gz", hash = "sha256:9fb80725195402a66e5db947f239d032500cde75ca5d8625326d797a65341d6f"}, @@ -3541,20 +3338,20 @@ pygithub = [ {file = "PyGithub-1.55.tar.gz", hash = "sha256:1bbfff9372047ff3f21d5cd8e07720f3dbfdaf6462fcaed9d815f528f1ba7283"}, ] pyglet = [ - {file = "pyglet-1.5.23-py3-none-any.whl", hash = "sha256:086317c022612bf0aa28f32134a8cbe3d11de96787f5412d38d9c6abb6cfc771"}, - {file = "pyglet-1.5.23.zip", hash = "sha256:dee920203cf306159c503babb62f38787268708977f5c945d28337594b797c46"}, + {file = "pyglet-1.5.26-py3-none-any.whl", hash = "sha256:529b7b1198df3a8399b9621a99ca5e29cd32bb98428bd0e8ba699afa4ba96d2b"}, + {file = "pyglet-1.5.26.zip", hash = "sha256:ee8c5e0b5b87df84188e20e552982eba8da00944b4c5560f1cfdd5c9714d19b0"}, ] pygments = [ - {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, - {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, + {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, + {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, ] pyjwt = [ {file = "PyJWT-2.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"}, {file = "PyJWT-2.4.0.tar.gz", hash = "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba"}, ] pylint = [ - {file = "pylint-2.13.7-py3-none-any.whl", hash = "sha256:13ddbbd8872c804574149e81197c28877eba75224ba6b76cd8652fc31df55c1c"}, - {file = "pylint-2.13.7.tar.gz", hash = "sha256:911d3a97c808f7554643bcc5416028cfdc42eae34ed129b150741888c688d5d5"}, + {file = "pylint-2.13.9-py3-none-any.whl", hash = "sha256:705c620d388035bdd9ff8b44c5bcdd235bfb49d276d488dd2c8ff1736aa42526"}, + {file = "pylint-2.13.9.tar.gz", hash = "sha256:095567c96e19e6f57b5b907e67d265ff535e588fe26b12b5ebe1fc5645b2c731"}, ] pynacl = [ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, @@ -3587,8 +3384,8 @@ pyobjc-framework-cocoa = [ {file = "pyobjc_framework_Cocoa-8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:baa2947f76b119a3360973d74d57d6dada87ac527bab9a88f31596af392f123c"}, ] pyparsing = [ - {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, - {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, + {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"}, @@ -3642,25 +3439,27 @@ pytz = [ {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, ] pywin32 = [ - {file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"}, - {file = "pywin32-303-cp310-cp310-win_amd64.whl", hash = "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51"}, - {file = "pywin32-303-cp311-cp311-win32.whl", hash = "sha256:d9b5d87ca944eb3aa4cd45516203ead4b37ab06b8b777c54aedc35975dec0dee"}, - {file = "pywin32-303-cp311-cp311-win_amd64.whl", hash = "sha256:fcf44032f5b14fcda86028cdf49b6ebdaea091230eb0a757282aa656e4732439"}, - {file = "pywin32-303-cp36-cp36m-win32.whl", hash = "sha256:aad484d52ec58008ca36bd4ad14a71d7dd0a99db1a4ca71072213f63bf49c7d9"}, - {file = "pywin32-303-cp36-cp36m-win_amd64.whl", hash = "sha256:2a09632916b6bb231ba49983fe989f2f625cea237219530e81a69239cd0c4559"}, - {file = "pywin32-303-cp37-cp37m-win32.whl", hash = "sha256:b1675d82bcf6dbc96363fca747bac8bff6f6e4a447a4287ac652aa4b9adc796e"}, - {file = "pywin32-303-cp37-cp37m-win_amd64.whl", hash = "sha256:c268040769b48a13367221fced6d4232ed52f044ffafeda247bd9d2c6bdc29ca"}, - {file = "pywin32-303-cp38-cp38-win32.whl", hash = "sha256:5f9ec054f5a46a0f4dfd72af2ce1372f3d5a6e4052af20b858aa7df2df7d355b"}, - {file = "pywin32-303-cp38-cp38-win_amd64.whl", hash = "sha256:793bf74fce164bcffd9d57bb13c2c15d56e43c9542a7b9687b4fccf8f8a41aba"}, - {file = "pywin32-303-cp39-cp39-win32.whl", hash = "sha256:7d3271c98434617a11921c5ccf74615794d97b079e22ed7773790822735cc352"}, - {file = "pywin32-303-cp39-cp39-win_amd64.whl", hash = "sha256:79cbb862c11b9af19bcb682891c1b91942ec2ff7de8151e2aea2e175899cda34"}, + {file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"}, + {file = "pywin32-304-cp310-cp310-win_amd64.whl", hash = "sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48"}, + {file = "pywin32-304-cp310-cp310-win_arm64.whl", hash = "sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f"}, + {file = "pywin32-304-cp311-cp311-win32.whl", hash = "sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269"}, + {file = "pywin32-304-cp311-cp311-win_amd64.whl", hash = "sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4"}, + {file = "pywin32-304-cp311-cp311-win_arm64.whl", hash = "sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43"}, + {file = "pywin32-304-cp36-cp36m-win32.whl", hash = "sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1"}, + {file = "pywin32-304-cp36-cp36m-win_amd64.whl", hash = "sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988"}, + {file = "pywin32-304-cp37-cp37m-win32.whl", hash = "sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5"}, + {file = "pywin32-304-cp37-cp37m-win_amd64.whl", hash = "sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df"}, + {file = "pywin32-304-cp38-cp38-win32.whl", hash = "sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96"}, + {file = "pywin32-304-cp38-cp38-win_amd64.whl", hash = "sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e"}, + {file = "pywin32-304-cp39-cp39-win32.whl", hash = "sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc"}, + {file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"}, ] pywinpty = [ - {file = "pywinpty-2.0.5-cp310-none-win_amd64.whl", hash = "sha256:f86c76e2881c37e69678cbbf178109f8da1fa8584db24d58e1b9369b0276cfcb"}, - {file = "pywinpty-2.0.5-cp37-none-win_amd64.whl", hash = "sha256:ff9b52f182650cfdf3db1b264a6fe0963eb9d996a7a1fa843ac406c1e32111f8"}, - {file = "pywinpty-2.0.5-cp38-none-win_amd64.whl", hash = "sha256:651ee1467bd7eb6f64d44dbc954b7ab7d15ab6d8adacc4e13299692c67c5d5d2"}, - {file = "pywinpty-2.0.5-cp39-none-win_amd64.whl", hash = "sha256:e59a508ae78374febada3e53b5bbc90b5ad07ae68cbfd72a2e965f9793ae04f3"}, - {file = "pywinpty-2.0.5.tar.gz", hash = "sha256:e125d3f1804d8804952b13e33604ad2ca8b9b2cac92b27b521c005d1604794f8"}, + {file = "pywinpty-2.0.6-cp310-none-win_amd64.whl", hash = "sha256:7fadc5265484c7d7c84554b9f1cfd7acf6383a877c1cfb3ee77d51179145b3ce"}, + {file = "pywinpty-2.0.6-cp37-none-win_amd64.whl", hash = "sha256:906a3048ecfec6ece1b141594ebbbcd5c4751960714c50524e8e907bb77c9207"}, + {file = "pywinpty-2.0.6-cp38-none-win_amd64.whl", hash = "sha256:5e4b2167e813575bf495b46adb2d88be5c470d9daf49d488900350853e95248f"}, + {file = "pywinpty-2.0.6-cp39-none-win_amd64.whl", hash = "sha256:f7ae5d29f1c3d028e06032f8d267b51fd72ea219b9bba3e2a972a7bc26a25a87"}, + {file = "pywinpty-2.0.6.tar.gz", hash = "sha256:a91a77d23f29a58b44f62a9474a31ed67df1277cddb69665275f8d22429046ac"}, ] pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, @@ -3698,68 +3497,78 @@ pyyaml = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] pyzmq = [ - {file = "pyzmq-22.3.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:6b217b8f9dfb6628f74b94bdaf9f7408708cb02167d644edca33f38746ca12dd"}, - {file = "pyzmq-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2841997a0d85b998cbafecb4183caf51fd19c4357075dfd33eb7efea57e4c149"}, - {file = "pyzmq-22.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f89468059ebc519a7acde1ee50b779019535db8dcf9b8c162ef669257fef7a93"}, - {file = "pyzmq-22.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea12133df25e3a6918718fbb9a510c6ee5d3fdd5a346320421aac3882f4feeea"}, - {file = "pyzmq-22.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c532fd68b93998aab92356be280deec5de8f8fe59cd28763d2cc8a58747b7f"}, - {file = "pyzmq-22.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f907c7359ce8bf7f7e63c82f75ad0223384105f5126f313400b7e8004d9b33c3"}, - {file = "pyzmq-22.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:902319cfe23366595d3fa769b5b751e6ee6750a0a64c5d9f757d624b2ac3519e"}, - {file = "pyzmq-22.3.0-cp310-cp310-win32.whl", hash = "sha256:67db33bea0a29d03e6eeec55a8190e033318cee3cbc732ba8fd939617cbf762d"}, - {file = "pyzmq-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:7661fc1d5cb73481cf710a1418a4e1e301ed7d5d924f91c67ba84b2a1b89defd"}, - {file = "pyzmq-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79244b9e97948eaf38695f4b8e6fc63b14b78cc37f403c6642ba555517ac1268"}, - {file = "pyzmq-22.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab888624ed68930442a3f3b0b921ad7439c51ba122dbc8c386e6487a658e4a4e"}, - {file = "pyzmq-22.3.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18cd854b423fce44951c3a4d3e686bac8f1243d954f579e120a1714096637cc0"}, - {file = "pyzmq-22.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:de8df0684398bd74ad160afdc2a118ca28384ac6f5e234eb0508858d8d2d9364"}, - {file = "pyzmq-22.3.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:62bcade20813796c426409a3e7423862d50ff0639f5a2a95be4b85b09a618666"}, - {file = "pyzmq-22.3.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ea5a79e808baef98c48c884effce05c31a0698c1057de8fc1c688891043c1ce1"}, - {file = "pyzmq-22.3.0-cp36-cp36m-win32.whl", hash = "sha256:3c1895c95be92600233e476fe283f042e71cf8f0b938aabf21b7aafa62a8dac9"}, - {file = "pyzmq-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:851977788b9caa8ed011f5f643d3ee8653af02c5fc723fa350db5125abf2be7b"}, - {file = "pyzmq-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b4ebed0977f92320f6686c96e9e8dd29eed199eb8d066936bac991afc37cbb70"}, - {file = "pyzmq-22.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42abddebe2c6a35180ca549fadc7228d23c1e1f76167c5ebc8a936b5804ea2df"}, - {file = "pyzmq-22.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1e41b32d6f7f9c26bc731a8b529ff592f31fc8b6ef2be9fa74abd05c8a342d7"}, - {file = "pyzmq-22.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:be4e0f229cf3a71f9ecd633566bd6f80d9fa6afaaff5489492be63fe459ef98c"}, - {file = "pyzmq-22.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:08c4e315a76ef26eb833511ebf3fa87d182152adf43dedee8d79f998a2162a0b"}, - {file = "pyzmq-22.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:badb868fff14cfd0e200eaa845887b1011146a7d26d579aaa7f966c203736b92"}, - {file = "pyzmq-22.3.0-cp37-cp37m-win32.whl", hash = "sha256:7c58f598d9fcc52772b89a92d72bf8829c12d09746a6d2c724c5b30076c1f11d"}, - {file = "pyzmq-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2b97502c16a5ec611cd52410bdfaab264997c627a46b0f98d3f666227fd1ea2d"}, - {file = "pyzmq-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d728b08448e5ac3e4d886b165385a262883c34b84a7fe1166277fe675e1c197a"}, - {file = "pyzmq-22.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:480b9931bfb08bf8b094edd4836271d4d6b44150da051547d8c7113bf947a8b0"}, - {file = "pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7dc09198e4073e6015d9a8ea093fc348d4e59de49382476940c3dd9ae156fba8"}, - {file = "pyzmq-22.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ca6cd58f62a2751728016d40082008d3b3412a7f28ddfb4a2f0d3c130f69e74"}, - {file = "pyzmq-22.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:468bd59a588e276961a918a3060948ae68f6ff5a7fa10bb2f9160c18fe341067"}, - {file = "pyzmq-22.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c88fa7410e9fc471e0858638f403739ee869924dd8e4ae26748496466e27ac59"}, - {file = "pyzmq-22.3.0-cp38-cp38-win32.whl", hash = "sha256:c0f84360dcca3481e8674393bdf931f9f10470988f87311b19d23cda869bb6b7"}, - {file = "pyzmq-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:f762442bab706fd874064ca218b33a1d8e40d4938e96c24dafd9b12e28017f45"}, - {file = "pyzmq-22.3.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:954e73c9cd4d6ae319f1c936ad159072b6d356a92dcbbabfd6e6204b9a79d356"}, - {file = "pyzmq-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f43b4a2e6218371dd4f41e547bd919ceeb6ebf4abf31a7a0669cd11cd91ea973"}, - {file = "pyzmq-22.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:acebba1a23fb9d72b42471c3771b6f2f18dcd46df77482612054bd45c07dfa36"}, - {file = "pyzmq-22.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cf98fd7a6c8aaa08dbc699ffae33fd71175696d78028281bc7b832b26f00ca57"}, - {file = "pyzmq-22.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d072f7dfbdb184f0786d63bda26e8a0882041b1e393fbe98940395f7fab4c5e2"}, - {file = "pyzmq-22.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:53f4fd13976789ffafedd4d46f954c7bb01146121812b72b4ddca286034df966"}, - {file = "pyzmq-22.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1b5d457acbadcf8b27561deeaa386b0217f47626b29672fa7bd31deb6e91e1b"}, - {file = "pyzmq-22.3.0-cp39-cp39-win32.whl", hash = "sha256:e6a02cf7271ee94674a44f4e62aa061d2d049001c844657740e156596298b70b"}, - {file = "pyzmq-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d3dcb5548ead4f1123851a5ced467791f6986d68c656bc63bfff1bf9e36671e2"}, - {file = "pyzmq-22.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3a4c9886d61d386b2b493377d980f502186cd71d501fffdba52bd2a0880cef4f"}, - {file = "pyzmq-22.3.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:80e043a89c6cadefd3a0712f8a1322038e819ebe9dbac7eca3bce1721bcb63bf"}, - {file = "pyzmq-22.3.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1621e7a2af72cced1f6ec8ca8ca91d0f76ac236ab2e8828ac8fe909512d566cb"}, - {file = "pyzmq-22.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d6157793719de168b199194f6b6173f0ccd3bf3499e6870fac17086072e39115"}, - {file = "pyzmq-22.3.0.tar.gz", hash = "sha256:8eddc033e716f8c91c6a2112f0a8ebc5e00532b4a6ae1eb0ccc48e027f9c671c"}, + {file = "pyzmq-23.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:22ac0243a41798e3eb5d5714b28c2f28e3d10792dffbc8a5fca092f975fdeceb"}, + {file = "pyzmq-23.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f685003d836ad0e5d4f08d1e024ee3ac7816eb2f873b2266306eef858f058133"}, + {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d4651de7316ec8560afe430fb042c0782ed8ac54c0be43a515944d7c78fddac8"}, + {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bcc6953e47bcfc9028ddf9ab2a321a3c51d7cc969db65edec092019bb837959f"}, + {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e08671dc202a1880fa522f921f35ca5925ba30da8bc96228d74a8f0643ead9c"}, + {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de727ea906033b30527b4a99498f19aca3f4d1073230a958679a5b726e2784e0"}, + {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5aa9da520e4bb8cee8189f2f541701405e7690745094ded7a37b425d60527ea"}, + {file = "pyzmq-23.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f3ff6abde52e702397949054cb5b06c1c75b5d6542f6a2ce029e46f71ffbbbf2"}, + {file = "pyzmq-23.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e2e2db5c6ef376e97c912733dfc24406f5949474d03e800d5f07b6aca4d870af"}, + {file = "pyzmq-23.2.0-cp310-cp310-win32.whl", hash = "sha256:e669913cb2179507628419ec4f0e453e48ce6f924de5884d396f18c31836089c"}, + {file = "pyzmq-23.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:a3dc339f7bc185d5fd0fd976242a5baf35de404d467e056484def8a4dd95868b"}, + {file = "pyzmq-23.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:30c365e60c39c53f8eea042b37ea28304ffa6558fb7241cf278745095a5757da"}, + {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c2d8b69a2bf239ae3d987537bf3fbc2b044a405394cf4c258fc684971dd48b2"}, + {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:602835e5672ca9ca1d78e6c148fb28c4f91b748ebc41fbd2f479d8763d58bc9b"}, + {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:831da96ba3f36cc892f0afbb4fb89b28b61b387261676e55d55a682addbd29f7"}, + {file = "pyzmq-23.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c8dec8a2f3f0bb462e6439df436cd8c7ec37968e90b4209ac621e7fbc0ed3b00"}, + {file = "pyzmq-23.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:814e5aaf0c3be9991a59066eafb2d6e117aed6b413e3e7e9be45d4e55f5e2748"}, + {file = "pyzmq-23.2.0-cp36-cp36m-win32.whl", hash = "sha256:8496a2a5efd055c61ac2c6a18116c768a25c644b6747dcfde43e91620ab3453c"}, + {file = "pyzmq-23.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:60746a7e8558655420a69441c0a1d47ed225ed3ac355920b96a96d0554ef7e6b"}, + {file = "pyzmq-23.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5cb642e94337b0c76c9c8cb9bfb0f8a78654575847d080d3e1504f312d691fc3"}, + {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:444f7d615d5f686d0ef508b9edfa8a286e6d89f449a1ba37b60ef69d869220a3"}, + {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c9638e0057e3f1a8b7c5ce33c7575349d9183a033a19b5676ad55096ae36820b"}, + {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:004a431dfa0459123e6f4660d7e3c4ac19217d134ca38bacfffb2e78716fe944"}, + {file = "pyzmq-23.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5592fb4316f895922b1cacb91b04a0fa09d6f6f19bbab4442b4d0a0825177b93"}, + {file = "pyzmq-23.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c0a5f987d73fd9b46c3d180891f829afda714ab6bab30a1218724d4a0a63afd8"}, + {file = "pyzmq-23.2.0-cp37-cp37m-win32.whl", hash = "sha256:d11628212fd731b8986f1561d9bb3f8c38d9c15b330c3d8a88963519fbcd553b"}, + {file = "pyzmq-23.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:558f5f636e3e65f261b64925e8b190e8689e334911595394572cc7523879006d"}, + {file = "pyzmq-23.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61b97f624da42813f74977425a3a6144d604ea21cf065616d36ea3a866d92c1c"}, + {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:693c96ae4d975eb8efa1639670e9b1fac0c3f98b7845b65c0f369141fb4bb21f"}, + {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b054525c9f7e240562185bf21671ca16d56bde92e9bd0f822c07dec7626b704"}, + {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:859059caf564f0c9398c9005278055ed3d37af4d73de6b1597821193b04ca09b"}, + {file = "pyzmq-23.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8355744fdbdeac5cfadfa4f38b82029b5f2b8cab7472a33453a217a7f3a9dce2"}, + {file = "pyzmq-23.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:420b9abd1a7330687a095373b8280a20cdee04342fbc8ccb3b56d9ec8efd4e62"}, + {file = "pyzmq-23.2.0-cp38-cp38-win32.whl", hash = "sha256:59928dfebe93cf1e203e3cb0fd5d5dd384da56b99c8305f2e1b0a933751710f6"}, + {file = "pyzmq-23.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:c882f1d4f96fbd807e92c334251d8ebd159a1ef89059ccd386ddea83fdb91bd8"}, + {file = "pyzmq-23.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:ced12075cdf3c7332ecc1960f77f7439d5ebb8ea20bbd3c34c8299e694f1b0a1"}, + {file = "pyzmq-23.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3a4d87342c2737fbb9eee5c33c792db27b36b04957b4e6b7edd73a5b239a2a13"}, + {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:99cedf38eaddf263cf7e2a50e405f12c02cedf6d9df00a0d9c5d7b9417b57f76"}, + {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1610260cc672975723fcf7705c69a95f3b88802a594c9867781bedd9b13422c"}, + {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c223a13555444707a0a7ebc6f9ee63053147c8c082bd1a31fd1207a03e8b0500"}, + {file = "pyzmq-23.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f5fdb00d65ec44b10cc6b9b6318ef1363b81647a4aa3270ca39565eadb2d1201"}, + {file = "pyzmq-23.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:984b232802eddf9f0be264a4d57a10b3a1fd7319df14ee6fc7b41c6d155a3e6c"}, + {file = "pyzmq-23.2.0-cp39-cp39-win32.whl", hash = "sha256:f146648941cadaaaf01254a75651a23c08159d009d36c5af42a7cc200a5e53ec"}, + {file = "pyzmq-23.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:83005d8928f8a5cebcfb33af3bfb84b1ad65d882b899141a331cc5d07d89f093"}, + {file = "pyzmq-23.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fee86542dc4ee8229e023003e3939b4d58cc2453922cf127778b69505fc9064b"}, + {file = "pyzmq-23.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5d57542429df6acff02ff022067aa75b677603cee70e3abb9742787545eec966"}, + {file = "pyzmq-23.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:057b154471e096e2dda147f7b057041acc303bb7ca4aa24c3b88c6cecdd78717"}, + {file = "pyzmq-23.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5d92e7cbeab7f70b08cc0f27255b0bb2500afc30f31075bca0b1cb87735d186c"}, + {file = "pyzmq-23.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eb4a573a8499685d62545e806d8fd143c84ac8b3439f925cd92c8763f0ed9bd7"}, + {file = "pyzmq-23.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da338e2728410d74ddeb1479ec67cfba73311607037455a40f92b6f5c62bf11d"}, + {file = "pyzmq-23.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1b2a21f595f8cc549abd6c8de1fcd34c83441e35fb24b8a59bf161889c62a486"}, + {file = "pyzmq-23.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8c0f4d6f8c985bab83792be26ff3233940ba42e22237610ac50cbcfc10a5c235"}, + {file = "pyzmq-23.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bbabd1df23bf63ae829e81200034c0e433499275a6ed29ca1a912ea7629426d9"}, + {file = "pyzmq-23.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21552624ce69e69f7924f413b802b1fb554f4c0497f837810e429faa1cd4f163"}, + {file = "pyzmq-23.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c616893a577e9d6773a3836732fd7e2a729157a108b8fccd31c87512fa01671a"}, + {file = "pyzmq-23.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ce4f71e17fa849de41a06109030d3f6815fcc33338bf98dd0dde6d456d33c929"}, + {file = "pyzmq-23.2.0.tar.gz", hash = "sha256:a51f12a8719aad9dcfb55d456022f16b90abc8dde7d3ca93ce3120b40e3fa169"}, ] 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.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, - {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, + {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"}, ] rich = [ - {file = "rich-12.2.0-py3-none-any.whl", hash = "sha256:c50f3d253bc6a9bb9c79d61a26d510d74abdf1b16881260fab5edfc3edfb082f"}, - {file = "rich-12.2.0.tar.gz", hash = "sha256:ea74bc9dad9589d8eea3e3fd0b136d8bf6e428888955f215824c2894f0da8b47"}, + {file = "rich-12.4.4-py3-none-any.whl", hash = "sha256:d2bbd99c320a2532ac71ff6a3164867884357da3e3301f0240090c5d2fdac7ec"}, + {file = "rich-12.4.4.tar.gz", hash = "sha256:4c586de507202505346f3e32d1363eb9ed6932f0c2f63184dea88983ff4971e2"}, ] scipy = [ {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, @@ -3801,8 +3610,8 @@ send2trash = [ {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, ] setuptools-scm = [ - {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, - {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, + {file = "setuptools_scm-7.0.4-py3-none-any.whl", hash = "sha256:53a6f51451a84d891ca485cec700a802413bbc5e76ee65da134e54c733a6e44d"}, + {file = "setuptools_scm-7.0.4.tar.gz", hash = "sha256:c27bc1f48593cfc9527251f1f0fc41ce282ea57bbc7fd5a1ea3acb99325fab4c"}, ] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, @@ -3904,8 +3713,8 @@ srt = [ {file = "srt-3.5.2.tar.gz", hash = "sha256:7aa4ad5ce4126d3f53b3e7bc4edaa86653d0378bf1c0b1ab8c59f5ab41384450"}, ] terminado = [ - {file = "terminado-0.13.3-py3-none-any.whl", hash = "sha256:874d4ea3183536c1782d13c7c91342ef0cf4e5ee1d53633029cbc972c8760bd8"}, - {file = "terminado-0.13.3.tar.gz", hash = "sha256:94d1cfab63525993f7d5c9b469a50a18d0cdf39435b59785715539dd41e36c0d"}, + {file = "terminado-0.15.0-py3-none-any.whl", hash = "sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197"}, + {file = "terminado-0.15.0.tar.gz", hash = "sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"}, ] tinycss2 = [ {file = "tinycss2-1.1.1-py3-none-any.whl", hash = "sha256:fe794ceaadfe3cf3e686b22155d0da5780dd0e273471a51846d0a02bc204fec8"}, @@ -3920,81 +3729,51 @@ tomli = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] tornado = [ - {file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"}, - {file = "tornado-6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c"}, - {file = "tornado-6.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05"}, - {file = "tornado-6.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910"}, - {file = "tornado-6.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b"}, - {file = "tornado-6.1-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675"}, - {file = "tornado-6.1-cp35-cp35m-win32.whl", hash = "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5"}, - {file = "tornado-6.1-cp35-cp35m-win_amd64.whl", hash = "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68"}, - {file = "tornado-6.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb"}, - {file = "tornado-6.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c"}, - {file = "tornado-6.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921"}, - {file = "tornado-6.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558"}, - {file = "tornado-6.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c"}, - {file = "tornado-6.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085"}, - {file = "tornado-6.1-cp36-cp36m-win32.whl", hash = "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575"}, - {file = "tornado-6.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795"}, - {file = "tornado-6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f"}, - {file = "tornado-6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102"}, - {file = "tornado-6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4"}, - {file = "tornado-6.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd"}, - {file = "tornado-6.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01"}, - {file = "tornado-6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d"}, - {file = "tornado-6.1-cp37-cp37m-win32.whl", hash = "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df"}, - {file = "tornado-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37"}, - {file = "tornado-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95"}, - {file = "tornado-6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a"}, - {file = "tornado-6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5"}, - {file = "tornado-6.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288"}, - {file = "tornado-6.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f"}, - {file = "tornado-6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6"}, - {file = "tornado-6.1-cp38-cp38-win32.whl", hash = "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326"}, - {file = "tornado-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c"}, - {file = "tornado-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5"}, - {file = "tornado-6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe"}, - {file = "tornado-6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea"}, - {file = "tornado-6.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2"}, - {file = "tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0"}, - {file = "tornado-6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd"}, - {file = "tornado-6.1-cp39-cp39-win32.whl", hash = "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c"}, - {file = "tornado-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4"}, - {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"}, + {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.0-py2.py3-none-any.whl", hash = "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6"}, {file = "tqdm-4.64.0.tar.gz", hash = "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d"}, ] traitlets = [ - {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, - {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, + {file = "traitlets-5.3.0-py3-none-any.whl", hash = "sha256:65fa18961659635933100db8ca120ef6220555286949774b9cfc106f941d1c7a"}, + {file = "traitlets-5.3.0.tar.gz", hash = "sha256:0bb9f1f9f017aa8ec187d8b1b2a7a6626a2a1d877116baba52a129bfa124f8e2"}, ] typed-ast = [ - {file = "typed_ast-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ad3b48cf2b487be140072fb86feff36801487d4abb7382bb1929aaac80638ea"}, - {file = "typed_ast-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:542cd732351ba8235f20faa0fc7398946fe1a57f2cdb289e5497e1e7f48cfedb"}, - {file = "typed_ast-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc2c11ae59003d4a26dda637222d9ae924387f96acae9492df663843aefad55"}, - {file = "typed_ast-1.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd5df1313915dbd70eaaa88c19030b441742e8b05e6103c631c83b75e0435ccc"}, - {file = "typed_ast-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:e34f9b9e61333ecb0f7d79c21c28aa5cd63bec15cb7e1310d7d3da6ce886bc9b"}, - {file = "typed_ast-1.5.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f818c5b81966d4728fec14caa338e30a70dfc3da577984d38f97816c4b3071ec"}, - {file = "typed_ast-1.5.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3042bfc9ca118712c9809201f55355479cfcdc17449f9f8db5e744e9625c6805"}, - {file = "typed_ast-1.5.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fff9fdcce59dc61ec1b317bdb319f8f4e6b69ebbe61193ae0a60c5f9333dc49"}, - {file = "typed_ast-1.5.3-cp36-cp36m-win_amd64.whl", hash = "sha256:8e0b8528838ffd426fea8d18bde4c73bcb4167218998cc8b9ee0a0f2bfe678a6"}, - {file = "typed_ast-1.5.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ef1d96ad05a291f5c36895d86d1375c0ee70595b90f6bb5f5fdbee749b146db"}, - {file = "typed_ast-1.5.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed44e81517364cb5ba367e4f68fca01fba42a7a4690d40c07886586ac267d9b9"}, - {file = "typed_ast-1.5.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f60d9de0d087454c91b3999a296d0c4558c1666771e3460621875021bf899af9"}, - {file = "typed_ast-1.5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9e237e74fd321a55c90eee9bc5d44be976979ad38a29bbd734148295c1ce7617"}, - {file = "typed_ast-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ee852185964744987609b40aee1d2eb81502ae63ee8eef614558f96a56c1902d"}, - {file = "typed_ast-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:27e46cdd01d6c3a0dd8f728b6a938a6751f7bd324817501c15fb056307f918c6"}, - {file = "typed_ast-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d64dabc6336ddc10373922a146fa2256043b3b43e61f28961caec2a5207c56d5"}, - {file = "typed_ast-1.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8cdf91b0c466a6c43f36c1964772918a2c04cfa83df8001ff32a89e357f8eb06"}, - {file = "typed_ast-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:9cc9e1457e1feb06b075c8ef8aeb046a28ec351b1958b42c7c31c989c841403a"}, - {file = "typed_ast-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e20d196815eeffb3d76b75223e8ffed124e65ee62097e4e73afb5fec6b993e7a"}, - {file = "typed_ast-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:37e5349d1d5de2f4763d534ccb26809d1c24b180a477659a12c4bde9dd677d74"}, - {file = "typed_ast-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f1a27592fac87daa4e3f16538713d705599b0a27dfe25518b80b6b017f0a6d"}, - {file = "typed_ast-1.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8831479695eadc8b5ffed06fdfb3e424adc37962a75925668deeb503f446c0a3"}, - {file = "typed_ast-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:20d5118e494478ef2d3a2702d964dae830aedd7b4d3b626d003eea526be18718"}, - {file = "typed_ast-1.5.3.tar.gz", hash = "sha256:27f25232e2dd0edfe1f019d6bfaaf11e86e657d9bdb7b0956db95f560cceb2b3"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, + {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, + {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, + {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, + {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, + {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, + {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, + {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, + {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, ] types-decorator = [ {file = "types-decorator-0.1.7.tar.gz", hash = "sha256:1772c7a83d2846a09c90ae0549058baffb10d0dd01f9494e2032567d3b62ac5e"}, @@ -4009,62 +3788,60 @@ types-pillow = [ {file = "types_Pillow-8.3.11-py3-none-any.whl", hash = "sha256:998189334e616b1dd42c9634669efbf726184039e96e9a23ec95246e0ecff3fc"}, ] types-protobuf = [ - {file = "types-protobuf-3.19.18.tar.gz", hash = "sha256:670b25c1a4f3d650a9d8a009b0cf19a1aa0e7cba044045648b563e825f35d4d3"}, - {file = "types_protobuf-3.19.18-py3-none-any.whl", hash = "sha256:78d677fefb10e3ea88b8c0fab543833e82cd6eb27e3f71aeda2d5cd9bd503ae1"}, + {file = "types-protobuf-3.19.22.tar.gz", hash = "sha256:d2b26861b0cb46a3c8669b0df507b7ef72e487da66d61f9f3576aa76ce028a83"}, + {file = "types_protobuf-3.19.22-py3-none-any.whl", hash = "sha256:d291388678af91bb045fafa864f142dc4ac22f5d4cdca097c7d8d8a32fa9b3ab"}, ] types-pygments = [ - {file = "types-Pygments-2.9.19.tar.gz", hash = "sha256:bd08888acf1f85eeeed906b7897ed2ee6d2a0b9dddceaae32ad97692a44638ba"}, - {file = "types_Pygments-2.9.19-py3-none-any.whl", hash = "sha256:6f2ba3127cddabc32a5648332cdc5339a4521f60b21524d376fc44de78a2d413"}, + {file = "types-Pygments-2.12.1.tar.gz", hash = "sha256:a9ea353b5197fd00c19cfa327de4169f8dc63b30d5d506bcbb09064d688cc9b0"}, + {file = "types_Pygments-2.12.1-py3-none-any.whl", hash = "sha256:b171949fc6074793a7fb559d938bb0332e66363d65b2e07b28770badf05768c5"}, ] types-requests = [ - {file = "types-requests-2.27.20.tar.gz", hash = "sha256:63344573cde6c4efd44d867c0158d9fb7e6beb95721cbe9882f3f857ee8a5398"}, - {file = "types_requests-2.27.20-py3-none-any.whl", hash = "sha256:68b8de86552116424ec23b77afc925e111afb6496d3821b183b7d151b3b834d4"}, + {file = "types-requests-2.28.0.tar.gz", hash = "sha256:9863d16dfbb3fa55dcda64fa3b989e76e8859033b26c1e1623e30465cfe294d3"}, + {file = "types_requests-2.28.0-py3-none-any.whl", hash = "sha256:85383b4ef0535f639c3f06c5bbb6494bbf59570c4cd88bbcf540f0b2ac1b49ab"}, ] types-setuptools = [ - {file = "types-setuptools-57.4.14.tar.gz", hash = "sha256:df02fe1dd244f58cf4e67cfc3d0a97930a2d61a72dd89f21d81c71017cd83f9a"}, - {file = "types_setuptools-57.4.14-py3-none-any.whl", hash = "sha256:828f7e7e51e157876f47c80518b23ba0c3c36aa8081efd39d5d39f393938aec9"}, + {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.13.tar.gz", hash = "sha256:40f8fb5e8cd7d57e8aefdee3fdd5e930aa1a1bb4179cdadd55226cea588af790"}, - {file = "types_urllib3-1.26.13-py3-none-any.whl", hash = "sha256:ff7500641824f881b2c7bde4cc57e6c3abf03d1e005bae83aca752e77213a5da"}, + {file = "types-urllib3-1.26.16.tar.gz", hash = "sha256:8bb3832c684c30cbed40b96e28bc04703becb2b97d82ac65ba4b968783453b0e"}, + {file = "types_urllib3-1.26.16-py3-none-any.whl", hash = "sha256:20588c285e5ca336d908d2705994830a83cfb6bda40fc356bbafaf430a262013"}, ] typing-extensions = [ - {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, - {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, -] -urllib3 = [ - {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, - {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, + {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, + {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, ] +urllib3 = [] virtualenv = [ - {file = "virtualenv-20.14.1-py2.py3-none-any.whl", hash = "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a"}, - {file = "virtualenv-20.14.1.tar.gz", hash = "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5"}, + {file = "virtualenv-20.15.1-py2.py3-none-any.whl", hash = "sha256:b30aefac647e86af6d82bfc944c556f8f1a9c90427b2fb4e3bfbf338cb82becf"}, + {file = "virtualenv-20.15.1.tar.gz", hash = "sha256:288171134a2ff3bfb1a2f54f119e77cd1b81c29fc1265a2356f3e8d14c7d58c4"}, ] watchdog = [ - {file = "watchdog-2.1.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:177bae28ca723bc00846466016d34f8c1d6a621383b6caca86745918d55c7383"}, - {file = "watchdog-2.1.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d1cf7dfd747dec519486a98ef16097e6c480934ef115b16f18adb341df747a4"}, - {file = "watchdog-2.1.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7f14ce6adea2af1bba495acdde0e510aecaeb13b33f7bd2f6324e551b26688ca"}, - {file = "watchdog-2.1.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4d0e98ac2e8dd803a56f4e10438b33a2d40390a72750cff4939b4b274e7906fa"}, - {file = "watchdog-2.1.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:81982c7884aac75017a6ecc72f1a4fedbae04181a8665a34afce9539fc1b3fab"}, - {file = "watchdog-2.1.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0b4a1fe6201c6e5a1926f5767b8664b45f0fcb429b62564a41f490ff1ce1dc7a"}, - {file = "watchdog-2.1.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6e6ae29b72977f2e1ee3d0b760d7ee47896cb53e831cbeede3e64485e5633cc8"}, - {file = "watchdog-2.1.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b9777664848160449e5b4260e0b7bc1ae0f6f4992a8b285db4ec1ef119ffa0e2"}, - {file = "watchdog-2.1.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:19b36d436578eb437e029c6b838e732ed08054956366f6dd11875434a62d2b99"}, - {file = "watchdog-2.1.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b61acffaf5cd5d664af555c0850f9747cc5f2baf71e54bbac164c58398d6ca7b"}, - {file = "watchdog-2.1.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1e877c70245424b06c41ac258023ea4bd0c8e4ff15d7c1368f17cd0ae6e351dd"}, - {file = "watchdog-2.1.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d802d65262a560278cf1a65ef7cae4e2bc7ecfe19e5451349e4c67e23c9dc420"}, - {file = "watchdog-2.1.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b3750ee5399e6e9c69eae8b125092b871ee9e2fcbd657a92747aea28f9056a5c"}, - {file = "watchdog-2.1.7-py3-none-manylinux2014_aarch64.whl", hash = "sha256:ed6d9aad09a2a948572224663ab00f8975fae242aa540509737bb4507133fa2d"}, - {file = "watchdog-2.1.7-py3-none-manylinux2014_armv7l.whl", hash = "sha256:b26e13e8008dcaea6a909e91d39b629a39635d1a8a7239dd35327c74f4388601"}, - {file = "watchdog-2.1.7-py3-none-manylinux2014_i686.whl", hash = "sha256:0908bb50f6f7de54d5d31ec3da1654cb7287c6b87bce371954561e6de379d690"}, - {file = "watchdog-2.1.7-py3-none-manylinux2014_ppc64.whl", hash = "sha256:bdcbf75580bf4b960fb659bbccd00123d83119619195f42d721e002c1621602f"}, - {file = "watchdog-2.1.7-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:81a5861d0158a7e55fe149335fb2bbfa6f48cbcbd149b52dbe2cd9a544034bbd"}, - {file = "watchdog-2.1.7-py3-none-manylinux2014_s390x.whl", hash = "sha256:03b43d583df0f18782a0431b6e9e9965c5b3f7cf8ec36a00b930def67942c385"}, - {file = "watchdog-2.1.7-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ae934e34c11aa8296c18f70bf66ed60e9870fcdb4cc19129a04ca83ab23e7055"}, - {file = "watchdog-2.1.7-py3-none-win32.whl", hash = "sha256:49639865e3db4be032a96695c98ac09eed39bbb43fe876bb217da8f8101689a6"}, - {file = "watchdog-2.1.7-py3-none-win_amd64.whl", hash = "sha256:340b875aecf4b0e6672076a6f05cfce6686935559bb6d34cebedee04126a9566"}, - {file = "watchdog-2.1.7-py3-none-win_ia64.whl", hash = "sha256:351e09b6d9374d5bcb947e6ac47a608ec25b9d70583e9db00b2fcdb97b00b572"}, - {file = "watchdog-2.1.7.tar.gz", hash = "sha256:3fd47815353be9c44eebc94cc28fe26b2b0c5bd889dafc4a5a7cbdf924143480"}, + {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330"}, + {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d"}, + {file = "watchdog-2.1.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658"}, + {file = "watchdog-2.1.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591"}, + {file = "watchdog-2.1.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3"}, + {file = "watchdog-2.1.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7"}, + {file = "watchdog-2.1.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd"}, + {file = "watchdog-2.1.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3"}, + {file = "watchdog-2.1.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d"}, + {file = "watchdog-2.1.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_armv7l.whl", hash = "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_i686.whl", hash = "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64.whl", hash = "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_s390x.whl", hash = "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1"}, + {file = "watchdog-2.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6"}, + {file = "watchdog-2.1.9-py3-none-win32.whl", hash = "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1"}, + {file = "watchdog-2.1.9-py3-none-win_amd64.whl", hash = "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c"}, + {file = "watchdog-2.1.9-py3-none-win_ia64.whl", hash = "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428"}, + {file = "watchdog-2.1.9.tar.gz", hash = "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609"}, ] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, @@ -4075,74 +3852,74 @@ webencodings = [ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] websocket-client = [ - {file = "websocket-client-1.3.2.tar.gz", hash = "sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6"}, - {file = "websocket_client-1.3.2-py3-none-any.whl", hash = "sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef"}, + {file = "websocket-client-1.3.3.tar.gz", hash = "sha256:d58c5f284d6a9bf8379dab423259fe8f85b70d5fa5d2916d5791a84594b122b1"}, + {file = "websocket_client-1.3.3-py3-none-any.whl", hash = "sha256:5d55652dc1d0b3c734f044337d929aaf83f4f9138816ec680c1aefefb4dc4877"}, ] wrapt = [ - {file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"}, - {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"}, - {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"}, - {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"}, - {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"}, - {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"}, - {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"}, - {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"}, - {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"}, - {file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"}, - {file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"}, - {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"}, - {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"}, - {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"}, - {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"}, - {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"}, - {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"}, - {file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"}, - {file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"}, - {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"}, - {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"}, - {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"}, - {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"}, - {file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"}, - {file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"}, - {file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"}, - {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"}, - {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"}, - {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"}, - {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"}, - {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"}, - {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"}, - {file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"}, - {file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"}, - {file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"}, - {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"}, - {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"}, - {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"}, - {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"}, - {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"}, - {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"}, - {file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"}, - {file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"}, - {file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"}, - {file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"}, - {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"}, - {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"}, - {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"}, - {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"}, - {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"}, - {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"}, - {file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"}, - {file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"}, - {file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"}, - {file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"}, - {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"}, - {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"}, - {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"}, - {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"}, - {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"}, - {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"}, - {file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"}, - {file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"}, - {file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"}, + {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"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, + {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, + {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, + {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, + {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, + {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, + {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, + {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, + {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, + {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, + {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, + {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, + {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, + {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, + {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, + {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] zipp = [ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, From 4cb43a2dc8d871ec8c8af0645eba5da00d3b2d4f Mon Sep 17 00:00:00 2001 From: Laith Bahodi <70682032+hydrobeam@users.noreply.github.com> Date: Sat, 9 Jul 2022 10:28:37 -0400 Subject: [PATCH 085/555] Fix :meth:`BarChart.change_bar_values` not updating when height is 0. (#2638) * Refactor bar creation into a separate function The function is _create_bar. * Add insert methods for OpenGLMobject/Mobject * Add self._update_colors, improve docs and fix bug Create temporary bar, replace the previous location in the self.bars vgroup with the new bar. Then re-initalize the colours depending on a flag. Also refactor out colour-setting to a method * Apply black and isort * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix flake8 error, double '#' before comment. * Refactor bar creation into a separate function The function is _create_bar. * Add insert methods for OpenGLMobject/Mobject * Add self._update_colors, improve docs and fix bug Create temporary bar, replace the previous location in the self.bars vgroup with the new bar. Then re-initalize the colours depending on a flag. Also refactor out colour-setting to a method * Apply black and isort * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix flake8 error, double '#' before comment. * Implement None-initialization suggestion Removed setting self.bars in `BarChart._add_bars` * Change `temp` to `tmp` and use Type * Use `type` instead of `Type`. - Also, fix setting config.frame_width in __init__, since this causes BarChart's `y_length` to not be re-evaluated if the dimensions of the scene are changed. * Force `bar_colors` to be a list via deprecation - Also update params where `len` is taken to be a Sequence, not iterable * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix docs / some typing, remove try/except - MutableSequence instead of Sequence for self.values, since BarChart.change_bar_values adjusts the value of the sequence, requiring __get_item__. - Use try/except based on reviewer's reccomendation. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Tristan Schulz --- manim/mobject/graphing/probability.py | 122 +++++++++++++++++-------- manim/mobject/mobject.py | 103 ++++++++++++--------- manim/mobject/opengl/opengl_mobject.py | 36 ++++++++ 3 files changed, 182 insertions(+), 79 deletions(-) diff --git a/manim/mobject/graphing/probability.py b/manim/mobject/graphing/probability.py index 43c6a11ea8..b0f85cdd14 100644 --- a/manim/mobject/graphing/probability.py +++ b/manim/mobject/graphing/probability.py @@ -5,12 +5,12 @@ __all__ = ["SampleSpace", "BarChart"] -from typing import Iterable, Sequence +from typing import Iterable, MutableSequence, Sequence import numpy as np from colour import Color -from manim import config +from manim import config, logger from manim.constants import * from manim.mobject.geometry.polygram import Rectangle from manim.mobject.graphing.coordinate_systems import Axes @@ -192,9 +192,9 @@ class BarChart(Axes): Parameters ---------- values - An iterable of values that determines the height of each bar. Accepts negative values. + A sequence of values that determines the height of each bar. Accepts negative values. bar_names - An iterable of names for each bar. Does not have to match the length of ``values``. + A sequence of names for each bar. Does not have to match the length of ``values``. y_range The y_axis range of values. If ``None``, the range will be calculated based on the min/max of ``values`` and the step will be calculated based on ``y_length``. @@ -204,7 +204,7 @@ class BarChart(Axes): y_length The length of the y-axis. bar_colors - The color for the bars. Accepts a single color or an iterable of colors. + The color for the bars. Accepts a sequence of colors (can contain just one item). If the length of``bar_colors`` does not match that of ``values``, intermediate colors will be automatically determined. bar_width @@ -237,14 +237,12 @@ def construct(self): def __init__( self, - values: Iterable[float], - bar_names: Iterable[str] | None = None, + values: MutableSequence[float], + bar_names: Sequence[str] | None = None, y_range: Sequence[float] | None = None, x_length: float | None = None, - y_length: float | None = config.frame_height - 4, - bar_colors: str - | Iterable[str] - | None = [ + y_length: float | None = None, + bar_colors: Iterable[str] = [ "#003f5c", "#58508d", "#bc5090", @@ -257,6 +255,14 @@ def __init__( **kwargs, ): + if isinstance(bar_colors, str): + logger.warning( + "Passing a string to `bar_colors` has been deprecated since v0.15.2 and will be removed after v0.17.0, the parameter must be a list. " + ) + bar_colors = list(bar_colors) + + y_length = y_length if y_length is not None else config.frame_height - 4 + self.values = values self.bar_names = bar_names self.bar_colors = bar_colors @@ -272,6 +278,7 @@ def __init__( max(0, max(self.values)), round(max(self.values) / y_length, 2), ] + elif len(y_range) == 2: y_range = [*y_range, round(max(self.values) / y_length, 2)] @@ -283,9 +290,9 @@ def __init__( (x_axis_config,), (kwargs.pop("x_axis_config", None),) ) - self.bars = None - self.x_labels = None - self.bar_labels = None + self.bars: VGroup = VGroup() + self.x_labels: VGroup | None = None + self.bar_labels: VGroup | None = None super().__init__( x_range=x_range, @@ -304,6 +311,17 @@ def __init__( self.y_axis.add_numbers() + def _update_colors(self): + """Initialize the colors of the bars of the chart. + + Sets the color of ``self.bars`` via ``self.bar_colors``. + + Primarily used when the bars are initialized with ``self._add_bars`` + or updated via ``self.change_bar_values``. + """ + + self.bars.set_color_by_gradient(*self.bar_colors) + def _add_x_axis_labels(self): """Essentially :meth`:~.NumberLine.add_labels`, but differs in that the direction of the label with respect to the x_axis changes to UP or DOWN @@ -339,27 +357,46 @@ def _add_x_axis_labels(self): self.x_axis.labels = labels self.x_axis.add(labels) - def _add_bars(self): - self.bars = VGroup() + def _create_bar(self, bar_number: int, value: float) -> Rectangle: + """Creates a positioned bar on the chart. - for i, value in enumerate(self.values): - bar_h = abs(self.c2p(0, value)[1] - self.c2p(0, 0)[1]) - bar_w = self.c2p(self.bar_width, 0)[0] - self.c2p(0, 0)[0] - bar = Rectangle( - height=bar_h, - width=bar_w, - stroke_width=self.bar_stroke_width, - fill_opacity=self.bar_fill_opacity, - ) + Parameters + ---------- + bar_number + Determines the x-position of the bar. + value + The value that determines the height of the bar. + + Returns + ------- + Rectangle + A positioned rectangle representing a bar on the chart. + """ - pos = UP if (value >= 0) else DOWN - bar.next_to(self.c2p(i + 0.5, 0), pos, buff=0) - self.bars.add(bar) - if isinstance(self.bar_colors, str): - self.bars.set_color_by_gradient(self.bar_colors) - else: - self.bars.set_color_by_gradient(*self.bar_colors) + # bar measurements relative to the axis + + # distance from between the y-axis and the top of the bar + bar_h = abs(self.c2p(0, value)[1] - self.c2p(0, 0)[1]) + # width of the bar + bar_w = self.c2p(self.bar_width, 0)[0] - self.c2p(0, 0)[0] + + bar = Rectangle( + height=bar_h, + width=bar_w, + stroke_width=self.bar_stroke_width, + fill_opacity=self.bar_fill_opacity, + ) + pos = UP if (value >= 0) else DOWN + bar.next_to(self.c2p(bar_number + 0.5, 0), pos, buff=0) + return bar + + def _add_bars(self) -> None: + for i, value in enumerate(self.values): + tmp_bar = self._create_bar(bar_number=i, value=value) + self.bars.add(tmp_bar) + + self._update_colors() self.add_to_back(self.bars) def get_bar_labels( @@ -367,7 +404,7 @@ def get_bar_labels( color: Color | None = None, font_size: float = 24, buff: float = MED_SMALL_BUFF, - label_constructor: VMobject = Tex, + label_constructor: type[VMobject] = Tex, ): """Annotates each bar with its corresponding value. Use ``self.bar_labels`` to access the labels after creation. @@ -416,7 +453,7 @@ def construct(self): return bar_labels - def change_bar_values(self, values: Iterable[float]): + def change_bar_values(self, values: Iterable[float], update_colors: bool = True): """Updates the height of the bars of the chart. Parameters @@ -424,6 +461,8 @@ def change_bar_values(self, values: Iterable[float]): values The values that will be used to update the height of the bars. Does not have to match the number of bars. + update_colors + Whether to re-initalize the colors of the bars based on ``self.bar_colors``. Examples -------- @@ -455,7 +494,8 @@ def construct(self): bar_lim = bar.get_top() aligned_edge = UP - try: + # check if the bar has height + if chart_val != 0: quotient = value / chart_val if quotient < 0: @@ -468,11 +508,17 @@ def construct(self): # if already negative, then we move the bottom edge of the bar # to the location of the previous top - bar.stretch_to_fit_height(quotient * bar.height) + bar.stretch_to_fit_height(abs(quotient) * bar.height) - except ZeroDivisionError: - bar.height = 0 + else: + # create a new bar since the current one has a height of zero (doesn't exist) + temp_bar = self._create_bar(i, value) + self.bars.remove(bar) + self.bars.insert(i, temp_bar) bar.move_to(bar_lim, aligned_edge) + if update_colors: + self._update_colors() + self.values[: len(values)] = values diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 74bf285394..0abe0fb77e 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1,5 +1,5 @@ """Base classes for objects that can be displayed.""" - +from __future__ import annotations __all__ = ["Mobject", "Group", "override_animate"] @@ -84,9 +84,9 @@ class Mobject: def __init_subclass__(cls, **kwargs): super().__init_subclass__(**kwargs) - cls.animation_overrides: Dict[ - Type["Animation"], - Callable[["Mobject"], "Animation"], + cls.animation_overrides: dict[ + type[Animation], + Callable[[Mobject], Animation], ] = {} cls._add_intrinsic_animation_overrides() cls._original__init__ = cls.__init__ @@ -109,8 +109,8 @@ def __init__(self, color=WHITE, name=None, dim=3, target=None, z_index=0): @classmethod def animation_override_for( cls, - animation_class: Type["Animation"], - ) -> "Optional[Callable[[Mobject, ...], Animation]]": + animation_class: type[Animation], + ) -> Callable[[Mobject, ...], Animation] | None: """Returns the function defining a specific animation override for this class. Parameters @@ -147,8 +147,8 @@ def _add_intrinsic_animation_overrides(cls): @classmethod def add_animation_override( cls, - animation_class: Type["Animation"], - override_func: "Callable[[Mobject, ...], Animation]", + animation_class: type[Animation], + override_func: Callable[[Mobject, ...], Animation], ): """Add an animation override. @@ -358,7 +358,7 @@ def generate_points(self): """ pass - def add(self, *mobjects: "Mobject"): + def add(self, *mobjects: Mobject): """Add mobjects as submobjects. The mobjects are added to :attr:`submobjects`. @@ -425,13 +425,34 @@ def add(self, *mobjects: "Mobject"): self.submobjects = list_update(self.submobjects, mobjects) return self + def insert(self, index: int, mobject: Mobject): + """Inserts a mobject at a specific position into self.submobjects + + Effectively just calls ``self.submobjects.insert(index, mobject)``, + where ``self.submobjects`` is a list. + + Highly adapted from ``Mobject.add``. + + Parameters + ---------- + index + The index at which + mobject + The mobject to be inserted. + """ + if not isinstance(mobject, Mobject): + raise TypeError("All submobjects must be of type Mobject") + if mobject is self: + raise ValueError("Mobject cannot contain self") + self.submobjects.insert(index, mobject) + def __add__(self, mobject): raise NotImplementedError def __iadd__(self, mobject): raise NotImplementedError - def add_to_back(self, *mobjects: "Mobject"): + def add_to_back(self, *mobjects: Mobject): """Add all passed mobjects to the back of the submobjects. If :attr:`submobjects` already contains the given mobjects, they just get moved @@ -487,7 +508,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): """Remove :attr:`submobjects`. The mobjects are removed from :attr:`submobjects`, if they exist. @@ -809,7 +830,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[Updater]: """Return all updaters using the ``dt`` parameter. The updaters use this parameter as the input for difference in time. @@ -843,7 +864,7 @@ def has_time_based_updater(self) -> bool: """ return any("dt" in get_parameters(updater) for updater in self.updaters) - def get_updaters(self) -> List[Updater]: + def get_updaters(self) -> list[Updater]: """Return all updaters. Returns @@ -865,7 +886,7 @@ def get_family_updaters(self): def add_updater( self, update_function: Updater, - index: Optional[int] = None, + index: int | None = None, call_updater: bool = False, ): """Add an update function to this mobject. @@ -990,7 +1011,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): """Match the updaters of the given mobject. Parameters @@ -1075,7 +1096,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]): """Apply a function to ``self`` and every submobject with points recursively. Parameters @@ -1177,7 +1198,7 @@ def rotate( self, angle, axis=OUT, - about_point: Optional[Sequence[float]] = None, + about_point: Sequence[float] | None = None, **kwargs, ): """Rotates the :class:`~.Mobject` about a certain point.""" @@ -1611,7 +1632,7 @@ def replace(self, mobject, dim_to_match=0, stretch=False): def surround( self, - mobject: "Mobject", + mobject: Mobject, dim_to_match=0, stretch=False, buff=MED_SMALL_BUFF, @@ -1646,7 +1667,7 @@ def put_start_and_end_on(self, start, end): # Background rectangle def add_background_rectangle( - self, color: Optional[Colors] = None, opacity: float = 0.75, **kwargs + self, color: Colors | None = None, opacity: float = 0.75, **kwargs ): """Add a BackgroundRectangle as submobject. @@ -2013,27 +2034,27 @@ def has_no_points(self) -> bool: # Match other mobject properties - def match_color(self, mobject: "Mobject"): + def match_color(self, mobject: Mobject): """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, **kwargs): """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): """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): """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): """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): + def match_coord(self, mobject: Mobject, dim, direction=ORIGIN): """Match the coordinates with the coordinates of another :class:`~.Mobject`.""" return self.set_coord( mobject.get_coord(dim, direction), @@ -2041,21 +2062,21 @@ def match_coord(self, mobject: "Mobject", dim, direction=ORIGIN): direction=direction, ) - def match_x(self, mobject: "Mobject", direction=ORIGIN): + def match_x(self, mobject: Mobject, direction=ORIGIN): """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): """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): """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: Union["Mobject", np.ndarray, List], + mobject_or_point: Mobject | np.ndarray | list, direction=ORIGIN, alignment_vect=UP, ): @@ -2141,14 +2162,14 @@ def construct(self): def arrange_in_grid( self, - rows: Optional[int] = None, - cols: Optional[int] = None, - buff: Union[float, Tuple[float, float]] = MED_SMALL_BUFF, + rows: int | None = None, + cols: int | None = None, + buff: float | tuple[float, float] = MED_SMALL_BUFF, cell_alignment: np.ndarray = ORIGIN, - row_alignments: Optional[str] = None, # "ucd" - col_alignments: Optional[str] = None, # "lcr" - row_heights: Optional[Iterable[Optional[float]]] = None, - col_widths: Optional[Iterable[Optional[float]]] = None, + 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, ): @@ -2468,7 +2489,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): """Aligns the data of this mobject with another mobject. Afterwards, the two mobjects will have the same number of submobjects @@ -2520,7 +2541,7 @@ def align_submobjects(self, mobject): mob2.add_n_more_submobjects(max(0, n1 - n2)) return self - def null_point_align(self, mobject: "Mobject"): + def null_point_align(self, mobject: Mobject): """If a :class:`~.Mobject` with points is being aligned to one without, treat both as groups, and push the one with points into its own submobjects @@ -2599,7 +2620,7 @@ def interpolate_color(self, mobject1, mobject2, alpha): def become( self, - mobject: "Mobject", + mobject: Mobject, copy_submobjects: bool = True, match_height: bool = False, match_width: bool = False, @@ -2663,7 +2684,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): """Edit points, positions, and submobjects to be identical to another :class:`~.Mobject`, while keeping the style unchanged. @@ -2697,7 +2718,7 @@ def set_z_index( self, z_index_value: float, family: bool = True, - ) -> "VMobject": + ) -> VMobject: """Sets the :class:`~.Mobject`'s :attr:`z_index` to the value specified in `z_index_value`. Parameters diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index e75b363e45..a1b0a97c8e 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -736,6 +736,42 @@ def add( self.assemble_family() return self + def insert(self, index: int, mobject: OpenGLMobject, update_parent: bool = False): + """Inserts a mobject at a specific position into self.submobjects + + Effectively just calls ``self.submobjects.insert(index, mobject)``, + where ``self.submobjects`` is a list. + + Highly adapted from ``OpenGLMobject.add``. + + Parameters + ---------- + index + The index at which + mobject + The mobject to be inserted. + update_parent + Whether or not to set ``mobject.parent`` to ``self``. + """ + + if update_parent: + mobject.parent = self + + if mobject is self: + raise ValueError("OpenGLMobject cannot contain self") + + if not isinstance(mobject, OpenGLMobject): + raise TypeError("All submobjects must be of type OpenGLMobject") + + if mobject not in self.submobjects: + self.submobjects.insert(index, mobject) + + if self not in mobject.parents: + mobject.parents.append(self) + + self.assemble_family() + return self + def remove( self, *mobjects: OpenGLMobject, update_parent: bool = False ) -> OpenGLMobject: From aad8c44ea965d84be0e60c9c5b58dbaa58a6a868 Mon Sep 17 00:00:00 2001 From: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> Date: Sat, 9 Jul 2022 22:00:30 +0530 Subject: [PATCH 086/555] Made FFmpeg executable path configureable (#2667) * Add configurable FFmpeg Path * Add configurable latex and dvisvgm paths * Ensure FFmpeg * Revert "Add configurable latex and dvisvgm paths" This reverts commit 566d2241b967ecd24f00c644a5a21bb86c32018b. Looks like this is not the direction we want configurable latex compilers to be available, hence I am reverting it. * Address changes - Changed the path to ffmpeg_executable - Consistent names across config file and config dict - Added doc for the ffmpeg_executable property * Add exception instead of logger+exit(1) --- manim/_config/default.cfg | 2 ++ manim/_config/utils.py | 11 +++++++++++ manim/constants.py | 4 ---- manim/scene/scene_file_writer.py | 18 ++++++++++++++---- manim/utils/file_ops.py | 11 +++++++++++ 5 files changed, 38 insertions(+), 8 deletions(-) diff --git a/manim/_config/default.cfg b/manim/_config/default.cfg index ee382742e0..651951cf6e 100644 --- a/manim/_config/default.cfg +++ b/manim/_config/default.cfg @@ -224,6 +224,8 @@ repr_number = green # Uncomment the following line to manually set the loglevel for ffmpeg. See # ffmpeg manpage for accepted values loglevel = ERROR +# defaults to the one present in path +ffmpeg_executable = ffmpeg [jupyter] media_embed = diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 98bc88609b..9b85e5723c 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -252,6 +252,7 @@ class MyScene(Scene): "dry_run", "enable_wireframe", "ffmpeg_loglevel", + "ffmpeg_executable", "format", "flush_cache", "frame_height", @@ -633,6 +634,10 @@ def digest_parser(self, parser: configparser.ConfigParser) -> ManimConfig: if val: self.ffmpeg_loglevel = val + # TODO: Fix the mess above and below + val = parser["ffmpeg"].get("ffmpeg_executable") + setattr(self, "ffmpeg_executable", val) + try: val = parser["jupyter"].getboolean("media_embed") except ValueError: @@ -967,6 +972,12 @@ def format(self, val: str) -> None: doc="Verbosity level of ffmpeg (no flag).", ) + ffmpeg_executable = property( + lambda self: self._d["ffmpeg_executable"], + lambda self, val: self._set_str("ffmpeg_executable", val), + doc="Manually specify the path to the ffmpeg executable", + ) + media_embed = property( lambda self: self._d["media_embed"], lambda self, val: self._d.__setitem__("media_embed", val), diff --git a/manim/constants.py b/manim/constants.py index a32bf416ba..2eb8b9147e 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -64,7 +64,6 @@ "PI", "TAU", "DEGREES", - "FFMPEG_BIN", "GIF_FILE_EXTENSION", "FFMPEG_VERBOSITY_MAP", "VERBOSITY_CHOICES", @@ -201,9 +200,6 @@ DEGREES: float = TAU / 360 """The exchange rate between radians and degrees.""" -# ffmpeg stuff -FFMPEG_BIN: str = "ffmpeg" - # gif stuff GIF_FILE_EXTENSION: str = ".gif" diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index 2d66d62cf1..25763268d9 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -8,6 +8,7 @@ import os import shutil import subprocess +import sys from pathlib import Path from typing import Any @@ -20,10 +21,11 @@ from .. import config, logger from .._config.logger_utils import set_file_logger -from ..constants import FFMPEG_BIN, GIF_FILE_EXTENSION +from ..constants import GIF_FILE_EXTENSION from ..utils.file_ops import ( add_extension_if_not_present, add_version_before_extension, + ensure_executable, guarantee_existence, is_gif_format, is_png_format, @@ -79,6 +81,14 @@ def __init__(self, renderer, scene_name, **kwargs): self.next_section( name="autocreated", type=DefaultSectionType.NORMAL, skip_animations=False ) + # fail fast if ffmpeg is not found + if not ensure_executable(Path(config.ffmpeg_executable)): + raise RuntimeError( + "Manim could not find ffmpeg, which is required for generating video output.\n" + "For installing ffmpeg please consult https://docs.manim.community/en/stable/installation.html\n" + "Make sure to either add ffmpeg to the PATH environment variable\n" + "or set path to the ffmpeg executable under the ffmpeg header in Manim's configuration." + ) def init_output_directories(self, scene_name): """Initialise output directories. @@ -464,7 +474,7 @@ def open_movie_pipe(self, file_path=None): width = config["pixel_width"] command = [ - FFMPEG_BIN, + config.ffmpeg_executable, "-y", # overwrite output file if it exists "-f", "rawvideo", @@ -547,7 +557,7 @@ def combine_files( pf_path = pf_path.replace("\\", "/") fp.write(f"file 'file:{pf_path}'\n") commands = [ - FFMPEG_BIN, + config.ffmpeg_executable, "-y", # overwrite output file if it exists "-f", "concat", @@ -614,7 +624,7 @@ def combine_to_movie(self): ) temp_file_path = movie_file_path.replace(extension, f"_temp{extension}") commands = [ - FFMPEG_BIN, + config.ffmpeg_executable, "-i", movie_file_path, "-i", diff --git a/manim/utils/file_ops.py b/manim/utils/file_ops.py index e7b78d71a0..1f41837d61 100644 --- a/manim/utils/file_ops.py +++ b/manim/utils/file_ops.py @@ -15,6 +15,7 @@ "is_webm_format", "is_mov_format", "write_to_movie", + "ensure_executable", ] import os @@ -121,6 +122,16 @@ def write_to_movie() -> bool: ) +def ensure_executable(path_to_exe: Path) -> bool: + if path_to_exe.parent == Path("."): + executable = shutil.which(path_to_exe.stem) + if executable is None: + return False + else: + executable = path_to_exe + return os.access(executable, os.X_OK) + + def add_extension_if_not_present(file_name: Path, extension: str) -> Path: if file_name.suffix != extension: return file_name.with_suffix(extension) From 677e88ef96e4f9505d0ecfaf7f3e82aad89eba99 Mon Sep 17 00:00:00 2001 From: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> Date: Sun, 10 Jul 2022 02:40:30 +0530 Subject: [PATCH 087/555] Refactor tests (#2866) * start test reorganization * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * move boolean ops * move more tests * Move more tests * more reorganization * more movements * mostly finish up reorganization * Finish reorganization tests in parent dir * try moving interface tests back * Move test_commands over * fix relative path to templates Co-authored-by: Darylgolden Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- tests/{ => interface}/test_commands.py | 8 ++++++-- tests/{ => miscellaneous}/test_version.py | 0 tests/{ => module/animation}/test_animate.py | 0 tests/{ => module/animation}/test_composition.py | 0 tests/{ => module/animation}/test_override_animation.py | 0 tests/{ => module/mobject/geometry}/test_unit_geometry.py | 0 tests/{ => module/mobject/graphing}/test_axes_shift.py | 0 .../mobject/graphing}/test_coordinate_system.py | 0 tests/{ => module/mobject/graphing}/test_number_line.py | 0 tests/{ => module/mobject/graphing}/test_ticks.py | 0 tests/{ => module/mobject/mobject}/test_copy.py | 0 tests/{ => module/mobject/mobject}/test_family.py | 0 tests/{ => module/mobject/mobject}/test_get_set.py | 0 tests/{ => module/mobject/mobject}/test_mobject.py | 0 .../{ => module/mobject/mobject}/test_opengl_metaclass.py | 0 tests/{ => module/mobject/mobject}/test_set_attr.py | 0 tests/{ => module/mobject/svg}/test_svg_mobject.py | 0 tests/{ => module/mobject}/test_boolean_ops.py | 0 tests/{ => module/mobject}/test_graph.py | 0 tests/{ => module/mobject}/test_value_tracker.py | 0 tests/{ => module/mobject/text}/test_markup.py | 0 tests/{ => module/mobject/text}/test_numbers.py | 0 tests/{ => module/mobject/text}/test_texmobject.py | 0 tests/{ => module/mobject/text}/test_text_mobject.py | 0 .../mobject/types/vectorized_mobject}/test_stroke.py | 0 .../types/vectorized_mobject}/test_vectorized_mobject.py | 0 tests/{ => module/scene}/test_auto_zoom.py | 0 tests/{ => module/scene}/test_scene.py | 0 tests/{ => module/scene}/test_sound.py | 0 tests/{ => module/scene}/test_threed_scene.py | 0 tests/{ => module/utils}/test_color.py | 0 tests/{ => module/utils}/test_deprecation.py | 0 tests/{ => module/utils}/test_file_ops.py | 5 ++--- tests/{ => module/utils}/test_hashing.py | 0 tests/{ => module/utils}/test_space_ops.py | 0 tests/{ => module/utils}/test_units.py | 0 36 files changed, 8 insertions(+), 5 deletions(-) rename tests/{ => interface}/test_commands.py (92%) rename tests/{ => miscellaneous}/test_version.py (100%) rename tests/{ => module/animation}/test_animate.py (100%) rename tests/{ => module/animation}/test_composition.py (100%) rename tests/{ => module/animation}/test_override_animation.py (100%) rename tests/{ => module/mobject/geometry}/test_unit_geometry.py (100%) rename tests/{ => module/mobject/graphing}/test_axes_shift.py (100%) rename tests/{ => module/mobject/graphing}/test_coordinate_system.py (100%) rename tests/{ => module/mobject/graphing}/test_number_line.py (100%) rename tests/{ => module/mobject/graphing}/test_ticks.py (100%) rename tests/{ => module/mobject/mobject}/test_copy.py (100%) rename tests/{ => module/mobject/mobject}/test_family.py (100%) rename tests/{ => module/mobject/mobject}/test_get_set.py (100%) rename tests/{ => module/mobject/mobject}/test_mobject.py (100%) rename tests/{ => module/mobject/mobject}/test_opengl_metaclass.py (100%) rename tests/{ => module/mobject/mobject}/test_set_attr.py (100%) rename tests/{ => module/mobject/svg}/test_svg_mobject.py (100%) rename tests/{ => module/mobject}/test_boolean_ops.py (100%) rename tests/{ => module/mobject}/test_graph.py (100%) rename tests/{ => module/mobject}/test_value_tracker.py (100%) rename tests/{ => module/mobject/text}/test_markup.py (100%) rename tests/{ => module/mobject/text}/test_numbers.py (100%) rename tests/{ => module/mobject/text}/test_texmobject.py (100%) rename tests/{ => module/mobject/text}/test_text_mobject.py (100%) rename tests/{ => module/mobject/types/vectorized_mobject}/test_stroke.py (100%) rename tests/{ => module/mobject/types/vectorized_mobject}/test_vectorized_mobject.py (100%) rename tests/{ => module/scene}/test_auto_zoom.py (100%) rename tests/{ => module/scene}/test_scene.py (100%) rename tests/{ => module/scene}/test_sound.py (100%) rename tests/{ => module/scene}/test_threed_scene.py (100%) rename tests/{ => module/utils}/test_color.py (100%) rename tests/{ => module/utils}/test_deprecation.py (100%) rename tests/{ => module/utils}/test_file_ops.py (86%) rename tests/{ => module/utils}/test_hashing.py (100%) rename tests/{ => module/utils}/test_space_ops.py (100%) rename tests/{ => module/utils}/test_units.py (100%) diff --git a/tests/test_commands.py b/tests/interface/test_commands.py similarity index 92% rename from tests/test_commands.py rename to tests/interface/test_commands.py index aec1d47d3b..aed2bf179c 100644 --- a/tests/test_commands.py +++ b/tests/interface/test_commands.py @@ -71,12 +71,16 @@ def test_manim_init_subcommand(): expected_main_py = "" with open( - Path.resolve(Path(__file__).parent.parent / "manim/templates/template.cfg"), + Path.resolve( + Path(__file__).parent.parent.parent / "manim/templates/template.cfg" + ), ) as f: expected_manim_cfg = f.read() with open( - Path.resolve(Path(__file__).parent.parent / "manim/templates/Default.mtp"), + Path.resolve( + Path(__file__).parent.parent.parent / "manim/templates/Default.mtp" + ), ) as f: expected_main_py = f.read() diff --git a/tests/test_version.py b/tests/miscellaneous/test_version.py similarity index 100% rename from tests/test_version.py rename to tests/miscellaneous/test_version.py diff --git a/tests/test_animate.py b/tests/module/animation/test_animate.py similarity index 100% rename from tests/test_animate.py rename to tests/module/animation/test_animate.py diff --git a/tests/test_composition.py b/tests/module/animation/test_composition.py similarity index 100% rename from tests/test_composition.py rename to tests/module/animation/test_composition.py diff --git a/tests/test_override_animation.py b/tests/module/animation/test_override_animation.py similarity index 100% rename from tests/test_override_animation.py rename to tests/module/animation/test_override_animation.py diff --git a/tests/test_unit_geometry.py b/tests/module/mobject/geometry/test_unit_geometry.py similarity index 100% rename from tests/test_unit_geometry.py rename to tests/module/mobject/geometry/test_unit_geometry.py diff --git a/tests/test_axes_shift.py b/tests/module/mobject/graphing/test_axes_shift.py similarity index 100% rename from tests/test_axes_shift.py rename to tests/module/mobject/graphing/test_axes_shift.py diff --git a/tests/test_coordinate_system.py b/tests/module/mobject/graphing/test_coordinate_system.py similarity index 100% rename from tests/test_coordinate_system.py rename to tests/module/mobject/graphing/test_coordinate_system.py diff --git a/tests/test_number_line.py b/tests/module/mobject/graphing/test_number_line.py similarity index 100% rename from tests/test_number_line.py rename to tests/module/mobject/graphing/test_number_line.py diff --git a/tests/test_ticks.py b/tests/module/mobject/graphing/test_ticks.py similarity index 100% rename from tests/test_ticks.py rename to tests/module/mobject/graphing/test_ticks.py diff --git a/tests/test_copy.py b/tests/module/mobject/mobject/test_copy.py similarity index 100% rename from tests/test_copy.py rename to tests/module/mobject/mobject/test_copy.py diff --git a/tests/test_family.py b/tests/module/mobject/mobject/test_family.py similarity index 100% rename from tests/test_family.py rename to tests/module/mobject/mobject/test_family.py diff --git a/tests/test_get_set.py b/tests/module/mobject/mobject/test_get_set.py similarity index 100% rename from tests/test_get_set.py rename to tests/module/mobject/mobject/test_get_set.py diff --git a/tests/test_mobject.py b/tests/module/mobject/mobject/test_mobject.py similarity index 100% rename from tests/test_mobject.py rename to tests/module/mobject/mobject/test_mobject.py diff --git a/tests/test_opengl_metaclass.py b/tests/module/mobject/mobject/test_opengl_metaclass.py similarity index 100% rename from tests/test_opengl_metaclass.py rename to tests/module/mobject/mobject/test_opengl_metaclass.py diff --git a/tests/test_set_attr.py b/tests/module/mobject/mobject/test_set_attr.py similarity index 100% rename from tests/test_set_attr.py rename to tests/module/mobject/mobject/test_set_attr.py diff --git a/tests/test_svg_mobject.py b/tests/module/mobject/svg/test_svg_mobject.py similarity index 100% rename from tests/test_svg_mobject.py rename to tests/module/mobject/svg/test_svg_mobject.py diff --git a/tests/test_boolean_ops.py b/tests/module/mobject/test_boolean_ops.py similarity index 100% rename from tests/test_boolean_ops.py rename to tests/module/mobject/test_boolean_ops.py diff --git a/tests/test_graph.py b/tests/module/mobject/test_graph.py similarity index 100% rename from tests/test_graph.py rename to tests/module/mobject/test_graph.py diff --git a/tests/test_value_tracker.py b/tests/module/mobject/test_value_tracker.py similarity index 100% rename from tests/test_value_tracker.py rename to tests/module/mobject/test_value_tracker.py diff --git a/tests/test_markup.py b/tests/module/mobject/text/test_markup.py similarity index 100% rename from tests/test_markup.py rename to tests/module/mobject/text/test_markup.py diff --git a/tests/test_numbers.py b/tests/module/mobject/text/test_numbers.py similarity index 100% rename from tests/test_numbers.py rename to tests/module/mobject/text/test_numbers.py diff --git a/tests/test_texmobject.py b/tests/module/mobject/text/test_texmobject.py similarity index 100% rename from tests/test_texmobject.py rename to tests/module/mobject/text/test_texmobject.py diff --git a/tests/test_text_mobject.py b/tests/module/mobject/text/test_text_mobject.py similarity index 100% rename from tests/test_text_mobject.py rename to tests/module/mobject/text/test_text_mobject.py diff --git a/tests/test_stroke.py b/tests/module/mobject/types/vectorized_mobject/test_stroke.py similarity index 100% rename from tests/test_stroke.py rename to tests/module/mobject/types/vectorized_mobject/test_stroke.py diff --git a/tests/test_vectorized_mobject.py b/tests/module/mobject/types/vectorized_mobject/test_vectorized_mobject.py similarity index 100% rename from tests/test_vectorized_mobject.py rename to tests/module/mobject/types/vectorized_mobject/test_vectorized_mobject.py diff --git a/tests/test_auto_zoom.py b/tests/module/scene/test_auto_zoom.py similarity index 100% rename from tests/test_auto_zoom.py rename to tests/module/scene/test_auto_zoom.py diff --git a/tests/test_scene.py b/tests/module/scene/test_scene.py similarity index 100% rename from tests/test_scene.py rename to tests/module/scene/test_scene.py diff --git a/tests/test_sound.py b/tests/module/scene/test_sound.py similarity index 100% rename from tests/test_sound.py rename to tests/module/scene/test_sound.py diff --git a/tests/test_threed_scene.py b/tests/module/scene/test_threed_scene.py similarity index 100% rename from tests/test_threed_scene.py rename to tests/module/scene/test_threed_scene.py diff --git a/tests/test_color.py b/tests/module/utils/test_color.py similarity index 100% rename from tests/test_color.py rename to tests/module/utils/test_color.py diff --git a/tests/test_deprecation.py b/tests/module/utils/test_deprecation.py similarity index 100% rename from tests/test_deprecation.py rename to tests/module/utils/test_deprecation.py diff --git a/tests/test_file_ops.py b/tests/module/utils/test_file_ops.py similarity index 86% rename from tests/test_file_ops.py rename to tests/module/utils/test_file_ops.py index f8aaf1bcf4..943a70f75e 100644 --- a/tests/test_file_ops.py +++ b/tests/module/utils/test_file_ops.py @@ -3,9 +3,8 @@ from pathlib import Path from manim import * - -from .assert_utils import assert_dir_exists, assert_file_not_exists -from .utils.video_tester import * +from tests.assert_utils import assert_dir_exists, assert_file_not_exists +from tests.utils.video_tester import * def test_guarantee_existence(tmp_path: Path): diff --git a/tests/test_hashing.py b/tests/module/utils/test_hashing.py similarity index 100% rename from tests/test_hashing.py rename to tests/module/utils/test_hashing.py diff --git a/tests/test_space_ops.py b/tests/module/utils/test_space_ops.py similarity index 100% rename from tests/test_space_ops.py rename to tests/module/utils/test_space_ops.py diff --git a/tests/test_units.py b/tests/module/utils/test_units.py similarity index 100% rename from tests/test_units.py rename to tests/module/utils/test_units.py From 754a5fc44b5afe6a0a962edc09443981662726ee Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 9 Jul 2022 23:11:09 +0200 Subject: [PATCH 088/555] added docstring for CoordinateSystem.plot_parametric_curve (#2861) --- manim/mobject/graphing/coordinate_systems.py | 40 +++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 73e398bbed..3ebba99999 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -772,7 +772,45 @@ def construct(self): ) return graph - def plot_parametric_curve(self, function, use_vectorized=False, **kwargs): + def plot_parametric_curve( + self, + function: Callable[[float], np.ndarray], + use_vectorized: bool = False, + **kwargs, + ) -> ParametricFunction: + """A parametric curve. + + Parameters + ---------- + function + A parametric function mapping a number to a point in the + coordinate system. + use_vectorized + Whether to pass in the generated t value array to the function. Only use this if your function supports it. + kwargs + Any further keyword arguments are passed to :class:`.ParametricFunction`. + + Example + ------- + .. manim:: ParametricCurveExample + :save_last_frame: + + class ParametricCurveExample(Scene): + def construct(self): + ax = Axes() + cardioid = ax.plot_parametric_curve( + lambda t: np.array( + [ + np.exp(1) * np.cos(t) * (1 - np.cos(t)), + np.exp(1) * np.sin(t) * (1 - np.cos(t)), + 0, + ] + ), + t_range=[0, 2 * PI], + color="#0FF1CE", + ) + self.add(ax, cardioid) + """ dim = self.dimension graph = ParametricFunction( lambda t: self.coords_to_point(*function(t)[:dim]), From 276c112255de75418354d3877977700f99a3be25 Mon Sep 17 00:00:00 2001 From: Cindy Park <86710710+cpark50@users.noreply.github.com> Date: Sat, 9 Jul 2022 14:18:33 -0700 Subject: [PATCH 089/555] Added logging for repeated mobject in VGroup (#2288) * fix: issue #1027 * solve issue 1027 * deleted testproject * delete unnecessary file * readding vectorized_mobject.py * Add logging for known issue * Apply suggestions from code review * Update manim/mobject/types/vectorized_mobject.py * removed warning from VGroup, added it to Mobject.add and OpenGLMobject.add * remove superfluous f-string * added note to (V)Group docstring Co-authored-by: Ha Co-authored-by: Benjamin Hackl Co-authored-by: Darylgolden Co-authored-by: Tristan Schulz --- manim/mobject/mobject.py | 28 +++++++++++++++++++++-- manim/mobject/opengl/opengl_mobject.py | 7 +++++- manim/mobject/types/vectorized_mobject.py | 6 +++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 0abe0fb77e..196ce56c61 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -33,7 +33,7 @@ from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL -from .. import config +from .. import config, logger from ..constants import * from ..utils.color import ( BLACK, @@ -416,12 +416,29 @@ def add(self, *mobjects: Mobject): ... ValueError: Mobject cannot contain self + A given mobject cannot be added as a submobject + twice to some parent:: + + >>> parent = Mobject(name="parent") + >>> child = Mobject(name="child") + >>> parent.add(child, child) + [...] WARNING ... + parent + >>> parent.submobjects + [child] + """ for m in mobjects: if not isinstance(m, Mobject): raise TypeError("All submobjects must be of type Mobject") if m is self: raise ValueError("Mobject cannot contain self") + if any(mobjects.count(elem) > 1 for elem in mobjects): + logger.warning( + "Attempted adding some Mobject as a child more than once, " + "this is not possible. Repetitions are ignored.", + ) + mobjects = remove_list_redundancies(mobjects) self.submobjects = list_update(self.submobjects, mobjects) return self @@ -2771,7 +2788,14 @@ def set_z_index_by_z_coordinate(self): class Group(Mobject, metaclass=ConvertToOpenGL): - """Groups together multiple :class:`Mobjects <.Mobject>`.""" + """Groups together multiple :class:`Mobjects <.Mobject>`. + + Notes + ----- + When adding the same mobject more than once, repetitions are ignored. + Use :meth:`.Mobject.copy` to create a separate copy which can then + be added to the group. + """ def __init__(self, *mobjects, **kwargs): super().__init__(**kwargs) diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index a1b0a97c8e..2a8e772bf3 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -12,7 +12,7 @@ import numpy as np from colour import Color -from manim import config +from manim import config, logger from manim.constants import * from manim.utils.bezier import integer_interpolate, interpolate from manim.utils.color import * @@ -726,6 +726,11 @@ def add( if self in mobjects: raise ValueError("OpenGLMobject cannot contain self") + if any(mobjects.count(elem) > 1 for elem in mobjects): + logger.warning( + "Attempted adding some Mobject as a child more than once, " + "this is not possible. Repetitions are ignored.", + ) for mobject in mobjects: if not isinstance(mobject, OpenGLMobject): raise TypeError("All submobjects must be of type OpenGLMobject") diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index b524822dec..e2a679c7ae 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -1732,6 +1732,12 @@ class VGroup(VMobject, metaclass=ConvertToOpenGL): This can be used to group multiple :class:`~.VMobject` instances together in order to scale, move, ... them together. + Notes + ----- + When adding the same mobject more than once, repetitions are ignored. + Use :meth:`.Mobject.copy` to create a separate copy which can then + be added to the group. + Examples -------- From 9b731037d9f2c9e647737c9ca44f1a968675feb6 Mon Sep 17 00:00:00 2001 From: Joshua Mankelow Date: Sun, 10 Jul 2022 08:00:07 +0100 Subject: [PATCH 090/555] Moved functionality over from `manim new` to `manim init` and added deprecation warning for `manim new` (#2842) * moved functionality over from manim new to manim init and deprecated manim new * Updated tests to fit new functionality * added a test for project creation using manim init project * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/cli/init/commands.py | 188 +++++++++++++++++++++++++++++-- manim/cli/new/group.py | 1 + tests/interface/test_commands.py | 52 ++++----- 3 files changed, 198 insertions(+), 43 deletions(-) diff --git a/manim/cli/init/commands.py b/manim/cli/init/commands.py index 410d7a9f07..28766f8218 100644 --- a/manim/cli/init/commands.py +++ b/manim/cli/init/commands.py @@ -7,28 +7,192 @@ """ from __future__ import annotations +import configparser from pathlib import Path +import click import cloup -from ...constants import CONTEXT_SETTINGS, EPILOG -from ...utils.file_ops import copy_template_files +from ... import console +from ...constants import CONTEXT_SETTINGS, EPILOG, QUALITIES +from ...utils.file_ops import ( + add_import_statement, + copy_template_files, + get_template_names, + get_template_path, +) + +CFG_DEFAULTS = { + "frame_rate": 30, + "background_color": "BLACK", + "background_opacity": 1, + "scene_names": "Default", + "resolution": (854, 480), +} + + +def select_resolution(): + """Prompts input of type click.Choice from user. Presents options from QUALITIES constant. + + Returns + ------- + :class:`tuple` + Tuple containing height and width. + """ + resolution_options = [] + for quality in QUALITIES.items(): + resolution_options.append( + (quality[1]["pixel_height"], quality[1]["pixel_width"]), + ) + resolution_options.pop() + choice = click.prompt( + "\nSelect resolution:\n", + type=click.Choice([f"{i[0]}p" for i in resolution_options]), + show_default=False, + default="480p", + ) + return [res for res in resolution_options if f"{res[0]}p" == choice][0] + + +def update_cfg(cfg_dict, project_cfg_path): + """Updates the manim.cfg file after reading it from the project_cfg_path. + + Parameters + ---------- + cfg : :class:`dict` + values used to update manim.cfg found project_cfg_path. + project_cfg_path : :class:`Path` + Path of manim.cfg file. + """ + config = configparser.ConfigParser() + config.read(project_cfg_path) + cli_config = config["CLI"] + for key, value in cfg_dict.items(): + if key == "resolution": + cli_config["pixel_height"] = str(value[0]) + cli_config["pixel_width"] = str(value[1]) + else: + cli_config[key] = str(value) + + with open(project_cfg_path, "w") as conf: + config.write(conf) + + +@cloup.command( + context_settings=CONTEXT_SETTINGS, + epilog=EPILOG, +) +@cloup.argument("project_name", type=Path, required=False) +@cloup.option( + "-d", + "--default", + "default_settings", + is_flag=True, + help="Default settings for project creation.", + nargs=1, +) +def project(default_settings, **args): + """Creates a new project. + + PROJECT_NAME is the name of the folder in which the new project will be initialized. + """ + if args["project_name"]: + project_name = args["project_name"] + else: + project_name = click.prompt("Project Name", type=Path) + + # in the future when implementing a full template system. Choices are going to be saved in some sort of config file for templates + template_name = click.prompt( + "Template", + type=click.Choice(get_template_names(), False), + default="Default", + ) + + if project_name.is_dir(): + console.print( + f"\nFolder [red]{project_name}[/red] exists. Please type another name\n", + ) + else: + project_name.mkdir() + new_cfg = {} + new_cfg_path = Path.resolve(project_name / "manim.cfg") + + if not default_settings: + for key, value in CFG_DEFAULTS.items(): + if key == "scene_names": + new_cfg[key] = template_name + "Template" + elif key == "resolution": + new_cfg[key] = select_resolution() + else: + new_cfg[key] = click.prompt(f"\n{key}", default=value) + + console.print("\n", new_cfg) + if click.confirm("Do you want to continue?", default=True, abort=True): + copy_template_files(project_name, template_name) + update_cfg(new_cfg, new_cfg_path) + else: + copy_template_files(project_name, template_name) + update_cfg(CFG_DEFAULTS, new_cfg_path) @cloup.command( context_settings=CONTEXT_SETTINGS, + no_args_is_help=True, epilog=EPILOG, - short_help="""Sets up a new project in current working directory with default settings.\n -It copies files from templates directory and pastes them in the current working dir. -""", ) -def init(): - """Sets up a new project in current working directory with default settings. +@cloup.argument("scene_name", type=str, required=True) +@cloup.argument("file_name", type=str, required=False) +def scene(**args): + """Inserts a SCENE to an existing FILE or creates a new FILE. + + SCENE is the name of the scene that will be inserted. - It copies files from templates directory and pastes them in the current working dir. + FILE is the name of file in which the SCENE will be inserted. """ - cfg = Path("manim.cfg") - if cfg.exists(): - raise FileExistsError(f"\t{cfg} exists\n") + if not Path("main.py").exists(): + raise FileNotFoundError(f"{Path('main.py')} : Not a valid project directory.") + + template_name = click.prompt( + "template", + type=click.Choice(get_template_names(), False), + default="Default", + ) + scene = "" + with open(Path.resolve(get_template_path() / f"{template_name}.mtp")) as f: + scene = f.read() + scene = scene.replace(template_name + "Template", args["scene_name"], 1) + + if args["file_name"]: + file_name = Path(args["file_name"] + ".py") + + if file_name.is_file(): + # file exists so we are going to append new scene to that file + with open(file_name, "a") as f: + f.write("\n\n\n" + scene) + else: + # file does not exist so we create a new file, append the scene and prepend the import statement + with open(file_name, "w") as f: + f.write("\n\n\n" + scene) + + add_import_statement(file_name) else: - copy_template_files() + # file name is not provided so we assume it is main.py + # if main.py does not exist we do not continue + with open(Path("main.py"), "a") as f: + f.write("\n\n\n" + scene) + + +@cloup.group( + context_settings=CONTEXT_SETTINGS, + invoke_without_command=True, + no_args_is_help=True, + epilog=EPILOG, + help="Create a new project or insert a new scene.", +) +@cloup.pass_context +def init(ctx): + pass + + +init.add_command(project) +init.add_command(scene) diff --git a/manim/cli/new/group.py b/manim/cli/new/group.py index b9ee9ccfe2..32fde0dfe9 100644 --- a/manim/cli/new/group.py +++ b/manim/cli/new/group.py @@ -181,6 +181,7 @@ def scene(**args): no_args_is_help=True, epilog=EPILOG, help="Create a new project or insert a new scene.", + deprecated=True, ) @cloup.pass_context def new(ctx): diff --git a/tests/interface/test_commands.py b/tests/interface/test_commands.py index aed2bf179c..5ab293964f 100644 --- a/tests/interface/test_commands.py +++ b/tests/interface/test_commands.py @@ -65,42 +65,32 @@ def test_manim_plugins_subcommand(): def test_manim_init_subcommand(): command = ["init"] runner = CliRunner() - runner.invoke(main, command, prog_name="manim") - - expected_manim_cfg = "" - expected_main_py = "" + result = runner.invoke(main, command, prog_name="manim") + expected_output = """\ +Usage: manim init [OPTIONS] COMMAND [ARGS]... - with open( - Path.resolve( - Path(__file__).parent.parent.parent / "manim/templates/template.cfg" - ), - ) as f: - expected_manim_cfg = f.read() + Create a new project or insert a new scene. - with open( - Path.resolve( - Path(__file__).parent.parent.parent / "manim/templates/Default.mtp" - ), - ) as f: - expected_main_py = f.read() +Options: + --help Show this message and exit. - manim_cfg_path = Path("manim.cfg") - manim_cfg_content = "" - main_py_path = Path("main.py") - main_py_content = "" - with open(manim_cfg_path) as f: - manim_cfg_content = f.read() +Commands: + project Creates a new project. + scene Inserts a SCENE to an existing FILE or creates a new FILE. - with open(main_py_path) as f: - main_py_content = f.read() +Made with <3 by Manim Community developers. +""" + assert dedent(expected_output) == result.output - manim_cfg_path.unlink() - main_py_path.unlink() - assert ( - dedent(expected_manim_cfg + "from manim import *\n" + expected_main_py) - == manim_cfg_content + main_py_content - ) +def test_manim_init_project(tmp_path): + command = ["init", "project", "--default", "testproject"] + runner = CliRunner() + with runner.isolated_filesystem(temp_dir=tmp_path) as tmp_dir: + result = runner.invoke(main, command, prog_name="manim", input="Default\n") + assert not result.exception + assert (Path(tmp_dir) / "testproject/main.py").exists() + assert (Path(tmp_dir) / "testproject/manim.cfg").exists() def test_manim_new_command(): @@ -110,7 +100,7 @@ def test_manim_new_command(): expected_output = """\ Usage: manim new [OPTIONS] COMMAND [ARGS]... - Create a new project or insert a new scene. + (DEPRECATED) Create a new project or insert a new scene. Options: --help Show this message and exit. From 001dd3ef2f906c9d28d7746ccaeaf9937c2cfb63 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Sun, 10 Jul 2022 03:11:35 -0400 Subject: [PATCH 091/555] Add example for Transform's path_arc (#2849) * Add example for Transform's path_arc This was very handy for me when trying to swap two parts of an equation around without them getting muddled together first. Thus, I want it to be more clear how to use this feature. * Fix reference * Address feedback --- manim/animation/transform.py | 42 ++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/manim/animation/transform.py b/manim/animation/transform.py index 77bed1defb..bff83be965 100644 --- a/manim/animation/transform.py +++ b/manim/animation/transform.py @@ -60,6 +60,7 @@ class Transform(Animation): path_arc The arc angle (in radians) that the points of ``mobject`` will follow to reach the points of the target if using a circular path arc, see ``path_arc_centers``. + See also :func:`manim.utils.paths.path_along_arc`. path_arc_axis The axis to rotate along if using a circular path arc, see ``path_arc_centers``. path_arc_centers @@ -74,6 +75,47 @@ class Transform(Animation): If set to True, ``mobject`` will be removed from the scene and ``target_mobject`` will replace it. Otherwise, ``target_mobject`` is never added and ``mobject`` just takes its shape. + + Examples + -------- + + .. manim :: TransformPathArc + + class TransformPathArc(Scene): + def construct(self): + def make_arc_path(start, end, arc_angle): + points = [] + p_fn = path_along_arc(arc_angle) + # alpha animates between 0.0 and 1.0, where 0.0 + # is the beginning of the animation and 1.0 is the end. + for alpha in range(0, 11): + points.append(p_fn(start, end, alpha / 10.0)) + path = VMobject(stroke_color=YELLOW) + path.set_points_smoothly(points) + return path + + left = Circle(stroke_color=BLUE_E, fill_opacity=1.0, radius=0.5).move_to(LEFT * 2) + colors = [TEAL_A, TEAL_B, TEAL_C, TEAL_D, TEAL_E, GREEN_A] + # Positive angles move counter-clockwise, negative angles move clockwise. + examples = [-90, 0, 30, 90, 180, 270] + anims = [] + for idx, angle in enumerate(examples): + left_c = left.copy().shift((3 - idx) * UP) + left_c.fill_color = colors[idx] + right_c = left_c.copy().shift(4 * RIGHT) + path_arc = make_arc_path(left_c.get_center(), right_c.get_center(), + arc_angle=angle * DEGREES) + desc = Text('%d°' % examples[idx]).next_to(left_c, LEFT) + # Make the circles in front of the text in front of the arcs. + self.add( + path_arc.set_z_index(1), + desc.set_z_index(2), + left_c.set_z_index(3), + ) + anims.append(Transform(left_c, right_c, path_arc=angle * DEGREES)) + + self.play(*anims, run_time=2) + self.wait() """ def __init__( From 9a0cac7587ac80a6c060a4de8af49e6414b95d49 Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Sun, 10 Jul 2022 17:45:06 +0200 Subject: [PATCH 092/555] OpenGLVMobject fix pointwise_become_partial to fix stroke rendering (#2714) * fix(get_nth_curve_function_with_length) removed code duplication with get_nth_curve_function_length_pieces * fix(OpenGLVMobject) removed duplcate assignment of self.n_points_per_curve * fix(OpenGLMobject): changed to total assignment in interpolate function * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update manim/mobject/opengl/opengl_vectorized_mobject.py Co-authored-by: Benjamin Hackl * Update manim/mobject/opengl/opengl_vectorized_mobject.py Co-authored-by: Benjamin Hackl * Update opengl_vectorized_mobject.py * Update opengl_vectorized_mobject.py * use remapping instead of copying points * added documentation * (opengl_mobject): reverted interpolate * cleanup * revamping remap, now considering not only adding a single curve per triplet Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/mobject/opengl/opengl_mobject.py | 1 + .../opengl/opengl_vectorized_mobject.py | 96 +++++++++---------- manim/utils/bezier.py | 56 +++++++++++ 3 files changed, 102 insertions(+), 51 deletions(-) diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 2a8e772bf3..dac322f7a5 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -2394,6 +2394,7 @@ def construct(self): func = interpolate self.data[key][:] = func(mobject1.data[key], mobject2.data[key], alpha) + for key in self.uniforms: if key != "fixed_orientation_center": self.uniforms[key] = interpolate( diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 47e25b7389..af09ef3898 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -21,6 +21,7 @@ interpolate, partial_quadratic_bezier_points, proportions_along_bezier_curve_for_point, + quadratic_bezier_remap, ) from manim.utils.color import * from manim.utils.config_ops import _Data @@ -120,7 +121,6 @@ def __init__( self.flat_stroke = flat_stroke self.render_primitive = render_primitive self.triangulation_locked = triangulation_locked - self.n_points_per_curve = n_points_per_curve self.needs_new_triangulation = True self.triangulation = np.zeros(0, dtype="i4") @@ -783,10 +783,7 @@ def get_nth_curve_function_with_length( sample_points = 10 curve = self.get_nth_curve_function(n) - - points = np.array([curve(a) for a in np.linspace(0, 1, sample_points)]) - diffs = points[1:] - points[:-1] - norms = np.apply_along_axis(np.linalg.norm, 1, diffs) + norms = self.get_nth_curve_length_pieces(n, sample_points) length = np.sum(norms) @@ -1285,10 +1282,7 @@ def interpolate(self, mobject1, mobject2, alpha, *args, **kwargs): return self def pointwise_become_partial( - self, - vmobject: OpenGLVMobject, - a: float, - b: float, + self, vmobject: OpenGLVMobject, a: float, b: float, remap: bool = True ) -> OpenGLVMobject: """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) @@ -1301,58 +1295,58 @@ def pointwise_become_partial( upper-bound. b : float lower-bound + remap : bool + if the point amount should be kept the same (True) + This option should be manually set to False if keeping the number of points is not needed """ assert isinstance(vmobject, OpenGLVMobject) - if a <= 0 and b >= 1: - self.become(vmobject) - return self - num_curves = vmobject.get_num_curves() - nppc = self.n_points_per_curve - # Partial curve includes three portions: # - A middle section, which matches the curve exactly - # - A start, which is some ending portion of an inner quadratic - # - An end, which is the starting portion of a later inner quadratic - - lower_index, lower_residue = integer_interpolate(0, num_curves, a) - upper_index, upper_residue = integer_interpolate(0, num_curves, b) - i1 = nppc * lower_index - i2 = nppc * (lower_index + 1) - i3 = nppc * upper_index - i4 = nppc * (upper_index + 1) - - vm_points = vmobject.points - new_points = vm_points.copy() - if num_curves == 0: - new_points[:] = 0 + # - A start, which is some ending portion of an inner cubic + # - An end, which is the starting portion of a later inner cubic + if a <= 0 and b >= 1: + self.set_points(vmobject.points) + return self + bezier_triplets = vmobject.get_bezier_tuples() + num_quadratics = len(bezier_triplets) + + # The following two lines will compute which bezier curves of the given mobject need to be processed. + # The residue basically indicates the proportion of the selected Bèzier curve. + # Ex: if lower_index is 3, and lower_residue is 0.4, then the algorithm will append to the points 0.4 of the third bezier curve + lower_index, lower_residue = integer_interpolate(0, num_quadratics, a) + upper_index, upper_residue = integer_interpolate(0, num_quadratics, b) + self.clear_points() + if num_quadratics == 0: return self if lower_index == upper_index: - tup = partial_quadratic_bezier_points( - vm_points[i1:i2], - lower_residue, - upper_residue, + self.append_points( + partial_quadratic_bezier_points( + bezier_triplets[lower_index], + lower_residue, + upper_residue, + ), ) - new_points[:i1] = tup[0] - new_points[i1:i4] = tup - new_points[i4:] = tup[2] - new_points[nppc:] = new_points[nppc - 1] else: - low_tup = partial_quadratic_bezier_points( - vm_points[i1:i2], - lower_residue, - 1, + self.append_points( + partial_quadratic_bezier_points( + bezier_triplets[lower_index], lower_residue, 1 + ), ) - high_tup = partial_quadratic_bezier_points( - vm_points[i3:i4], - 0, - upper_residue, + inner_points = bezier_triplets[lower_index + 1 : upper_index] + if len(inner_points) > 0: + if remap: + new_triplets = quadratic_bezier_remap( + inner_points, num_quadratics - 2 + ) + else: + new_triplets = bezier_triplets + + self.append_points(np.asarray(new_triplets).reshape(-1, 3)) + self.append_points( + partial_quadratic_bezier_points( + bezier_triplets[upper_index], 0, upper_residue + ), ) - new_points[0:i1] = low_tup[0] - new_points[i1:i2] = low_tup - # Keep new_points i2:i3 as they are - new_points[i3:i4] = high_tup - new_points[i4:] = high_tup[2] - self.set_points(new_points) return self def get_subcurve(self, a: float, b: float) -> OpenGLVMobject: diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index 689404e059..adf40bba09 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -175,6 +175,62 @@ def subdivide_quadratic_bezier(points: Iterable[float], n: int) -> np.ndarray: return np.asarray(beziers).reshape(-1, 3) +def quadratic_bezier_remap( + triplets: Iterable[Iterable[float]], new_number_of_curves: int +): + """Remaps the number of curves to a higher amount by splitting bezier curves + + Parameters + ---------- + triplets + The triplets of the quadratic bezier curves to be remapped + + new_number_of_curves + The number of curves that the output will contain. This needs to be higher than the current number. + + Returns + ------- + The new triplets for the quadratic bezier curves. + """ + difference = new_number_of_curves - len(triplets) + if difference <= 0: + return triplets + new_triplets = np.zeros((new_number_of_curves, 3, 3)) + idx = 0 + for triplet in triplets: + if difference > 0: + tmp_noc = int(np.ceil(difference / len(triplets))) + 1 + tmp = subdivide_quadratic_bezier(triplet, tmp_noc).reshape(-1, 3, 3) + for i in range(tmp_noc): + new_triplets[idx + i] = tmp[i] + difference -= tmp_noc - 1 + idx += tmp_noc + else: + new_triplets[idx] = triplet + idx += 1 + return new_triplets + + """ + This is an alternate version of the function just for documentation purposes + -------- + + difference = new_number_of_curves - len(triplets) + if difference <= 0: + return triplets + new_triplets = [] + for triplet in triplets: + if difference > 0: + tmp_noc = int(np.ceil(difference / len(triplets))) + 1 + tmp = subdivide_quadratic_bezier(triplet, tmp_noc).reshape(-1, 3, 3) + for i in range(tmp_noc): + new_triplets.append(tmp[i]) + difference -= tmp_noc - 1 + else: + new_triplets.append(triplet) + return new_triplets + """ + + # Linear interpolation variants From 8bd23f8aa83178b6de4bc896aac9fe286922788f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 12 Jul 2022 11:40:56 +0200 Subject: [PATCH 093/555] [pre-commit.ci] pre-commit autoupdate (#2868) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v2.34.0 → v2.37.1](https://github.com/asottile/pyupgrade/compare/v2.34.0...v2.37.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b051b84fcf..ffae190e27 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v2.34.0 + rev: v2.37.1 hooks: - id: pyupgrade name: Update code to new python versions From 02f626883732788befd618da132dc3850255398d Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Tue, 12 Jul 2022 19:53:54 +0200 Subject: [PATCH 094/555] New thematic guide: a deep dive into the internals of the library (#2550) * information about imports, initial draft * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * codespell: allow medias. continue until scene.render() * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * updated section title * rough sketch of rest of tutorial; actual writing still TBD * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * tutorial continued * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * continued up to initialization of orange_square * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * completed subsection on initializing mobjects * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * new subsection on Scene.add * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed typo * fixed example * initialization of animation object * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * start explaining Scene.play * typo * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * put together readable overview * everything up to actually rendering the first frame * save_static_frame_data already assigns the frame, no need to do it twice * rendering of static background; up to play_internal * finished render loop, tutorial content-complete * added deep_dive tutorial to correct index.rst * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * upgrade version of furo * fix reference to configuration * move deep dive from tutorial to thematic guide * fix broken HTML produced by manim_directive * disclaimer and tutorial -> guide Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 1 + docs/source/guides/deep_dive.rst | 1029 +++++++++++++++++++++++ manim/renderer/cairo_renderer.py | 2 +- manim/utils/docbuild/manim_directive.py | 4 +- poetry.lock | 43 +- pyproject.toml | 2 +- 6 files changed, 1060 insertions(+), 21 deletions(-) create mode 100644 docs/source/guides/deep_dive.rst diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ffae190e27..5f01085ea5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -65,3 +65,4 @@ repos: rev: v2.1.0 hooks: - id: codespell + args: ["-L", "medias"] diff --git a/docs/source/guides/deep_dive.rst b/docs/source/guides/deep_dive.rst new file mode 100644 index 0000000000..b7d3aa3937 --- /dev/null +++ b/docs/source/guides/deep_dive.rst @@ -0,0 +1,1029 @@ +A deep dive into Manim's internals +================================== + +**Author:** `Benjamin Hackl `__ + +.. admonition:: Disclaimer + + This guide reflects the state of the library as of version ``v0.16.0`` + and primarily treats the Cairo renderer. The situation in the latest + version of Manim might be different; in case of substantial deviations + we will add a note below. + +Introduction +------------ + +Manim can be a wonderful library, if it behaves the way you would like it to, +and/or the way you expect it to. Unfortunately, this is not always the case +(as you probably know if you have played with some manimations yourself already). +To understand where things *go wrong*, digging through the library's source code +is sometimes the only option -- but in order to do that, you need to know where +to start digging. + +This article is intended as some sort of life line through the render process. +We aim to give an appropriate amount of detail describing what happens when +Manim reads your scene code and produces the corresponding animation. Throughout +this article, we will focus on the following toy example:: + + from manim import * + + class ToyExample(Scene): + def construct(self): + orange_square = Square(color=ORANGE, fill_opacity=0.5) + blue_circle = Circle(color=BLUE, fill_opacity=0.5) + self.add(orange_square) + self.play(ReplacementTransform(orange_square, blue_circle, run_time=3)) + small_dot = Dot() + small_dot.add_updater(lambda mob: mob.next_to(blue_circle, DOWN)) + self.play(Create(small_dot)) + self.play(blue_circle.animate.shift(RIGHT)) + self.wait() + self.play(FadeOut(blue_circle, small_dot)) + +Before we go into details or even look at the rendered output of this scene, +let us first describe verbally what happens in this *manimation*. In the first +three lines of the ``construct`` method, a :class:`.Square` and a :class:`.Circle` +are initialized, then the square is added to the scene. The first frame of the +rendered output should thus show an orange square. + +Then the actual animations happen: the square first transforms into a circle, +then a :class:`.Dot` is created (Where do you guess the dot is located when +it is first added to the scene? Answering this already requires detailed +knowledge about the render process.). The dot has an updater attached to it, and +as the circle moves right, the dot moves with it. In the end, all mobjects are +faded out. + +Actually rendering the code yields the following video: + +.. manim:: ToyExample + :hide_source: + + class ToyExample(Scene): + def construct(self): + orange_square = Square(color=ORANGE, fill_opacity=0.5) + blue_circle = Circle(color=BLUE, fill_opacity=0.5) + self.add(orange_square) + self.play(ReplacementTransform(orange_square, blue_circle, run_time=3)) + small_dot = Dot() + small_dot.add_updater(lambda mob: mob.next_to(blue_circle, DOWN)) + self.play(Create(small_dot)) + self.play(blue_circle.animate.shift(RIGHT)) + self.wait() + self.play(FadeOut(blue_circle, small_dot)) + + +For this example, the output (fortunately) coincides with our expectations. + +Overview +-------- + +Because there is a lot of information in this article, here is a brief overview +discussing the contents of the following chapters on a very high level. + +- `Preliminaries`_: In this chapter we unravel all the steps that take place + to prepare a scene for rendering; right until the point where the user-overridden + ``construct`` method is ran. This includes a brief discussion on using Manim's CLI + versus other means of rendering (e.g., via Jupyter notebooks, or in your Python + script by calling the :meth:`.Scene.render` method yourself). +- `Mobject Initialization`_: For the second chapter we dive into creating and handling + Mobjects, the basic elements that should be displayed in our scene. + We discuss the :class:`.Mobject` base class, how there are essentially + three different types of Mobjects, and then discuss the most important of them, + vectorized Mobjects. In particular, we describe the internal point data structure + that governs how the mechanism responsible for drawing the vectorized Mobject + to the screen sets the corresponding Bézier curves. We conclude the chapter + with a tour into :meth:`.Scene.add`, the bookkeeping mechanism controlling which + mobjects should be rendered. +- `Animations and the Render Loop`_: And finally, in the last chapter we walk + through the instantiation of :class:`.Animation` objects (the blueprints that + hold information on how Mobjects should be modified when the render loop runs), + followed by a investigation of the infamous :meth:`.Scene.play` call. We will + see that there are three relevant parts in a :meth:`.Scene.play` call; + a part in which the passed animations and keyword arguments are processed + and prepared, followed by the actual "render loop" in which the library + steps through a time line and renders frame by frame. The final part + does some post-processing to save a short video segment ("partial movie file") + and cleanup for the next call to :meth:`.Scene.play`. In the end, after all of + :meth:`.Scene.construct` has been run, the library combines the partial movie + files to one video. + +And with that, let us get *in medias res*. + +Preliminaries +------------- + +Importing the library +^^^^^^^^^^^^^^^^^^^^^ + +Independent of how exactly you are telling your system +to render the scene, i.e., whether you run ``manim -qm -p file_name.py ToyExample``, or +whether you are rendering the scene directly from the Python script via a snippet +like + +:: + + with tempconfig({"quality": "medium_quality", "preview": True}): + scene = ToyExample() + scene.render() + +or whether you are rendering the code in a Jupyter notebook, you are still telling your +python interpreter to import the library. The usual pattern used to do this is + +:: + + from manim import * + +which (while being a debatable strategy in general) imports a lot of classes and +functions shipped with the library and makes them available in your global name space. +I explicitly avoided stating that it imports **all** classes and functions of the +library, because it does not do that: Manim makes use of the practice described +in `Section 6.4.1 of the Python tutorial `__, +and all module members that should be exposed to the user upon running the ``*``-import +are explicitly declared in the ``__all__`` variable of the module. + +Manim also uses this strategy internally: taking a peek at the file that is run when +the import is called, ``__init__.py`` (see +`here `__), +you will notice that most of the code in that module is concerned with importing +members from various different submodules, again using ``*``-imports. + +.. hint:: + + If you would ever contribute a new submodule to Manim, the main + ``__init__.py`` is where it would have to be listed in order to make its + members accessible to users after importing the library. + +In that file, there is one particular import at the beginning of the file however, +namely:: + + from ._config import * + +This initializes Manim's global configuration system, which is used in various places +throughout the library. After the library runs this line, the current configuration +options are set. The code in there takes care of reading the options in your ``.cfg`` +files (all users have at least the global one that is shipped with the library) +as well as correctly handling command line arguments (if you used the CLI to render). + +You can read more about the config system in the +:doc:`corresponding thematic guide `, and if you are interested in learning +more about the internals of the configuration system and how it is initialized, +follow the code flow starting in `the config module's init file +`__. + +Now that the library is imported, we can turn our attention to the next step: +reading your scene code (which is not particularly exciting, Python just creates +a new class ``ToyExample`` based on our code; Manim is virtually not involved +in that step, with the exception that ``ToyExample`` inherits from ``Scene``). + +However, with the ``ToyExample`` class created and ready to go, there is a new +excellent question to answer: how is the code in our ``construct`` method +actually executed? + +Scene instantiation and rendering +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The answer to this question depends on how exactly you are running the code. +To make things a bit clearer, let us first consider the case that you +have created a file ``toy_example.py`` which looks like this:: + + from manim import * + + class ToyExample(Scene): + def construct(self): + orange_square = Square(color=ORANGE, fill_opacity=0.5) + blue_circle = Circle(color=BLUE, fill_opacity=0.5) + self.add(orange_square) + self.play(ReplacementTransform(orange_square, blue_circle, run_time=3)) + small_dot = Dot() + small_dot.add_updater(lambda mob: mob.next_to(blue_circle, DOWN)) + self.play(Create(small_dot)) + self.play(blue_circle.animate.shift(RIGHT)) + self.wait() + self.play(FadeOut(blue_circle, small_dot)) + + with tempconfig({"quality": "medium_quality", "preview": True}): + scene = ToyExample() + scene.render() + +With such a file, the desired scene is rendered by simply running this Python +script via ``python toy_example.py``. Then, as described above, the library +is imported and Python has read and defined the ``ToyExample`` class (but, +read carefully: *no instance of this class has been created yet*). + +At this point, the interpreter is about to enter the ``tempconfig`` context +manager. Even if you have not seen Manim's ``tempconfig`` before, it's name +already suggests what it does: it creates a copy of the current state of the +configuration, applies the changes to the key-value pairs in the passed +dictionary, and upon leaving the context the original version of the +configuration is restored. TL;DR: it provides a fancy way of temporarily setting +configuration options. + +Inside the context manager, two things happen: an actual ``ToyExample``-scene +object is instantiated, and the ``render`` method is called. Every way of using +Manim ultimately does something along of these lines, the library always instantiates +the scene object and then calls its ``render`` method. To illustrate that this +really is the case, let us briefly look at the two most common ways of rendering +scenes: + +**Command Line Interface.** When using the CLI and running the command +``manim -qm -p toy_example.py ToyExample`` in your terminal, the actual +entry point is Manim's ``__main__.py`` file (located +`here `__. +Manim uses `Click `__ to implement +the command line interface, and the corresponding code is located in Manim's +``cli`` module (https://github.com/ManimCommunity/manim/tree/main/manim/cli). +The corresponding code creating the scene class and calling its render method +is located `here `__. + +**Jupyter notebooks.** In Jupyter notebooks, the communication with the library +is handled by the ``%%manim`` magic command, which is implemented in the +``manim.utils.ipython_magic`` module. There is +:meth:`some documentation <.ManimMagic.manim>` available for the magic command, +and the code creating the scene class and calling its render method is located +`here `__. + + +Now that we know that either way, a :class:`.Scene` object is created, let us investigate +what Manim does when that happens. When instantiating our scene object + +:: + + scene = ToyExample() + +the ``Scene.__init__`` method is called, given that we did not implement our own initialization +method. Inspecting the corresponding code (see +`here `__) +reveals that ``Scene.__init__`` first sets several attributes of the scene objects that do not +depend on any configuration options set in ``config``. Then the scene inspects the value of +``config.renderer``, and based on its value, either instantiates a ``CairoRenderer`` or an +``OpenGLRenderer`` object and assigns it to its ``renderer`` attribute. + +The scene then asks its renderer to initialize the scene by calling + +:: + + self.renderer.init_scene(self) + +Inspecting both the default Cairo renderer and the OpenGL renderer shows that the ``init_scene`` +method effectively makes the renderer instantiate a :class:`.SceneFileWriter` object, which +basically is Manim's interface to ``ffmpeg`` and actually writes the movie file. The Cairo +renderer (see the implementation `here `__) does not require any further initialization. The OpenGL renderer +does some additional setup to enable the realtime rendering preview window, which we do not go +into detail further here. + +.. warning:: + + Currently, there is a lot of interplay between a scene and its renderer. This is a flaw + in Manim's current architecture, and we are working on reducing this interdependency to + achieve a less convoluted code flow. + +After the renderer has been instantiated and initialized its file writer, the scene populates +further initial attributes (notable mention: the ``mobjects`` attribute which keeps track +of the mobjects that have been added to the scene). It is then done with its instantiation +and ready to be rendered. + +The rest of this article is concerned with the last line in our toy example script:: + + scene.render() + +This is where the actual magic happens. + +Inspecting the `implementation of the render method `__ +reveals that there are several hooks that can be used for pre- or postprocessing +a scene. Unsurprisingly, :meth:`.Scene.render` describes the full *render cycle* +of a scene. During this life cycle, there are three custom methods whose base +implementation is empty and that can be overwritten to suit your purposes. In +the order they are called, these customizable methods are: + +- :meth:`.Scene.setup`, which is intended for preparing and, well, *setting up* + the scene for your animation (e.g., adding initial mobjects, assigning custom + attributes to your scene class, etc.), +- :meth:`.Scene.construct`, which is the *script* for your screen play and + contains programmatic descriptions of your animations, and +- :meth:`.Scene.tear_down`, which is intended for any operations you might + want to run on the scene after the last frame has already been rendered + (for example, this could run some code that generates a custom thumbnail + for the video based on the state of the objects in the scene -- this + hook is more relevant for situations where Manim is used within other + Python scripts). + +After these three methods are run, the animations have been fully rendered, +and Manim calls :meth:`.CairoRenderer.scene_finished` to gracefully +complete the rendering process. This checks whether any animations have been +played -- and if so, it tells the :class:`.SceneFileWriter` to close the pipe +to ``ffmpeg``. If not, Manim assumes that a static image should be output +which it then renders using the same strategy by calling the render loop +(see below) once. + +**Back in our toy example,** the call to :meth:`.Scene.render` first +triggers :meth:`.Scene.setup` (which only consists of ``pass``), followed by +a call of :meth:`.Scene.construct`. At this point, our *animation script* +is run, starting with the initialization of ``orange_square``. + + +Mobject Initialization +---------------------- + +Mobjects are, in a nutshell, the Python objects that represent all the +*things* we want to display in our scene. Before we follow our debugger +into the depths of mobject initialization code, it makes sense to +discuss Manim's different types of Mobjects and their basic data +structure. + +What even is a Mobject? +^^^^^^^^^^^^^^^^^^^^^^^ + +:class:`.Mobject` stands for *mathematical object* or *Manim object* +(depends on who you ask 😄). The Python class :class:`.Mobject` is +the base class for all objects that should be displayed on screen. +Looking at the `initialization method +`__ +of :class:`.Mobject`, you will find that not too much happens in there: + +- some initial attribute values are assigned, like ``name`` (which makes the + render logs mention the name of the mobject instead of its type), + ``submobjects`` (initially an empty list), ``color``, and some others. +- Then, two methods related to *points* are called: ``reset_points`` + followed by ``generate_points``, +- and finally, ``init_colors`` is called. + +Digging deeper, you will find that :meth:`.Mobject.reset_points` simply +sets the ``points`` attribute of the mobject to an empty NumPy vector, +while the other two methods, :meth:`.Mobject.generate_points` and +:meth:`.Mobject.init_colors` are just implemented as ``pass``. + +This makes sense: :class:`.Mobject` is not supposed to be used as +an *actual* object that is displayed on screen; in fact the camera +(which we will discuss later in more detail; it is the class that is, +for the Cairo renderer, responsible for "taking a picture" of the +current scene) does not process "pure" :class:`Mobjects <.Mobject>` +in any way, they *cannot* even appear in the rendered output. + +This is where different types of mobjects come into play. Roughly +speaking, the Cairo renderer setup knows three different types of +mobjects that can be rendered: + +- :class:`.ImageMobject`, which represent images that you can display + in your scene, +- :class:`.PMobject`, which are very special mobjects used to represent + point clouds; we will not discuss them further in this guide, +- :class:`.VMobject`, which are *vectorized mobjects*, that is, mobjects + that consist of points that are connected via curves. These are pretty + much everywhere, and we will discuss them in detail in the next section. + +... and what are VMobjects? +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As just mentioned, :class:`VMobjects <.VMobject>` represent vectorized +mobjects. To render a :class:`.VMobject`, the camera looks at the +``points`` attribute of a :class:`.VMobject` and divides it into sets +of four points each. Each of these sets is then used to construct a +cubic Bézier curve with the first and last entry describing the +end points of the curve ("anchors"), and the second and third entry +describing the control points in between ("handles"). + +.. hint:: + To learn more about Bézier curves, take a look at the excellent + online textbook `A Primer on Bézier curves `__ + by `Pomax `__ -- there is an playground representing + cubic Bézier curves `in §1 `__, + the red and yellow points are "anchors", and the green and blue + points are "handles". + +In contrast to :class:`.Mobject`, :class:`.VMobject` can be displayed +on screen (even though, technically, it is still considered a base class). +To illustrate how points are processed, consider the following short example +of a :class:`.VMobject` with 8 points (and thus made out of 8/4 = 2 cubic +Bézier curves). The resulting :class:`.VMobject` is drawn in green. +The handles are drawn as red dots with a line to their closest anchor. + +.. manim:: VMobjectDemo + :save_last_frame: + + class VMobjectDemo(Scene): + def construct(self): + plane = NumberPlane() + my_vmobject = VMobject(color=GREEN) + my_vmobject.points = [ + np.array([-2, -1, 0]), # start of first curve + np.array([-3, 1, 0]), + np.array([0, 3, 0]), + np.array([1, 3, 0]), # end of first curve + np.array([1, 3, 0]), # start of second curve + np.array([0, 1, 0]), + np.array([4, 3, 0]), + np.array([4, -2, 0]), # end of second curve + ] + handles = [ + Dot(point, color=RED) for point in + [[-3, 1, 0], [0, 3, 0], [0, 1, 0], [4, 3, 0]] + ] + handle_lines = [ + Line( + my_vmobject.points[ind], + my_vmobject.points[ind+1], + color=RED, + stroke_width=2 + ) for ind in range(0, len(my_vmobject.points), 2) + ] + self.add(plane, *handles, *handle_lines, my_vmobject) + + +.. warning:: + Manually setting the points of your :class:`.VMobject` is usually + discouraged; there are specialized methods that can take care of + that for you -- but it might be relevant when implementing your own, + custom :class:`.VMobject`. + + + +Squares and Circles: back to our Toy Example +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +With a basic understanding of different types of mobjects, +and an idea of how vectorized mobjects are built we can now +come back to our toy example and the execution of the +:meth:`.Scene.construct` method. In the first two lines +of our animation script, the ``orange_square`` and the +``blue_circle`` are initialized. + +When creating the orange square by running + +:: + + Square(color=ORANGE, fill_opacity=0.5) + +the initialization method of :class:`.Square`, +``Square.__init__``, is called. `Looking at the +implementation `__, +we can see that the ``side_length`` attribute of the square is set, +and then + +:: + + super().__init__(height=side_length, width=side_length, **kwargs) + +is called. This ``super`` call is the Python way of calling the +initialization function of the parent class. As :class:`.Square` +inherits from :class:`.Rectangle`, the next method called +is ``Rectangle.__init__``. There, only the first three lines +are really relevant for us:: + + super().__init__(UR, UL, DL, DR, color=color, **kwargs) + self.stretch_to_fit_width(width) + self.stretch_to_fit_height(height) + +First, the initialization function of the parent class of +:class:`.Rectangle` -- :class:`.Polygon` -- is called. The +four positional arguments passed are the four corners of +the polygon: ``UR`` is up right (and equal to ``UP + RIGHT``), +``UL`` is up left (and equal to ``UP + LEFT``), and so forth. +Before we follow our debugger deeper, let us observe what +happens with the constructed polygon: the remaining two lines +stretch the polygon to fit the specified width and height +such that a rectangle with the desired measurements is created. + +The initialization function of :class:`.Polygon` is particularly +simple, it only calls the initialization function of its parent +class, :class:`.Polygram`. There, we have almost reached the end +of the chain: :class:`.Polygram` inherits from :class:`.VMobject`, +whose initialization function mainly sets the values of some +attributes (quite similar to ``Mobject.__init__``, but more specific +to the Bézier curves that make up the mobject). + +After calling the initialization function of :class:`.VMobject`, +the constructor of :class:`.Polygram` also does something somewhat +odd: it sets the points (which, you might remember above, should +actually be set in a corresponding ``generate_points`` method +of :class:`.Polygram`). + +.. warning:: + In several instances, the implementation of mobjects does + not really stick to all aspects of Manim's interface. This + is unfortunate, and increasing consistency is something + that we actively work on. Help is welcome! + +Without going too much into detail, :class:`.Polygram` sets its +``points`` attribute via :meth:`.VMobject.start_new_path`, +:meth:`.VMobject.add_points_as_corners`, which take care of +setting the quadruples of anchors and handles appropriately. +After the points are set, Python continues to process the +call stack until it reaches the method that was first called; +the initialization method of :class:`.Square`. After this, +the square is initialized and assigned to the ``orange_square`` +variable. + +The initialization of ``blue_circle`` is similar to the one of +``orange_square``, with the main difference being that the inheritance +chain of :class:`.Circle` is different. Let us briefly follow the trace +of the debugger: + +The implementation of :meth:`.Circle.__init__` immediately calls +the initialization method of :class:`.Arc`, as a circle in Manim +is simply an arc with an angle of :math:`\tau = 2\pi`. When +initializing the arc, some basic attributes are set (like +``Arc.radius``, ``Arc.arc_center``, ``Arc.start_angle``, and +``Arc.angle``), and then the initialization method of its +parent class, :class:`.TipableVMobject`, is called (which is +a rather abstract base class for mobjects which a arrow tip can +be attached to). Note that in contrast to :class:`.Polygram`, +this class does **not** preemptively generate the points of the circle. + +After that, things are less exciting: :class:`.TipableVMobject` again +sets some attributes relevant for adding arrow tips, and afterwards +passes to the initialization method of :class:`.VMobject`. From there, +:class:`.Mobject` is initialized and :meth:`.Mobject.generate_points` +is called, which actually runs the method implemented in +:meth:`.Arc.generate_points`. + +After both our ``orange_square`` and the ``blue_circle`` are initialized, +the square is actually added to the scene. The :meth:`.Scene.add` method +is actually doing a few interesting things, so it is worth to dig a bit +deeper in the next section. + + +Adding Mobjects to the Scene +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The code in our ``construct`` method that is run next is + +:: + + self.add(orange_square) + +From a high-level point of view, :meth:`.Scene.add` adds the +``orange_square`` to the list of mobjects that should be rendered, +which is stored in the ``mobjects`` attribute of the scene. However, +it does so in a very careful way to avoid the situation that a mobject +is being added to the scene more than once. At a first glance, this +sounds like a simple task -- the problem is that ``Scene.mobjects`` +is not a "flat" list of mobjects, but a list of mobjects which +might contain mobjects themselves, and so on. + +Stepping through the code in :meth:`.Scene.add`, we see that first +it is checked whether we are currently using the OpenGL renderer +(which we are not) -- adding mobjects to the scene works slightly +different (and actually easier!) for the OpenGL renderer. Then, the +code branch for the Cairo renderer is entered and the list of so-called +foreground mobjects (which are rendered on top of all other mobjects) +is added to the list of passed mobjects. This is to ensure that the +foreground mobjects will stay above of the other mobjects, even after +adding the new ones. In our case, the list of foreground mobjects +is actually empty, and nothing changes. + +Next, :meth:`.Scene.restructure_mobjects` is called with the list +of mobjects to be added as the ``to_remove`` argument, which might +sound odd at first. Practically, this ensures that mobjects are not +added twice, as mentioned above: if they were present in the scene +``Scene.mobjects`` list before (even if they were contained as a +child of some other mobject), they are first removed from the list. +The way :meth:`.Scene.restrucutre_mobjects` works is rather aggressive: +It always operates on a given list of mobjects; in the ``add`` method +two different lists occur: the default one, ``Scene.mobjects`` (no extra +keyword argument is passed), and ``Scene.moving_mobjects`` (which we will +discuss later in more detail). It iterates through all of the members of +the list, and checks whether any of the mobjects passed in ``to_remove`` +are contained as children (in any nesting level). If so, **their parent +mobject is deconstructed** and their siblings are inserted directly +one level higher. Consider the following example:: + + >>> from manim import Scene, Square, Circle, Group + >>> test_scene = Scene() + >>> mob1 = Square() + >>> mob2 = Circle() + >>> mob_group = Group(mob1, mob2) + >>> test_scene.add(mob_group) + + >>> test_scene.mobjects + [Group] + >>> test_scene.restructure_mobjects(to_remove=[mob1]) + + >>> test_scene.mobjects + [Circle] + +Note that the group is disbanded and the circle moves into the +root layer of mobjects in ``test_scene.mobjects``. + +After the mobject list is "restructured", the mobject to be added +are simply appended to ``Scene.mobjects``. In our toy example, +the ``Scene.mobjects`` list is actually empty, so the +``restructure_mobjects`` method does not actually do anything. The +``orange_square`` is simply added to ``Scene.mobjects``, and as +the aforementioned ``Scene.moving_mobjects`` list is, at this point, +also still empty, nothing happens and :meth:`.Scene.add` returns. + +We will hear more about the ``moving_mobject`` list when we discuss +the render loop. Before we do that, let us look at the next line +of code in our toy example, which includes the initialization of +an animation class, +:: + + ReplacementTransform(orange_square, blue_circle, run_time=3) + +Hence it is time to talk about :class:`.Animation`. + + +Animations and the Render Loop +------------------------------ + +Initializing animations +^^^^^^^^^^^^^^^^^^^^^^^ + +Before we follow the trace of the debugger, let us briefly discuss +the general structure of the (abstract) base class :class:`.Animation`. +An animation object holds all the information necessary for the renderer +to generate the corresponding frames. Animations (in the sense of +animation objects) in Manim are *always* tied to a specific mobject; +even in the case of :class:`.AnimationGroup` (which you should actually +think of as an animation on a group of mobjects rather than a group +of animations). Moreover, except for in a particular special case, +the run time of animations is also fixed and known beforehand. + +The initialization of animations actually is not very exciting, +:meth:`.Animation.__init__` merely sets some attributes derived +from the passed keyword arguments and additionally ensures that +the ``Animation.starting_mobject`` and ``Animation.mobject`` +attributes are populated. Once the animation is played, the +``starting_mobject`` attribute holds an unmodified copy of the +mobject the animation is attached to; during the initialization +it is set to a placeholder mobject. The ``mobject`` attribute +is set to the mobject the animation is attached to. + +Animations have a few special methods which are called during the +render loop: + +- :meth:`.Animation.begin`, which is called (as hinted by its name) + at the beginning of every animation, so before the first frame + is rendered. In it, all the required setup for the animation happens. +- :meth:`.Animation.finish` is the counterpart to the ``begin`` method + which is called at the end of the life cycle of the animation (after + the last frame has been rendered). +- :meth:`.Animation.interpolate` is the method that updates the mobject + attached to the animation to the corresponding animation completion + percentage. For example, if in the render loop, + ``some_animation.interpolate(0.5)`` is called, the attached mobject + will be updated to the state where 50% of the animation are completed. + +We will discuss details about these and some further animation methods +once we walk through the actual render loop. For now, we continue with +our toy example and the code that is run when initializing the +:class:`.ReplacementTransform` animation. + +The initialization method of :class:`.ReplacementTransform` only +consists of a call to the constructor of its parent class, +:class:`.Transform`, with the additional keyword argument +``replace_mobject_with_target_in_scene`` set to ``True``. +:class:`.Transform` then sets attributes that control how the +points of the starting mobject are deformed into the points of +the target mobject, and then passes on to the initialization +method of :class:`.Animation`. Other basic properties of the +animation (like its ``run_time``, the ``rate_func``, etc.) are +processed there -- and then the animation object is fully +initialized and ready to be played. + +The ``play`` call: preparing to enter Manim's render loop +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We are finally there, the render loop is in our reach. Let us +walk through the code that is run when :meth:`.Scene.play` is called. + +.. hint:: + + Recall that this article is specifically about the Cairo renderer. + Up to here, things were more or less the same for the OpenGL renderer + as well; while some base mobjects might be different, the control flow + and lifecycle of mobjects is still more or less the same. There are more + substantial differences when it comes to the rendering loop. + +As you will see when inspecting the method, :meth:`.Scene.play` almost +immediately passes over to the ``play`` method of the renderer, +in our case :class:`.CairoRenderer.play`. The one thing :meth:`.Scene.play` +takes care of is the management of subcaptions that you might have +passed to it (see the the documentation of :meth:`.Scene.play` and +:meth:`.Scene.add_subcaption` for more information). + +.. warning:: + + As has been said before, the communication between scene and renderer + is not in a very clean state at this point, so the following paragraphs + might be confusing if you don't run a debugger and step through the + code yourself a bit. + +Inside :meth:`.CairoRenderer.play`, the renderer first checks whether +it may skip rendering of the current play call. This might happen, for example, +when ``-s`` is passed to the CLI (i.e., only the last frame should be rendered), +or when the ``-n`` flag is passed and the current play call is outside of the +specified render bounds. The "skipping status" is updated in form of the +call to :meth:`.CairoRenderer.update_skipping_status`. + +Next, the renderer asks the scene to process the animations in the play +call so that renderer obtains all of the information it needs. To +be more concrete, :meth:`.Scene.compile_animation_data` is called, +which then takes care of several things: + +- The method processes all animations and the keyword arguments passed + to the initial :meth:`.Scene.play` call. In particular, this means + that it makes sure all arguments passed to the play call are actually + animations (or ``.animate`` syntax calls, which are also assembled to + be actual :class:`.Animation`-objects at that point). It also propagates + any animation-related keyword arguments (like ``run_time``, + or ``rate_func``) passed to :class:`.Scene.play` to each individual + animation. The processed animations are then stored in the ``animations`` + attribute of the scene (which the renderer later reads...). +- It adds all mobjects to which the animations that are played are + bound to to the scene (provided the animation is not an mobject-introducing + animation -- for these, the addition to the scene happens later). +- In case the played animation is a :class:`.Wait` animation (this is the + case in a :meth:`.Scene.wait` call), the method checks whether a static + image should be rendered, or whether the render loop should be processed + as usual (see :meth:`.Scene.should_update_mobjects` for the exact conditions, + basically it checks whether there are any time-dependent updater functions + and so on). +- Finally, the method determines the total run time of the play call (which + at this point is computed as the maximum of the run times of the passed + animations). This is stored in the ``duration`` attribute of the scene. + + +After the animation data has been compiled by the scene, the renderer +continues to prepare for entering the render loop. It now checks the +skipping status which has been determined before. If the renderer can +skip this play call, it does so: it sets the current play call hash (which +we will get back to in a moment) to ``None`` and increases the time of the +renderer by the determined animation run time. + +Otherwise, the renderer checks whether or not Manim's caching system should +be used. The idea of the caching system is simple: for every play call, a +hash value is computed, which is then stored and upon re-rendering the scene, +the hash is generated again and checked against the stored value. If it is the +same, the cached output is reused, otherwise it is fully rerendered again. +We will not go into details of the caching system here; if you would like +to learn more, the :func:`.get_hash_from_play_call` function in the +:mod:`.utils.hashing` module is essentially the entry point to the caching +mechanism. + +In the event that the animation has to be rendered, the renderer asks +its :class:`.SceneFileWriter` to start a writing process. The process +is started by a call to ``ffmpeg`` and opens a pipe to which rendered +raw frames can be written. As long as the pipe is open, the process +can be accessed via the ``writing_process`` attribute of the file writer. +With the writing process in place, the renderer then asks the scene +to "begin" the animations. + +First, it literally *begins* all of the animations by calling their +setup methods (:meth:`.Animation._setup_scene`, :meth:`.Animation.begin`). +In doing so, the mobjects that are newly introduced by an animation +(like via :class:`.Create` etc.) are added to the scene. Furthermore, the +animation suspends updater functions being called on its mobject, and +it sets its mobject to the state that corresponds to the first frame +of the animation. + +After this has happened for all animations in the current ``play`` call, +the Cairo renderer determines which of the scene's mobjects can be +painted statically to the background, and which ones have to be +redrawn every frame. It does so by calling +:meth:`.Scene.get_moving_and_static_mobjects`, and the resulting +partition of mobjects is stored in the corresponding ``moving_mobjects`` +and ``static_mobjects`` attributes. + +.. NOTE:: + + The mechanism that determines static and moving mobjects is + specific for the Cairo renderer, the OpenGL renderer works differently. + Basically, moving mobjects are determined by checking whether they, + any of their children, or any of the mobjects "below" them (in the + sense of the order in which mobjects are processed in the scene) + either have an update function attached, or whether they appear + in one of the current animations. See the implementation of + :meth:`.Scene.get_moving_mobjects` for more details. + +Up to this very point, we did not actually render any (partial) +image or movie files from the scene yet. This is, however, about to change. +Before we enter the render loop, let us briefly revisit our toy +example and discuss how the generic :meth:`.Scene.play` call +setup looks like there. + +For the call that plays the :class:`.ReplacementTransform`, there +is no subcaption to be taken care of. The renderer then asks +the scene to compile the animation data: the passed argument +already is an animation (no additional preparations needed), +there is no need for processing any keyword arguments (as +we did not specify any additional ones to ``play``). The +mobject bound to the animation, ``orange_square``, is already +part of the scene (so again, no action taken). Finally, the run +time is extracted (3 seconds long) and stored in +``Scene.duration``. The renderer then checks whether it should +skip (it should not), then whether the animation is already +cached (it is not). The corresponding animation hash value is +determined and passed to the file writer, which then also calls +``ffmpeg`` to start the writing process which waits for rendered +frames from the library. + +The scene then ``begin``\ s the animation: for the +:class:`.ReplacementTransform` this means that the animation populates +all of its relevant animation attributes (i.e., compatible copies +of the starting and the target mobject so that it can safely interpolate +between the two). + +The mechanism determining static and moving mobjects considers +all of the scenes mobjects (at this point only the +``orange_square``), and determines that the ``orange_square`` is +bound to an animation that is currently played. As a result, +the square is classified as a "moving mobject". + +Time to render some frames. + + +The render loop (for real this time) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As mentioned above, due to the mechanism that determines static and moving +mobjects in the scene, the renderer knows which mobjects it can paint +statically to the background of the scene. Practically, this means that +it partially renders a scene (to produce a background image), and then +when iterating through the time progression of the animation only the +"moving mobjects" are re-painted on top of the static background. + +The renderer calls :meth:`.CairoRenderer.save_static_frame_data`, which +first checks whether there are currently any static mobjects, and if there +are, it updates the frame (only with the static mobjects; more about how +exactly this works in a moment) and then saves a NumPy array representing +the rendered frame in the ``static_image`` attribute. In our toy example, +there are no static mobjects, and so the ``static_image`` attribute is +simply set to ``None``. + +Next, the renderer asks the scene whether the current animation is +a "frozen frame" animation, which would mean that the renderer actually +does not have to repaint the moving mobjects in every frame of the time +progression. It can then just take the latest static frame, and display it +throughout the animation. + +.. NOTE:: + + An animation is considered a "frozen frame" animation if only a + static :class:`.Wait` animation is played. See the description + of :meth:`.Scene.compile_animation_data` above, or the + implementation of :meth:`.Scene.should_update_mobjects` for + more details. + +If this is not the case (just as in our toy example), the renderer +then calls the :meth:`.Scene.play_internal` method, which is the +integral part of the render loop (in which the library steps through +the time progression of the animation and renders the corresponding +frames). + +Within :meth:`.Scene.play_internal`, the following steps are performed: + +- The scene determines the run time of the animations by calling + :meth:`.Scene.get_run_time`. This method basically takes the maximum + ``run_time`` attribute of all of the animations passed to the + :meth:`.Scene.play` call. +- Then the *time progression* is constructed via the (internal) + :meth:`.Scene._get_animation_time_progression` method, which wraps + the actual :meth:`.Scene.get_time_progression` method. The time + progression is a ``tqdm`` `progress bar object `__ + for an iterator over ``np.arange(0, run_time, 1 / config.frame_rate)``. In + other words, the time progression holds the time stamps (relative to the + current animations, so starting at 0 and ending at the total animation run time, + with the step size determined by the render frame rate) of the timeline where + a new animation frame should be rendered. +- Then the scene iterates over the time progression: for each time stamp ``t``, + :meth:`.Scene.update_to_time` is called, which ... + + - ... first computes the time passed since the last update (which might be 0, + especially for the initial call) and references it as ``dt``, + - then (in the order in which the animations are passed to :meth:`.Scene.play`) + calls :meth:`.Animation.update_mobjects` to trigger all updater functions that + are attached to the respective animation except for the "main mobject" of + the animation (that is, for example, for :class:`.Transform` the unmodified + copies of start and target mobject -- see :meth:`.Animation.get_all_mobjects_to_update` + for more details), + - then the relative time progression with respect to the current animation + is computed (``alpha = t / animation.run_time``), which is then used to + update the state of the animation with a call to :meth:`.Animation.interpolate`. + - After all of the passed animations have been processed, the updater functions + of all mobjects in the scene, all meshes, and finally those attached to + the scene itself are run. + +At this point, the internal (Python) state of all mobjects has been updated +to match the currently processed timestamp. If rendering should not be skipped, +then it is now time to *take a picture*! + +.. NOTE:: + + The update of the internal state (iteration over the time progression) happens + *always* once :meth:`.Scene.play_internal` is entered. This ensures that even + if frames do not need to be rendered (because, e.g., the ``-n`` CLI flag has + been passed, something has been cached, or because we might be in a *Section* + with skipped rendering), updater functions still run correctly, and the state + of the first frame that *is* rendered is kept consistent. + +To render an image, the scene calls the corresponding method of its renderer, +:meth:`.CairoRenderer.render` and passes just the list of *moving mobjects* (remember, +the *static mobjects* are assumed to have already been painted statically to +the background of the scene). All of the hard work then happens when the renderer +updates its current frame via a call to :meth:`.CairoRenderer.update_frame`: + +First, the renderer prepares its :class:`.Camera` by checking whether the renderer +has a ``static_image`` different from ``None`` stored already. If so, it sets the +image as the *background image* of the camera via :meth:`.Camera.set_frame_to_background`, +and otherwise it just resets the camera via :meth:`.Camera.reset`. The camera is then +asked to capture the scene with a call to :meth:`.Camera.camture_mobjects`. + +Things get a bit technical here, and at some point it is more efficient to +delve into the implementation -- but here is a summary of what happens once the +camera is asked to capture the scene: + +- First, a flat list of mobjects is created (so submobjects get extracted from + their parents). This list is then processed in groups of the same type of + mobjects (e.g., a batch of vectorized mobjects, followed by a batch of image mobjects, + followed by more vectorized mobjects, etc. -- in many cases there will just be + one batch of vectorized mobjects). +- Depending on the type of the currently processed batch, the camera uses dedicated + *display functions* to convert the :class:`.Mobject` Python object to + a NumPy array stored in the camera's ``pixel_array`` attribute. + The most important example in that context is the display function for + vectorized mobjects, :meth:`.Camera.display_multiple_vectorized_mobjects`, + or the more particular (in case you did not add a background image to your + :class:`.VMobject`), :meth:`.Camera.display_multiple_non_background_colored_vmobjects`. + This method first gets the current Cairo context, and then, for every (vectorized) + mobject in the batch, calls :meth:`.Camera.display_vectorized`. There, + the actual background stroke, fill, and then stroke of the mobject is + drawn onto the context. See :meth:`.Camera.apply_stroke` and + :meth:`.Camera.set_cairo_context_color` for more details -- but it does not get + much deeper than that, in the latter method the actual Bézier curves + determined by the points of the mobject are drawn; this is where the low-level + interaction with Cairo happens. + +After all batches have been processed, the camera has an image representation +of the Scene at the current time stamp in form of a NumPy array stored in its +``pixel_array`` attribute. The renderer then takes this array and passes it to +its :class:`.SceneFileWriter`. This concludes one iteration of the render loop, +and once the time progression has been processed completely, a final bit +of cleanup is performed before the :meth:`.Scene.play_internal` call is completed. + +A TL;DR for the render loop, in the context of our toy example, reads as follows: + +- The scene finds that a 3 second long animation (the :class:`.ReplacementTransform` + changing the orange square to the blue circle) should be played. Given the requested + medium render quality, the frame rate is 30 frames per second, and so the time + progression with steps ``[0, 1/30, 2/30, ..., 89/30]`` is created. +- In the internal render loop, each of these time stamps is processed: + there are no updater functions, so effectively the scene updates the + state of the transformation animation to the desired time stamp (for example, + at time stamp ``t = 45/30``, the animation is completed to a rate of + ``alpha = 0.5``). +- Then the scene asks the renderer to do its job. The renderer asks its camera + to capture the scene, the only mobject that needs to be processed at this point + is the main mobject attached to the transformation; the camera converts the + current state of the mobject to entries in a NumPy array. The renderer passes + this array to the file writer. +- At the end of the loop, 90 frames have been passed to the file writer. + +Completing the render loop +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The last few steps in the :meth:`.Scene.play_internal` call are not too +exciting: for every animation, the corresponding :meth:`.Animation.finish` +and :meth:`.Animation.clean_up_from_scene` methods are called. + +.. NOTE:: + + Note that as part of :meth:`.Animation.finish`, the :meth:`.Animation.interpolate` + method is called with an argument of 1.0 -- you might have noticed already that + the last frame of an animation can sometimes be a bit off or incomplete. + This is by current design! The last frame rendered in the render loop (and displayed + for a duration of ``1 / frame_rate`` seconds in the rendered video) corresponds to + the state of the animation ``1 / frame_rate`` seconds before it ends. To display + the final frame as well in the video, we would need to append another ``1 / frame_rate`` + seconds to the video -- which would then mean that a 1 second rendered Manim video + would be slightly longer than 1 second. We decided against this at some point. + +In the end, the time progression is closed (which completes the displayed progress bar) +in the terminal. With the closing of the time progression, the +:meth:`.Scene.play_internal` call is completed, and we return to the renderer, +which now orders the :class:`.SceneFileWriter` to close the movie pipe that has +been opened for this animation: a partial movie file is written. + +This pretty much concludes the walkthrough of a :class:`.Scene.play` call, +and actually there is not too much more to say for our toy example either: at +this point, a partial movie file that represents playing the +:class:`.ReplacementTransform` has been written. The initialization of +the :class:`.Dot` happens analogous to the initialization of ``blue_circle``, +which has been discussed above. The :meth:`.Mobject.add_updater` call literally +just attaches a function to the ``updaters`` attribute of the ``small_dot``. And +the remaining :meth:`.Scene.play` and :meth:`.Scene.wait` calls follow the +exact same procedure as discussed in the render loop section above; each such call +produces a corresponding partial movie file. + +Once the :meth:`.Scene.construct` method has been fully processed (and thus all +of the corresponding partial movie files have been written), the +scene calls its cleanup method :meth:`.Scene.tear_down`, and then +asks its renderer to finish the scene. The renderer, in turn, asks +its scene file writer to wrap things up by calling :meth:`.SceneFileWriter.finish`, +which triggers the combination of the partial movie files into the final product. + +And there you go! This is a more or less detailed description of how Manim works +under the hood. While we did not discuss every single line of code in detail +in this walkthrough, it should still give you a fairly good idea of how the general +structural design of the library and at least the Cairo rendering flow in particular +looks like. diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index c47e17909f..c491f2f930 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -90,7 +90,7 @@ def play(self, scene, *args, **kwargs): scene.begin_animations() # Save a static image, to avoid rendering non moving objects. - self.static_image = self.save_static_frame_data(scene, scene.static_mobjects) + self.save_static_frame_data(scene, scene.static_mobjects) if scene.is_current_animation_frozen_frame(): self.update_frame(scene, mobjects=scene.moving_mobjects) diff --git a/manim/utils/docbuild/manim_directive.py b/manim/utils/docbuild/manim_directive.py index cda4f4dc5f..816cac7994 100644 --- a/manim/utils/docbuild/manim_directive.py +++ b/manim/utils/docbuild/manim_directive.py @@ -398,9 +398,9 @@ def setup(app): {{ ref_block }} -{% endif %} - .. raw:: html + +{% endif %} """ diff --git a/poetry.lock b/poetry.lock index 991b663c0c..3f1c2819b7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -584,20 +584,17 @@ woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] [[package]] name = "furo" -version = "2021.11.23" +version = "2022.6.21" description = "A clean customisable Sphinx documentation theme." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] beautifulsoup4 = "*" -pygments = ">=2.7,<3.0" -sphinx = ">=4.0,<5.0" - -[package.extras] -test = ["pytest", "pytest-cov", "pytest-xdist"] -doc = ["myst-parser", "sphinx-copybutton", "sphinx-design", "sphinx-inline-tabs"] +pygments = "*" +sphinx = ">=4.0,<6.0" +sphinx-basic-ng = "*" [[package]] name = "gitdb" @@ -699,7 +696,7 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.15.0" +version = "6.15.1" description = "IPython Kernel for Jupyter" category = "main" optional = true @@ -868,7 +865,7 @@ test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-comm [[package]] name = "jupyter-core" -version = "4.11.0" +version = "4.11.1" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "main" optional = true @@ -2030,6 +2027,20 @@ docs = ["sphinxcontrib-websupport"] lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "docutils-stubs", "types-typed-ast", "types-requests"] test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] +[[package]] +name = "sphinx-basic-ng" +version = "0.0.1a12" +description = "A modern skeleton for Sphinx themes." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +sphinx = ">=4.0,<6.0" + +[package.extras] +docs = ["furo", "myst-parser", "sphinx-copybutton", "sphinx-inline-tabs", "ipython"] + [[package]] name = "sphinx-copybutton" version = "0.4.0" @@ -2415,7 +2426,7 @@ jupyterlab = ["jupyterlab"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "052b9b3efc49510cbcf8618fda2856ca5842b7b29742a53f59728268cd096227" +content-hash = "06af588f2ab538122f8e43f3f248a3b2d917e73592219588d0e5ae8dbed817f1" [metadata.files] alabaster = [ @@ -2733,8 +2744,8 @@ flake8-simplify = [ ] fonttools = [] furo = [ - {file = "furo-2021.11.23-py3-none-any.whl", hash = "sha256:6d396451ad1aadce380c662fca9362cb10f4fd85f296d74fe3ca32006eb641d7"}, - {file = "furo-2021.11.23.tar.gz", hash = "sha256:54cecac5f3b688b5c7370d72ecdf1cd91a6c53f0f42751f4a719184b562cde70"}, + {file = "furo-2022.6.21-py3-none-any.whl", hash = "sha256:061b68e323345e27fcba024cf33a1e77f3dfd8d9987410be822749a706e2add6"}, + {file = "furo-2022.6.21.tar.gz", hash = "sha256:9aa983b7488a4601d13113884bfb7254502c8729942e073a0acb87a5512af223"}, ] gitdb = [ {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, @@ -2802,10 +2813,7 @@ jupyter-client = [ {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"}, {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"}, ] -jupyter-core = [ - {file = "jupyter_core-4.11.0-py3-none-any.whl", hash = "sha256:3ac8784dd2740257a82551fbdaacad48956f1326290fbcc5e47a808347422cee"}, - {file = "jupyter_core-4.11.0.tar.gz", hash = "sha256:7cf01bed6579e83241b655c76910f5d608c4b1265dbffc0ffd4df3244628e31e"}, -] +jupyter-core = [] jupyter-server = [ {file = "jupyter_server-1.18.1-py3-none-any.whl", hash = "sha256:022759b09c96a4e2feb95de59ce4283e04e17782efe197b91d23a47521609b77"}, {file = "jupyter_server-1.18.1.tar.gz", hash = "sha256:2b72fc595bccae292260aad8157a0ead8da2c703ec6ae1bb7b36dbad0e267ea7"}, @@ -3673,6 +3681,7 @@ 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 = [] 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"}, diff --git a/pyproject.toml b/pyproject.toml index 45261d98e2..cc8830bd06 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,7 +67,7 @@ pylint = "^2.12.2" Sphinx = "^4" sphinx-copybutton = "^0.4.0" sphinxext-opengraph = "^0.5.1" -furo = "^2021.11.23" +furo = "^2022.06.21" recommonmark = "^0.7.1" matplotlib = "^3.3.2" pre-commit = "^2.11.1" From 999d81ee92a029f5557d5e0eca4188c01a5909b2 Mon Sep 17 00:00:00 2001 From: Joshua Mankelow Date: Tue, 12 Jul 2022 21:21:31 +0100 Subject: [PATCH 095/555] Fixed issue with ``manim init scene SCENE_NAME filename.py`` and removed necessity of ``main.py`` to be present in working directory (#2870) * Fixed .py issue with manim init scene SCENE_NAME filename.py and removed necessity of main.py file to be present. * fixed a problem when passing file name * added interface test * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/cli/init/commands.py | 9 +++++---- tests/interface/test_commands.py | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/manim/cli/init/commands.py b/manim/cli/init/commands.py index 28766f8218..8124e687f1 100644 --- a/manim/cli/init/commands.py +++ b/manim/cli/init/commands.py @@ -149,9 +149,6 @@ def scene(**args): FILE is the name of file in which the SCENE will be inserted. """ - if not Path("main.py").exists(): - raise FileNotFoundError(f"{Path('main.py')} : Not a valid project directory.") - template_name = click.prompt( "template", type=click.Choice(get_template_names(), False), @@ -163,8 +160,12 @@ def scene(**args): scene = scene.replace(template_name + "Template", args["scene_name"], 1) if args["file_name"]: - file_name = Path(args["file_name"] + ".py") + if args["file_name"][-3:] == ".py": + file_name = args["file_name"] + else: + file_name = args["file_name"] + ".py" + file_name = Path(file_name) if file_name.is_file(): # file exists so we are going to append new scene to that file with open(file_name, "a") as f: diff --git a/tests/interface/test_commands.py b/tests/interface/test_commands.py index 5ab293964f..9f4dbfe0a4 100644 --- a/tests/interface/test_commands.py +++ b/tests/interface/test_commands.py @@ -93,6 +93,28 @@ def test_manim_init_project(tmp_path): assert (Path(tmp_dir) / "testproject/manim.cfg").exists() +def test_manim_init_scene(tmp_path): + command_named = ["init", "scene", "NamedFileTestScene", "my_awesome_file.py"] + command_unnamed = ["init", "scene", "DefaultFileTestScene"] + runner = CliRunner() + with runner.isolated_filesystem(temp_dir=tmp_path) as tmp_dir: + result = runner.invoke( + main, command_named, prog_name="manim", input="Default\n" + ) + assert not result.exception + assert (Path(tmp_dir) / "my_awesome_file.py").exists() + with open(Path(tmp_dir) / "my_awesome_file.py") as f: + file_content = f.read() + assert "NamedFileTestScene(Scene):" in file_content + result = runner.invoke( + main, command_unnamed, prog_name="manim", input="Default\n" + ) + assert (Path(tmp_dir) / "main.py").exists() + with open(Path(tmp_dir) / "main.py") as f: + file_content = f.read() + assert "DefaultFileTestScene(Scene):" in file_content + + def test_manim_new_command(): command = ["new"] runner = CliRunner() From ad38f6a980299d69bb2473d5a5a29b3b38d08686 Mon Sep 17 00:00:00 2001 From: Logen <47022821+Logenleedev@users.noreply.github.com> Date: Tue, 12 Jul 2022 15:22:12 -0500 Subject: [PATCH 096/555] Increased minimum required version of ``numpy`` to 1.19 (#2680) * Add new troubleshooting guide under 'Other Errors' section * update numpy version in pyproject.toml * update lock file Co-authored-by: Benjamin Hackl --- poetry.lock | 105 ++++++++++--------------------------------------- pyproject.toml | 2 +- 2 files changed, 22 insertions(+), 85 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3f1c2819b7..82b94d212b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -74,7 +74,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [[package]] name = "astroid" -version = "2.11.6" +version = "2.11.7" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -88,7 +88,7 @@ wrapt = ">=1.11,<2" [[package]] name = "atomicwrites" -version = "1.4.0" +version = "1.4.1" description = "Atomic file writes." category = "dev" optional = false @@ -294,7 +294,7 @@ test = ["flake8 (3.7.8)", "hypothesis (3.55.3)"] [[package]] name = "coverage" -version = "6.4.1" +version = "6.4.2" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -825,7 +825,7 @@ dev = ["hypothesis"] [[package]] name = "jsonschema" -version = "4.6.2" +version = "4.7.2" description = "An implementation of JSON Schema validation for Python" category = "main" optional = true @@ -1198,7 +1198,7 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest [[package]] name = "nbclassic" -version = "0.4.2" +version = "0.4.3" description = "A web-based notebook environment for interactive computing" category = "main" optional = true @@ -1448,7 +1448,7 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "2.19.0" +version = "2.20.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." category = "dev" optional = false @@ -1876,7 +1876,7 @@ docutils = ">=0.11,<1.0" [[package]] name = "rich" -version = "12.4.4" +version = "12.5.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -1928,7 +1928,7 @@ win32 = ["pywin32"] [[package]] name = "setuptools-scm" -version = "7.0.4" +version = "7.0.5" description = "the blessed package to manage your versions by scm tags" category = "dev" optional = false @@ -2258,7 +2258,7 @@ python-versions = "*" [[package]] name = "types-docutils" -version = "0.18.3" +version = "0.19.0" description = "Typing stubs for docutils" category = "dev" optional = false @@ -2409,15 +2409,15 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "zipp" -version = "3.8.0" +version = "3.8.1" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [extras] gui = ["dearpygui"] @@ -2426,7 +2426,7 @@ jupyterlab = ["jupyterlab"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "06af588f2ab538122f8e43f3f248a3b2d917e73592219588d0e5ae8dbed817f1" +content-hash = "228320f1c5c1ebf0e96109b1ef71cc9b3320d13729ee94ef81daba7739286f01" [metadata.files] alabaster = [ @@ -2472,14 +2472,8 @@ 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.11.6-py3-none-any.whl", hash = "sha256:ba33a82a9a9c06a5ceed98180c5aab16e29c285b828d94696bf32d6015ea82a9"}, - {file = "astroid-2.11.6.tar.gz", hash = "sha256:4f933d0bf5e408b03a6feb5d23793740c27e07340605f236496cd6ce552043d6"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] +astroid = [] +atomicwrites = [] attrs = [ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, @@ -2559,49 +2553,7 @@ commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] -coverage = [ - {file = "coverage-6.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1d5aa2703e1dab4ae6cf416eb0095304f49d004c39e9db1d86f57924f43006b"}, - {file = "coverage-6.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4ce1b258493cbf8aec43e9b50d89982346b98e9ffdfaae8ae5793bc112fb0068"}, - {file = "coverage-6.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c4e737f60c6936460c5be330d296dd5b48b3963f48634c53b3f7deb0f34ec4"}, - {file = "coverage-6.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84e65ef149028516c6d64461b95a8dbcfce95cfd5b9eb634320596173332ea84"}, - {file = "coverage-6.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f69718750eaae75efe506406c490d6fc5a6161d047206cc63ce25527e8a3adad"}, - {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e57816f8ffe46b1df8f12e1b348f06d164fd5219beba7d9433ba79608ef011cc"}, - {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:01c5615d13f3dd3aa8543afc069e5319cfa0c7d712f6e04b920431e5c564a749"}, - {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75ab269400706fab15981fd4bd5080c56bd5cc07c3bccb86aab5e1d5a88dc8f4"}, - {file = "coverage-6.4.1-cp310-cp310-win32.whl", hash = "sha256:a7f3049243783df2e6cc6deafc49ea123522b59f464831476d3d1448e30d72df"}, - {file = "coverage-6.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:ee2ddcac99b2d2aec413e36d7a429ae9ebcadf912946b13ffa88e7d4c9b712d6"}, - {file = "coverage-6.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb73e0011b8793c053bfa85e53129ba5f0250fdc0392c1591fd35d915ec75c46"}, - {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106c16dfe494de3193ec55cac9640dd039b66e196e4641fa8ac396181578b982"}, - {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f4f3df85aa39da00fd3ec4b5abeb7407e82b68c7c5ad181308b0e2526da5d4"}, - {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:961e2fb0680b4f5ad63234e0bf55dfb90d302740ae9c7ed0120677a94a1590cb"}, - {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cec3a0f75c8f1031825e19cd86ee787e87cf03e4fd2865c79c057092e69e3a3b"}, - {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:129cd05ba6f0d08a766d942a9ed4b29283aff7b2cccf5b7ce279d50796860bb3"}, - {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bf5601c33213d3cb19d17a796f8a14a9eaa5e87629a53979a5981e3e3ae166f6"}, - {file = "coverage-6.4.1-cp37-cp37m-win32.whl", hash = "sha256:269eaa2c20a13a5bf17558d4dc91a8d078c4fa1872f25303dddcbba3a813085e"}, - {file = "coverage-6.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f02cbbf8119db68455b9d763f2f8737bb7db7e43720afa07d8eb1604e5c5ae28"}, - {file = "coverage-6.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ffa9297c3a453fba4717d06df579af42ab9a28022444cae7fa605af4df612d54"}, - {file = "coverage-6.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:145f296d00441ca703a659e8f3eb48ae39fb083baba2d7ce4482fb2723e050d9"}, - {file = "coverage-6.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d44996140af8b84284e5e7d398e589574b376fb4de8ccd28d82ad8e3bea13"}, - {file = "coverage-6.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2bd9a6fc18aab8d2e18f89b7ff91c0f34ff4d5e0ba0b33e989b3cd4194c81fd9"}, - {file = "coverage-6.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3384f2a3652cef289e38100f2d037956194a837221edd520a7ee5b42d00cc605"}, - {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9b3e07152b4563722be523e8cd0b209e0d1a373022cfbde395ebb6575bf6790d"}, - {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1480ff858b4113db2718848d7b2d1b75bc79895a9c22e76a221b9d8d62496428"}, - {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:865d69ae811a392f4d06bde506d531f6a28a00af36f5c8649684a9e5e4a85c83"}, - {file = "coverage-6.4.1-cp38-cp38-win32.whl", hash = "sha256:664a47ce62fe4bef9e2d2c430306e1428ecea207ffd68649e3b942fa8ea83b0b"}, - {file = "coverage-6.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:26dff09fb0d82693ba9e6231248641d60ba606150d02ed45110f9ec26404ed1c"}, - {file = "coverage-6.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9c80df769f5ec05ad21ea34be7458d1dc51ff1fb4b2219e77fe24edf462d6df"}, - {file = "coverage-6.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:39ee53946bf009788108b4dd2894bf1349b4e0ca18c2016ffa7d26ce46b8f10d"}, - {file = "coverage-6.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5b66caa62922531059bc5ac04f836860412f7f88d38a476eda0a6f11d4724f4"}, - {file = "coverage-6.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd180ed867e289964404051a958f7cccabdeed423f91a899829264bb7974d3d3"}, - {file = "coverage-6.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84631e81dd053e8a0d4967cedab6db94345f1c36107c71698f746cb2636c63e3"}, - {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8c08da0bd238f2970230c2a0d28ff0e99961598cb2e810245d7fc5afcf1254e8"}, - {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d42c549a8f41dc103a8004b9f0c433e2086add8a719da00e246e17cbe4056f72"}, - {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:309ce4a522ed5fca432af4ebe0f32b21d6d7ccbb0f5fcc99290e71feba67c264"}, - {file = "coverage-6.4.1-cp39-cp39-win32.whl", hash = "sha256:fdb6f7bd51c2d1714cea40718f6149ad9be6a2ee7d93b19e9f00934c0f2a74d9"}, - {file = "coverage-6.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:342d4aefd1c3e7f620a13f4fe563154d808b69cccef415415aece4c786665397"}, - {file = "coverage-6.4.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:4803e7ccf93230accb928f3a68f00ffa80a88213af98ed338a57ad021ef06815"}, - {file = "coverage-6.4.1.tar.gz", hash = "sha256:4321f075095a096e70aff1d002030ee612b65a205a0a0f5b815280d5dc58100c"}, -] +coverage = [] cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, @@ -2805,10 +2757,7 @@ jinja2 = [ json5 = [ {file = "json5-0.9.8.tar.gz", hash = "sha256:0fa6e4d3ef062f93ba9cf2a9103fe8e68c7917dfa33519ae3ac8c7e48e3c84ff"}, ] -jsonschema = [ - {file = "jsonschema-4.6.2-py3-none-any.whl", hash = "sha256:e331e32e29743014fa59fa77895b5d8669382a4904c8ef23144f7f078ec031c7"}, - {file = "jsonschema-4.6.2.tar.gz", hash = "sha256:b19f62322b0f06927e8ae6215c01654e1885857cdcaf58ae1772b1aa97f1faf2"}, -] +jsonschema = [] jupyter-client = [ {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"}, {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"}, @@ -3574,10 +3523,7 @@ requests = [ restructuredtext-lint = [ {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, ] -rich = [ - {file = "rich-12.4.4-py3-none-any.whl", hash = "sha256:d2bbd99c320a2532ac71ff6a3164867884357da3e3301f0240090c5d2fdac7ec"}, - {file = "rich-12.4.4.tar.gz", hash = "sha256:4c586de507202505346f3e32d1363eb9ed6932f0c2f63184dea88983ff4971e2"}, -] +rich = [] scipy = [ {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, {file = "scipy-1.7.3-1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b0e0aeb061a1d7dcd2ed59ea57ee56c9b23dd60100825f98238c06ee5cc4467e"}, @@ -3617,10 +3563,7 @@ send2trash = [ {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, ] -setuptools-scm = [ - {file = "setuptools_scm-7.0.4-py3-none-any.whl", hash = "sha256:53a6f51451a84d891ca485cec700a802413bbc5e76ee65da134e54c733a6e44d"}, - {file = "setuptools_scm-7.0.4.tar.gz", hash = "sha256:c27bc1f48593cfc9527251f1f0fc41ce282ea57bbc7fd5a1ea3acb99325fab4c"}, -] +setuptools-scm = [] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -3788,10 +3731,7 @@ 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.18.3.tar.gz", hash = "sha256:a0ef831dc20635f350fa9cff591231c31d27e75771e59fd6c979b6c0c7e03292"}, - {file = "types_docutils-0.18.3-py3-none-any.whl", hash = "sha256:b54b6fd599914093a5aab08dbf1cba96eb107cdeb4210bbe4ccd233fe3a71d9b"}, -] +types-docutils = [] 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"}, @@ -3930,7 +3870,4 @@ 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 = [ - {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, - {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, -] +zipp = [] diff --git a/pyproject.toml b/pyproject.toml index cc8830bd06..2169f9b9e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ python = ">=3.7,<3.11" click = ">=7.2<=9.0" click-default-group = "^1.2.2" colour = "^0.1.5" -numpy = "^1.9" +numpy = "^1.19" Pillow = ">=8.4,<10.0" scipy = "^1.7.3" tqdm = "^4.62.3" From f1c5b6b372f8c346cbf1f32664073891d4e443fa Mon Sep 17 00:00:00 2001 From: ad_chaos <90276965+Kiran-Raj-Dev@users.noreply.github.com> Date: Wed, 13 Jul 2022 01:52:32 +0530 Subject: [PATCH 097/555] Use tempconfig for every scene render (#2567) * Use tempconfig instead of modifying the config * Extended the -a flag test * Update tests * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/cli/render/commands.py | 11 +++++++---- tests/test_scene_rendering/infallible_scenes.py | 7 ++++++- .../opengl/test_cli_flags_opengl.py | 11 +++++++++-- tests/test_scene_rendering/test_cli_flags.py | 13 ++++++++++--- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/manim/cli/render/commands.py b/manim/cli/render/commands.py index bc63157311..97ba883ffa 100644 --- a/manim/cli/render/commands.py +++ b/manim/cli/render/commands.py @@ -16,6 +16,7 @@ import requests from ... import __version__, config, console, error_console, logger +from ..._config import tempconfig from ...constants import EPILOG from ...utils.module_ops import scene_classes_from_file from .ease_of_access_options import ease_of_access_options @@ -97,8 +98,9 @@ def __repr__(self): keep_running = True while keep_running: for SceneClass in scene_classes_from_file(file): - scene = SceneClass(renderer) - rerun = scene.render() + with tempconfig(config): + scene = SceneClass(renderer) + rerun = scene.render() if rerun or config["write_all"]: renderer.num_plays = 0 continue @@ -114,8 +116,9 @@ def __repr__(self): else: for SceneClass in scene_classes_from_file(file): try: - scene = SceneClass() - scene.render() + with tempconfig(config): + scene = SceneClass() + scene.render() except Exception: error_console.print_exception() sys.exit(1) diff --git a/tests/test_scene_rendering/infallible_scenes.py b/tests/test_scene_rendering/infallible_scenes.py index b9f1e1ca0a..07290128ae 100644 --- a/tests/test_scene_rendering/infallible_scenes.py +++ b/tests/test_scene_rendering/infallible_scenes.py @@ -1,6 +1,6 @@ from __future__ import annotations -from manim import * +from manim import Scene, Square class Wait1(Scene): @@ -9,5 +9,10 @@ def construct(self): class Wait2(Scene): + def construct(self): + self.add(Square()) + + +class Wait3(Scene): def construct(self): self.wait(2) diff --git a/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py b/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py index 2d38bc58b5..876b011bd0 100644 --- a/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py +++ b/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py @@ -9,7 +9,7 @@ from PIL import Image from manim import capture, get_video_metadata -from manim.__main__ import main +from manim.__main__ import __version__, main from manim.utils.file_ops import add_version_before_extension from tests.utils.video_tester import video_comparison @@ -341,10 +341,17 @@ def test_a_flag(tmp_path, manim_cfg_file, infallible_scenes_path): assert one_is_not_empty, "running manim with -a flag did not render the first scene" two_is_not_empty = ( - tmp_path / "videos" / "infallible_scenes" / "480p15" / "Wait2.mp4" + tmp_path / "images" / "infallible_scenes" / f"Wait2_ManimCE_v{__version__}.png" ).is_file() assert ( two_is_not_empty + ), "running manim with -a flag did not render an image, possible leak of the config dictionary" + + three_is_not_empty = ( + tmp_path / "videos" / "infallible_scenes" / "480p15" / "Wait3.mp4" + ).is_file() + assert ( + three_is_not_empty ), "running manim with -a flag did not render the second scene" diff --git a/tests/test_scene_rendering/test_cli_flags.py b/tests/test_scene_rendering/test_cli_flags.py index f1d0f4382a..d48f5aac3f 100644 --- a/tests/test_scene_rendering/test_cli_flags.py +++ b/tests/test_scene_rendering/test_cli_flags.py @@ -9,7 +9,7 @@ from PIL import Image from manim import capture, get_video_metadata -from manim.__main__ import main +from manim.__main__ import __version__, main from manim.utils.file_ops import add_version_before_extension from ..utils.video_tester import video_comparison @@ -229,7 +229,7 @@ def test_a_flag(tmp_path, manim_cfg_file, infallible_scenes_path): "-a", infallible_scenes_path, ] - out, err, exit_code = capture(command) + _, err, exit_code = capture(command) assert exit_code == 0, err one_is_not_empty = ( @@ -238,10 +238,17 @@ def test_a_flag(tmp_path, manim_cfg_file, infallible_scenes_path): assert one_is_not_empty, "running manim with -a flag did not render the first scene" two_is_not_empty = ( - tmp_path / "videos" / "infallible_scenes" / "480p15" / "Wait2.mp4" + tmp_path / "images" / "infallible_scenes" / f"Wait2_ManimCE_v{__version__}.png" ).is_file() assert ( two_is_not_empty + ), "running manim with -a flag did not render an image, possible leak of the config dictionary." + + three_is_not_empty = ( + tmp_path / "videos" / "infallible_scenes" / "480p15" / "Wait3.mp4" + ).is_file() + assert ( + three_is_not_empty ), "running manim with -a flag did not render the second scene" From 4f42ad566442968ec5960f17a2baa01a364fe4b2 Mon Sep 17 00:00:00 2001 From: Alex Lembcke Date: Wed, 13 Jul 2022 12:44:12 -0400 Subject: [PATCH 098/555] Enabled filling color by value for :class:`.OpenGLSurface`, replaced ``colors`` keyword argument of :meth:`.Surface.set_fill_by_value` with ``colorscale`` (#2186) * Enable filling color by value for OpenGLSurface. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Added doc string and removed unused deprecated_params * Added docstring and made method private. * Fixed spelling error. * Update manim/mobject/types/opengl_surface.py Agreed. Co-authored-by: Benjamin Hackl * Fixed typings * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Added None type as part of color checking * Another attempt at fixing the color typings * Made some of the requested modifications. * Fixed failing tests. * Added tests for Cairo method. * One minor change to test plot_surface. * Fixed typo in docstring. * Removed passing in of axes. * Removed axes in tests. * Fixed typo, mixed up u and v. * Fixed docstring typo, updated format to recommended. * Fixed one more typo in docstring. * One last time editing the docstring. * Add deprecation import to opengl_surface. * Added import for Surface and OpenGLSurface to coordinate_systems. * Hoping this fixes the example for the docs. * Addes colorscale_axis to plot_surface * Forgot to update the docstring. * added proper deprecation, made change temporarily backwards compatible * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl Co-authored-by: Tristan Schulz --- manim/mobject/graphing/coordinate_systems.py | 86 ++++++++++++ manim/mobject/opengl/opengl_surface.py | 124 +++++++++++++++++- manim/mobject/three_d/three_dimensions.py | 33 ++++- .../coordinate_system/plot_surface.npz | Bin 0 -> 205738 bytes .../plot_surface_colorscale.npz | Bin 0 -> 164268 bytes .../test_coordinate_systems.py | 40 ++++++ tests/test_graphical_units/test_threed.py | 6 +- 7 files changed, 279 insertions(+), 10 deletions(-) create mode 100644 tests/test_graphical_units/control_data/coordinate_system/plot_surface.npz create mode 100644 tests/test_graphical_units/control_data/coordinate_system/plot_surface_colorscale.npz diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 3ebba99999..3615dedc2c 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -28,7 +28,9 @@ from manim.mobject.graphing.number_line import NumberLine from manim.mobject.graphing.scale import LinearBase from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL +from manim.mobject.opengl.opengl_surface import OpenGLSurface from manim.mobject.text.tex_mobject import MathTex +from manim.mobject.three_d.three_dimensions import Surface from manim.mobject.types.vectorized_mobject import ( VDict, VectorizedPoint, @@ -858,6 +860,90 @@ def construct(self): graph.underlying_function = r_func return graph + def plot_surface( + self, + function: Callable[[float], float], + u_range: Sequence[float] | None = None, + v_range: Sequence[float] | None = None, + colorscale: Sequence[[color], float] | None = None, + colorscale_axis: int = 2, + **kwargs, + ): + """Generates a surface based on a function. + + Parameters + ---------- + function + The function used to construct the :class:`~.Surface`. + u_range + The range of the ``u`` variable: ``(u_min, u_max)``. + v_range + The range of the ``v`` variable: ``(v_min, v_max)``. + colorscale + Colors of the surface. Passing a list of colors will color the surface by z-value. + Passing a list of tuples in the form ``(color, pivot)`` allows user-defined pivots + where the color transitions. + colorscale_axis + Defines the axis on which the colorscale is applied (0 = x, 1 = y, 2 = z), default + is z-axis (2). + kwargs + Additional parameters to be passed to :class:`~.Surface`. + + Returns + ------- + :class:`~.Surface` + The plotted surface. + + Examples + -------- + .. manim:: PlotSurfaceExample + :save_last_frame: + + class PlotSurfaceExample(ThreeDScene): + def construct(self): + resolution_fa = 42 + self.set_camera_orientation(phi=75 * DEGREES, theta=-60 * DEGREES) + axes = ThreeDAxes(x_range=(-3, 3, 1), y_range=(-3, 3, 1), z_range=(-5, 5, 1)) + def param_trig(u, v): + x = u + y = v + z = 2 * np.sin(x) + 2 * np.cos(y) + return z + trig_plane = axes.plot_surface( + param_trig, + resolution=(resolution_fa, resolution_fa), + u_range = (-3, 3), + v_range = (-3, 3), + colorscale = [BLUE, GREEN, YELLOW, ORANGE, RED], + ) + self.add(axes, trig_plane) + """ + if config.renderer != "opengl": + surface = Surface( + lambda u, v: self.c2p(u, v, function(u, v)), + u_range=u_range, + v_range=v_range, + **kwargs, + ) + if colorscale: + surface.set_fill_by_value( + axes=self.copy(), + colorscale=colorscale, + axis=colorscale_axis, + ) + else: + surface = OpenGLSurface( + lambda u, v: self.c2p(u, v, function(u, v)), + u_range=u_range, + v_range=v_range, + axes=self.copy(), + colorscale=colorscale, + colorscale_axis=colorscale_axis, + **kwargs, + ) + + return surface + def input_to_graph_point( self, x: float, diff --git a/manim/mobject/opengl/opengl_surface.py b/manim/mobject/opengl/opengl_surface.py index 542baeea97..30641ca2f1 100644 --- a/manim/mobject/opengl/opengl_surface.py +++ b/manim/mobject/opengl/opengl_surface.py @@ -12,12 +12,44 @@ from manim.utils.bezier import integer_interpolate, interpolate from manim.utils.color import * from manim.utils.config_ops import _Data, _Uniforms +from manim.utils.deprecation import deprecated from manim.utils.images import change_to_rgba_array, get_full_raster_image_path from manim.utils.iterables import listify from manim.utils.space_ops import normalize_along_axis class OpenGLSurface(OpenGLMobject): + r"""Creates a Surface. + + Parameters + ---------- + uv_func + The function that defines the surface. + u_range + The range of the ``u`` variable: ``(u_min, u_max)``. + v_range + The range of the ``v`` variable: ``(v_min, v_max)``. + resolution + The number of samples taken of the surface. + axes + Axes on which the surface is to be drawn. Optional + parameter used when coloring a surface by z-value. + color + Color of the surface. Defaults to grey. + colorscale + Colors of the surface. Optional parameter used when + coloring a surface by values. Passing a list of + colors and an axes will color the surface by z-value. + Passing a list of tuples in the form ``(color, pivot)`` + allows user-defined pivots where the color transitions. + colorscale_axis + Defines the axis on which the colorscale is applied + (0 = x, 1 = y, 2 = z), default is z-axis (2). + opacity + Opacity of the surface from 0 being fully transparent + to 1 being fully opaque. Defaults to 1. + """ + shader_dtype = [ ("point", np.float32, (3,)), ("du_point", np.float32, (3,)), @@ -35,7 +67,10 @@ def __init__( # each coordinate is one more than the the number of # rows/columns of approximating squares resolution=None, + axes=None, color=GREY, + colorscale=None, + colorscale_axis=2, opacity=1.0, gloss=0.3, shadow=0.4, @@ -55,6 +90,9 @@ def __init__( # each coordinate is one more than the the number of # rows/columns of approximating squares self.resolution = resolution if resolution is not None else (101, 101) + self.axes = axes + self.colorscale = colorscale + self.colorscale_axis = colorscale_axis self.prefered_creation_axis = prefered_creation_axis # For du and dv steps. Much smaller and numerical error # can crop up in the shaders. @@ -206,22 +244,106 @@ def index_dot(index): # For shaders def get_shader_data(self): + """Called by parent Mobject to calculate and return + the shader data. + + Returns + ------- + shader_dtype + An array containing the shader data (vertices and + color of each vertex) + """ s_points, du_points, dv_points = self.get_surface_points_and_nudged_points() shader_data = np.zeros(len(s_points), dtype=self.shader_dtype) if "points" not in self.locked_data_keys: shader_data["point"] = s_points shader_data["du_point"] = du_points shader_data["dv_point"] = dv_points - self.fill_in_shader_color_info(shader_data) + if self.colorscale: + shader_data["color"] = self._get_color_by_value(s_points) + else: + self.fill_in_shader_color_info(shader_data) return shader_data def fill_in_shader_color_info(self, shader_data): + """Fills in the shader color data when the surface + is all one color. + + Parameters + ---------- + shader_data + The vertices of the surface. + + Returns + ------- + shader_dtype + An array containing the shader data (vertices and + color of each vertex) + """ self.read_data_to_shader(shader_data, "color", "rgbas") return shader_data + def _get_color_by_value(self, s_points): + """Matches each vertex to a color associated to it's z-value. + + Parameters + ---------- + s_points + The vertices of the surface. + + Returns + ------- + List + A list of colors matching the vertex inputs. + """ + if type(self.colorscale[0]) in (list, tuple): + new_colors, pivots = [ + [i for i, j in self.colorscale], + [j for i, j in self.colorscale], + ] + else: + new_colors = self.colorscale + + pivot_min = self.axes.z_range[0] + pivot_max = self.axes.z_range[1] + pivot_frequency = (pivot_max - pivot_min) / (len(new_colors) - 1) + pivots = np.arange( + start=pivot_min, + stop=pivot_max + pivot_frequency, + step=pivot_frequency, + ) + + return_colors = [] + for point in s_points: + axis_value = self.axes.point_to_coords(point)[self.colorscale_axis] + if axis_value <= pivots[0]: + return_colors.append(color_to_rgba(new_colors[0], self.opacity)) + elif axis_value >= pivots[-1]: + return_colors.append(color_to_rgba(new_colors[-1], self.opacity)) + else: + for i, pivot in enumerate(pivots): + if pivot > axis_value: + color_index = (axis_value - pivots[i - 1]) / ( + pivots[i] - pivots[i - 1] + ) + color_index = max(min(color_index, 1), 0) + temp_color = interpolate_color( + new_colors[i - 1], + new_colors[i], + color_index, + ) + break + return_colors.append(color_to_rgba(temp_color, self.opacity)) + + return return_colors + def get_shader_vert_indices(self): return self.get_triangle_indices() + @deprecated( + since="v0.16.0", + message="Use colorscale attribute instead.", + ) def set_fill_by_value(self, axes, colors): # directly copied from three_dimensions.py with some compatibility changes. """Sets the color of each mobject of a parametric surface to a color relative to its z-value diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 6f04b7ccf6..9a005d0867 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -22,7 +22,7 @@ import numpy as np from colour import Color -from manim import config +from manim import config, logger from manim.constants import * from manim.mobject.geometry.arc import Circle from manim.mobject.geometry.polygram import Square @@ -31,6 +31,7 @@ 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.deprecation import deprecated_params from manim.utils.iterables import tuplify from manim.utils.space_ops import normalize, perpendicular_bisector, z_to_vector @@ -165,11 +166,13 @@ def set_fill_by_checkerboard(self, *colors, opacity=None): face.set_fill(colors[c_index], opacity=opacity) return self + @deprecated_params("colors", since="v0.16.0") def set_fill_by_value( self, axes: Mobject, - colors: Union[Iterable[Color], Color], + colorscale: Union[Iterable[Color], Color] | None = None, axis: int = 2, + **kwargs, ): """Sets the color of each mobject of a parametric surface to a color relative to its axis-value @@ -177,7 +180,7 @@ def set_fill_by_value( ---------- axes : The axes for the parametric surface, which will be used to map axis-values to colors. - colors : + colorscale : A list of colors, ordered from lower axis-values to higher axis-values. If a list of tuples is passed containing colors paired with numbers, then those numbers will be used as the pivots. axis : @@ -210,16 +213,32 @@ def param_surface(u, v): u_range=[0, 5], ) surface_plane.set_style(fill_opacity=1) - surface_plane.set_fill_by_value(axes=axes, colors=[(RED, -0.5), (YELLOW, 0), (GREEN, 0.5)], axis=2) + surface_plane.set_fill_by_value(axes=axes, colorscale=[(RED, -0.5), (YELLOW, 0), (GREEN, 0.5)], axis=2) self.add(axes, surface_plane) """ + if "colors" in kwargs and colorscale is None: + colorscale = kwargs.pop("colors") + if kwargs: + raise ValueError( + "Unsupported keyword argument(s): " + f"{', '.join(str(key) for key in kwargs)}" + ) + if colorscale is None: + logger.warning( + "The value passed to the colorscale keyword argument was None, " + "the surface fill color has not been changed" + ) + return self ranges = [axes.x_range, axes.y_range, axes.z_range] - if type(colors[0]) is tuple: - new_colors, pivots = [[i for i, j in colors], [j for i, j in colors]] + if type(colorscale[0]) is tuple: + new_colors, pivots = [ + [i for i, j in colorscale], + [j for i, j in colorscale], + ] else: - new_colors = colors + new_colors = colorscale pivot_min = ranges[axis][0] pivot_max = ranges[axis][1] diff --git a/tests/test_graphical_units/control_data/coordinate_system/plot_surface.npz b/tests/test_graphical_units/control_data/coordinate_system/plot_surface.npz new file mode 100644 index 0000000000000000000000000000000000000000..9369d49d724567fb43275d40bd8dc6db6466f590 GIT binary patch literal 205738 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උ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 literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/test_coordinate_systems.py b/tests/test_graphical_units/test_coordinate_systems.py index db214c7c58..d7603f4d00 100644 --- a/tests/test_graphical_units/test_coordinate_systems.py +++ b/tests/test_graphical_units/test_coordinate_systems.py @@ -37,6 +37,46 @@ def test_line_graph(scene): scene.add(plane, first_line, second_line) +@frames_comparison(base_scene=ThreeDScene) +def test_plot_surface(scene): + axes = ThreeDAxes(x_range=(-5, 5, 1), y_range=(-5, 5, 1), z_range=(-5, 5, 1)) + + def param_trig(u, v): + x = u + y = v + z = 2 * np.sin(x) + 2 * np.cos(y) + return z + + trig_plane = axes.plot_surface( + param_trig, + u_range=(-5, 5), + v_range=(-5, 5), + color=BLUE, + ) + + scene.add(axes, trig_plane) + + +@frames_comparison(base_scene=ThreeDScene) +def test_plot_surface_colorscale(scene): + axes = ThreeDAxes(x_range=(-3, 3, 1), y_range=(-3, 3, 1), z_range=(-5, 5, 1)) + + def param_trig(u, v): + x = u + y = v + z = 2 * np.sin(x) + 2 * np.cos(y) + return z + + trig_plane = axes.plot_surface( + param_trig, + u_range=(-3, 3), + v_range=(-3, 3), + colorscale=[BLUE, GREEN, YELLOW, ORANGE, RED], + ) + + scene.add(axes, trig_plane) + + @frames_comparison def test_implicit_graph(scene): ax = Axes() diff --git a/tests/test_graphical_units/test_threed.py b/tests/test_graphical_units/test_threed.py index 719f0374b1..64778e4044 100644 --- a/tests/test_graphical_units/test_threed.py +++ b/tests/test_graphical_units/test_threed.py @@ -119,7 +119,9 @@ def param_trig(u, v): v_range=[-3, 3], u_range=[-3, 3], ) - trig_plane.set_fill_by_value(axes=axes, colors=[BLUE, GREEN, YELLOW, ORANGE, RED]) + trig_plane.set_fill_by_value( + axes=axes, colorscale=[BLUE, GREEN, YELLOW, ORANGE, RED] + ) scene.add(axes, trig_plane) @@ -143,6 +145,6 @@ def param_surface(u, v): ) surface_plane.set_style(fill_opacity=1) surface_plane.set_fill_by_value( - axes=axes, colors=[(RED, -0.4), (YELLOW, 0), (GREEN, 0.4)], axis=1 + axes=axes, colorscale=[(RED, -0.4), (YELLOW, 0), (GREEN, 0.4)], axis=1 ) scene.add(axes, surface_plane) From 7870407fdc6a5f7ced50623df8482f5a59e556d8 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 14 Jul 2022 08:22:45 +0200 Subject: [PATCH 099/555] Prepared new release, ``v0.16.0`` (#2863) * bump version number * changelog generation, first pass * fixed label mismatches, changelog generation second pass * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * changelog generation, second pass * changelog generation, third pass * changelog generation, final pass * updated i18n files * update readyForTranslation * cut down doc render time Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CITATION.cff | 4 +- .../gettext/changelog/0.14.0-changelog.pot | 2 +- .../gettext/changelog/0.15.2-changelog.pot | 426 ++++++++++++ .../gettext/changelog/0.16.0-changelog.pot | 501 ++++++++++++++ docs/i18n/gettext/conduct.pot | 50 +- docs/i18n/gettext/contributing.pot | 8 +- .../i18n/gettext/contributing/development.pot | 106 +-- docs/i18n/gettext/examples.pot | 2 +- docs/i18n/gettext/faq/general.pot | 181 +++++ docs/i18n/gettext/faq/help.pot | 105 +++ docs/i18n/gettext/faq/index.pot | 14 + docs/i18n/gettext/faq/installation.pot | 165 +++++ docs/i18n/gettext/faq/internals.pot | 17 + docs/i18n/gettext/faq/opengl.pot | 29 + docs/i18n/gettext/guides/configuration.pot | 313 +++++++++ docs/i18n/gettext/guides/deep_dive.pot | 633 ++++++++++++++++++ docs/i18n/gettext/guides/index.pot | 14 + docs/i18n/gettext/guides/using_text.pot | 269 ++++++++ docs/i18n/gettext/index.pot | 96 ++- docs/i18n/gettext/installation.pot | 26 +- .../gettext/installation/troubleshooting.pot | 304 --------- docs/i18n/gettext/installation/versions.pot | 68 -- docs/i18n/gettext/internals.pot | 16 - docs/i18n/gettext/reference.pot | 8 +- .../reference/manim._config.logger_utils.pot | 6 - .../manim._config.utils.ManimConfig.pot | 53 +- .../gettext/reference/manim._config.utils.pot | 2 +- .../manim.animation.animation.Animation.pot | 38 +- ...m.animation.composition.AnimationGroup.pot | 18 +- ...anim.animation.composition.LaggedStart.pot | 4 - ...m.animation.composition.LaggedStartMap.pot | 8 - ...manim.animation.composition.Succession.pot | 16 +- ...imation.creation.AddTextLetterByLetter.pot | 4 - ...m.animation.creation.AddTextWordByWord.pot | 8 - .../manim.animation.creation.Create.pot | 4 - ....animation.creation.DrawBorderThenFill.pot | 9 +- ...imation.creation.ShowIncreasingSubsets.pot | 6 +- .../manim.animation.creation.ShowPartial.pot | 4 - ...ation.creation.ShowSubmobjectsOneByOne.pot | 4 - .../manim.animation.creation.SpiralIn.pot | 59 ++ .../manim.animation.creation.Uncreate.pot | 8 - .../manim.animation.creation.Unwrite.pot | 4 - .../manim.animation.creation.Write.pot | 9 +- .../reference/manim.animation.creation.pot | 22 +- .../manim.animation.fading.FadeIn.pot | 4 - .../manim.animation.fading.FadeOut.pot | 9 +- .../manim.animation.growing.GrowArrow.pot | 4 - ...manim.animation.growing.GrowFromCenter.pot | 4 - .../manim.animation.growing.GrowFromEdge.pot | 4 - .../manim.animation.growing.GrowFromPoint.pot | 4 - ...im.animation.growing.SpinInFromNothing.pot | 4 - .../manim.animation.indication.ApplyWave.pot | 8 - .../manim.animation.indication.Flash.pot | 4 - .../manim.animation.indication.FocusOn.pot | 4 - .../manim.animation.indication.Indicate.pot | 4 - ...ion.indication.ShowCreationThenFadeOut.pot | 14 +- ....animation.indication.ShowPassingFlash.pot | 9 +- .../manim.animation.indication.Wiggle.pot | 4 - .../reference/manim.animation.indication.pot | 4 + ...nim.animation.movement.ComplexHomotopy.pot | 8 - .../manim.animation.movement.Homotopy.pot | 30 +- ...manim.animation.movement.MoveAlongPath.pot | 6 +- .../manim.animation.movement.PhaseFlow.pot | 6 +- ...on.movement.SmoothedVectorizedHomotopy.pot | 4 - .../reference/manim.animation.movement.pot | 3 +- ...animation.numbers.ChangeDecimalToValue.pot | 8 - ...anim.animation.numbers.ChangingDecimal.pot | 6 +- .../manim.animation.rotation.Rotate.pot | 4 - .../manim.animation.rotation.Rotating.pot | 6 +- ...im.animation.speedmodifier.ChangeSpeed.pot | 144 ++++ .../manim.animation.speedmodifier.pot | 21 + ...imation.transform.ApplyComplexFunction.pot | 4 - ...anim.animation.transform.ApplyFunction.pot | 4 - .../manim.animation.transform.ApplyMatrix.pot | 4 - .../manim.animation.transform.ApplyMethod.pot | 4 - ...ation.transform.ApplyPointwiseFunction.pot | 4 - ...ansform.ApplyPointwiseFunctionToCenter.pot | 9 +- ...animation.transform.ClockwiseTransform.pot | 4 - ...on.transform.CounterclockwiseTransform.pot | 4 - ...anim.animation.transform.CyclicReplace.pot | 4 - .../manim.animation.transform.FadeToColor.pot | 4 - ...manim.animation.transform.MoveToTarget.pot | 4 - ...imation.transform.ReplacementTransform.pot | 4 - .../manim.animation.transform.Restore.pot | 4 - ...manim.animation.transform.ScaleInPlace.pot | 4 - ...nim.animation.transform.ShrinkToCenter.pot | 4 - .../manim.animation.transform.Transform.pot | 67 +- ...nimation.transform.TransformAnimations.pot | 12 +- ....animation.transform.TransformFromCopy.pot | 12 +- .../reference/manim.animation.transform.pot | 4 + ...ters.update.MaintainPositionRelativeTo.pot | 6 +- ...imation.updaters.update.UpdateFromFunc.pot | 6 +- ...manim.camera.moving_camera.CameraFrame.pot | 44 -- ...anim.camera.moving_camera.MovingCamera.pot | 8 +- .../reference/manim.mobject.geometry.Arc.pot | 74 -- .../reference/manim.mobject.geometry.Line.pot | 48 -- .../manim.mobject.geometry.Polygram.pot | 56 -- .../reference/manim.mobject.geometry.arc.pot | 75 +++ .../manim.mobject.geometry.line.Angle.pot | 53 +- .../reference/manim.mobject.geometry.line.pot | 49 ++ .../manim.mobject.geometry.polygram.pot | 57 ++ .../reference/manim.mobject.graph.Graph.pot | 6 +- ...bject.graphing.coordinate_systems.Axes.pot | 26 +- ...ng.coordinate_systems.CoordinateSystem.pot | 101 ++- ...raphing.coordinate_systems.NumberPlane.pot | 2 +- ...im.mobject.graphing.coordinate_systems.pot | 2 +- ....graphing.functions.ParametricFunction.pot | 10 +- ...object.graphing.number_line.NumberLine.pot | 6 +- ....mobject.graphing.probability.BarChart.pot | 12 +- .../reference/manim.mobject.matrix.Matrix.pot | 4 + .../manim.mobject.matrix.MobjectMatrix.pot | 4 + .../reference/manim.mobject.mobject.Group.pot | 8 + .../manim.mobject.mobject.Mobject.pot | 216 +++--- .../manim.mobject.table.DecimalTable.pot | 2 +- .../manim.mobject.table.IntegerTable.pot | 2 +- .../manim.mobject.table.MathTable.pot | 2 +- .../manim.mobject.table.MobjectTable.pot | 2 +- .../gettext/reference/manim.mobject.table.pot | 8 +- ...m.mobject.text.text_mobject.MarkupText.pot | 34 +- ...im.mobject.text.text_mobject.Paragraph.pot | 16 +- .../manim.mobject.text.text_mobject.Text.pot | 14 +- .../manim.mobject.text.text_mobject.pot | 2 +- ...ject.three_d.three_dimensions.Cylinder.pot | 28 +- ...bject.types.image_mobject.ImageMobject.pot | 25 +- ...object.types.vectorized_mobject.VGroup.pot | 10 +- ...ject.types.vectorized_mobject.VMobject.pot | 96 +-- ...ject.value_tracker.ComplexValueTracker.pot | 66 ++ ...nim.mobject.value_tracker.ValueTracker.pot | 88 +++ .../reference/manim.mobject.value_tracker.pot | 24 + ...manim.mobject.vector_field.VectorField.pot | 48 +- .../reference/manim.scene.scene.Scene.pot | 50 +- .../reference/manim.scene.section.Section.pot | 2 +- .../gettext/reference/manim.utils.bezier.pot | 63 ++ ...ocbuild.manim_directive.ManimDirective.pot | 52 -- .../manim.utils.docbuild.manim_directive.pot | 124 ---- ...cbuild.manim_directive.skip_manim_node.pot | 64 -- .../reference/manim.utils.docbuild.pot | 9 + .../gettext/reference/manim.utils.images.pot | 4 + .../manim.utils.ipython_magic.ManimMagic.pot | 9 +- .../reference/manim.utils.iterables.pot | 195 +++++- .../manim.utils.simple_functions.pot | 85 +++ .../gettext/reference_index/animations.pot | 28 +- .../i18n/gettext/reference_index/mobjects.pot | 28 +- .../reference_index/utilities_misc.pot | 34 +- docs/i18n/gettext/reporting_bugs.pot | 40 -- docs/i18n/gettext/tutorials.pot | 13 - docs/i18n/gettext/tutorials/a_deeper_look.pot | 128 ---- .../gettext/tutorials/building_blocks.pot | 2 +- docs/i18n/gettext/tutorials/configuration.pot | 300 --------- docs/i18n/gettext/tutorials/index.pot | 14 + .../gettext/tutorials/output_and_config.pot | 129 ++++ docs/i18n/gettext/tutorials/quickstart.pot | 2 +- docs/i18n/gettext/tutorials/using_text.pot | 268 -------- docs/i18n/gettext/tutorials_guides.pot | 14 + docs/i18n/readyForTranslation | 10 +- docs/source/changelog.rst | 1 + docs/source/changelog/0.16.0-changelog.rst | 273 ++++++++ docs/source/examples.rst | 2 +- manim/mobject/graphing/coordinate_systems.py | 2 +- manim/mobject/text/text_mobject.py | 18 +- manim/mobject/three_d/three_dimensions.py | 13 +- pyproject.toml | 2 +- scripts/dev_changelog.py | 4 +- 163 files changed, 5049 insertions(+), 2406 deletions(-) create mode 100644 docs/i18n/gettext/changelog/0.15.2-changelog.pot create mode 100644 docs/i18n/gettext/changelog/0.16.0-changelog.pot create mode 100644 docs/i18n/gettext/faq/general.pot create mode 100644 docs/i18n/gettext/faq/help.pot create mode 100644 docs/i18n/gettext/faq/index.pot create mode 100644 docs/i18n/gettext/faq/installation.pot create mode 100644 docs/i18n/gettext/faq/internals.pot create mode 100644 docs/i18n/gettext/faq/opengl.pot create mode 100644 docs/i18n/gettext/guides/configuration.pot create mode 100644 docs/i18n/gettext/guides/deep_dive.pot create mode 100644 docs/i18n/gettext/guides/index.pot create mode 100644 docs/i18n/gettext/guides/using_text.pot create mode 100644 docs/i18n/gettext/reference/manim.animation.creation.SpiralIn.pot create mode 100644 docs/i18n/gettext/reference/manim.animation.speedmodifier.ChangeSpeed.pot create mode 100644 docs/i18n/gettext/reference/manim.animation.speedmodifier.pot create mode 100644 docs/i18n/gettext/reference/manim.mobject.geometry.arc.pot create mode 100644 docs/i18n/gettext/reference/manim.mobject.geometry.line.pot create mode 100644 docs/i18n/gettext/reference/manim.mobject.geometry.polygram.pot create mode 100644 docs/i18n/gettext/reference/manim.utils.docbuild.pot create mode 100644 docs/i18n/gettext/tutorials/index.pot create mode 100644 docs/i18n/gettext/tutorials/output_and_config.pot create mode 100644 docs/i18n/gettext/tutorials_guides.pot create mode 100644 docs/source/changelog/0.16.0-changelog.rst diff --git a/CITATION.cff b/CITATION.cff index faf8ea68d8..4009ab7ce8 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -4,10 +4,10 @@ authors: - name: "The Manim Community Developers" cff-version: "1.2.0" -date-released: 2022-04-25 +date-released: 2022-07-13 license: MIT message: "We acknowledge the importance of good software to support research, and we note that research becomes more valuable when it is communicated effectively. To demonstrate the value of Manim, we ask that you cite Manim in your work." title: Manim – Mathematical Animation Framework url: "https://www.manim.community/" -version: "v0.15.2" +version: "v0.16.0" ... diff --git a/docs/i18n/gettext/changelog/0.14.0-changelog.pot b/docs/i18n/gettext/changelog/0.14.0-changelog.pot index a6c4cb0ae3..d21eb867fd 100644 --- a/docs/i18n/gettext/changelog/0.14.0-changelog.pot +++ b/docs/i18n/gettext/changelog/0.14.0-changelog.pot @@ -255,7 +255,7 @@ msgid ":pr:`2415`: Removed instructions on using and installing Docker in README msgstr "" #: ../../source/changelog/0.14.0-changelog.rst:114 -msgid ":pr:`2414`: Made improvements to the :doc:`configuration` tutorial" +msgid ":pr:`2414`: Made improvements to the :doc:`/guides/configuration` tutorial" msgstr "" #: ../../source/changelog/0.14.0-changelog.rst:117 diff --git a/docs/i18n/gettext/changelog/0.15.2-changelog.pot b/docs/i18n/gettext/changelog/0.15.2-changelog.pot new file mode 100644 index 0000000000..404506e0ab --- /dev/null +++ b/docs/i18n/gettext/changelog/0.15.2-changelog.pot @@ -0,0 +1,426 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/changelog/0.15.2-changelog.rst:3 +msgid "v0.15.2" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:0 +msgid "Date" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:5 +msgid "April 25, 2022" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:8 +msgid "Contributors" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:10 +msgid "A total of 33 people contributed to this release. People with a '+' by their names authored a patch for the first time." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:14 +msgid "Bailey Powers +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:15 +#: ../../source/changelog/0.15.2-changelog.rst:44 +msgid "Benjamin Hackl" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:16 +msgid "Dan Walsh +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:17 +msgid "Darigov Research" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:18 +#: ../../source/changelog/0.15.2-changelog.rst:46 +msgid "Darylgolden" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:19 +msgid "David Millard +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:20 +msgid "Hamidreza Hashemi +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:21 +#: ../../source/changelog/0.15.2-changelog.rst:49 +msgid "Jan-Hendrik Müller" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:22 +#: ../../source/changelog/0.15.2-changelog.rst:50 +msgid "Jason Villanueva" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:23 +msgid "Jonathan Alpert +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:24 +msgid "Joy Bhalla" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:25 +msgid "Kian Cross +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:26 +msgid "Luca +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:27 +msgid "Mohsin Shaikh +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:28 +#: ../../source/changelog/0.15.2-changelog.rst:53 +msgid "Naveen M K" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:29 +msgid "Prismo +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:30 +#: ../../source/changelog/0.15.2-changelog.rst:55 +msgid "Ryan McCauley" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:31 +msgid "WillSoltas +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:32 +#: ../../source/changelog/0.15.2-changelog.rst:56 +msgid "ad_chaos" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:33 +msgid "darkways +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:34 +msgid "dawn*squirryl +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:35 +#: ../../source/changelog/0.15.2-changelog.rst:59 +msgid "icedcoffeeee" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:36 +#: ../../source/changelog/0.15.2-changelog.rst:60 +msgid "peaceheis" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:37 +msgid "sparshg" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:38 +msgid "trickypr +" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:41 +msgid "The patches included in this release have been reviewed by the following contributors." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:45 +msgid "Dan Walsh" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:47 +msgid "GameDungeon" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:48 +msgid "Hugues Devimeux" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:51 +msgid "Jonathan Alpert" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:52 +msgid "Luca" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:54 +msgid "Prismo" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:57 +msgid "darkways" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:58 +msgid "hickmott99" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:63 +msgid "Pull requests merged" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:65 +msgid "A total of 39 pull requests were merged for this release." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:68 +msgid "New features" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:74 +msgid ":pr:`1975`: Improved CLI help page styling" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:71 +msgid "Updates dependencies on Click and Cloup libraries for CLI help page styling." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:72 +msgid "Removed the dependency on click-default-group." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:73 +msgid "Added ``no_args_is_help`` parameter for ``manim render`` to allow easy access to help page." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:74 +msgid "Added note to ``manim`` help page epilog on how to access other command help pages." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:77 +msgid ":pr:`2404`: Add :class:`.SpiralIn` Animation" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:77 +msgid "Make :class:`.ManimBanner` to use :class:`.SpiralIn`." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:79 +msgid ":pr:`2534`: Implement :class:`~.OpenGLImageMobject`" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:82 +msgid ":pr:`2684`: Created a more accessible way to create Angles with line.py angle function - :meth:`.Angle.from_three_points`" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:86 +msgid "Enhancements" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:88 +msgid ":pr:`2062`: Reuse shader wrappers and shader data" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:92 +msgid ":pr:`2642`: Migrated ``file_ops.py`` and ``scene_file_writer.py`` from os.path to Pathlib" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:92 +msgid "In ``file_ops.py`` and ``scene_file_writer.py``: Uses of str type file names have been mostly (see further information) converted to pathlib's Path objects. Uses of ``os.path`` methods have been converted to equivalent pathlib methods." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:94 +msgid ":pr:`2655`: Fix :func:`.assert_is_mobject_method` when using OpenGL" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:97 +msgid ":pr:`2665`: Improved handling of attributes when using the ``.animate`` syntax" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:102 +msgid ":pr:`2674`: Document and type ``simple_functions.py``" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:101 +msgid "Add documentation for ``simple_functions.py``." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:102 +msgid "Small additions with some extra clarity for these functions." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:105 +msgid ":pr:`2693`: Allow using :meth:`.MovingCamera.auto_zoom` without animation" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:105 +msgid "Allows auto zooming camera without having to play an animation by passing an ``animation=False`` argument" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:108 +msgid "Fixed bugs" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:110 +msgid ":pr:`2546`: Fixed a file logging bug and some maintenance" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:116 +msgid ":pr:`2597`: Fix Bug in :class:`.Uncreate` with ``rate_func`` via introducing new parameter ``reversed`` to :class:`.Animation`" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:114 +msgid "Refractor the :class:`.Uncreate`. The new implementation uses a flag member ``reversed``. Set it to ``True`` and its superclass handles the reverse." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:115 +msgid "Introduce a bool parameter ``reversed`` to :class:`.Animation`. It decides whether the animation needs to be played backwards. Default to be False." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:116 +msgid "Add conditional branches in :meth:`.Animation.get_sub_alpha`. If the parameter ``reversed`` is True, it would set ``rate_func(t)`` to ``rate_func(1 - t)``." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:118 +msgid ":pr:`2613`: Fixed bug in :meth:`.Circle.point_at_angle` when the angle is not in the interval :math:`[0, 2\\pi]`" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:121 +msgid ":pr:`2634`: Fix background lines drawn twice in :class:`.NumberPlane`" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:124 +msgid ":pr:`2648`: Handle user-defined centers for Wiggle animation" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:128 +msgid ":pr:`2658`: Fix arguments of overridden ``set_style`` for :class:`.BackgroundRectangle`" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:128 +msgid "Using :class:`.Write` animation on a :class:`.Text` object with ``.add_background_rectangle()`` applied no longer generates a ``TypeError``." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:130 +msgid ":pr:`2668`: (Re)set background color of :class:`.OpenGLRenderer` when initializing scene" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:133 +msgid ":pr:`2676`: Fixed propagation of custom attributes in animations for the OpenGL renderer" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:136 +msgid ":pr:`2688`: Fixed two minor issues of :class:`.SpiralIn` and :class:`.ManimBanner`" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:140 +msgid "Documentation-related changes" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:142 +msgid ":pr:`2609`: Copyedit troubleshooting.rst" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:145 +msgid ":pr:`2610`: Add example PolygonOnAxes" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:148 +msgid ":pr:`2617`: Re-added :mod:`.value_tracker` documentation" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:151 +msgid ":pr:`2619`: Improve Example for arrange_in_grid" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:154 +msgid ":pr:`2620`: Fixed typo in :meth:`.Animation.is_introducer`" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:158 +msgid ":pr:`2640`: Copyedited Documentation" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:158 +msgid "Reviewed ``tutorials/configurations.rst``. Edited simple mistakes such as Manim not being capitalized and commas." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:160 +msgid ":pr:`2649`: Document and type utils/iterables.py" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:163 +msgid ":pr:`2651`: Update copyright year in documentation to 2020-2022" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:165 +msgid ":pr:`2663`: Added documentation for scene updater functions" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:168 +msgid ":pr:`2686`: Add instructions to install extra dependencies with poetry" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:172 +msgid "Changes to our development infrastructure" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:174 +msgid ":pr:`2561`: Run tests on Linux-aarch64" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:177 +msgid ":pr:`2656`: Fixed incompatibility with black version" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:181 +msgid "Code quality improvements and similar refactors" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:184 +msgid ":pr:`2630`: Remove WebGL renderer" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:184 +msgid "The WebGL renderer is broken and unmaintained. The support for it in Manim is removed." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:186 +msgid ":pr:`2652`: Update ``cloup`` version to 0.13.0 from 0.7.0" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:189 +msgid ":pr:`2678`: Require ``backports-cached-property`` only for Python < 3.8" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:193 +msgid ":pr:`2685`: Migrate from ``os.path`` to ``pathlib`` in testing scripts" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:193 +msgid "This pull request changes a number of instances of ``os.path`` to Pathlib objects and functions. In addition, this PR modifies the SVGMobject constructor to accept both a Pathlib object or a string variable pathname its constructor." +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:195 +msgid ":pr:`2691`: Removed :class:`CameraFrame`" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:198 +msgid ":pr:`2696`: Made changelog generation run in parallel plus further improvements to ``scripts/dev_changelog.py``" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:201 +msgid ":pr:`2697`: Sort PRs by number in changelog sections before writing" +msgstr "" + +#: ../../source/changelog/0.15.2-changelog.rst:205 +msgid "New releases" +msgstr "" + + diff --git a/docs/i18n/gettext/changelog/0.16.0-changelog.pot b/docs/i18n/gettext/changelog/0.16.0-changelog.pot new file mode 100644 index 0000000000..342965b5ef --- /dev/null +++ b/docs/i18n/gettext/changelog/0.16.0-changelog.pot @@ -0,0 +1,501 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/changelog/0.16.0-changelog.rst:3 +msgid "v0.16.0" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:0 +msgid "Date" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:5 +msgid "July 13, 2022" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:8 +msgid "Contributors" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:10 +msgid "A total of 44 people contributed to this release. People with a '+' by their names authored a patch for the first time." +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:14 +#: ../../source/changelog/0.16.0-changelog.rst:51 +msgid "Alex Lembcke" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:15 +msgid "Baroudi Aymen +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:16 +#: ../../source/changelog/0.16.0-changelog.rst:52 +msgid "Benjamin Hackl" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:17 +msgid "Charalampos Georgiou +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:18 +msgid "Cindy Park +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:19 +msgid "Ejar +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:20 +msgid "Francesco Frassinelli +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:21 +msgid "Francisco Manríquez Novoa +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:22 +msgid "Jacob Evan Shreve +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:23 +msgid "Jaime Santos +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:24 +#: ../../source/changelog/0.16.0-changelog.rst:58 +msgid "Jonathan Alpert" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:25 +msgid "Joshua Mankelow +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:26 +msgid "Kevin Lubick +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:27 +#: ../../source/changelog/0.16.0-changelog.rst:60 +msgid "Laith Bahodi" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:28 +msgid "Lingren Kong +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:29 +msgid "Logen +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:30 +#: ../../source/changelog/0.16.0-changelog.rst:61 +msgid "Naveen M K" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:31 +msgid "Noam Zaks" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:32 +msgid "Pedro Lamkowski +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:33 +#: ../../source/changelog/0.16.0-changelog.rst:64 +msgid "Raghav Goel" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:34 +msgid "Simeon Widdis" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:35 +#: ../../source/changelog/0.16.0-changelog.rst:66 +msgid "Sparsh Goenka" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:36 +msgid "TornaxO7 +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:37 +msgid "Tristan Schulz +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:38 +msgid "WillSoltas" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:39 +#: ../../source/changelog/0.16.0-changelog.rst:69 +msgid "ad_chaos" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:40 +msgid "conor-oneill-2 +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:41 +msgid "fcrozatier +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:42 +msgid "mooncaker816 +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:43 +msgid "niklebedenko +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:44 +msgid "nyabkun +" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:45 +msgid "quark67" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:48 +msgid "The patches included in this release have been reviewed by the following contributors." +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:53 +msgid "Darylgolden" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:54 +msgid "Francesco Frassinelli" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:55 +msgid "Francisco Manríquez Novoa" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:56 +msgid "Gianluca Gippetto" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:57 +msgid "Jan-Hendrik Müller" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:59 +msgid "Kevin Lubick" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:62 +msgid "Pedro Lamkowski" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:63 +msgid "Philipp Imhof" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:65 +msgid "Ryan McCauley" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:67 +msgid "TornaxO7" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:68 +msgid "Tristan Schulz" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:70 +msgid "hickmott99" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:73 +msgid "Pull requests merged" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:75 +msgid "A total of 56 pull requests were merged for this release." +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:78 +msgid "Highlights" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:82 +msgid ":pr:`2550`: New thematic guide: a deep dive into the internals of the library" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:81 +msgid "This new :doc:`thematic guide ` aims to be a comprehensive walkthrough describing all the things that Manim does when you run it to produce a video." +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:84 +msgid ":pr:`2732`: Improved overall structure of deployed documentation; added a dedicated :doc:`FAQ section `" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:90 +msgid ":pr:`2749`: Added :class:`.ChangeSpeed`, an animation wrapper that allows to smoothly change the speed at which an animation is played" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:88 +msgid "The speed of any animation can be changed by wrapping the animation with :class:`.ChangeSpeed` and passing a dictionary as ``speedinfo`` whose keys are the relative animation run time stamps and whose values are the absolute speed factors; e.g., ``{0.5: 2, 0.75: 0.25}`` smoothly speeds up the animation by a factor of 2 once it has been completed to 50%, and then it is smoothly slowed down to 1/4 of the default run speed after 75% of the animation are completed. The ``run_time`` of the animation will be adjusted to match the changed play speed." +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:90 +msgid "It is also possible to add time-based updaters that respect the change in speed, use the auxiliary :meth:`.ChangeSpeed.add_updater` method to do so." +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:93 +msgid "New features" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:95 +msgid ":pr:`2667`: Made FFmpeg executable path configurable" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:98 +msgid ":pr:`2739`: Added vectorized plotting functionality via keyword argument ``use_vectorized`` to improve performance" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:102 +msgid "Enhancements" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:104 +msgid ":pr:`2186`: Enabled filling color by value for :class:`.OpenGLSurface`, replaced ``colors`` keyword argument of :meth:`.Surface.set_fill_by_value` with ``colorscale``" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:107 +msgid ":pr:`2288`: Added warning when attempting to add same mobject as child twice" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:112 +msgid ":pr:`2707`: Fixed missing ``get_nth_curve_length_pieces`` method of :class:`.OpenGLVMobject`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:111 +msgid "Removed duplicate definition of ``get_curve_functions_with_lengths`` in ``OpenGLVMobject``" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:112 +msgid "Added definition of ``get_nth_curve_length_pieces`` to ``OpenGLVMobject``" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:114 +msgid ":pr:`2709`: Improved the look of the brackets of :class:`.Matrix`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:117 +msgid ":pr:`2714`: Fixed :meth:`.OpenGLVMobject.pointwise_become_partial` to improve stroke rendering" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:120 +msgid ":pr:`2727`: Slight performance improvement for :class:`.ArrowVectorField` and Bézier curve computation" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:123 +msgid ":pr:`2728`: Added :meth:`.VectorField.fit_to_coordinate_system` to fit a vector field to a given coordinate system" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:126 +msgid ":pr:`2730`: Added note to let users find documentation of default CLI subcommand easier" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:129 +msgid ":pr:`2746`: Installed ghostscript in the docker image" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:132 +msgid ":pr:`2841`: Added :func:`.split_quadratic_bezier` and :func:`.subdivide_quadratic_bezier`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:135 +msgid ":pr:`2842`: CLI: Moved functionality from ``manim new`` to ``manim init`` and added deprecation warning for ``manim new``" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:138 +msgid ":pr:`2866`: Reorganize test files to match library module structure" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:142 +msgid "Fixed bugs" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:144 +msgid ":pr:`2567`: Use tempconfig for every scene render" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:147 +msgid ":pr:`2638`: Fixed :meth:`BarChart.change_bar_values` not updating when height is 0" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:150 +msgid ":pr:`2661`: Fixed tip resize functionality for :class:`.Axes` to match documentation" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:153 +msgid ":pr:`2703`: Default to utf-8 when reading files in :class:`.Code`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:156 +msgid ":pr:`2721`: Fixed bad text slicing for lines in :class:`.Paragraph`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:159 +msgid ":pr:`2725`: Fixed wrong indentation in :class:`.Code`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:162 +msgid ":pr:`2734`: Fixed OpenGL segfaults when running :meth:`.Scene.play` or :meth:`.Scene.wait` in interactive mode" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:165 +msgid ":pr:`2753`: Fixed multiplatform builds for docker images in pipeline" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:168 +msgid ":pr:`2757`: Added missing ``__init__.py`` file in :mod:`.docbuild` module" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:171 +msgid ":pr:`2770`: Fixed bug in :meth:`.VMobject.proportion_from_point` that caused proportions greater than 1 to be returned" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:174 +msgid ":pr:`2826`: Fixed leaked mobjects coming from :class:`.TransformMatchingAbstractBase`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:177 +msgid ":pr:`2870`: Fixed issue with ``manim init scene SCENE_NAME filename.py`` and removed necessity of ``main.py`` to be present in working directory" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:181 +msgid "Documentation-related changes" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:183 +msgid ":pr:`2704`: Updated URL to Pango Markup formatting page" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:186 +msgid ":pr:`2716`: Improved the order of the reference manuals" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:189 +msgid ":pr:`2720`: Fixed typo in docstring of :class:`.Angle`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:192 +msgid ":pr:`2722`: Fixed typos in docstrings of classes in :mod:`.mobject.table`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:195 +msgid ":pr:`2726`: Edited note on :class:`.NumberPlane` length and added another example" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:198 +msgid ":pr:`2740`: Fixed documentation of :meth:`.Cylinder.get_direction`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:201 +msgid ":pr:`2755`: Fixed docstring of :meth:`.VMobject.get_end_anchors`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:204 +msgid ":pr:`2760`: Removed ``cmake`` from the MacOS installation section" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:207 +msgid ":pr:`2767`: Added more questions and answers to FAQ section, new :doc:`OpenGL FAQ `" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:210 +msgid ":pr:`2771`: Added documentation and testing for ``path_func`` keyword argument of :class:`.Transform`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:213 +msgid ":pr:`2828`: Removed suggestion issue template, added FAQ answer regarding proposing new features" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:216 +msgid ":pr:`2849`: Added example for ``path_arc`` keyword argument of :class:`.Transform`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:219 +msgid ":pr:`2851`: Added an example on constructing a (neural) network using a partite :class:`.Graph`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:222 +msgid ":pr:`2855`: Added implicit ``docker.io/`` URL base in reference to docker images" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:225 +msgid ":pr:`2861`: Added docstring for :meth:`.CoordinateSystem.plot_parametric_curve`" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:229 +msgid "Changes concerning the testing system" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:231 +msgid ":pr:`2743`: Replaced ``assert`` statements with with assertion functions from ``np.testing``" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:235 +msgid "Changes to our development infrastructure" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:237 +msgid ":pr:`2700`: CI: updated Python versions" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:240 +msgid ":pr:`2701`: CI: added a workflow to publish docker image after releases and commits to main branch" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:244 +msgid "Code quality improvements and similar refactors" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:246 +msgid ":pr:`2680`: Increased minimum required version of ``numpy`` to 1.19" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:249 +msgid ":pr:`2687`: Migrated from ``os.path`` to ``pathlib`` in :class:`.SVGMobject` and other locations" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:252 +msgid ":pr:`2715`: Updated deprecated ``pillow`` constants" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:255 +msgid ":pr:`2735`: Bump pyjwt from 2.3.0 to 2.4.0" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:258 +msgid ":pr:`2748`: Bump pillow from 9.1.0 to 9.1.1" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:261 +msgid ":pr:`2751`: Fixed flake C417 and improved a comment" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:264 +msgid ":pr:`2825`: Bump notebook from 6.4.11 to 6.4.12" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:267 +msgid ":pr:`2864`: Updated lockfile" +msgstr "" + +#: ../../source/changelog/0.16.0-changelog.rst:271 +msgid "New releases" +msgstr "" + + diff --git a/docs/i18n/gettext/conduct.pot b/docs/i18n/gettext/conduct.pot index 924b2161e7..82654e3b00 100644 --- a/docs/i18n/gettext/conduct.pot +++ b/docs/i18n/gettext/conduct.pot @@ -11,7 +11,7 @@ msgid "Code of Conduct" msgstr "" #: ../../source/conduct.md:7 -msgid "TL;DR Be excellent to each other; we're a community after all. If you run into issues with others in our community, please contact a Manim Community Dev, or Moderator." +msgid "TL;DR Be excellent to each other; we're a community after all. If you run into issues with others in our community, please [contact](https://www.manim.community/discord/) a Manim Community Dev, or Moderator." msgstr "" #: ../../source/conduct.md:9 @@ -31,31 +31,31 @@ msgid "Members of Manim Community are respectful, open, and considerate. Behavio msgstr "" #: ../../source/conduct.md:19 -msgid "Being respectful. Respectful of others, their positions, experiences, viewpoints, skills, commitments, time, and efforts." +msgid "**Being respectful.** Respectful of others, their positions, experiences, viewpoints, skills, commitments, time, and efforts." msgstr "" #: ../../source/conduct.md:21 -msgid "Being open. Open to collaboration, whether it's on problems, Pull Requests, issues, or otherwise." +msgid "**Being open.** Open to collaboration, whether it's on problems, Pull Requests, issues, or otherwise." msgstr "" #: ../../source/conduct.md:23 -msgid "Being considerate. Considerate of their peers -- other Manim users and developers." +msgid "**Being considerate.** Considerate of their peers -- other Manim users and developers." msgstr "" #: ../../source/conduct.md:25 -msgid "Focusing on what is best for the community. We're respectful of the processes set forth in the community, and we work within them." +msgid "**Focusing on what is best for the community.** We're respectful of the processes set forth in the community, and we work within them." msgstr "" #: ../../source/conduct.md:27 -msgid "Showing empathy towards other community members. We're attentive in our communications, whether in person or online, and we're tactful when approaching differing views." +msgid "**Showing empathy towards other community members.** We're attentive in our communications, whether in person or online, and we're tactful when approaching differing views." msgstr "" #: ../../source/conduct.md:29 -msgid "Gracefully accepting constructive criticism. When we disagree, we are courteous in raising our issues." +msgid "**Gracefully accepting constructive criticism.** When we disagree, we are courteous in raising our issues." msgstr "" #: ../../source/conduct.md:31 -msgid "Using welcoming and inclusive language. We're accepting of all who wish to take part in our activities, fostering an environment where anyone can participate and everyone can make a difference." +msgid "**Using welcoming and inclusive language.** We're accepting of all who wish to take part in our activities, fostering an environment where anyone can participate and everyone can make a difference." msgstr "" #: ../../source/conduct.md:35 @@ -147,19 +147,19 @@ msgid "This Code of Conduct applies to the following online spaces:" msgstr "" #: ../../source/conduct.md:69 -msgid "The ManimCommunity GitHub Organization and all of its repositories" +msgid "The [ManimCommunity GitHub Organization](https://github.com/ManimCommunity) and all of its repositories" msgstr "" #: ../../source/conduct.md:71 -msgid "The Manim Discord" +msgid "The Manim [Discord](https://www.manim.community/discord/)" msgstr "" #: ../../source/conduct.md:73 -msgid "The Manim Reddit" +msgid "The Manim [Reddit](https://www.reddit.com/r/manim/)" msgstr "" #: ../../source/conduct.md:75 -msgid "The Manim Twitter" +msgid "The Manim [Twitter](https://twitter.com/manim\\_community/)" msgstr "" #: ../../source/conduct.md:77 @@ -211,7 +211,7 @@ msgid "Contact Information" msgstr "" #: ../../source/conduct.md:107 -msgid "If you believe someone is violating the code of conduct, or have any other concerns, please contact a Manim Community Dev, or Moderator immediately. They can be reached on Manim's Community Discord." +msgid "If you believe someone is violating the code of conduct, or have any other concerns, please contact a Manim Community Dev, or Moderator immediately. They can be reached on Manim's Community [Discord](https://www.manim.community/discord/)." msgstr "" #: ../../source/conduct.md:117 @@ -323,11 +323,11 @@ msgid "Jurisdiction" msgstr "" #: ../../source/conduct.md:165 -msgid "Is this a Code of Conduct violation? Is this behavior on our list of inappropriate behavior? Is it borderline inappropriate behavior? Does it violate our community norms?" +msgid "*Is this a Code of Conduct violation?* Is this behavior on our list of inappropriate behavior? Is it borderline inappropriate behavior? Does it violate our community norms?" msgstr "" #: ../../source/conduct.md:166 -msgid "Did this occur in a space that is within our Code of Conduct's scope? If the incident occurred outside the community, but a community member's mental health or physical safety may be negatively impacted if no action is taken, the incident may be in scope. Private conversations in community spaces are also in scope." +msgid "*Did this occur in a space that is within our Code of Conduct's scope?* If the incident occurred outside the community, but a community member's mental health or physical safety may be negatively impacted if no action is taken, the incident may be in scope. Private conversations in community spaces are also in scope." msgstr "" #: ../../source/conduct.md:167 @@ -335,15 +335,15 @@ msgid "Impact" msgstr "" #: ../../source/conduct.md:169 -msgid "Did this incident occur in a private conversation or a public space? Incidents that all community members can see will have a more negative impact." +msgid "*Did this incident occur in a private conversation or a public space?* Incidents that all community members can see will have a more negative impact." msgstr "" #: ../../source/conduct.md:170 -msgid "Does this behavior negatively impact a marginalized group in our community? Is the reporter a person from a marginalized group in our community? How is the reporter being negatively impacted by the reported person's behavior? Are members of the marginalized group likely to disengage with the community if no action was taken on this report?" +msgid "*Does this behavior negatively impact a marginalized group in our community?* Is the reporter a person from a marginalized group in our community? How is the reporter being negatively impacted by the reported person's behavior? Are members of the marginalized group likely to disengage with the community if no action was taken on this report?" msgstr "" #: ../../source/conduct.md:171 -msgid "Does this incident involve a community leader? Community members often look up to community leaders to set the standard of acceptable behavior" +msgid "*Does this incident involve a community leader?* Community members often look up to community leaders to set the standard of acceptable behavior" msgstr "" #: ../../source/conduct.md:172 @@ -351,15 +351,15 @@ msgid "Risk" msgstr "" #: ../../source/conduct.md:174 -msgid "Does this incident include sexual harassment?" +msgid "*Does this incident include sexual harassment?*" msgstr "" #: ../../source/conduct.md:175 -msgid "Does this pose a safety risk? Does the behavior put a person's physical safety at risk? Will this incident severely negatively impact someone's mental health?" +msgid "*Does this pose a safety risk?* Does the behavior put a person's physical safety at risk? Will this incident severely negatively impact someone's mental health?" msgstr "" #: ../../source/conduct.md:176 -msgid "Is there a risk of this behavior being repeated? Does the reported person understand why their behavior was inappropriate? Is there an established pattern of behavior from past reports?" +msgid "*Is there a risk of this behavior being repeated?* Does the reported person understand why their behavior was inappropriate? Is there an established pattern of behavior from past reports?" msgstr "" #: ../../source/conduct.md:179 @@ -479,15 +479,15 @@ msgid "When discussing a change to the Manim Community code of conduct or enforc msgstr "" #: ../../source/conduct.md:241 -msgid "Brainstorm options. Team members should discuss any relevant context and brainstorm a set of possible options. It is important to provide constructive feedback without getting side-tracked from the main question." +msgid "**Brainstorm options.** Team members should discuss any relevant context and brainstorm a set of possible options. It is important to provide constructive feedback without getting side-tracked from the main question." msgstr "" #: ../../source/conduct.md:242 -msgid "Vote. Proposed changes to the code of conduct will be decided by a two-thirds majority of all voting members of the Code of Conduct team. Team members are listed in the charter. Currently active voting members are listed in the following section." +msgid "**Vote.** Proposed changes to the code of conduct will be decided by a two-thirds majority of all voting members of the Code of Conduct team. Team members are listed in the charter. Currently active voting members are listed in the following section." msgstr "" #: ../../source/conduct.md:243 -msgid "Board Vote. Once a working draft is in place for the Code of Conduct and procedures, the Code of Conduct team shall provide the Manim Community Moderators with a draft of the changes. The Manim Community Moderators will vote on the changes at a board meeting." +msgid "**Board Vote.** Once a working draft is in place for the Code of Conduct and procedures, the Code of Conduct team shall provide the Manim Community Moderators with a draft of the changes. The Manim Community Moderators will vote on the changes at a board meeting." msgstr "" #: ../../source/conduct.md:246 @@ -503,7 +503,7 @@ msgid "License" msgstr "" #: ../../source/conduct.md:254 -msgid "This Code of Conduct is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License." +msgid "This Code of Conduct is licensed under the [Creative Commons Attribution-ShareAlike 3.0 Unported License](https://creativecommons.org/licenses/by-sa/3.0/)." msgstr "" #: ../../source/conduct.md:258 diff --git a/docs/i18n/gettext/contributing.pot b/docs/i18n/gettext/contributing.pot index 4f7b8a936a..b26b14ef44 100644 --- a/docs/i18n/gettext/contributing.pot +++ b/docs/i18n/gettext/contributing.pot @@ -11,7 +11,7 @@ msgid "Contributing" msgstr "" #: ../../source/contributing.rst:5 -msgid "Manim is currently undergoing a major refactor. In general, contributions implementing new features will not be accepted in this period. Other contributions unrelated to cleaning up the codebase may also take a longer period of time to be reviewed. This guide may quickly become outdated quickly; we highly recommend joining our `Discord server `_ to discuss any potential contributions and keep up to date with the latest developments." +msgid "Manim is currently undergoing a major refactor. In general, contributions implementing new features will not be accepted in this period. Other contributions unrelated to cleaning up the codebase may also take a longer period of time to be reviewed. This guide may quickly become outdated quickly; we highly recommend joining our `Discord server `__ to discuss any potential contributions and keep up to date with the latest developments." msgstr "" #: ../../source/contributing.rst:12 @@ -50,7 +50,11 @@ msgstr "" msgid "Translating documentation and docstrings" msgstr "" -#: ../../source/contributing.rst:31 +#: ../../source/contributing.rst:30 +msgid "To get an overview of what our community is currently working on, check out `our development project board `__." +msgstr "" + +#: ../../source/contributing.rst:34 msgid "Please ensure that you are reading the latest version of this guide by ensuring that \"latest\" is selected in the version switcher." msgstr "" diff --git a/docs/i18n/gettext/contributing/development.pot b/docs/i18n/gettext/contributing/development.pot index c624d1807e..2ee98c893c 100644 --- a/docs/i18n/gettext/contributing/development.pot +++ b/docs/i18n/gettext/contributing/development.pot @@ -75,202 +75,202 @@ msgid "If you choose to use Poetry as well, follow `Poetry's installation guidel msgstr "" #: ../../source/contributing/development.rst:69 +msgid "In case you want to install extra dependencies that are defined in the ``[tool.poetry.extras]`` section of ``pyproject.toml``, this can be done by passing the ``-E`` flag, for example ``poetry install -E jupyterlab -E gui``." +msgstr "" + +#: ../../source/contributing/development.rst:73 msgid "In case you decided against Poetry, you can install Manim via pip by running ``python3 -m pip install .``. Note that due to our development infrastructure being based on Poetry, we currently do not support editable installs via ``pip``, so you will have to re-run this command every time you make changes to the source code." msgstr "" -#: ../../source/contributing/development.rst:78 +#: ../../source/contributing/development.rst:82 msgid "The following steps assume that you chose to install and work with Poetry." msgstr "" -#: ../../source/contributing/development.rst:81 +#: ../../source/contributing/development.rst:85 msgid "Install Pre-Commit:" msgstr "" -#: ../../source/contributing/development.rst:87 +#: ../../source/contributing/development.rst:91 msgid "This will ensure during development that each of your commits is properly formatted against our linter and formatters, ``black``, ``flake8``, ``isort`` and ``codespell``." msgstr "" -#: ../../source/contributing/development.rst:91 +#: ../../source/contributing/development.rst:95 msgid "You are now ready to work on manim!" msgstr "" -#: ../../source/contributing/development.rst:94 +#: ../../source/contributing/development.rst:98 msgid "Develop your contribution" msgstr "" -#: ../../source/contributing/development.rst:96 +#: ../../source/contributing/development.rst:100 msgid "Checkout your local repository's main branch and pull the latest changes from ManimCommunity, ``upstream``, into your local repository:" msgstr "" -#: ../../source/contributing/development.rst:104 +#: ../../source/contributing/development.rst:108 msgid "Create a branch for the changes you want to work on rather than working off of your local main branch:" msgstr "" -#: ../../source/contributing/development.rst:111 +#: ../../source/contributing/development.rst:115 msgid "This ensures you can easily update your local repository's main with the first step and switch branches to work on multiple features." msgstr "" -#: ../../source/contributing/development.rst:114 +#: ../../source/contributing/development.rst:118 msgid "Write some awesome code!" msgstr "" -#: ../../source/contributing/development.rst:116 +#: ../../source/contributing/development.rst:120 msgid "You're ready to make changes in your local repository's branch. You can add local files you've changed within the current directory with ``git add .``, or add specific files with" msgstr "" -#: ../../source/contributing/development.rst:124 +#: ../../source/contributing/development.rst:128 msgid "and commit these changes to your local history with ``git commit``. If you have installed pre-commit, your commit will succeed only if none of the hooks fail." msgstr "" -#: ../../source/contributing/development.rst:130 +#: ../../source/contributing/development.rst:134 msgid "When crafting commit messages, it is highly recommended that you adhere to `these guidelines `_." msgstr "" -#: ../../source/contributing/development.rst:133 +#: ../../source/contributing/development.rst:137 msgid "Add new or update existing tests." msgstr "" -#: ../../source/contributing/development.rst:135 +#: ../../source/contributing/development.rst:139 msgid "Depending on your changes, you may need to update or add new tests. For new features, it is required that you include tests with your PR. Details of our testing system are explained in the :doc:`testing guide `." msgstr "" -#: ../../source/contributing/development.rst:140 +#: ../../source/contributing/development.rst:144 msgid "Update docstrings and documentation:" msgstr "" -#: ../../source/contributing/development.rst:142 +#: ../../source/contributing/development.rst:146 msgid "Update the docstrings (the text in triple quotation marks) of any functions or classes you change and include them with any new functions you add. See the :doc:`documentation guide ` for more information about how we prefer our code to be documented. The content of the docstrings will be rendered in the :doc:`reference manual <../reference>`." msgstr "" -#: ../../source/contributing/development.rst:150 +#: ../../source/contributing/development.rst:154 msgid "Use the :mod:`manim directive for Sphinx ` to add examples to the documentation!" msgstr "" -#: ../../source/contributing/development.rst:156::1 -msgid "A directive for including Manim videos in a Sphinx document" -msgstr "" - -#: ../../source/contributing/development.rst:158 +#: ../../source/contributing/development.rst:157 msgid "As far as development on your local machine goes, these are the main steps you should follow." msgstr "" -#: ../../source/contributing/development.rst:162 +#: ../../source/contributing/development.rst:161 msgid "Polishing Changes and Submitting a Pull Request" msgstr "" -#: ../../source/contributing/development.rst:164 +#: ../../source/contributing/development.rst:163 msgid "As soon as you are ready to share your local changes with the community so that they can be discussed, go through the following steps to open a pull request. A pull request signifies to the ManimCommunity organization, \"Here are some changes I wrote; I think it's worthwhile for you to maintain them.\"" msgstr "" -#: ../../source/contributing/development.rst:172 +#: ../../source/contributing/development.rst:171 msgid "You do not need to have everything (code/documentation/tests) complete to open a pull request (PR). If the PR is still under development, please mark it as a draft. Community developers will still be able to review the changes, discuss yet-to-be-implemented changes, and offer advice; however, the more complete your PR, the quicker it will be merged." msgstr "" -#: ../../source/contributing/development.rst:178 +#: ../../source/contributing/development.rst:177 msgid "Update your fork on GitHub to reflect your local changes:" msgstr "" -#: ../../source/contributing/development.rst:184 +#: ../../source/contributing/development.rst:183 msgid "Doing so creates a new branch on your remote fork, ``origin``, with the contents of your local repository on GitHub. In subsequent pushes, this local branch will track the branch ``origin`` and ``git push`` is enough." msgstr "" -#: ../../source/contributing/development.rst:189 +#: ../../source/contributing/development.rst:188 msgid "Make a pull request (PR) on GitHub." msgstr "" -#: ../../source/contributing/development.rst:191 +#: ../../source/contributing/development.rst:190 msgid "In order to make the ManimCommunity development team aware of your changes, you can make a PR to the ManimCommunity repository from your fork." msgstr "" -#: ../../source/contributing/development.rst:196 +#: ../../source/contributing/development.rst:195 msgid "Make sure to select ``ManimCommunity/manim`` instead of ``3b1b/manim`` as the base repository!" msgstr "" -#: ../../source/contributing/development.rst:199 +#: ../../source/contributing/development.rst:198 msgid "Choose the branch from your fork as the head repository - see the screenshot below." msgstr "" -#: ../../source/contributing/development.rst:205 +#: ../../source/contributing/development.rst:204 msgid "Please make sure you follow the template (this is the default text you are shown when first opening the 'New Pull Request' page)." msgstr "" -#: ../../source/contributing/development.rst:209 +#: ../../source/contributing/development.rst:208 msgid "Your changes are eligible to be merged if:" msgstr "" -#: ../../source/contributing/development.rst:211 +#: ../../source/contributing/development.rst:210 msgid "there are no merge conflicts" msgstr "" -#: ../../source/contributing/development.rst:212 +#: ../../source/contributing/development.rst:211 msgid "the tests in our pipeline pass" msgstr "" -#: ../../source/contributing/development.rst:213 +#: ../../source/contributing/development.rst:212 msgid "at least one (two for more complex changes) Community Developer approves the changes" msgstr "" -#: ../../source/contributing/development.rst:215 +#: ../../source/contributing/development.rst:214 msgid "You can check for merge conflicts between the current upstream/main and your branch by executing ``git pull upstream main`` locally. If this generates any merge conflicts, you need to resolve them and push an updated version of the branch to your fork of the repository." msgstr "" -#: ../../source/contributing/development.rst:220 +#: ../../source/contributing/development.rst:219 msgid "Our pipeline consists of a series of different tests that ensure that manim still works as intended and that the code you added sticks to our coding conventions." msgstr "" -#: ../../source/contributing/development.rst:224 +#: ../../source/contributing/development.rst:223 msgid "**Code style**: We use the code style imposed by `Black `_, `isort `_ and `flake8 `_. The GitHub pipeline makes sure that the (Python) files changed in your pull request also adhere to this code style. If this step of the pipeline fails, fix your code formatting automatically by running ``black `` and ``isort ``. To fix code style problems, run ``flake8 `` for a style report, and then fix the problems manually that were detected by ``flake8``." msgstr "" -#: ../../source/contributing/development.rst:233 +#: ../../source/contributing/development.rst:232 msgid "**Tests**: The pipeline runs manim's test suite on different operating systems (the latest versions of Ubuntu, MacOS, and Windows) for different versions of Python. The test suite consists of two different kinds of tests: integration tests and doctests. You can run them locally by executing ``poetry run pytest`` and ``poetry run pytest --doctest-modules manim``, respectively, from the root directory of your cloned fork." msgstr "" -#: ../../source/contributing/development.rst:240 +#: ../../source/contributing/development.rst:239 msgid "**Documentation**: We also build a version of the documentation corresponding to your pull request. Make sure not to introduce any Sphinx errors, and have a look at the built HTML files to see whether the formatting of the documentation you added looks as you intended. You can build the documentation locally by running ``make html`` from the ``docs`` directory. Since the inheritance diagrams require you to have `Graphviz `_ installed locally." msgstr "" -#: ../../source/contributing/development.rst:247 +#: ../../source/contributing/development.rst:246 msgid "Finally, if the pipeline passes and you are satisfied with your changes: wait for feedback and iterate over any requested changes. You will likely be asked to edit or modify your PR in one way or another during this process. This is not an indictment of your work, but rather a strong signal that the community wants to merge your changes! Once approved, your changes may be merged!" msgstr "" -#: ../../source/contributing/development.rst:254 +#: ../../source/contributing/development.rst:253 msgid "Further useful guidelines" msgstr "" -#: ../../source/contributing/development.rst:256 +#: ../../source/contributing/development.rst:255 msgid "When submitting a PR, please mention explicitly if it includes breaking changes." msgstr "" -#: ../../source/contributing/development.rst:258 +#: ../../source/contributing/development.rst:257 msgid "When submitting a PR, make sure that your proposed changes are as general as possible, and ready to be taken advantage of by all of manim's users. In particular, leave out any machine-specific configurations, or any personal information it may contain." msgstr "" -#: ../../source/contributing/development.rst:263 +#: ../../source/contributing/development.rst:262 msgid "If you are a maintainer, please label issues and PRs appropriately and frequently." msgstr "" -#: ../../source/contributing/development.rst:266 +#: ../../source/contributing/development.rst:265 msgid "When opening a new issue, if there are old issues that are related, add a link to them in your new issue (even if the old ones are closed)." msgstr "" -#: ../../source/contributing/development.rst:269 +#: ../../source/contributing/development.rst:268 msgid "When submitting a code review, it is highly recommended that you adhere to `these general guidelines `_." msgstr "" -#: ../../source/contributing/development.rst:272 +#: ../../source/contributing/development.rst:271 msgid "If you find stale or inactive issues that seem to be irrelevant, please post a comment saying 'This issue should be closed', and a community developer will take a look." msgstr "" -#: ../../source/contributing/development.rst:276 +#: ../../source/contributing/development.rst:275 msgid "Please do as much as possible to keep issues, PRs, and development in general as tidy as possible." msgstr "" -#: ../../source/contributing/development.rst:280 -msgid "You can find examples for the ``docs`` in several places: the :doc:`Example Gallery <../examples>`, :doc:`Tutorials <../tutorials>`, and :doc:`Reference Classes <../reference>`." +#: ../../source/contributing/development.rst:279 +msgid "You can find examples for the ``docs`` in several places: the :doc:`Example Gallery <../examples>`, :doc:`Tutorials <../tutorials/index>`, and :doc:`Reference Classes <../reference>`." msgstr "" -#: ../../source/contributing/development.rst:284 +#: ../../source/contributing/development.rst:283 msgid "In case you are contributing, please have a look at this flowchart:" msgstr "" diff --git a/docs/i18n/gettext/examples.pot b/docs/i18n/gettext/examples.pot index d15e7cabdc..d9a94edd27 100644 --- a/docs/i18n/gettext/examples.pot +++ b/docs/i18n/gettext/examples.pot @@ -42,7 +42,7 @@ msgstr "" msgid "Plotting with Manim" msgstr "" -#: ../../source/examples.rst:438 +#: ../../source/examples.rst:496 msgid "Special Camera Settings" msgstr "" diff --git a/docs/i18n/gettext/faq/general.pot b/docs/i18n/gettext/faq/general.pot new file mode 100644 index 0000000000..27a612bd64 --- /dev/null +++ b/docs/i18n/gettext/faq/general.pot @@ -0,0 +1,181 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/faq/general.md:1 +msgid "FAQ: General Usage" +msgstr "" + +#: ../../source/faq/general.md:3 +msgid "Why does Manim say that \"there are no scenes inside that module\"?" +msgstr "" + +#: ../../source/faq/general.md:5 +msgid "There are two main reasons why this error appears: if you have edited the file containing your `Scene` class and forgot to save it, or if you have accidentally passed the name of a wrong file to `manim`, this is a likely outcome. Check that you have spelled everything correctly." +msgstr "" + +#: ../../source/faq/general.md:10 +msgid "Otherwise you are likely mixing up Manim versions. See {ref}`this FAQ answer ` for an explanation regarding why there are different versions. Under the assumption that you are trying to use the `manim` executable from the terminal to run a scene that has been written for the community version (i.e., there is `from manim import *`, or more specifically `from manim import Scene`)" +msgstr "" + +#: ../../source/faq/general.md:18 +msgid "No matter what code I put in my file, Manim only renders a black frame! Why?" +msgstr "" + +#: ../../source/faq/general.md:20 +msgid "If you are using the usual pattern to write a `Scene`, i.e.," +msgstr "" + +#: ../../source/faq/general.md:27 +msgid "then double check whether you have spelled `construct` correctly. If the method containing your code is not called `construct` (or if you are not calling a different, custom method from `construct`), Manim will not call your method and simply output a black frame." +msgstr "" + +#: ../../source/faq/general.md:34 +msgid "What are the default measurements for Manim's scene?" +msgstr "" + +#: ../../source/faq/general.md:36 +msgid "The scene measures 8 units in height and has a default ratio of 16:9, which means that it measures {math}`8 \\cdot 16 / 9 = 14 + 2/9` units in width. The origin is in the center of the scene, which means that, for example, the upper left corner of the scene has coordinates `[-7-1/9, 4, 0]`." +msgstr "" + +#: ../../source/faq/general.md:43 +msgid "How do I find out which keyword arguments I can pass when creating a `Mobject`?" +msgstr "" + +#: ../../source/faq/general.md:45 +msgid "Let us consider some specific example, like the {class}`.Circle` class. When looking at its documentation page, only two specific keyword arguments are listed (`radius`, and `color`). Besides these concrete arguments, there is also a catchall `**kwargs` argument which captures all other arguments that are passed to `Circle`, and passes them on to the base class of {class}`.Circle`, {class}`.Arc`." +msgstr "" + +#: ../../source/faq/general.md:51 +msgid "The same holds for {class}`.Arc`: some arguments are explicitly documented, and there is again a catchall `**kwargs` argument that passes unprocessed arguments to the next base class -- and so on." +msgstr "" + +#: ../../source/faq/general.md:55 +msgid "The most important keyword arguments relevant to styling your mobjects are the ones that are documented for the base classes {class}`.VMobject` and {class}`.Mobject`." +msgstr "" + +#: ../../source/faq/general.md:61 +msgid "Can Manim render a video with transparent background?" +msgstr "" + +#: ../../source/faq/general.md:63 +msgid "Yes: simply pass the CLI flag `-t` (or its long form `--transparent`). Note that the default video file format does not support transparency, which is why Manim will output a `.mov` instead of a `.mp4` when rendering with a transparent background. Other movie file formats that support transparency can be obtained by passing `--format=webm` or `--format=gif`." +msgstr "" + +#: ../../source/faq/general.md:72 +msgid "I have watched a video where a creator ran command X, but it does not work for me. Why?" +msgstr "" + +#: ../../source/faq/general.md:74 +msgid "The video you have been watching is likely outdated. If you want to follow along, you either need to use the same version used in the video, or modify the code (in many cases it is just a method having been renamed etc.) accordingly. Check the video description, in some cases creators point out whether changes need to be applied to the code shown in the video." +msgstr "" + +#: ../../source/faq/general.md:82 +msgid "When using `Tex` or `MathTex`, some letters are missing. How can I fix this?" +msgstr "" + +#: ../../source/faq/general.md:84 +msgid "It is possible that you have to (re)build some fonts used by LaTeX. For some distributions, you can do this manually by running" +msgstr "" + +#: ../../source/faq/general.md:89 +msgid "We recommend consulting the documentation of your LaTeX distribution for more information." +msgstr "" + +#: ../../source/faq/general.md:94 +msgid "I want to translate some code from `manimgl` to `manim`, what do I do with `CONFIG` dictionaries?" +msgstr "" + +#: ../../source/faq/general.md:96 +msgid "The community maintained version has dropped the use of `CONFIG` dictionaries very early, with {doc}`version v0.2.0 ` released in January 2021." +msgstr "" + +#: ../../source/faq/general.md:100 +msgid "Before that, Manim's classes basically processed `CONFIG` dictionaries by mimicking inheritance (to properly process `CONFIG` dictionaries set by parent classes) and then assigning all of the key-value-pairs in the dictionary as attributes of the corresponding object." +msgstr "" + +#: ../../source/faq/general.md:105 +msgid "In situations where there is not much inheritance going on, or for any custom setting, you should set these attributes yourself. For example, for an old-style `Scene` with custom attributes like" +msgstr "" + +#: ../../source/faq/general.md:114 +msgid "should be written as" +msgstr "" + +#: ../../source/faq/general.md:122 +msgid "In situations where values should be properly inherited, the arguments should be added to the initialization function of the class. An old-style mobject `Thing` could look like" +msgstr "" + +#: ../../source/faq/general.md:135 +msgid "where `stroke_color` and `fill_opacity` are arguments that concern the parent class of `Thing`, and `my_awesome_argument` is a custom argument that only concerns `Thing`. A version without `CONFIG` could look like this:" +msgstr "" + +#: ../../source/faq/general.md:150 +msgid "My installation does not support converting PDF to SVG, help?" +msgstr "" + +#: ../../source/faq/general.md:152 +msgid "This is an issue with `dvisvgm`, the tool shipped with LaTeX that transforms LaTeX output to a `.svg` file that Manim can parse." +msgstr "" + +#: ../../source/faq/general.md:156 +msgid "First, make sure your ``dvisvgm`` version is at least 2.4 by checking the output of" +msgstr "" + +#: ../../source/faq/general.md:163 +msgid "If you do not know how to update `dvisvgm`, please refer to your LaTeX distributions documentation (or the documentation of your operating system, if `dvisvgm` was installed as a system package)." +msgstr "" + +#: ../../source/faq/general.md:167 +msgid "Second, check whether your ``dvisvgm`` supports PostScript specials. This is needed to convert from PDF to SVG. Run:" +msgstr "" + +#: ../../source/faq/general.md:174 +msgid "If the output to this command does **not** contain `ps dvips PostScript specials`, this is a bad sign. In this case, run" +msgstr "" + +#: ../../source/faq/general.md:181 +msgid "If the output does **not** contain `--libgs=filename`, this means your `dvisvgm` does not currently support PostScript. You must get another binary." +msgstr "" + +#: ../../source/faq/general.md:184 +msgid "If, however, `--libgs=filename` appears in the help, that means that your `dvisvgm` needs the Ghostscript library to support PostScript. Search for `libgs.so` (on Linux, probably in `/usr/local/lib` or `/usr/lib`) or `gsdll32.dll` (on 32-bit Windows, probably in `C:\\windows\\system32`) or `gsdll64.dll` (on 64-bit Windows, also probably in `C:\\windows\\system32`) or `libgsl.dylib` (on MacOS, probably in `/usr/local/lib` or `/opt/local/lib`). Please look carefully, as the file might be located elsewhere, e.g. in the directory where Ghostscript is installed." +msgstr "" + +#: ../../source/faq/general.md:193 +msgid "When you have found the library, try (on MacOS or Linux)" +msgstr "" + +#: ../../source/faq/general.md:200 +msgid "or (on Windows)" +msgstr "" + +#: ../../source/faq/general.md:207 +msgid "You should now see `ps dvips PostScript specials` in the output. Refer to your operating system's documentation to find out how you can set or export the environment variable ``LIBGS`` automatically whenever you open a shell." +msgstr "" + +#: ../../source/faq/general.md:211 +msgid "As a last check, you can run" +msgstr "" + +#: ../../source/faq/general.md:217 +msgid "(while still having `LIBGS` set to the correct path, of course.) If `dvisvgm` can find your Ghostscript installation, it will be shown in the output together with the version number." +msgstr "" + +#: ../../source/faq/general.md:221 +msgid "If you do not have the necessary library on your system, please refer to your operating system's documentation to find out where you can get it and how you have to install it." +msgstr "" + +#: ../../source/faq/general.md:225 +msgid "If you are unable to solve your problem, check out the [dvisvgm FAQ](https://dvisvgm.de/FAQ/)." +msgstr "" + +#: ../../source/faq/general.md:230 +msgid "Where can I find more resources for learning Manim?" +msgstr "" + + diff --git a/docs/i18n/gettext/faq/help.pot b/docs/i18n/gettext/faq/help.pot new file mode 100644 index 0000000000..d488fd4b49 --- /dev/null +++ b/docs/i18n/gettext/faq/help.pot @@ -0,0 +1,105 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/faq/help.md:1 +msgid "FAQ: Getting Help" +msgstr "" + +#: ../../source/faq/help.md:3 +msgid "How do I animate X? Why do I get error Y? Can someone help me?" +msgstr "" + +#: ../../source/faq/help.md:5 +msgid "Before asking the community, please make sure that the issue you are having is not already discussed in our {doc}`FAQ section ` sufficiently well so that you can resolve the problem yourself. You can also try to use your favorite search engine, if you are lucky you might find a blog post, a question on [StackOverflow](https://stackoverflow.com/questions/tagged/manim), or a post in the [r/manim subreddit](https://reddit.com/r/manim)." +msgstr "" + +#: ../../source/faq/help.md:12 +msgid "If this is not the case, please take a moment to properly prepare your question: the better you manage to explain what exactly it is you are struggling with, the more efficient people will be able to help you. Regardless of the platform you choose in the next step, StackOverflow has a good guide on [asking good questions](https://stackoverflow.com/help/how-to-ask)." +msgstr "" + +#: ../../source/faq/help.md:18 +msgid "As soon as you have a good idea of what exactly you want to ask, pick one of the following communication channels:" +msgstr "" + +#: ../../source/faq/help.md:21 +msgid "The community is most active [in our Discord server](https://manim.community/discord/). Click the link to join, then pick one of the `#manim-help` channels in the sidebar, and post your question there. If you are comfortable with using Discord, try to search for your problem using the search function of our server; perhaps people have been talking about it before!" +msgstr "" + +#: ../../source/faq/help.md:26 +msgid "We are also monitoring questions on [StackOverflow](https://stackoverflow.com/questions/tagged/manim) that are tagged with `manim`." +msgstr "" + +#: ../../source/faq/help.md:29 +msgid "Many people are also active in our [r/manim subreddit](https://reddit.com/r/manim), feel free to post there if you are an avid Redditor -- but be aware that Discord or StackOverflow might be better choices." +msgstr "" + +#: ../../source/faq/help.md:32 +msgid "And finally, you can also start a new [discussion on GitHub](https://github.com/ManimCommunity/manim/discussions) if you dislike all other options." +msgstr "" + +#: ../../source/faq/help.md:35 +msgid "In all of these channels, please make sure to abide by Manim's {doc}`Code of Conduct ` -- in short, be *excellent* to one another: be friendly and patient, considerate, and respectful." +msgstr "" + +#: ../../source/faq/help.md:41 +msgid "What should I do if nobody answers my question?" +msgstr "" + +#: ../../source/faq/help.md:43 +msgid "Try and see whether your question can be improved: did you include all relevant information (in case of errors: the full stack trace, the code that you were rendering, and the command you used to run Manim?). In case you used a very long example, is it possible to construct a more minimal version that has the same (faulty) behavior?" +msgstr "" + +#: ../../source/faq/help.md:49 +msgid "If you posted in one of our help channels on Discord and your question got buried, you are allowed to ping the `@Manim Helper` role to bring it to the attention of the volunteers who are willing to take a look. Please refrain from pinging the role immediately when asking your question for the first time, this is considered impolite." +msgstr "" + +#: ../../source/faq/help.md:54 +msgid "You can also try to post your question to a different channel if you feel that you are not having any success with your initial choice -- but please do not spam your question in all of our communication channels (and in particular for Discord: please don't use multiple help channels at once)." +msgstr "" + +#: ../../source/faq/help.md:59 +msgid "In the end, it is as for most open-source projects: our community members are volunteers. If you do not receive a quick answer to your question, it may be because nobody knows the answer, or because your question is not clear enough, or it could be that everyone who can help you with your problem is busy doing other things." +msgstr "" + +#: ../../source/faq/help.md:67 +msgid "The library does not behave as documented, or something broke in a new release. What should I do?" +msgstr "" + +#: ../../source/faq/help.md:69 +msgid "Sounds like you have found a bug. One of the best ways of contributing to the development of Manim is by reporting it!" +msgstr "" + +#: ../../source/faq/help.md:72 +msgid "Check our list of known issues and feature requests [in our GitHub repository](https://github.com/ManimCommunity/manim/issues). If the problem you have found is not listed there yet (use the search function; also check whether there is a corresponding closed issue, it is possible that your problem has already been resolved and will be fixed with the next release), please consider the following steps to submit a new issue." +msgstr "" + +#: ../../source/faq/help.md:80 +msgid "If you are unsure whether or not you should file a new issue for some odd behavior that you found, feel free to ask the community developers, preferably in one of our `#manim-dev` channels in [our Discord](https://manim.community/discord/)." +msgstr "" + +#: ../../source/faq/help.md:85 +msgid "Make sure you are running the latest released version of Manim, your problem might otherwise already be fixed in a more recent version. Check the {doc}`/changelog` for a full list of changes between Manim releases." +msgstr "" + +#: ../../source/faq/help.md:89 +msgid "Choose the correct category for your report when [creating a new issue](https://github.com/ManimCommunity/manim/issues/new/choose). We have dedicated issue templates for *bug reports*, *feature requests*, and *installation issues*. If your report falls into one of these categories, read the issue template carefully! Instructions are given in the `` sections of the text field. If you want to suggest a new feature without concrete implementation details, see {ref}`the instructions given in this answer `." +msgstr "" + +#: ../../source/faq/help.md:98 +msgid "For bug reports: prepare a minimal example that can be used to illustrate the issue. Examples with hundreds of lines are very inefficient and tedious to debug. Your problem needs to be reproducible for others, so please make sure to prepare a suitable example." +msgstr "" + +#: ../../source/faq/help.md:103 +msgid "This is mentioned in the bug report template as well, but it is very important: if you report that some code raises an error, make sure to include the full terminal output, from the command you used to run the library up to and including the last line with the error message. Read carefully: if the message mentions that there is another relevant log file, include this other file as well!" +msgstr "" + +#: ../../source/faq/help.md:112 +msgid "I have an idea for a really cool feature that should be implemented, where should I share my idea?" +msgstr "" + + diff --git a/docs/i18n/gettext/faq/index.pot b/docs/i18n/gettext/faq/index.pot new file mode 100644 index 0000000000..90fbbebace --- /dev/null +++ b/docs/i18n/gettext/faq/index.pot @@ -0,0 +1,14 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/faq/index.rst:4 +#: ../../source/faq/index.rst:4 +msgid "Table of Contents" +msgstr "" + + diff --git a/docs/i18n/gettext/faq/installation.pot b/docs/i18n/gettext/faq/installation.pot new file mode 100644 index 0000000000..efb566e4cb --- /dev/null +++ b/docs/i18n/gettext/faq/installation.pot @@ -0,0 +1,165 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/faq/installation.md:1 +msgid "FAQ: Installation" +msgstr "" + +#: ../../source/faq/installation.md:4 +msgid "Why are there different versions of Manim?" +msgstr "" + +#: ../../source/faq/installation.md:6 +msgid "Manim was originally created by Grant Sanderson as a personal project and for use in his YouTube channel, [3Blue1Brown](https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw). As his channel gained popularity, many grew to like the style of his animations and wanted to use manim for their own projects. However, as manim was only intended for personal use, it was very difficult for other users to install and use it." +msgstr "" + +#: ../../source/faq/installation.md:13 +msgid "In late 2019, Grant started working on faster OpenGL rendering in a new branch, known as the `shaders` branch. In mid-2020, a group of developers forked it into what is now the community edition; this is the version documented on this website. In early 2021, Grant merged the shaders branch back into master, making it the default branch in his repository -- and this is what `manimgl` is. The old version, before merging the `shaders` branch is sometimes referred to as `ManimCairo` and is, at this point, only useful for one singular purpose: rendering Grant's old videos locally on your machine. It is still available in his GitHub repository in form of the `cairo-backend` branch." +msgstr "" + +#: ../../source/faq/installation.md:22 +msgid "To summarize:" +msgstr "" + +#: ../../source/faq/installation.md:23 +msgid "[**Manim**, or **ManimCE**](https://manim.community) refers to the community maintained version of the library. This is the version documented on this website; the package name on PyPI is [`manim`](https://pypi.org/project/manim/)." +msgstr "" + +#: ../../source/faq/installation.md:26 +msgid "[ManimGL](https://github.com/3b1b/manim) is the latest released version of the version of the library developed by Grant \"3b1b\" Sanderson. It has more experimental features and breaking changes between versions are not documented. Check out its documentation [here](https://3b1b.github.io/manim/index.html); on PyPI the package name is [`manimgl`](https://pypi.org/project/manimgl/)." +msgstr "" + +#: ../../source/faq/installation.md:31 +msgid "[ManimCairo](https://github.com/3b1b/manim/tree/cairo-backend) is the name that is sometimes used for the old, pre-OpenGL version of `manimgl`. The latest version of it is available [on PyPI as `manimlib`](https://pypi.org/project/manimgl/), but note that if you intend to use it to compile some old project of Grant, you will likely have to install the exact version from the time the project was created from source." +msgstr "" + +#: ../../source/faq/installation.md:40 +msgid "Which version should I use?" +msgstr "" + +#: ../../source/faq/installation.md:42 +msgid "We recommend the community maintained version especially for beginners. It has been developed to be more stable, better tested and documented (!), and quicker to respond to community contributions. It is also perfectly reasonable to start learning with the community maintained version and then switch to a different version later on." +msgstr "" + +#: ../../source/faq/installation.md:47 +msgid "If you do not care so much about documentation or stability, and would like to use the exact same version that Grant is using, then use ManimGL." +msgstr "" + +#: ../../source/faq/installation.md:50 +msgid "And as mentioned above, ManimCairo should only be used for (re)rendering old 3Blue1Brown projects (basically 2019 and before)." +msgstr "" + +#: ../../source/faq/installation.md:55 +msgid "What are the differences between Manim, ManimGL, ManimCairo? Can I tell for which version a scene was written for?" +msgstr "" + +#: ../../source/faq/installation.md:57 +msgid "You can! The thing that usually gives it away is the `import` statement at the top of the file; depending on how the code imports Manim you can tell for which version of the code it was written for:" +msgstr "" + +#: ../../source/faq/installation.md:61 +msgid "If the code imports from `manim` (i.e., `from manim import *`, `import manim as mn`, etc.), then the code you are reading is supposed to be run with the community maintained version." +msgstr "" + +#: ../../source/faq/installation.md:63 +msgid "If the import reads `import manimlib` (or `from manimlib import *`), you are likely reading a file to be rendered with ManimGL." +msgstr "" + +#: ../../source/faq/installation.md:65 +msgid "And if the import reads `from manimlib.imports import *`, or perhaps even `from big_ol_pile_of_manim_imports import *` you are reading a snippet that is supposed to be rendered with an early, or very early version of ManimCairo, respectively." +msgstr "" + +#: ../../source/faq/installation.md:71 +msgid "How do I know which version of Manim I have installed?" +msgstr "" + +#: ../../source/faq/installation.md:73 +msgid "Assuming you can run `manim` in your terminal and there is some output, check the first line of the text being produced. If you are using the community maintained version, the first line of any output will be `Manim Community `. If it does not say that, you are likely using ManimGL." +msgstr "" + +#: ../../source/faq/installation.md:78 +msgid "You can also check the list of packages you have installed: if typing `python` in your terminal spawns the interpreter that corresponds to the Python installation you use (might also be `py`, or `python3`, depending on your operating system), running `python -m pip list` will print a list of all installed packages. Check whether `manim` or `manimgl` appear in that list." +msgstr "" + +#: ../../source/faq/installation.md:84 +msgid "Similarly, you can use `python -m pip install ` and `python -m pip uninstall ` to install and uninstall packages from that list, respectively." +msgstr "" + +#: ../../source/faq/installation.md:90 +msgid "I am following the video guide X to install Manim, but some step fails. What do I do?" +msgstr "" + +#: ../../source/faq/installation.md:92 +msgid "It is only natural that there are many video guides on installing Manim out there, given that Manim is a library used for creating videos. Unfortunately however, (YouTube) videos can't be updated easily (without uploading a new one, that is) when some step in the installation process changes, and so there are many **severely outdated** resources out there." +msgstr "" + +#: ../../source/faq/installation.md:98 +msgid "This is why we strongly recommend following our {doc}`written installation guide ` to guide you through the process. In case you prefer using a video guide regardless, please check whether the creator whose guide you have been watching has made a more recent version available, and otherwise please contact them directly. Asking for help in the community will likely lead to being suggested to follow our written guide." +msgstr "" + +#: ../../source/faq/installation.md:107 +msgid "Why does ManimPango fail to install when running `pip install manim`?" +msgstr "" + +#: ../../source/faq/installation.md:109 +msgid "This most likely means that pip was not able to use our pre-built wheels of the `manimpango` dependency. Let us know (via [Discord](https://www.manim.community/discord/) or by opening a [new issue on GitHub](https://github.com/ManimCommunity/ManimPango/issues/new)) which architecture you would like to see supported, and we'll see what we can do about it." +msgstr "" + +#: ../../source/faq/installation.md:116 +msgid "To fix errors when installing `manimpango`, you need to make sure you have all the necessary build requirements. Check out the detailed instructions given in [the BUILDING section](https://github.com/ManimCommunity/ManimPango#BUILDING) of [ManimPango's README](https://github.com/ManimCommunity/ManimPango)." +msgstr "" + +#: ../../source/faq/installation.md:123 +msgid "I am using Windows and get the error `X is not recognized as an internal or external command, operable program or batch file`" +msgstr "" + +#: ../../source/faq/installation.md:125 +msgid "Regardless of whether `X` says `python` or `manim`, this means that the executable you are trying to run is not located in one of the directories your system is looking for them (specified by the `PATH` variable). Take a look at the instructions {doc}`in the installation guide for Windows `, or [this StackExchange answer](https://superuser.com/questions/143119/how-do-i-add-python-to-the-windows-path/143121#143121) to get help with editing the `PATH` variable manually." +msgstr "" + +#: ../../source/faq/installation.md:132 +msgid "If `python` is recognized but not `manim` or `pip`, you can try running commands by prepending `python -m`. That is, `manim` becomes `python -m manim`, and `pip` becomes `python -m pip`." +msgstr "" + +#: ../../source/faq/installation.md:138 +msgid "I have tried using Chocolatey (`choco install manimce`) to install Manim, but it failed!" +msgstr "" + +#: ../../source/faq/installation.md:140 +msgid "Make sure that you were running the command with administrator permissions, otherwise there can be problems. If this is not the issue, read Chocolatey's output carefully, it should mention a `.log` file containing information why the process failed." +msgstr "" + +#: ../../source/faq/installation.md:145 +msgid "You are welcome to take this file (and any other input you feel might be relevant) and submit it to Manim's community to ask for help with your problem. See the {doc}`FAQ on getting help ` for instructions." +msgstr "" + +#: ../../source/faq/installation.md:151 +msgid "On Windows, when typing `python` or `python3` the Windows store is opened, can I fix this?" +msgstr "" + +#: ../../source/faq/installation.md:153 +msgid "Yes: you can remove these aliases with these steps:" +msgstr "" + +#: ../../source/faq/installation.md:155 +msgid "Go to the Windows Setting." +msgstr "" + +#: ../../source/faq/installation.md:156 +msgid "Under *Apps and Features* you will find application execution aliases." +msgstr "" + +#: ../../source/faq/installation.md:157 +msgid "Within this menu, disable the alias(es) that are causing the issue (`python` and/or `python3`)." +msgstr "" + +#: ../../source/faq/installation.md:162 +msgid "I am using Anaconda and get an `ImportError` mentioning that some Symbol is not found." +msgstr "" + + diff --git a/docs/i18n/gettext/faq/internals.pot b/docs/i18n/gettext/faq/internals.pot new file mode 100644 index 0000000000..abecf638d8 --- /dev/null +++ b/docs/i18n/gettext/faq/internals.pot @@ -0,0 +1,17 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/faq/internals.md:1 +msgid "Where can I learn more about Manim's internal structure?" +msgstr "" + +#: ../../source/faq/internals.md:3 +msgid "Efforts to document the internal structure of Manim is ongoing on our [wiki](https://github.com/ManimCommunity/manim/wiki/Developer-documentation-(WIP))." +msgstr "" + + diff --git a/docs/i18n/gettext/faq/opengl.pot b/docs/i18n/gettext/faq/opengl.pot new file mode 100644 index 0000000000..21682a831d --- /dev/null +++ b/docs/i18n/gettext/faq/opengl.pot @@ -0,0 +1,29 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/faq/opengl.md:1 +msgid "FAQ: OpenGL rendering" +msgstr "" + +#: ../../source/faq/opengl.md:3 +msgid "Are there any resources on how the OpenGL renderer in the community maintained version can be used?" +msgstr "" + +#: ../../source/faq/opengl.md:5 +msgid "Yes. Unfortunately, at this point, the official online documentation does not contain the relevant base classes like `OpenGLMobject` and `OpenGLVMobject` or specific OpenGL classes like `OpenGLSurface`, but documentation for some of them is available in form of docstrings [in the source code](https://github.com/ManimCommunity/manim/tree/main/manim/mobject/opengl)." +msgstr "" + +#: ../../source/faq/opengl.md:11 +msgid "Furthermore, [this user guide by *aquabeam*](https://www.aquabeam.me/manim/opengl_guide/) can be helpful to get started using the OpenGL renderer." +msgstr "" + +#: ../../source/faq/opengl.md:16 +msgid "I am trying to run an interactive scene with `--renderer=opengl` and `Scene.interactive_embed`, but an error (`sqlite3.ProgrammingError`) is raised. How can I fix this?" +msgstr "" + + diff --git a/docs/i18n/gettext/guides/configuration.pot b/docs/i18n/gettext/guides/configuration.pot new file mode 100644 index 0000000000..a7b66dda87 --- /dev/null +++ b/docs/i18n/gettext/guides/configuration.pot @@ -0,0 +1,313 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/guides/configuration.rst:2 +msgid "Configuration" +msgstr "" + +#: ../../source/guides/configuration.rst:4 +msgid "Manim provides an extensive configuration system that allows it to adapt to many different use cases. There are many configuration options that can be configured at different times during the scene rendering process. Each option can be configured programmatically via `the ManimConfig class`_, at the time of command invocation via `command-line arguments`_, or at the time the library is first imported via `the config files`_." +msgstr "" + +#: ../../source/guides/configuration.rst:11 +msgid "The most common, simplest, and recommended way to configure Manim is via the command-line interface (CLI), which is described directly below." +msgstr "" + +#: ../../source/guides/configuration.rst:15 +msgid "Command-line arguments" +msgstr "" + +#: ../../source/guides/configuration.rst:17 +msgid "By far the most commonly used command in the CLI is the ``render`` command, which is used to render scene(s) to an output file. It is used with the following arguments:" +msgstr "" + +#: ../../source/guides/configuration.rst:24 +msgid "However, since Manim defaults to the :code:`render` command whenever no command is specified, the following form is far more common and can be used instead:" +msgstr "" + +#: ../../source/guides/configuration.rst:31 +msgid "An example of using the above form is:" +msgstr "" + +#: ../../source/guides/configuration.rst:37 +msgid "This asks Manim to search for a Scene class called :code:`SceneOne` inside the file ``file.py`` and render it with medium quality (specified by the ``-qm`` flag)." +msgstr "" + +#: ../../source/guides/configuration.rst:40 +msgid "Another frequently used flag is ``-p`` (\"preview\"), which makes manim open the rendered video after it's done rendering." +msgstr "" + +#: ../../source/guides/configuration.rst:43 +msgid "The ``-p`` flag does not change any properties of the global ``config`` dict. The ``-p`` flag is only a command-line convenience." +msgstr "" + +#: ../../source/guides/configuration.rst:47 +msgid "Advanced examples" +msgstr "" + +#: ../../source/guides/configuration.rst:49 +msgid "To render a scene in high quality, but only output the last frame of the scene instead of the whole video, you can execute" +msgstr "" + +#: ../../source/guides/configuration.rst:56 +msgid "The following example specifies the output file name (with the :code:`-o` flag), renders only the first ten animations (:code:`-n` flag) with a white background (:code:`-c` flag), and saves the animation as a ``.gif`` instead of as a ``.mp4`` file (``--format=gif`` flag). It uses the default quality and does not try to open the file after it is rendered." +msgstr "" + +#: ../../source/guides/configuration.rst:67 +msgid "A list of all CLI flags" +msgstr "" + +#: ../../source/guides/configuration.rst:75 +msgid "The ManimConfig class" +msgstr "" + +#: ../../source/guides/configuration.rst:77 +msgid "The most direct way of configuring Manim is through the global ``config`` object, which is an instance of :class:`.ManimConfig`. Each property of this class is a config option that can be accessed either with standard attribute syntax or with dict-like syntax:" +msgstr "" + +#: ../../source/guides/configuration.rst:88 +msgid "The former is preferred; the latter is provided for backwards compatibility." +msgstr "" + +#: ../../source/guides/configuration.rst:91 +msgid "Most classes, including :class:`.Camera`, :class:`.Mobject`, and :class:`.Animation`, read some of their default configuration from the global ``config``." +msgstr "" + +#: ../../source/guides/configuration.rst:103 +msgid ":class:`.ManimConfig` is designed to keep internal consistency. For example, setting ``frame_y_radius`` will affect ``frame_height``:" +msgstr "" + +#: ../../source/guides/configuration.rst:114 +msgid "The global ``config`` object is meant to be the single source of truth for all config options. All of the other ways of setting config options ultimately change the values of the global ``config`` object." +msgstr "" + +#: ../../source/guides/configuration.rst:118 +msgid "The following example illustrates the video resolution chosen for examples rendered in our documentation with a reference frame." +msgstr "" + +#: ../../source/guides/configuration.rst:140 +msgid "The config files" +msgstr "" + +#: ../../source/guides/configuration.rst:142 +msgid "As the last example shows, executing Manim from the command line may involve using many flags simultaneously. This may become a nuisance if you must execute the same script many times in a short time period, for example, when making small incremental tweaks to your scene script. For this reason, Manim can also be configured using a configuration file. A configuration file is a file ending with the suffix ``.cfg``." +msgstr "" + +#: ../../source/guides/configuration.rst:149 +msgid "To use a local configuration file when rendering your scene, you must create a file with the name ``manim.cfg`` in the same directory as your scene code." +msgstr "" + +#: ../../source/guides/configuration.rst:152 +msgid "The config file **must** be named ``manim.cfg``. Currently, Manim does not support config files with any other name." +msgstr "" + +#: ../../source/guides/configuration.rst:155 +msgid "The config file must start with the section header ``[CLI]``. The configuration options under this header have the same name as the CLI flags and serve the same purpose. Take, for example, the following config file." +msgstr "" + +#: ../../source/guides/configuration.rst:167 +msgid "Config files are parsed with the standard python library ``configparser``. In particular, they will ignore any line that starts with a pound symbol ``#``." +msgstr "" + +#: ../../source/guides/configuration.rst:170 +msgid "Now, executing the following command" +msgstr "" + +#: ../../source/guides/configuration.rst:176 +msgid "is equivalent to executing the following command, provided that ``manim.cfg`` is in the same directory as ," +msgstr "" + +#: ../../source/guides/configuration.rst:183 +msgid "The names of the configuration options admissible in config files are exactly the same as the **long names** of the corresponding command- line flags. For example, the ``-c`` and ``--background_color`` flags are interchangeable, but the config file only accepts :code:`background_color` as an admissible option." +msgstr "" + +#: ../../source/guides/configuration.rst:189 +msgid "Since config files are meant to replace CLI flags, all CLI flags can be set via a config file. Moreover, any config option can be set via a config file, whether or not it has an associated CLI flag. See the bottom of this document for a list of all CLI flags and config options." +msgstr "" + +#: ../../source/guides/configuration.rst:194 +msgid "Manim will look for a ``manim.cfg`` config file in the same directory as the file being rendered, and **not** in the directory of execution. For example," +msgstr "" + +#: ../../source/guides/configuration.rst:201 +msgid "will use the config file found in ``path/to/file.py``, if any. It will **not** use the config file found in the current working directory, even if it exists. In this way, the user may keep different config files for different scenes or projects, and execute them with the right configuration from anywhere in the system." +msgstr "" + +#: ../../source/guides/configuration.rst:207 +msgid "The file described here is called the **folder-wide** config file because it affects all scene scripts found in the same folder." +msgstr "" + +#: ../../source/guides/configuration.rst:212 +msgid "The user config file" +msgstr "" + +#: ../../source/guides/configuration.rst:214 +msgid "As explained in the previous section, a :code:`manim.cfg` config file only affects the scene scripts in its same folder. However, the user may also create a special config file that will apply to all scenes rendered by that user. This is referred to as the **user-wide** config file, and it will apply regardless of where Manim is executed from, and regardless of where the scene script is stored." +msgstr "" + +#: ../../source/guides/configuration.rst:221 +msgid "The user-wide config file lives in a special folder, depending on the operating system." +msgstr "" + +#: ../../source/guides/configuration.rst:224 +msgid "Windows: :code:`UserDirectory`/AppData/Roaming/Manim/manim.cfg" +msgstr "" + +#: ../../source/guides/configuration.rst:225 +msgid "MacOS: :code:`UserDirectory`/.config/manim/manim.cfg" +msgstr "" + +#: ../../source/guides/configuration.rst:226 +msgid "Linux: :code:`UserDirectory`/.config/manim/manim.cfg" +msgstr "" + +#: ../../source/guides/configuration.rst:228 +msgid "Here, :code:`UserDirectory` is the user's home folder." +msgstr "" + +#: ../../source/guides/configuration.rst:231 +msgid "A user may have many **folder-wide** config files, one per folder, but only one **user-wide** config file. Different users in the same computer may each have their own user-wide config file." +msgstr "" + +#: ../../source/guides/configuration.rst:235 +msgid "Do not store scene scripts in the same folder as the user-wide config file. In this case, the behavior is undefined." +msgstr "" + +#: ../../source/guides/configuration.rst:238 +msgid "Whenever you use Manim from anywhere in the system, Manim will look for a user-wide config file and read its configuration." +msgstr "" + +#: ../../source/guides/configuration.rst:243 +msgid "Cascading config files" +msgstr "" + +#: ../../source/guides/configuration.rst:245 +msgid "What happens if you execute Manim and it finds both a folder-wide config file and a user-wide config file? Manim will read both files, but if they are incompatible, **the folder-wide file takes precedence**." +msgstr "" + +#: ../../source/guides/configuration.rst:249 +msgid "For example, take the following user-wide config file" +msgstr "" + +#: ../../source/guides/configuration.rst:259 +msgid "and the following folder-wide file" +msgstr "" + +#: ../../source/guides/configuration.rst:267 +msgid "Then, executing :code:`manim SceneName` will be equivalent to not using any config files and executing" +msgstr "" + +#: ../../source/guides/configuration.rst:274 +msgid "Any command-line flags have precedence over any config file. For example, using the previous two config files and executing :code:`manim -c RED SceneName` is equivalent to not using any config files and executing" +msgstr "" + +#: ../../source/guides/configuration.rst:283 +msgid "There is also a **library-wide** config file that determines Manim's default behavior and applies to every user of the library. It has the least precedence, so any config options in the user-wide and any folder-wide files will override the library-wide file. This is referred to as the *cascading* config file system." +msgstr "" + +#: ../../source/guides/configuration.rst:289 +msgid "**The user should not try to modify the library-wide file**. Contributors should receive explicit confirmation from the core developer team before modifying it." +msgstr "" + +#: ../../source/guides/configuration.rst:295 +msgid "Order of operations" +msgstr "" + +#: ../../source/guides/configuration.rst:304 +msgid "With so many different ways of configuring Manim, it can be difficult to know when each config option is being set. In fact, this will depend on how Manim is being used." +msgstr "" + +#: ../../source/guides/configuration.rst:308 +msgid "If Manim is imported from a module, then the configuration system will follow these steps:" +msgstr "" + +#: ../../source/guides/configuration.rst:311 +msgid "The library-wide config file is loaded." +msgstr "" + +#: ../../source/guides/configuration.rst:312 +msgid "The user-wide and folder-wide files are loaded if they exist." +msgstr "" + +#: ../../source/guides/configuration.rst:313 +msgid "All files found in the previous two steps are parsed in a single :class:`ConfigParser` object, called ``parser``. This is where *cascading* happens." +msgstr "" + +#: ../../source/guides/configuration.rst:316 +msgid ":class:`logging.Logger` is instantiated to create Manim's global ``logger`` object. It is configured using the \"logger\" section of the parser, i.e. ``parser['logger']``." +msgstr "" + +#: ../../source/guides/configuration.rst:319 +msgid ":class:`ManimConfig` is instantiated to create the global ``config`` object." +msgstr "" + +#: ../../source/guides/configuration.rst:320 +msgid "The ``parser`` from step 3 is fed into the ``config`` from step 5 via :meth:`ManimConfig.digest_parser`." +msgstr "" + +#: ../../source/guides/configuration.rst:322 +msgid "Both ``logger`` and ``config`` are exposed to the user." +msgstr "" + +#: ../../source/guides/configuration.rst:324 +msgid "If Manim is being invoked from the command line, all of the previous steps happen, and are complemented by:" +msgstr "" + +#: ../../source/guides/configuration.rst:327 +msgid "The CLI flags are parsed and fed into ``config`` via :meth:`~ManimConfig.digest_args`." +msgstr "" + +#: ../../source/guides/configuration.rst:329 +msgid "If the ``--config_file`` flag was used, a new :class:`ConfigParser` object is created with the contents of the library-wide file, the user-wide file if it exists, and the file passed via ``--config_file``. In this case, the folder-wide file, if it exists, is ignored." +msgstr "" + +#: ../../source/guides/configuration.rst:333 +msgid "The new parser is fed into ``config``." +msgstr "" + +#: ../../source/guides/configuration.rst:334 +msgid "The rest of the CLI flags are processed." +msgstr "" + +#: ../../source/guides/configuration.rst:336 +msgid "To summarize, the order of precedence for configuration options, from lowest to highest precedence is:" +msgstr "" + +#: ../../source/guides/configuration.rst:339 +msgid "Library-wide config file," +msgstr "" + +#: ../../source/guides/configuration.rst:340 +msgid "user-wide config file, if it exists," +msgstr "" + +#: ../../source/guides/configuration.rst:341 +msgid "folder-wide config file, if it exists OR custom config file, if passed via ``--config_file``," +msgstr "" + +#: ../../source/guides/configuration.rst:343 +msgid "other CLI flags, and" +msgstr "" + +#: ../../source/guides/configuration.rst:344 +msgid "any programmatic changes made after the config system is set." +msgstr "" + +#: ../../source/guides/configuration.rst:348 +msgid "A list of all config options" +msgstr "" + +#: ../../source/guides/configuration.rst:369 +msgid "Accessing CLI command options" +msgstr "" + +#: ../../source/guides/configuration.rst:371 +msgid "Entering ``manim``, or ``manim --help``, will open the main help page." +msgstr "" + + diff --git a/docs/i18n/gettext/guides/deep_dive.pot b/docs/i18n/gettext/guides/deep_dive.pot new file mode 100644 index 0000000000..bb0c89af4d --- /dev/null +++ b/docs/i18n/gettext/guides/deep_dive.pot @@ -0,0 +1,633 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/guides/deep_dive.rst:2 +msgid "A deep dive into Manim's internals" +msgstr "" + +#: ../../source/guides/deep_dive.rst:4 +msgid "**Author:** `Benjamin Hackl `__" +msgstr "" + +#: ../../source/guides/deep_dive.rst:6 +msgid "Disclaimer" +msgstr "" + +#: ../../source/guides/deep_dive.rst:8 +msgid "This guide reflects the state of the library as of version ``v0.16.0`` and primarily treats the Cairo renderer. The situation in the latest version of Manim might be different; in case of substantial deviations we will add a note below." +msgstr "" + +#: ../../source/guides/deep_dive.rst:14 +msgid "Introduction" +msgstr "" + +#: ../../source/guides/deep_dive.rst:16 +msgid "Manim can be a wonderful library, if it behaves the way you would like it to, and/or the way you expect it to. Unfortunately, this is not always the case (as you probably know if you have played with some manimations yourself already). To understand where things *go wrong*, digging through the library's source code is sometimes the only option -- but in order to do that, you need to know where to start digging." +msgstr "" + +#: ../../source/guides/deep_dive.rst:23 +msgid "This article is intended as some sort of life line through the render process. We aim to give an appropriate amount of detail describing what happens when Manim reads your scene code and produces the corresponding animation. Throughout this article, we will focus on the following toy example::" +msgstr "" + +#: ../../source/guides/deep_dive.rst:43 +msgid "Before we go into details or even look at the rendered output of this scene, let us first describe verbally what happens in this *manimation*. In the first three lines of the ``construct`` method, a :class:`.Square` and a :class:`.Circle` are initialized, then the square is added to the scene. The first frame of the rendered output should thus show an orange square." +msgstr "" + +#: ../../source/guides/deep_dive.rst:49 +msgid "Then the actual animations happen: the square first transforms into a circle, then a :class:`.Dot` is created (Where do you guess the dot is located when it is first added to the scene? Answering this already requires detailed knowledge about the render process.). The dot has an updater attached to it, and as the circle moves right, the dot moves with it. In the end, all mobjects are faded out." +msgstr "" + +#: ../../source/guides/deep_dive.rst:56 +msgid "Actually rendering the code yields the following video:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:75 +msgid "For this example, the output (fortunately) coincides with our expectations." +msgstr "" + +#: ../../source/guides/deep_dive.rst:78 +msgid "Overview" +msgstr "" + +#: ../../source/guides/deep_dive.rst:80 +msgid "Because there is a lot of information in this article, here is a brief overview discussing the contents of the following chapters on a very high level." +msgstr "" + +#: ../../source/guides/deep_dive.rst:83 +msgid "`Preliminaries`_: In this chapter we unravel all the steps that take place to prepare a scene for rendering; right until the point where the user-overridden ``construct`` method is ran. This includes a brief discussion on using Manim's CLI versus other means of rendering (e.g., via Jupyter notebooks, or in your Python script by calling the :meth:`.Scene.render` method yourself)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:88 +msgid "`Mobject Initialization`_: For the second chapter we dive into creating and handling Mobjects, the basic elements that should be displayed in our scene. We discuss the :class:`.Mobject` base class, how there are essentially three different types of Mobjects, and then discuss the most important of them, vectorized Mobjects. In particular, we describe the internal point data structure that governs how the mechanism responsible for drawing the vectorized Mobject to the screen sets the corresponding Bézier curves. We conclude the chapter with a tour into :meth:`.Scene.add`, the bookkeeping mechanism controlling which mobjects should be rendered." +msgstr "" + +#: ../../source/guides/deep_dive.rst:97 +msgid "`Animations and the Render Loop`_: And finally, in the last chapter we walk through the instantiation of :class:`.Animation` objects (the blueprints that hold information on how Mobjects should be modified when the render loop runs), followed by a investigation of the infamous :meth:`.Scene.play` call. We will see that there are three relevant parts in a :meth:`.Scene.play` call; a part in which the passed animations and keyword arguments are processed and prepared, followed by the actual \"render loop\" in which the library steps through a time line and renders frame by frame. The final part does some post-processing to save a short video segment (\"partial movie file\") and cleanup for the next call to :meth:`.Scene.play`. In the end, after all of :meth:`.Scene.construct` has been run, the library combines the partial movie files to one video." +msgstr "" + +#: ../../source/guides/deep_dive.rst:110 +msgid "And with that, let us get *in medias res*." +msgstr "" + +#: ../../source/guides/deep_dive.rst:113 +msgid "Preliminaries" +msgstr "" + +#: ../../source/guides/deep_dive.rst:116 +msgid "Importing the library" +msgstr "" + +#: ../../source/guides/deep_dive.rst:118 +msgid "Independent of how exactly you are telling your system to render the scene, i.e., whether you run ``manim -qm -p file_name.py ToyExample``, or whether you are rendering the scene directly from the Python script via a snippet like" +msgstr "" + +#: ../../source/guides/deep_dive.rst:129 +msgid "or whether you are rendering the code in a Jupyter notebook, you are still telling your python interpreter to import the library. The usual pattern used to do this is" +msgstr "" + +#: ../../source/guides/deep_dive.rst:136 +msgid "which (while being a debatable strategy in general) imports a lot of classes and functions shipped with the library and makes them available in your global name space. I explicitly avoided stating that it imports **all** classes and functions of the library, because it does not do that: Manim makes use of the practice described in `Section 6.4.1 of the Python tutorial `__, and all module members that should be exposed to the user upon running the ``*``-import are explicitly declared in the ``__all__`` variable of the module." +msgstr "" + +#: ../../source/guides/deep_dive.rst:144 +msgid "Manim also uses this strategy internally: taking a peek at the file that is run when the import is called, ``__init__.py`` (see `here `__), you will notice that most of the code in that module is concerned with importing members from various different submodules, again using ``*``-imports." +msgstr "" + +#: ../../source/guides/deep_dive.rst:152 +msgid "If you would ever contribute a new submodule to Manim, the main ``__init__.py`` is where it would have to be listed in order to make its members accessible to users after importing the library." +msgstr "" + +#: ../../source/guides/deep_dive.rst:156 +msgid "In that file, there is one particular import at the beginning of the file however, namely::" +msgstr "" + +#: ../../source/guides/deep_dive.rst:161 +msgid "This initializes Manim's global configuration system, which is used in various places throughout the library. After the library runs this line, the current configuration options are set. The code in there takes care of reading the options in your ``.cfg`` files (all users have at least the global one that is shipped with the library) as well as correctly handling command line arguments (if you used the CLI to render)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:167 +msgid "You can read more about the config system in the :doc:`corresponding thematic guide `, and if you are interested in learning more about the internals of the configuration system and how it is initialized, follow the code flow starting in `the config module's init file `__." +msgstr "" + +#: ../../source/guides/deep_dive.rst:173 +msgid "Now that the library is imported, we can turn our attention to the next step: reading your scene code (which is not particularly exciting, Python just creates a new class ``ToyExample`` based on our code; Manim is virtually not involved in that step, with the exception that ``ToyExample`` inherits from ``Scene``)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:178 +msgid "However, with the ``ToyExample`` class created and ready to go, there is a new excellent question to answer: how is the code in our ``construct`` method actually executed?" +msgstr "" + +#: ../../source/guides/deep_dive.rst:183 +msgid "Scene instantiation and rendering" +msgstr "" + +#: ../../source/guides/deep_dive.rst:185 +msgid "The answer to this question depends on how exactly you are running the code. To make things a bit clearer, let us first consider the case that you have created a file ``toy_example.py`` which looks like this::" +msgstr "" + +#: ../../source/guides/deep_dive.rst:208 +msgid "With such a file, the desired scene is rendered by simply running this Python script via ``python toy_example.py``. Then, as described above, the library is imported and Python has read and defined the ``ToyExample`` class (but, read carefully: *no instance of this class has been created yet*)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:213 +msgid "At this point, the interpreter is about to enter the ``tempconfig`` context manager. Even if you have not seen Manim's ``tempconfig`` before, it's name already suggests what it does: it creates a copy of the current state of the configuration, applies the changes to the key-value pairs in the passed dictionary, and upon leaving the context the original version of the configuration is restored. TL;DR: it provides a fancy way of temporarily setting configuration options." +msgstr "" + +#: ../../source/guides/deep_dive.rst:221 +msgid "Inside the context manager, two things happen: an actual ``ToyExample``-scene object is instantiated, and the ``render`` method is called. Every way of using Manim ultimately does something along of these lines, the library always instantiates the scene object and then calls its ``render`` method. To illustrate that this really is the case, let us briefly look at the two most common ways of rendering scenes:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:228 +msgid "**Command Line Interface.** When using the CLI and running the command ``manim -qm -p toy_example.py ToyExample`` in your terminal, the actual entry point is Manim's ``__main__.py`` file (located `here `__. Manim uses `Click `__ to implement the command line interface, and the corresponding code is located in Manim's ``cli`` module (https://github.com/ManimCommunity/manim/tree/main/manim/cli). The corresponding code creating the scene class and calling its render method is located `here `__." +msgstr "" + +#: ../../source/guides/deep_dive.rst:238 +msgid "**Jupyter notebooks.** In Jupyter notebooks, the communication with the library is handled by the ``%%manim`` magic command, which is implemented in the ``manim.utils.ipython_magic`` module. There is :meth:`some documentation <.ManimMagic.manim>` available for the magic command, and the code creating the scene class and calling its render method is located `here `__." +msgstr "" + +#: ../../source/guides/deep_dive.rst:246 +msgid "Now that we know that either way, a :class:`.Scene` object is created, let us investigate what Manim does when that happens. When instantiating our scene object" +msgstr "" + +#: ../../source/guides/deep_dive.rst:253 +msgid "the ``Scene.__init__`` method is called, given that we did not implement our own initialization method. Inspecting the corresponding code (see `here `__) reveals that ``Scene.__init__`` first sets several attributes of the scene objects that do not depend on any configuration options set in ``config``. Then the scene inspects the value of ``config.renderer``, and based on its value, either instantiates a ``CairoRenderer`` or an ``OpenGLRenderer`` object and assigns it to its ``renderer`` attribute." +msgstr "" + +#: ../../source/guides/deep_dive.rst:261 +msgid "The scene then asks its renderer to initialize the scene by calling" +msgstr "" + +#: ../../source/guides/deep_dive.rst:267 +msgid "Inspecting both the default Cairo renderer and the OpenGL renderer shows that the ``init_scene`` method effectively makes the renderer instantiate a :class:`.SceneFileWriter` object, which basically is Manim's interface to ``ffmpeg`` and actually writes the movie file. The Cairo renderer (see the implementation `here `__) does not require any further initialization. The OpenGL renderer does some additional setup to enable the realtime rendering preview window, which we do not go into detail further here." +msgstr "" + +#: ../../source/guides/deep_dive.rst:276 +msgid "Currently, there is a lot of interplay between a scene and its renderer. This is a flaw in Manim's current architecture, and we are working on reducing this interdependency to achieve a less convoluted code flow." +msgstr "" + +#: ../../source/guides/deep_dive.rst:280 +msgid "After the renderer has been instantiated and initialized its file writer, the scene populates further initial attributes (notable mention: the ``mobjects`` attribute which keeps track of the mobjects that have been added to the scene). It is then done with its instantiation and ready to be rendered." +msgstr "" + +#: ../../source/guides/deep_dive.rst:285 +msgid "The rest of this article is concerned with the last line in our toy example script::" +msgstr "" + +#: ../../source/guides/deep_dive.rst:289 +msgid "This is where the actual magic happens." +msgstr "" + +#: ../../source/guides/deep_dive.rst:291 +msgid "Inspecting the `implementation of the render method `__ reveals that there are several hooks that can be used for pre- or postprocessing a scene. Unsurprisingly, :meth:`.Scene.render` describes the full *render cycle* of a scene. During this life cycle, there are three custom methods whose base implementation is empty and that can be overwritten to suit your purposes. In the order they are called, these customizable methods are:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:298 +msgid ":meth:`.Scene.setup`, which is intended for preparing and, well, *setting up* the scene for your animation (e.g., adding initial mobjects, assigning custom attributes to your scene class, etc.)," +msgstr "" + +#: ../../source/guides/deep_dive.rst:301 +msgid ":meth:`.Scene.construct`, which is the *script* for your screen play and contains programmatic descriptions of your animations, and" +msgstr "" + +#: ../../source/guides/deep_dive.rst:303 +msgid ":meth:`.Scene.tear_down`, which is intended for any operations you might want to run on the scene after the last frame has already been rendered (for example, this could run some code that generates a custom thumbnail for the video based on the state of the objects in the scene -- this hook is more relevant for situations where Manim is used within other Python scripts)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:310 +msgid "After these three methods are run, the animations have been fully rendered, and Manim calls :meth:`.CairoRenderer.scene_finished` to gracefully complete the rendering process. This checks whether any animations have been played -- and if so, it tells the :class:`.SceneFileWriter` to close the pipe to ``ffmpeg``. If not, Manim assumes that a static image should be output which it then renders using the same strategy by calling the render loop (see below) once." +msgstr "" + +#: ../../source/guides/deep_dive.rst:318 +msgid "**Back in our toy example,** the call to :meth:`.Scene.render` first triggers :meth:`.Scene.setup` (which only consists of ``pass``), followed by a call of :meth:`.Scene.construct`. At this point, our *animation script* is run, starting with the initialization of ``orange_square``." +msgstr "" + +#: ../../source/guides/deep_dive.rst:325 +msgid "Mobject Initialization" +msgstr "" + +#: ../../source/guides/deep_dive.rst:327 +msgid "Mobjects are, in a nutshell, the Python objects that represent all the *things* we want to display in our scene. Before we follow our debugger into the depths of mobject initialization code, it makes sense to discuss Manim's different types of Mobjects and their basic data structure." +msgstr "" + +#: ../../source/guides/deep_dive.rst:334 +msgid "What even is a Mobject?" +msgstr "" + +#: ../../source/guides/deep_dive.rst:336 +msgid ":class:`.Mobject` stands for *mathematical object* or *Manim object* (depends on who you ask 😄). The Python class :class:`.Mobject` is the base class for all objects that should be displayed on screen. Looking at the `initialization method `__ of :class:`.Mobject`, you will find that not too much happens in there:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:343 +msgid "some initial attribute values are assigned, like ``name`` (which makes the render logs mention the name of the mobject instead of its type), ``submobjects`` (initially an empty list), ``color``, and some others." +msgstr "" + +#: ../../source/guides/deep_dive.rst:346 +msgid "Then, two methods related to *points* are called: ``reset_points`` followed by ``generate_points``," +msgstr "" + +#: ../../source/guides/deep_dive.rst:348 +msgid "and finally, ``init_colors`` is called." +msgstr "" + +#: ../../source/guides/deep_dive.rst:350 +msgid "Digging deeper, you will find that :meth:`.Mobject.reset_points` simply sets the ``points`` attribute of the mobject to an empty NumPy vector, while the other two methods, :meth:`.Mobject.generate_points` and :meth:`.Mobject.init_colors` are just implemented as ``pass``." +msgstr "" + +#: ../../source/guides/deep_dive.rst:355 +msgid "This makes sense: :class:`.Mobject` is not supposed to be used as an *actual* object that is displayed on screen; in fact the camera (which we will discuss later in more detail; it is the class that is, for the Cairo renderer, responsible for \"taking a picture\" of the current scene) does not process \"pure\" :class:`Mobjects <.Mobject>` in any way, they *cannot* even appear in the rendered output." +msgstr "" + +#: ../../source/guides/deep_dive.rst:362 +msgid "This is where different types of mobjects come into play. Roughly speaking, the Cairo renderer setup knows three different types of mobjects that can be rendered:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:366 +msgid ":class:`.ImageMobject`, which represent images that you can display in your scene," +msgstr "" + +#: ../../source/guides/deep_dive.rst:368 +msgid ":class:`.PMobject`, which are very special mobjects used to represent point clouds; we will not discuss them further in this guide," +msgstr "" + +#: ../../source/guides/deep_dive.rst:370 +msgid ":class:`.VMobject`, which are *vectorized mobjects*, that is, mobjects that consist of points that are connected via curves. These are pretty much everywhere, and we will discuss them in detail in the next section." +msgstr "" + +#: ../../source/guides/deep_dive.rst:375 +msgid "... and what are VMobjects?" +msgstr "" + +#: ../../source/guides/deep_dive.rst:377 +msgid "As just mentioned, :class:`VMobjects <.VMobject>` represent vectorized mobjects. To render a :class:`.VMobject`, the camera looks at the ``points`` attribute of a :class:`.VMobject` and divides it into sets of four points each. Each of these sets is then used to construct a cubic Bézier curve with the first and last entry describing the end points of the curve (\"anchors\"), and the second and third entry describing the control points in between (\"handles\")." +msgstr "" + +#: ../../source/guides/deep_dive.rst:386 +msgid "To learn more about Bézier curves, take a look at the excellent online textbook `A Primer on Bézier curves `__ by `Pomax `__ -- there is an playground representing cubic Bézier curves `in §1 `__, the red and yellow points are \"anchors\", and the green and blue points are \"handles\"." +msgstr "" + +#: ../../source/guides/deep_dive.rst:393 +msgid "In contrast to :class:`.Mobject`, :class:`.VMobject` can be displayed on screen (even though, technically, it is still considered a base class). To illustrate how points are processed, consider the following short example of a :class:`.VMobject` with 8 points (and thus made out of 8/4 = 2 cubic Bézier curves). The resulting :class:`.VMobject` is drawn in green. The handles are drawn as red dots with a line to their closest anchor." +msgstr "" + +#: ../../source/guides/deep_dive.rst:433 +msgid "Manually setting the points of your :class:`.VMobject` is usually discouraged; there are specialized methods that can take care of that for you -- but it might be relevant when implementing your own, custom :class:`.VMobject`." +msgstr "" + +#: ../../source/guides/deep_dive.rst:441 +msgid "Squares and Circles: back to our Toy Example" +msgstr "" + +#: ../../source/guides/deep_dive.rst:443 +msgid "With a basic understanding of different types of mobjects, and an idea of how vectorized mobjects are built we can now come back to our toy example and the execution of the :meth:`.Scene.construct` method. In the first two lines of our animation script, the ``orange_square`` and the ``blue_circle`` are initialized." +msgstr "" + +#: ../../source/guides/deep_dive.rst:450 +msgid "When creating the orange square by running" +msgstr "" + +#: ../../source/guides/deep_dive.rst:456 +msgid "the initialization method of :class:`.Square`, ``Square.__init__``, is called. `Looking at the implementation `__, we can see that the ``side_length`` attribute of the square is set, and then" +msgstr "" + +#: ../../source/guides/deep_dive.rst:466 +msgid "is called. This ``super`` call is the Python way of calling the initialization function of the parent class. As :class:`.Square` inherits from :class:`.Rectangle`, the next method called is ``Rectangle.__init__``. There, only the first three lines are really relevant for us::" +msgstr "" + +#: ../../source/guides/deep_dive.rst:476 +msgid "First, the initialization function of the parent class of :class:`.Rectangle` -- :class:`.Polygon` -- is called. The four positional arguments passed are the four corners of the polygon: ``UR`` is up right (and equal to ``UP + RIGHT``), ``UL`` is up left (and equal to ``UP + LEFT``), and so forth. Before we follow our debugger deeper, let us observe what happens with the constructed polygon: the remaining two lines stretch the polygon to fit the specified width and height such that a rectangle with the desired measurements is created." +msgstr "" + +#: ../../source/guides/deep_dive.rst:486 +msgid "The initialization function of :class:`.Polygon` is particularly simple, it only calls the initialization function of its parent class, :class:`.Polygram`. There, we have almost reached the end of the chain: :class:`.Polygram` inherits from :class:`.VMobject`, whose initialization function mainly sets the values of some attributes (quite similar to ``Mobject.__init__``, but more specific to the Bézier curves that make up the mobject)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:494 +msgid "After calling the initialization function of :class:`.VMobject`, the constructor of :class:`.Polygram` also does something somewhat odd: it sets the points (which, you might remember above, should actually be set in a corresponding ``generate_points`` method of :class:`.Polygram`)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:501 +msgid "In several instances, the implementation of mobjects does not really stick to all aspects of Manim's interface. This is unfortunate, and increasing consistency is something that we actively work on. Help is welcome!" +msgstr "" + +#: ../../source/guides/deep_dive.rst:506 +msgid "Without going too much into detail, :class:`.Polygram` sets its ``points`` attribute via :meth:`.VMobject.start_new_path`, :meth:`.VMobject.add_points_as_corners`, which take care of setting the quadruples of anchors and handles appropriately. After the points are set, Python continues to process the call stack until it reaches the method that was first called; the initialization method of :class:`.Square`. After this, the square is initialized and assigned to the ``orange_square`` variable." +msgstr "" + +#: ../../source/guides/deep_dive.rst:516 +msgid "The initialization of ``blue_circle`` is similar to the one of ``orange_square``, with the main difference being that the inheritance chain of :class:`.Circle` is different. Let us briefly follow the trace of the debugger:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:521 +msgid "The implementation of :meth:`.Circle.__init__` immediately calls the initialization method of :class:`.Arc`, as a circle in Manim is simply an arc with an angle of :math:`\\tau = 2\\pi`. When initializing the arc, some basic attributes are set (like ``Arc.radius``, ``Arc.arc_center``, ``Arc.start_angle``, and ``Arc.angle``), and then the initialization method of its parent class, :class:`.TipableVMobject`, is called (which is a rather abstract base class for mobjects which a arrow tip can be attached to). Note that in contrast to :class:`.Polygram`, this class does **not** preemptively generate the points of the circle." +msgstr "" + +#: ../../source/guides/deep_dive.rst:532 +msgid "After that, things are less exciting: :class:`.TipableVMobject` again sets some attributes relevant for adding arrow tips, and afterwards passes to the initialization method of :class:`.VMobject`. From there, :class:`.Mobject` is initialized and :meth:`.Mobject.generate_points` is called, which actually runs the method implemented in :meth:`.Arc.generate_points`." +msgstr "" + +#: ../../source/guides/deep_dive.rst:539 +msgid "After both our ``orange_square`` and the ``blue_circle`` are initialized, the square is actually added to the scene. The :meth:`.Scene.add` method is actually doing a few interesting things, so it is worth to dig a bit deeper in the next section." +msgstr "" + +#: ../../source/guides/deep_dive.rst:546 +msgid "Adding Mobjects to the Scene" +msgstr "" + +#: ../../source/guides/deep_dive.rst:548 +msgid "The code in our ``construct`` method that is run next is" +msgstr "" + +#: ../../source/guides/deep_dive.rst:554 +msgid "From a high-level point of view, :meth:`.Scene.add` adds the ``orange_square`` to the list of mobjects that should be rendered, which is stored in the ``mobjects`` attribute of the scene. However, it does so in a very careful way to avoid the situation that a mobject is being added to the scene more than once. At a first glance, this sounds like a simple task -- the problem is that ``Scene.mobjects`` is not a \"flat\" list of mobjects, but a list of mobjects which might contain mobjects themselves, and so on." +msgstr "" + +#: ../../source/guides/deep_dive.rst:563 +msgid "Stepping through the code in :meth:`.Scene.add`, we see that first it is checked whether we are currently using the OpenGL renderer (which we are not) -- adding mobjects to the scene works slightly different (and actually easier!) for the OpenGL renderer. Then, the code branch for the Cairo renderer is entered and the list of so-called foreground mobjects (which are rendered on top of all other mobjects) is added to the list of passed mobjects. This is to ensure that the foreground mobjects will stay above of the other mobjects, even after adding the new ones. In our case, the list of foreground mobjects is actually empty, and nothing changes." +msgstr "" + +#: ../../source/guides/deep_dive.rst:574 +msgid "Next, :meth:`.Scene.restructure_mobjects` is called with the list of mobjects to be added as the ``to_remove`` argument, which might sound odd at first. Practically, this ensures that mobjects are not added twice, as mentioned above: if they were present in the scene ``Scene.mobjects`` list before (even if they were contained as a child of some other mobject), they are first removed from the list. The way :meth:`.Scene.restrucutre_mobjects` works is rather aggressive: It always operates on a given list of mobjects; in the ``add`` method two different lists occur: the default one, ``Scene.mobjects`` (no extra keyword argument is passed), and ``Scene.moving_mobjects`` (which we will discuss later in more detail). It iterates through all of the members of the list, and checks whether any of the mobjects passed in ``to_remove`` are contained as children (in any nesting level). If so, **their parent mobject is deconstructed** and their siblings are inserted directly one level higher. Consider the following example::" +msgstr "" + +#: ../../source/guides/deep_dive.rst:604 +msgid "Note that the group is disbanded and the circle moves into the root layer of mobjects in ``test_scene.mobjects``." +msgstr "" + +#: ../../source/guides/deep_dive.rst:607 +msgid "After the mobject list is \"restructured\", the mobject to be added are simply appended to ``Scene.mobjects``. In our toy example, the ``Scene.mobjects`` list is actually empty, so the ``restructure_mobjects`` method does not actually do anything. The ``orange_square`` is simply added to ``Scene.mobjects``, and as the aforementioned ``Scene.moving_mobjects`` list is, at this point, also still empty, nothing happens and :meth:`.Scene.add` returns." +msgstr "" + +#: ../../source/guides/deep_dive.rst:615 +msgid "We will hear more about the ``moving_mobject`` list when we discuss the render loop. Before we do that, let us look at the next line of code in our toy example, which includes the initialization of an animation class, ::" +msgstr "" + +#: ../../source/guides/deep_dive.rst:623 +msgid "Hence it is time to talk about :class:`.Animation`." +msgstr "" + +#: ../../source/guides/deep_dive.rst:627 +msgid "Animations and the Render Loop" +msgstr "" + +#: ../../source/guides/deep_dive.rst:630 +msgid "Initializing animations" +msgstr "" + +#: ../../source/guides/deep_dive.rst:632 +msgid "Before we follow the trace of the debugger, let us briefly discuss the general structure of the (abstract) base class :class:`.Animation`. An animation object holds all the information necessary for the renderer to generate the corresponding frames. Animations (in the sense of animation objects) in Manim are *always* tied to a specific mobject; even in the case of :class:`.AnimationGroup` (which you should actually think of as an animation on a group of mobjects rather than a group of animations). Moreover, except for in a particular special case, the run time of animations is also fixed and known beforehand." +msgstr "" + +#: ../../source/guides/deep_dive.rst:642 +msgid "The initialization of animations actually is not very exciting, :meth:`.Animation.__init__` merely sets some attributes derived from the passed keyword arguments and additionally ensures that the ``Animation.starting_mobject`` and ``Animation.mobject`` attributes are populated. Once the animation is played, the ``starting_mobject`` attribute holds an unmodified copy of the mobject the animation is attached to; during the initialization it is set to a placeholder mobject. The ``mobject`` attribute is set to the mobject the animation is attached to." +msgstr "" + +#: ../../source/guides/deep_dive.rst:652 +msgid "Animations have a few special methods which are called during the render loop:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:655 +msgid ":meth:`.Animation.begin`, which is called (as hinted by its name) at the beginning of every animation, so before the first frame is rendered. In it, all the required setup for the animation happens." +msgstr "" + +#: ../../source/guides/deep_dive.rst:658 +msgid ":meth:`.Animation.finish` is the counterpart to the ``begin`` method which is called at the end of the life cycle of the animation (after the last frame has been rendered)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:661 +msgid ":meth:`.Animation.interpolate` is the method that updates the mobject attached to the animation to the corresponding animation completion percentage. For example, if in the render loop, ``some_animation.interpolate(0.5)`` is called, the attached mobject will be updated to the state where 50% of the animation are completed." +msgstr "" + +#: ../../source/guides/deep_dive.rst:667 +msgid "We will discuss details about these and some further animation methods once we walk through the actual render loop. For now, we continue with our toy example and the code that is run when initializing the :class:`.ReplacementTransform` animation." +msgstr "" + +#: ../../source/guides/deep_dive.rst:672 +msgid "The initialization method of :class:`.ReplacementTransform` only consists of a call to the constructor of its parent class, :class:`.Transform`, with the additional keyword argument ``replace_mobject_with_target_in_scene`` set to ``True``. :class:`.Transform` then sets attributes that control how the points of the starting mobject are deformed into the points of the target mobject, and then passes on to the initialization method of :class:`.Animation`. Other basic properties of the animation (like its ``run_time``, the ``rate_func``, etc.) are processed there -- and then the animation object is fully initialized and ready to be played." +msgstr "" + +#: ../../source/guides/deep_dive.rst:685 +msgid "The ``play`` call: preparing to enter Manim's render loop" +msgstr "" + +#: ../../source/guides/deep_dive.rst:687 +msgid "We are finally there, the render loop is in our reach. Let us walk through the code that is run when :meth:`.Scene.play` is called." +msgstr "" + +#: ../../source/guides/deep_dive.rst:692 +msgid "Recall that this article is specifically about the Cairo renderer. Up to here, things were more or less the same for the OpenGL renderer as well; while some base mobjects might be different, the control flow and lifecycle of mobjects is still more or less the same. There are more substantial differences when it comes to the rendering loop." +msgstr "" + +#: ../../source/guides/deep_dive.rst:698 +msgid "As you will see when inspecting the method, :meth:`.Scene.play` almost immediately passes over to the ``play`` method of the renderer, in our case :class:`.CairoRenderer.play`. The one thing :meth:`.Scene.play` takes care of is the management of subcaptions that you might have passed to it (see the the documentation of :meth:`.Scene.play` and :meth:`.Scene.add_subcaption` for more information)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:707 +msgid "As has been said before, the communication between scene and renderer is not in a very clean state at this point, so the following paragraphs might be confusing if you don't run a debugger and step through the code yourself a bit." +msgstr "" + +#: ../../source/guides/deep_dive.rst:712 +msgid "Inside :meth:`.CairoRenderer.play`, the renderer first checks whether it may skip rendering of the current play call. This might happen, for example, when ``-s`` is passed to the CLI (i.e., only the last frame should be rendered), or when the ``-n`` flag is passed and the current play call is outside of the specified render bounds. The \"skipping status\" is updated in form of the call to :meth:`.CairoRenderer.update_skipping_status`." +msgstr "" + +#: ../../source/guides/deep_dive.rst:719 +msgid "Next, the renderer asks the scene to process the animations in the play call so that renderer obtains all of the information it needs. To be more concrete, :meth:`.Scene.compile_animation_data` is called, which then takes care of several things:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:724 +msgid "The method processes all animations and the keyword arguments passed to the initial :meth:`.Scene.play` call. In particular, this means that it makes sure all arguments passed to the play call are actually animations (or ``.animate`` syntax calls, which are also assembled to be actual :class:`.Animation`-objects at that point). It also propagates any animation-related keyword arguments (like ``run_time``, or ``rate_func``) passed to :class:`.Scene.play` to each individual animation. The processed animations are then stored in the ``animations`` attribute of the scene (which the renderer later reads...)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:733 +msgid "It adds all mobjects to which the animations that are played are bound to to the scene (provided the animation is not an mobject-introducing animation -- for these, the addition to the scene happens later)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:736 +msgid "In case the played animation is a :class:`.Wait` animation (this is the case in a :meth:`.Scene.wait` call), the method checks whether a static image should be rendered, or whether the render loop should be processed as usual (see :meth:`.Scene.should_update_mobjects` for the exact conditions, basically it checks whether there are any time-dependent updater functions and so on)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:742 +msgid "Finally, the method determines the total run time of the play call (which at this point is computed as the maximum of the run times of the passed animations). This is stored in the ``duration`` attribute of the scene." +msgstr "" + +#: ../../source/guides/deep_dive.rst:747 +msgid "After the animation data has been compiled by the scene, the renderer continues to prepare for entering the render loop. It now checks the skipping status which has been determined before. If the renderer can skip this play call, it does so: it sets the current play call hash (which we will get back to in a moment) to ``None`` and increases the time of the renderer by the determined animation run time." +msgstr "" + +#: ../../source/guides/deep_dive.rst:754 +msgid "Otherwise, the renderer checks whether or not Manim's caching system should be used. The idea of the caching system is simple: for every play call, a hash value is computed, which is then stored and upon re-rendering the scene, the hash is generated again and checked against the stored value. If it is the same, the cached output is reused, otherwise it is fully rerendered again. We will not go into details of the caching system here; if you would like to learn more, the :func:`.get_hash_from_play_call` function in the :mod:`.utils.hashing` module is essentially the entry point to the caching mechanism." +msgstr "" + +#: ../../source/guides/deep_dive.rst:764 +msgid "In the event that the animation has to be rendered, the renderer asks its :class:`.SceneFileWriter` to start a writing process. The process is started by a call to ``ffmpeg`` and opens a pipe to which rendered raw frames can be written. As long as the pipe is open, the process can be accessed via the ``writing_process`` attribute of the file writer. With the writing process in place, the renderer then asks the scene to \"begin\" the animations." +msgstr "" + +#: ../../source/guides/deep_dive.rst:772 +msgid "First, it literally *begins* all of the animations by calling their setup methods (:meth:`.Animation._setup_scene`, :meth:`.Animation.begin`). In doing so, the mobjects that are newly introduced by an animation (like via :class:`.Create` etc.) are added to the scene. Furthermore, the animation suspends updater functions being called on its mobject, and it sets its mobject to the state that corresponds to the first frame of the animation." +msgstr "" + +#: ../../source/guides/deep_dive.rst:780 +msgid "After this has happened for all animations in the current ``play`` call, the Cairo renderer determines which of the scene's mobjects can be painted statically to the background, and which ones have to be redrawn every frame. It does so by calling :meth:`.Scene.get_moving_and_static_mobjects`, and the resulting partition of mobjects is stored in the corresponding ``moving_mobjects`` and ``static_mobjects`` attributes." +msgstr "" + +#: ../../source/guides/deep_dive.rst:790 +msgid "The mechanism that determines static and moving mobjects is specific for the Cairo renderer, the OpenGL renderer works differently. Basically, moving mobjects are determined by checking whether they, any of their children, or any of the mobjects \"below\" them (in the sense of the order in which mobjects are processed in the scene) either have an update function attached, or whether they appear in one of the current animations. See the implementation of :meth:`.Scene.get_moving_mobjects` for more details." +msgstr "" + +#: ../../source/guides/deep_dive.rst:799 +msgid "Up to this very point, we did not actually render any (partial) image or movie files from the scene yet. This is, however, about to change. Before we enter the render loop, let us briefly revisit our toy example and discuss how the generic :meth:`.Scene.play` call setup looks like there." +msgstr "" + +#: ../../source/guides/deep_dive.rst:805 +msgid "For the call that plays the :class:`.ReplacementTransform`, there is no subcaption to be taken care of. The renderer then asks the scene to compile the animation data: the passed argument already is an animation (no additional preparations needed), there is no need for processing any keyword arguments (as we did not specify any additional ones to ``play``). The mobject bound to the animation, ``orange_square``, is already part of the scene (so again, no action taken). Finally, the run time is extracted (3 seconds long) and stored in ``Scene.duration``. The renderer then checks whether it should skip (it should not), then whether the animation is already cached (it is not). The corresponding animation hash value is determined and passed to the file writer, which then also calls ``ffmpeg`` to start the writing process which waits for rendered frames from the library." +msgstr "" + +#: ../../source/guides/deep_dive.rst:821 +msgid "The scene then ``begin``\\ s the animation: for the :class:`.ReplacementTransform` this means that the animation populates all of its relevant animation attributes (i.e., compatible copies of the starting and the target mobject so that it can safely interpolate between the two)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:827 +msgid "The mechanism determining static and moving mobjects considers all of the scenes mobjects (at this point only the ``orange_square``), and determines that the ``orange_square`` is bound to an animation that is currently played. As a result, the square is classified as a \"moving mobject\"." +msgstr "" + +#: ../../source/guides/deep_dive.rst:833 +msgid "Time to render some frames." +msgstr "" + +#: ../../source/guides/deep_dive.rst:837 +msgid "The render loop (for real this time)" +msgstr "" + +#: ../../source/guides/deep_dive.rst:839 +msgid "As mentioned above, due to the mechanism that determines static and moving mobjects in the scene, the renderer knows which mobjects it can paint statically to the background of the scene. Practically, this means that it partially renders a scene (to produce a background image), and then when iterating through the time progression of the animation only the \"moving mobjects\" are re-painted on top of the static background." +msgstr "" + +#: ../../source/guides/deep_dive.rst:846 +msgid "The renderer calls :meth:`.CairoRenderer.save_static_frame_data`, which first checks whether there are currently any static mobjects, and if there are, it updates the frame (only with the static mobjects; more about how exactly this works in a moment) and then saves a NumPy array representing the rendered frame in the ``static_image`` attribute. In our toy example, there are no static mobjects, and so the ``static_image`` attribute is simply set to ``None``." +msgstr "" + +#: ../../source/guides/deep_dive.rst:854 +msgid "Next, the renderer asks the scene whether the current animation is a \"frozen frame\" animation, which would mean that the renderer actually does not have to repaint the moving mobjects in every frame of the time progression. It can then just take the latest static frame, and display it throughout the animation." +msgstr "" + +#: ../../source/guides/deep_dive.rst:862 +msgid "An animation is considered a \"frozen frame\" animation if only a static :class:`.Wait` animation is played. See the description of :meth:`.Scene.compile_animation_data` above, or the implementation of :meth:`.Scene.should_update_mobjects` for more details." +msgstr "" + +#: ../../source/guides/deep_dive.rst:868 +msgid "If this is not the case (just as in our toy example), the renderer then calls the :meth:`.Scene.play_internal` method, which is the integral part of the render loop (in which the library steps through the time progression of the animation and renders the corresponding frames)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:874 +msgid "Within :meth:`.Scene.play_internal`, the following steps are performed:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:876 +msgid "The scene determines the run time of the animations by calling :meth:`.Scene.get_run_time`. This method basically takes the maximum ``run_time`` attribute of all of the animations passed to the :meth:`.Scene.play` call." +msgstr "" + +#: ../../source/guides/deep_dive.rst:880 +msgid "Then the *time progression* is constructed via the (internal) :meth:`.Scene._get_animation_time_progression` method, which wraps the actual :meth:`.Scene.get_time_progression` method. The time progression is a ``tqdm`` `progress bar object `__ for an iterator over ``np.arange(0, run_time, 1 / config.frame_rate)``. In other words, the time progression holds the time stamps (relative to the current animations, so starting at 0 and ending at the total animation run time, with the step size determined by the render frame rate) of the timeline where a new animation frame should be rendered." +msgstr "" + +#: ../../source/guides/deep_dive.rst:889 +msgid "Then the scene iterates over the time progression: for each time stamp ``t``, :meth:`.Scene.update_to_time` is called, which ..." +msgstr "" + +#: ../../source/guides/deep_dive.rst:892 +msgid "... first computes the time passed since the last update (which might be 0, especially for the initial call) and references it as ``dt``," +msgstr "" + +#: ../../source/guides/deep_dive.rst:894 +msgid "then (in the order in which the animations are passed to :meth:`.Scene.play`) calls :meth:`.Animation.update_mobjects` to trigger all updater functions that are attached to the respective animation except for the \"main mobject\" of the animation (that is, for example, for :class:`.Transform` the unmodified copies of start and target mobject -- see :meth:`.Animation.get_all_mobjects_to_update` for more details)," +msgstr "" + +#: ../../source/guides/deep_dive.rst:900 +msgid "then the relative time progression with respect to the current animation is computed (``alpha = t / animation.run_time``), which is then used to update the state of the animation with a call to :meth:`.Animation.interpolate`." +msgstr "" + +#: ../../source/guides/deep_dive.rst:903 +msgid "After all of the passed animations have been processed, the updater functions of all mobjects in the scene, all meshes, and finally those attached to the scene itself are run." +msgstr "" + +#: ../../source/guides/deep_dive.rst:907 +msgid "At this point, the internal (Python) state of all mobjects has been updated to match the currently processed timestamp. If rendering should not be skipped, then it is now time to *take a picture*!" +msgstr "" + +#: ../../source/guides/deep_dive.rst:913 +msgid "The update of the internal state (iteration over the time progression) happens *always* once :meth:`.Scene.play_internal` is entered. This ensures that even if frames do not need to be rendered (because, e.g., the ``-n`` CLI flag has been passed, something has been cached, or because we might be in a *Section* with skipped rendering), updater functions still run correctly, and the state of the first frame that *is* rendered is kept consistent." +msgstr "" + +#: ../../source/guides/deep_dive.rst:920 +msgid "To render an image, the scene calls the corresponding method of its renderer, :meth:`.CairoRenderer.render` and passes just the list of *moving mobjects* (remember, the *static mobjects* are assumed to have already been painted statically to the background of the scene). All of the hard work then happens when the renderer updates its current frame via a call to :meth:`.CairoRenderer.update_frame`:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:926 +msgid "First, the renderer prepares its :class:`.Camera` by checking whether the renderer has a ``static_image`` different from ``None`` stored already. If so, it sets the image as the *background image* of the camera via :meth:`.Camera.set_frame_to_background`, and otherwise it just resets the camera via :meth:`.Camera.reset`. The camera is then asked to capture the scene with a call to :meth:`.Camera.camture_mobjects`." +msgstr "" + +#: ../../source/guides/deep_dive.rst:932 +msgid "Things get a bit technical here, and at some point it is more efficient to delve into the implementation -- but here is a summary of what happens once the camera is asked to capture the scene:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:936 +msgid "First, a flat list of mobjects is created (so submobjects get extracted from their parents). This list is then processed in groups of the same type of mobjects (e.g., a batch of vectorized mobjects, followed by a batch of image mobjects, followed by more vectorized mobjects, etc. -- in many cases there will just be one batch of vectorized mobjects)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:941 +msgid "Depending on the type of the currently processed batch, the camera uses dedicated *display functions* to convert the :class:`.Mobject` Python object to a NumPy array stored in the camera's ``pixel_array`` attribute. The most important example in that context is the display function for vectorized mobjects, :meth:`.Camera.display_multiple_vectorized_mobjects`, or the more particular (in case you did not add a background image to your :class:`.VMobject`), :meth:`.Camera.display_multiple_non_background_colored_vmobjects`. This method first gets the current Cairo context, and then, for every (vectorized) mobject in the batch, calls :meth:`.Camera.display_vectorized`. There, the actual background stroke, fill, and then stroke of the mobject is drawn onto the context. See :meth:`.Camera.apply_stroke` and :meth:`.Camera.set_cairo_context_color` for more details -- but it does not get much deeper than that, in the latter method the actual Bézier curves determined by the points of the mobject are drawn; this is where the low-level interaction with Cairo happens." +msgstr "" + +#: ../../source/guides/deep_dive.rst:957 +msgid "After all batches have been processed, the camera has an image representation of the Scene at the current time stamp in form of a NumPy array stored in its ``pixel_array`` attribute. The renderer then takes this array and passes it to its :class:`.SceneFileWriter`. This concludes one iteration of the render loop, and once the time progression has been processed completely, a final bit of cleanup is performed before the :meth:`.Scene.play_internal` call is completed." +msgstr "" + +#: ../../source/guides/deep_dive.rst:964 +msgid "A TL;DR for the render loop, in the context of our toy example, reads as follows:" +msgstr "" + +#: ../../source/guides/deep_dive.rst:966 +msgid "The scene finds that a 3 second long animation (the :class:`.ReplacementTransform` changing the orange square to the blue circle) should be played. Given the requested medium render quality, the frame rate is 30 frames per second, and so the time progression with steps ``[0, 1/30, 2/30, ..., 89/30]`` is created." +msgstr "" + +#: ../../source/guides/deep_dive.rst:970 +msgid "In the internal render loop, each of these time stamps is processed: there are no updater functions, so effectively the scene updates the state of the transformation animation to the desired time stamp (for example, at time stamp ``t = 45/30``, the animation is completed to a rate of ``alpha = 0.5``)." +msgstr "" + +#: ../../source/guides/deep_dive.rst:975 +msgid "Then the scene asks the renderer to do its job. The renderer asks its camera to capture the scene, the only mobject that needs to be processed at this point is the main mobject attached to the transformation; the camera converts the current state of the mobject to entries in a NumPy array. The renderer passes this array to the file writer." +msgstr "" + +#: ../../source/guides/deep_dive.rst:980 +msgid "At the end of the loop, 90 frames have been passed to the file writer." +msgstr "" + +#: ../../source/guides/deep_dive.rst:983 +msgid "Completing the render loop" +msgstr "" + +#: ../../source/guides/deep_dive.rst:985 +msgid "The last few steps in the :meth:`.Scene.play_internal` call are not too exciting: for every animation, the corresponding :meth:`.Animation.finish` and :meth:`.Animation.clean_up_from_scene` methods are called." +msgstr "" + +#: ../../source/guides/deep_dive.rst:991 +msgid "Note that as part of :meth:`.Animation.finish`, the :meth:`.Animation.interpolate` method is called with an argument of 1.0 -- you might have noticed already that the last frame of an animation can sometimes be a bit off or incomplete. This is by current design! The last frame rendered in the render loop (and displayed for a duration of ``1 / frame_rate`` seconds in the rendered video) corresponds to the state of the animation ``1 / frame_rate`` seconds before it ends. To display the final frame as well in the video, we would need to append another ``1 / frame_rate`` seconds to the video -- which would then mean that a 1 second rendered Manim video would be slightly longer than 1 second. We decided against this at some point." +msgstr "" + +#: ../../source/guides/deep_dive.rst:1001 +msgid "In the end, the time progression is closed (which completes the displayed progress bar) in the terminal. With the closing of the time progression, the :meth:`.Scene.play_internal` call is completed, and we return to the renderer, which now orders the :class:`.SceneFileWriter` to close the movie pipe that has been opened for this animation: a partial movie file is written." +msgstr "" + +#: ../../source/guides/deep_dive.rst:1007 +msgid "This pretty much concludes the walkthrough of a :class:`.Scene.play` call, and actually there is not too much more to say for our toy example either: at this point, a partial movie file that represents playing the :class:`.ReplacementTransform` has been written. The initialization of the :class:`.Dot` happens analogous to the initialization of ``blue_circle``, which has been discussed above. The :meth:`.Mobject.add_updater` call literally just attaches a function to the ``updaters`` attribute of the ``small_dot``. And the remaining :meth:`.Scene.play` and :meth:`.Scene.wait` calls follow the exact same procedure as discussed in the render loop section above; each such call produces a corresponding partial movie file." +msgstr "" + +#: ../../source/guides/deep_dive.rst:1018 +msgid "Once the :meth:`.Scene.construct` method has been fully processed (and thus all of the corresponding partial movie files have been written), the scene calls its cleanup method :meth:`.Scene.tear_down`, and then asks its renderer to finish the scene. The renderer, in turn, asks its scene file writer to wrap things up by calling :meth:`.SceneFileWriter.finish`, which triggers the combination of the partial movie files into the final product." +msgstr "" + + diff --git a/docs/i18n/gettext/guides/index.pot b/docs/i18n/gettext/guides/index.pot new file mode 100644 index 0000000000..b163d6b4a2 --- /dev/null +++ b/docs/i18n/gettext/guides/index.pot @@ -0,0 +1,14 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/guides/index.rst:4 +#: ../../source/guides/index.rst:4 +msgid "Table of Contents" +msgstr "" + + diff --git a/docs/i18n/gettext/guides/using_text.pot b/docs/i18n/gettext/guides/using_text.pot new file mode 100644 index 0000000000..1358ff998d --- /dev/null +++ b/docs/i18n/gettext/guides/using_text.pot @@ -0,0 +1,269 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/guides/using_text.rst:3 +msgid "Rendering Text and Formulas" +msgstr "" + +#: ../../source/guides/using_text.rst:5 +msgid "There are two different ways by which you can render **Text** in videos:" +msgstr "" + +#: ../../source/guides/using_text.rst:7 +msgid "Using Pango (:mod:`~.text_mobject`)" +msgstr "" + +#: ../../source/guides/using_text.rst:8 +msgid "Using LaTeX (:mod:`~.tex_mobject`)" +msgstr "" + +#: ../../source/guides/using_text.rst:10 +msgid "If you want to render simple text, you should use either :class:`~.Text` or :class:`~.MarkupText`, or one of its derivatives like :class:`~.Paragraph`. See :ref:`using-text-objects` for more information." +msgstr "" + +#: ../../source/guides/using_text.rst:14 +msgid "LaTeX should be used when you need mathematical typesetting. See :ref:`rendering-with-latex` for more information." +msgstr "" + +#: ../../source/guides/using_text.rst:20 +msgid "Text Without LaTeX" +msgstr "" + +#: ../../source/guides/using_text.rst:22 +msgid "The simplest way to add text to your animations is to use the :class:`~.Text` class. It uses the `Pango library`_ to render text. With Pango, you can also render non-English alphabets like 你好 or こんにちは or 안녕하세요 or مرحبا بالعالم." +msgstr "" + +#: ../../source/guides/using_text.rst:27 +msgid "Here is a simple *Hello World* animation." +msgstr "" + +#: ../../source/guides/using_text.rst:38 +msgid "You can also use :class:`~.MarkupText` which allows the use of PangoMarkup (see the documentation of :class:`~.MarkupText` for details) to render text. For example:" +msgstr "" + +#: ../../source/guides/using_text.rst:56 +msgid "Working with :class:`~.Text`" +msgstr "" + +#: ../../source/guides/using_text.rst:58 +msgid "This section explains the properties of :class:`~.Text` and how can it be used in your animations." +msgstr "" + +#: ../../source/guides/using_text.rst:62 +msgid "Using Fonts" +msgstr "" + +#: ../../source/guides/using_text.rst:64 +msgid "You can set a different font using :attr:`~.Text.font`." +msgstr "" + +#: ../../source/guides/using_text.rst:68 +msgid "The font used must be installed in your system, and Pango should know about it. You can get a list of fonts using :func:`manimpango.list_fonts`." +msgstr "" + +#: ../../source/guides/using_text.rst:85 +msgid "Setting Slant and Weight" +msgstr "" + +#: ../../source/guides/using_text.rst:86 +msgid "Slant is the style of the Text, and it can be ``NORMAL`` (the default), ``ITALIC`` or ``OBLIQUE``. Usually, for many fonts both ``ITALIC`` and ``OBLIQUE`` look similar, but ``ITALIC`` uses **Roman Style**, whereas ``OBLIQUE`` uses **Italic Style**." +msgstr "" + +#: ../../source/guides/using_text.rst:91 +msgid "Weight specifies the boldness of a font. You can see a list of weights in :class:`manimpango.Weight`." +msgstr "" + +#: ../../source/guides/using_text.rst:126 +msgid "Using Colors" +msgstr "" + +#: ../../source/guides/using_text.rst:128 +msgid "You can set the color of the text using :attr:`~.Text.color`:" +msgstr "" + +#: ../../source/guides/using_text.rst:138 +msgid "You can use utilities like :attr:`~.Text.t2c` for coloring specific characters. This may be problematic if your text contains ligatures as explained in :ref:`iterating-text`." +msgstr "" + +#: ../../source/guides/using_text.rst:142 +msgid ":attr:`~Text.t2c` accepts two types of dictionaries," +msgstr "" + +#: ../../source/guides/using_text.rst:144 +msgid "The keys can contain indices like ``[2:-1]`` or ``[4:8]``, this works similar to how `slicing `_ works in Python. The values should be the color of the Text from :class:`~.Color`." +msgstr "" + +#: ../../source/guides/using_text.rst:149 +msgid "The keys contain words or characters which should be colored separately and the values should be the color from :class:`~.Color`:" +msgstr "" + +#: ../../source/guides/using_text.rst:161 +msgid "If you want to avoid problems when using colors (due to ligatures), consider using :class:`MarkupText`." +msgstr "" + +#: ../../source/guides/using_text.rst:166 +msgid "Using Gradients" +msgstr "" + +#: ../../source/guides/using_text.rst:168 +msgid "You can add a gradient using :attr:`~.Text.gradient`. The value must be an iterable of any length:" +msgstr "" + +#: ../../source/guides/using_text.rst:179 +msgid "You can also use :attr:`~.Text.t2g` for gradients with specific characters of the text. It shares a similar syntax to :ref:`the interface for colors `:" +msgstr "" + +#: ../../source/guides/using_text.rst:203 +msgid "Setting Line Spacing" +msgstr "" + +#: ../../source/guides/using_text.rst:205 +msgid "You can set the line spacing using :attr:`~.Text.line_spacing`:" +msgstr "" + +#: ../../source/guides/using_text.rst:220 +msgid "Disabling Ligatures" +msgstr "" + +#: ../../source/guides/using_text.rst:222 +msgid "By disabling ligatures you would get a one-to-one mapping between characters and submobjects. This fixes the issues with coloring text." +msgstr "" + +#: ../../source/guides/using_text.rst:228 +msgid "Be aware that using this method with text that heavily depends on ligatures (Arabic text) may yield unexpected results." +msgstr "" + +#: ../../source/guides/using_text.rst:231 +msgid "You can disable ligatures by passing ``disable_ligatures`` to :class:`Text`. For example:" +msgstr "" + +#: ../../source/guides/using_text.rst:246 +msgid "Iterating :class:`~.Text`" +msgstr "" + +#: ../../source/guides/using_text.rst:248 +msgid "Text objects behave like :class:`VGroups <.VGroup>`. Therefore, you can slice and index the text." +msgstr "" + +#: ../../source/guides/using_text.rst:251 +msgid "For example, you can set each letter to different color by iterating it." +msgstr "" + +#: ../../source/guides/using_text.rst:265 +msgid "Please note that `Ligature`_ can cause problems here. If you need a one-to-one mapping of characters to submobjects you should pass the ``disable_ligatures`` parameter to :class:`~.Text`. See :ref:`disable-ligatures`." +msgstr "" + +#: ../../source/guides/using_text.rst:273 +msgid "Working with :class:`~.MarkupText`" +msgstr "" + +#: ../../source/guides/using_text.rst:275 +msgid "MarkupText is similar to :class:`~.Text`, the only difference between them is that this accepts and processes PangoMarkup (which is similar to html), instead of just rendering plain text." +msgstr "" + +#: ../../source/guides/using_text.rst:279 +msgid "Consult the documentation of :class:`~.MarkupText` for more details and further references about PangoMarkup." +msgstr "" + +#: ../../source/guides/using_text.rst:297 +msgid "Text With LaTeX" +msgstr "" + +#: ../../source/guides/using_text.rst:299 +msgid "Just as you can use :class:`~.Text` to add text to your videos, you can use :class:`~.Tex` to insert LaTeX." +msgstr "" + +#: ../../source/guides/using_text.rst:302 +msgid "For example," +msgstr "" + +#: ../../source/guides/using_text.rst:314 +msgid "Note that we are using a raw string (``r'...'``) instead of a regular string (``'...'``). This is because TeX code uses a lot of special characters - like ``\\`` for example - that have special meaning within a regular python string. An alternative would have been to write ``\\\\`` to escape the backslash: ``Tex('\\\\LaTeX')``." +msgstr "" + +#: ../../source/guides/using_text.rst:320 +msgid "Working with :class:`~.MathTex`" +msgstr "" + +#: ../../source/guides/using_text.rst:322 +msgid "Everything passed to :class:`~.MathTex` is in math mode by default. To be more precise, :class:`~.MathTex` is processed within an ``align*`` environment. You can achieve a similar effect with :class:`~.Tex` by enclosing your formula with ``$`` symbols: ``$\\xrightarrow{x^6y^8}$``:" +msgstr "" + +#: ../../source/guides/using_text.rst:339 +msgid "LaTeX commands and keyword arguments" +msgstr "" + +#: ../../source/guides/using_text.rst:341 +msgid "We can use any standard LaTeX commands in the AMS maths packages. Such as the ``mathtt`` math-text type or the ``looparrowright`` arrow." +msgstr "" + +#: ../../source/guides/using_text.rst:352 +msgid "On the Manim side, the :class:`~.Tex` class also accepts attributes to change the appearance of the output. This is very similar to the :class:`~.Text` class. For example, the ``color`` keyword changes the color of the TeX mobject." +msgstr "" + +#: ../../source/guides/using_text.rst:366 +msgid "Extra LaTeX Packages" +msgstr "" + +#: ../../source/guides/using_text.rst:368 +msgid "Some commands require special packages to be loaded into the TeX template. For example, to use the ``mathscr`` script, we need to add the ``mathrsfs`` package. Since this package isn't loaded into Manim's tex template by default, we have to add it manually." +msgstr "" + +#: ../../source/guides/using_text.rst:388 +msgid "Substrings and parts" +msgstr "" + +#: ../../source/guides/using_text.rst:390 +msgid "The TeX mobject can accept multiple strings as arguments. Afterwards you can refer to the individual parts either by their index (like ``tex[1]``), or by selecting parts of the tex code. In this example, we set the color of the ``\\bigstar`` using :func:`~.set_color_by_tex`:" +msgstr "" + +#: ../../source/guides/using_text.rst:404 +msgid "Note that :func:`~.set_color_by_tex` colors the entire substring containing the Tex, not just the specific symbol or Tex expression. Consider the following example:" +msgstr "" + +#: ../../source/guides/using_text.rst:418 +msgid "As you can see, this colors the entire equation yellow, contrary to what may be expected. To color only ``x`` yellow, we have to do the following:" +msgstr "" + +#: ../../source/guides/using_text.rst:433 +msgid "By setting ``substrings_to_isolate`` to ``x``, we split up the :class:`~.MathTex` into substrings automatically and isolate the ``x`` components into individual substrings. Only then can :meth:`~.set_color_by_tex` be used to achieve the desired result." +msgstr "" + +#: ../../source/guides/using_text.rst:438 +msgid "Note that Manim also supports a custom syntax that allows splitting a TeX string into substrings easily: simply enclose parts of your formula that you want to isolate with double braces. In the string ``MathTex(r\"{{ a^2 }} + {{ b^2 }} = {{ c^2 }}\")``, the rendered mobject will consist of the substrings ``a^2``, ``+``, ``b^2``, ``=``, and ``c^2``. This makes transformations between similar text fragments easy to write using :class:`~.TransformMatchingTex`." +msgstr "" + +#: ../../source/guides/using_text.rst:447 +msgid "Using ``index_labels`` to work with complicated strings" +msgstr "" + +#: ../../source/guides/using_text.rst:449 +msgid "You might sometimes be working with a very complicated :class:`~.MathTex` mobject that makes it difficult to work with its individual components. This is where the debugging function :func:`.index_labels` is very useful." +msgstr "" + +#: ../../source/guides/using_text.rst:453 +msgid "The method shows the index of a mobject's submobjects, allowing you to easily find the components of the mobject you would like to change." +msgstr "" + +#: ../../source/guides/using_text.rst:472 +msgid "LaTeX Maths Fonts - The Template Library" +msgstr "" + +#: ../../source/guides/using_text.rst:474 +msgid "Changing fonts in LaTeX when typesetting mathematical formulae is trickier than regular text. It requires changing the template that is used to compile the TeX. Manim comes with a collection of :class:`~.TexFontTemplates` ready for you to use. These templates will all work in math mode:" +msgstr "" + +#: ../../source/guides/using_text.rst:491 +msgid "Manim also has a :class:`~.TexTemplateLibrary` containing the TeX templates used by 3Blue1Brown. One example is the ctex template, used for typesetting Chinese script. For this to work, the ctex LaTeX package must be installed on your system. Furthermore, if you are only typesetting Text, you probably do not need :class:`~.Tex` at all, and should use :class:`~.Text` instead." +msgstr "" + +#: ../../source/guides/using_text.rst:508 +msgid "Aligning formulae" +msgstr "" + + diff --git a/docs/i18n/gettext/index.pot b/docs/i18n/gettext/index.pot index 378cbf0228..8c4c97230f 100644 --- a/docs/i18n/gettext/index.pot +++ b/docs/i18n/gettext/index.pot @@ -7,15 +7,107 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../source/index.rst:7 -msgid "Manim Community Overview" +msgid "Manim Community Edition" msgstr "" #: ../../source/index.rst:9 msgid "Animating technical concepts is traditionally pretty tedious since it can be difficult to make the animations precise enough to convey them accurately. Manim relies on Python's simplicity to generate animations programmatically, making it convenient to specify exactly how each one should run. Take a look at the :doc:`Example Gallery <../examples>` for some inspiration on how to create beautiful images and videos with Manim." msgstr "" -#: ../../source/index.rst:16 +#: ../../source/index.rst:17 +msgid "First Steps" +msgstr "" + +#: ../../source/index.rst:19 +msgid "Are you new to Manim and are looking for where to get started? Then you are in the right place!" +msgstr "" + +#: ../../source/index.rst:24 +msgid "Please be aware that there are different, incompatible versions of Manim available. Check our :ref:`installation FAQ ` to learn more!" +msgstr "" + +#: ../../source/index.rst:28 +msgid "The :doc:`Installation ` section has the latest and up-to-date installation instructions for Windows, MacOS, and Linux. You can also find information on Manim's docker images and (online) notebook environments there." +msgstr "" + +#: ../../source/index.rst:32 +msgid "Want to try the library before installing it? Take a look at our interactive online playground at https://try.manim.community in form of a Jupyter notebook." +msgstr "" + +#: ../../source/index.rst:35 +msgid "In our :doc:`Tutorials ` section you will find a collection of resources that will teach you how to use Manim. In particular, the :doc:`tutorials/quickstart` tutorial teaches you Manim's basics, and in :doc:`tutorials/building_blocks` the classes used to compose your animations are described in more detail." +msgstr "" + +#: ../../source/index.rst:43 +msgid "Finding Help" +msgstr "" + +#: ../../source/index.rst:45 +msgid "Are you struggling with installing or using Manim? Don't worry, we've all been there. Here are some good resources to help you out:" +msgstr "" + +#: ../../source/index.rst:48 +msgid "Perhaps your problem is one that occurs frequently, then chances are it is addressed in our :doc:`collection of FAQs `." +msgstr "" + +#: ../../source/index.rst:50 +msgid "If you are looking for information on some specific class, look for it in the :doc:`reference manual ` and/or use the search feature of the documentation." +msgstr "" + +#: ../../source/index.rst:53 +msgid "Still no luck? Then you are welcome to ask the community for help, together we usually manage to find a solution for your problem! Consult the :doc:`FAQ page on getting help ` for instructions." +msgstr "" + +#: ../../source/index.rst:59 +msgid "Navigating the Documentation" +msgstr "" + +#: ../../source/index.rst:61 +msgid "Here are some short summaries for all of the sections in this documentation:" +msgstr "" + +#: ../../source/index.rst:63 +msgid "The :doc:`Example Gallery ` is a collection of examples (rendered videos and images together with the code they were generated from) that show a few different, simple things that you can do with Manim." +msgstr "" + +#: ../../source/index.rst:66 +msgid "The :doc:`Installation ` section has information on installing Manim." +msgstr "" + +#: ../../source/index.rst:67 +msgid "In :doc:`Tutorials & Guides ` you can find learning resources: proper tutorials that guide you through the process of creating a video are in the :doc:`Tutorial ` section; guides on specific topics are in the :doc:`Guides ` section, and the answers to frequently asked questions can be found in the :doc:`FAQ ` section." +msgstr "" + +#: ../../source/index.rst:72 +msgid "The :doc:`Reference Manual ` contains a comprehensive list of all of Manim's (documented) modules, classes, and functions. If you are somewhat familiar with Manim's module structure feel free to browse the manual directly. If you are searching for something specific, feel free to use the documentation's search feature in the sidebar. Many classes and methods come with their own illustrated examples too!" +msgstr "" + +#: ../../source/index.rst:77 +msgid "The :doc:`Plugins ` page documents how to install, write, and distribute plugins (that is, separate Python packages that extend the feature set of the core library)." +msgstr "" + +#: ../../source/index.rst:79 +msgid "Changes between versions are documented in our :doc:`Changelog `." +msgstr "" + +#: ../../source/index.rst:80 +msgid "If you are looking into contributing to the development of Manim, you can find information on how to get involved in our :doc:`Contributing ` section." +msgstr "" + +#: ../../source/index.rst:82 +msgid "And finally, the :doc:`Code of Conduct ` page has a formal description of the rules you should abide by when interacting within our community." +msgstr "" + +#: ../../source/index.rst:86 +msgid "Sharing Your Work" +msgstr "" + +#: ../../source/index.rst:88 msgid "We'd love to hear from you and see your manimations `on Twitter `_, `Reddit `_, or `Discord `_. If you're using Manim in a scientific context, instructions on how to cite a particular release can be found `in our README `_." msgstr "" +#: ../../source/index.rst:95 +msgid "Index" +msgstr "" + diff --git a/docs/i18n/gettext/installation.pot b/docs/i18n/gettext/installation.pot index 7d2d56328d..956ccbdfc3 100644 --- a/docs/i18n/gettext/installation.pot +++ b/docs/i18n/gettext/installation.pot @@ -19,7 +19,7 @@ msgid "Otherwise, if you intend to use Manim to work on an animation project, we msgstr "" #: ../../source/installation.rst:16 -msgid "Note that there are several different versions of Manim. The instructions on this website are **only** for the *community edition*. Find out more about the :doc:`differences between Manim versions ` if you are unsure which version you should install." +msgid "Note that there are several different versions of Manim. The instructions on this website are **only** for the *community edition*. Find out more about the :ref:`differences between Manim versions ` if you are unsure which version you should install." msgstr "" #: ../../source/installation.rst:22 @@ -50,47 +50,47 @@ msgstr "" msgid "Depending on your particular setup, the installation process might be slightly different. Make sure that you have tried to follow the steps on the following pages carefully, but in case you hit a wall we are happy to help: either `join our Discord `__, or start a new Discussion `directly on GitHub `__." msgstr "" -#: ../../source/installation.rst:59 +#: ../../source/installation.rst:58 msgid "Once Manim is installed locally, you can proceed to our :doc:`quickstart guide ` which walks you through rendering a first simple scene." msgstr "" -#: ../../source/installation.rst:63 -msgid "As mentioned above, do not worry if there are errors or other problems: consult our :doc:`troubleshooting guide ` for help, or get in touch with the community via `GitHub discussions `__ or `Discord `__." +#: ../../source/installation.rst:62 +msgid "As mentioned above, do not worry if there are errors or other problems: consult our :doc:`FAQ section ` for help (including instructions for how to ask Manim's community for help)." msgstr "" -#: ../../source/installation.rst:75 +#: ../../source/installation.rst:71 msgid "Using Manim via Docker" msgstr "" -#: ../../source/installation.rst:77 +#: ../../source/installation.rst:73 msgid "`Docker `__ is a virtualization tool that allows the distribution of encapsulated software environments (containers)." msgstr "" -#: ../../source/installation.rst:80 +#: ../../source/installation.rst:76 msgid "The following pages contain more information about the docker image maintained by the community, ``manimcommunity/manim``:" msgstr "" -#: ../../source/installation.rst:91 +#: ../../source/installation.rst:87 msgid "Interactive Jupyter notebooks for your browser" msgstr "" -#: ../../source/installation.rst:93 +#: ../../source/installation.rst:89 msgid "Manim ships with a built-in ``%%manim`` IPython magic command designed for the use within `Jupyter notebooks `__. Our interactive tutorial over at https://try.manim.community illustrates how Manim can be used from within a Jupyter notebook." msgstr "" -#: ../../source/installation.rst:98 +#: ../../source/installation.rst:94 msgid "The following pages explain how you can setup interactive environments like that yourself:" msgstr "" -#: ../../source/installation.rst:108 +#: ../../source/installation.rst:104 msgid "Editors" msgstr "" -#: ../../source/installation.rst:110 +#: ../../source/installation.rst:106 msgid "If you're using Visual Studio Code you can install an extension called *Manim Sideview* which provides automated rendering and an integrated preview of the animation inside the editor. The extension can be installed through the `marketplace of VS Code `__." msgstr "" -#: ../../source/installation.rst:117 +#: ../../source/installation.rst:113 msgid "Installation for developers" msgstr "" diff --git a/docs/i18n/gettext/installation/troubleshooting.pot b/docs/i18n/gettext/installation/troubleshooting.pot index c4857b3edb..8b13789179 100644 --- a/docs/i18n/gettext/installation/troubleshooting.pot +++ b/docs/i18n/gettext/installation/troubleshooting.pot @@ -1,305 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/installation/troubleshooting.rst:2 -msgid "Troubleshooting" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:5 -msgid "Version incompatibility" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:7 -msgid "Confusion and conflict between versions is by far the most common reason for installation failures. Some signs and errors resulting from this are as follows:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:11 -msgid "``There are no scenes in that module``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:12 -msgid "``ModuleNotFoundError: No module named 'manim'``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:13 -msgid "``ModuleNotFoundError: No module named 'manimlib'``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:14 -msgid "You followed any tutorial created before October 2020 (because the community edition did not exist before then)" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:15 -msgid "You cloned a repository on GitHub (installation of the community version for normal use does not require the cloning of any repository)" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:16 -msgid "Different import statements (explained below)" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:17 -msgid "You used documentation for multiple versions (such as the readme for 3b1b/manim and this documentation)" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:20 -msgid "As this is the documentation for the community version, we can only help with the installation of this library. If you would like to install other versions of manim, please refer to their documentation." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:25 -msgid "Identifying files written for a different version of manim" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:27 -msgid "There are some distinctive features of different versions of manim that can help in identifying what version of manim files are written for:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:31 -msgid "Feature" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:31 -msgid "ManimCE (this version)" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:31 -msgid "ManimGL" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:31 -msgid "ManimCairo" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:33 -msgid "Import statement" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:33 -msgid "``from manim import *``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:33 -msgid "``from manimlib import *``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:33 -msgid "``from manimlib.imports import *``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:37 -msgid "If you are a beginner, you should only attempt to run files written for your version. Files written for a different version of manim will generally not work without some modification." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:42 -msgid "Identifying the version you are running" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:44 -msgid "The community edition of manim should always state `Manim Community ` as its first line of any command you run." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:48 -msgid "Identifying and removing conflicting versions of manim" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:50 -msgid "Within the system or environment you are using to run manim, run the following command in the terminal:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:57 -msgid "The correct package for the community edition is simply ``manim``. If you do not see this package listed, please refer back to our installation guide to install it. If you see ``manimlib`` or ``manimce`` (actually an old version of the community edition), you should remove them with:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:68 -msgid "If you have cloned a repository from GitHub, you should either remove it or run manim outside that folder." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:72 -msgid "Other errors" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:75 -msgid "``pip install manim`` fails when installing manimpango?" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:76 -msgid "Most likely this means that pip was not able to use our pre-built wheels of ``manimpango``. Let us know (via our `Discord `_ or by opening a `new issue on GitHub `_) which architecture you would like to see supported, and we'll see what we can do about it." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:83 -msgid "To fix errors when installing ``manimpango``, you need to make sure you have all the necessary build requirements. Check out the detailed instructions given in `the BUILDING section `_ of the corresponding `GitHub repository `_." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:91 -msgid "(Windows) OSError: dlopen() failed to load a library: pango?" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:93 -msgid "This should be fixed in Manim's latest version, update using ``pip install --upgrade manim``." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:99 -msgid "Some letters are missing from Text/Tex output?" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:101 -msgid "If you have recently installed TeX you may need to build the fonts it uses. Which can be done by running:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:112 -msgid "Installation does not support converting PDF to SVG?" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:114 -msgid "First, make sure your ``dvisvgm`` version is at least 2.4:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:121 -msgid "If you do not know how to update ``dvisvgm``, please refer to your operating system's documentation." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:123 -msgid "Second, check whether your ``dvisvgm`` supports PostScript specials. This is needed to convert from PDF to SVG." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:131 -msgid "If the output to this command does **not** contain ``ps dvips PostScript specials``, this is a bad sign. In this case, run" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:139 -msgid "If the output does **not** contain ``--libgs=filename``, this means your ``dvisvgm`` does not currently support PostScript. You must get another binary." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:142 -msgid "If, however, ``--libgs=filename`` appears in the help, that means that your ``dvisvgm`` needs the Ghostscript library to support PostScript. Search for ``libgs.so`` (on Linux, probably in ``/usr/local/lib`` or ``/usr/lib``) or ``gsdll32.dll`` (on 32-bit Windows, probably in ``C:\\windows\\system32``) or ``gsdll64.dll`` (on 64-bit Windows, probably in ``c:\\windows\\system32`` -- yes 32) or ``libgsl.dylib`` (on Mac OS, probably in ``/usr/local/lib`` or ``/opt/local/lib``). Please look carefully, as the file might be located elsewhere, e.g. in the directory where Ghostscript is installed." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:151 -msgid "As soon as you have found the library, try (on Mac OS or Linux)" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:158 -msgid "or (on Windows)" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:166 -msgid "You should now see ``ps dvips PostScript specials`` in the output. Refer to your operating system's documentation to find out how you can set or export the environment variable ``LIBGS`` automatically whenever you open a shell." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:170 -msgid "As a last check, you can run" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:176 -msgid "while still having ``LIBGS`` set to the correct path, of course. If ``dvisvgm`` can find your Ghostscript installation, it will be shown in the output together with the version number." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:180 -msgid "If you do not have the necessary library on your system, please refer to your operating system's documentation to find out where you can get it and how you have to install it." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:184 -msgid "If you are unable to solve your problem, check out the `dvisvgm FAQ `_." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:187 -msgid "(Windows) ``Python is not recognized as an internal or external command, operable program or batch file.``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:189 -msgid "To fix this, you need to add the Python executable to your ``PATH`` environment variable. Follow the steps in `this StackExchange answer `__." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:193 -msgid "``choco install manimce`` failed" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:195 -msgid "If ``choco install manimce`` failed, it is likely being caused by Python not being added to your ``PATH`` variable properly. Try running the following commands in your terminal:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:199 -msgid "``py --version``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:200 -msgid "``python --version``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:201 -msgid "``py3 --version``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:202 -msgid "``python3 --version``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:204 -msgid "Minimally, ``py --version`` and ``python --version`` should return a version. If none of these commands are recognized, this means that Python was installed on your system, but was not added to PATH. See above for directions to add it to your PATH variable." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:209 -msgid "If any of these commands opens up the Windows store, this is likely interfering with the process. This is because Chocolatey runs a command that calls python or python3, and opening up the Windows store is not the expected behavior. See below to fix aliases." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:216 -msgid "(Windows) Fix Aliases" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:218 -msgid "Go to the Windows Settings." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:219 -msgid "Under Apps and Features, there are an application execution aliases." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:220 -msgid "Within this menu disable the alias(es) that is causing the issue (``python`` and/or ``python3``)." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:223 -msgid "``IndexError: List index out of range``" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:225 -msgid "Did you install LaTeX using MiKTeX? If so, open the MiKTeX console, install the ``cm-super`` package, then delete the ``media`` directory and try to render the scene again." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:230 -msgid "Config" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:232 -msgid "We've dropped the use of CONFIG in the Community Version :doc:`version 0.2.0<../changelog/0.2.0-changelog>`, released in January 2021. This means parameters that were previously specified in the CONFIG dictionary should now be passed directly into the constructor. Practically, this means that old constructions like:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:249 -msgid "should now be defined like:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:269 -msgid "For scenes, this is even easier:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:276 -msgid "becomes:" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:286 -msgid "A python command does not work" -msgstr "" - -#: ../../source/installation/troubleshooting.rst:288 -msgid "If a python command does not work, try adding ``python -m`` in front of it. For example, if ``pip install manim`` does not work, you can try ``python -m pip install manim``." -msgstr "" - -#: ../../source/installation/troubleshooting.rst:293 -msgid "undefined symbol" -msgstr "" - - diff --git a/docs/i18n/gettext/installation/versions.pot b/docs/i18n/gettext/installation/versions.pot index 067dbd674c..8b13789179 100644 --- a/docs/i18n/gettext/installation/versions.pot +++ b/docs/i18n/gettext/installation/versions.pot @@ -1,69 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/installation/versions.rst:2 -msgid "Differences between Manim Versions" -msgstr "" - -#: ../../source/installation/versions.rst:4 -msgid "While originally a single library, there are now three main versions of manim, each with their own advantages, disadvantages, and ideal use cases. It is important to understand these differences in order to select the best version for your use case and avoid confusion arising from version mismatches." -msgstr "" - -#: ../../source/installation/versions.rst:10 -msgid "A brief history of Manim" -msgstr "" - -#: ../../source/installation/versions.rst:12 -msgid "Manim was originally created by Grant Sanderson as a personal project and for use in his YouTube channel, `3Blue1Brown `_. As his channel gained popularity, many grew to like the style of his animations and wanted to use manim for their own projects. However, as manim was only intended for personal use, it was very difficult for other users to install and use it." -msgstr "" - -#: ../../source/installation/versions.rst:18 -msgid "In late 2019, Grant started working on faster OpenGL rendering in a new branch, known as the shaders branch. In mid-2020, a group of developers forked it into what is now the community edition; this is the version documented on this website. In early 2021, Grant merged the shaders branch back into master, making it the default branch in his repository. The old version is still available as the branch ``cairo-backend``." -msgstr "" - -#: ../../source/installation/versions.rst:25 -msgid "The three versions of Manim" -msgstr "" - -#: ../../source/installation/versions.rst:27 -msgid "There are currently three main versions of manim. They are as follows:" -msgstr "" - -#: ../../source/installation/versions.rst:29 -msgid "**ManimCE**: The community edition of manim. This is the version documented by this website, and is named `manim `_ on pip." -msgstr "" - -#: ../../source/installation/versions.rst:30 -msgid "`ManimGL `_: The current version of manim that is used by 3blue1brown. It supports OpenGL rendering and interactivity, and is named ``manimgl`` on pip. You can find documentation for it `here `_." -msgstr "" - -#: ../../source/installation/versions.rst:31 -msgid "`ManimCairo `_: The old version of manim originally used by 3blue1brown. It is not available on pip." -msgstr "" - -#: ../../source/installation/versions.rst:34 -msgid "Which version to use" -msgstr "" - -#: ../../source/installation/versions.rst:35 -msgid "We recommend using the community edition for most purposes, as it has been developed to be more stable, better tested, quicker to respond to community contributions, and easier for beginners to use. It also has partial experimental OpenGL support and should have full support shortly (as of April 2021)." -msgstr "" - -#: ../../source/installation/versions.rst:39 -msgid "If you would like to use a version with full OpenGL support or render recent 3Blue1Brown videos (2020 onwards), you should use ManimGL." -msgstr "" - -#: ../../source/installation/versions.rst:41 -msgid "If you would like to render old 3Blue1Brown projects (2019 and before), you should use ManimCairo." -msgstr "" - -#: ../../source/installation/versions.rst:44 -msgid "Notes on installation, documentation, and use" -msgstr "" - - diff --git a/docs/i18n/gettext/internals.pot b/docs/i18n/gettext/internals.pot index e3fe41bd9a..8b13789179 100644 --- a/docs/i18n/gettext/internals.pot +++ b/docs/i18n/gettext/internals.pot @@ -1,17 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/internals.rst:2 -msgid "Internal structure" -msgstr "" - -#: ../../source/internals.rst:4 -msgid "Efforts to document the internal structure of Manim is ongoing on our `wiki `_." -msgstr "" - - diff --git a/docs/i18n/gettext/reference.pot b/docs/i18n/gettext/reference.pot index 16adfb4682..acbf07c446 100644 --- a/docs/i18n/gettext/reference.pot +++ b/docs/i18n/gettext/reference.pot @@ -11,7 +11,7 @@ msgid "Reference Manual" msgstr "" #: ../../source/reference.rst:4 -msgid "This reference manual details modules, functions, and variables included in Manim, describing what they are and what they do. For learning how to use Manim, see :doc:`tutorials`. For a list of changes since the last release, see the :doc:`changelog`." +msgid "This reference manual details modules, functions, and variables included in Manim, describing what they are and what they do. For learning how to use Manim, see :doc:`tutorials/index`. For a list of changes since the last release, see the :doc:`changelog`." msgstr "" #: ../../source/reference.rst:9 @@ -26,15 +26,15 @@ msgstr "" msgid "Animations" msgstr "" -#: ../../source/reference.rst:37 +#: ../../source/reference.rst:38 msgid "Cameras" msgstr "" -#: ../../source/reference.rst:49 +#: ../../source/reference.rst:50 msgid "Mobjects" msgstr "" -#: ../../source/reference.rst:87 +#: ../../source/reference.rst:88 msgid "Scenes" msgstr "" diff --git a/docs/i18n/gettext/reference/manim._config.logger_utils.pot b/docs/i18n/gettext/reference/manim._config.logger_utils.pot index 85dfc0a6ad..8e4b7536c7 100644 --- a/docs/i18n/gettext/reference/manim._config.logger_utils.pot +++ b/docs/i18n/gettext/reference/manim._config.logger_utils.pot @@ -50,7 +50,6 @@ msgid "A parser containing any .cfg files in use." msgstr "" #: ../../../manim/_config/logger_utils.py:docstring of manim._config.logger_utils.make_logger:5 -#: ../../../manim/_config/logger_utils.py:docstring of manim._config.logger_utils.set_file_logger:7 msgid "The verbosity level of the logger." msgstr "" @@ -70,7 +69,6 @@ msgid "Return type" msgstr "" #: ../../../manim/_config/logger_utils.py:docstring of manim._config.logger_utils.make_logger:16 -#: ../../../manim/_config/logger_utils.py:docstring of manim._config.logger_utils.set_file_logger:11 msgid "Notes" msgstr "" @@ -94,8 +92,4 @@ msgstr "" msgid "The path to the file is built using ``config.log_dir``." msgstr "" -#: ../../../manim/_config/logger_utils.py:docstring of manim._config.logger_utils.set_file_logger:5 -msgid "The global config, used to determine the log file path." -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim._config.utils.ManimConfig.pot b/docs/i18n/gettext/reference/manim._config.utils.ManimConfig.pot index 093944a0aa..c5d7878d63 100644 --- a/docs/i18n/gettext/reference/manim._config.utils.ManimConfig.pot +++ b/docs/i18n/gettext/reference/manim._config.utils.ManimConfig.pot @@ -54,50 +54,54 @@ msgid "Examples" msgstr "" #: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:25 +msgid "We use a copy of the global configuration object in the following examples for the sake of demonstration; you can skip these lines and just import ``config`` directly if you actually want to modify the configuration:" +msgstr "" + +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:35 msgid "Each config option allows for dict syntax and attribute syntax. For example, the following two lines are equivalent," msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:34 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:44 msgid "The former is preferred; the latter is provided mostly for backwards compatibility." msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:37 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:47 msgid "The config options are designed to keep internal consistency. For example, setting ``frame_y_radius`` will affect ``frame_height``:" msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:48 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:58 msgid "There are many ways of interacting with config options. Take for example the config option ``background_color``. There are three ways to change it: via a config file, via CLI flags, or programmatically." msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:52 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:62 msgid "To set the background color via a config file, save the following ``manim.cfg`` file with the following contents." msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:60 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:70 msgid "In order to have this ``.cfg`` file apply to a manim scene, it needs to be placed in the same directory as the script," msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:69 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:79 msgid "Now, when the user executes" msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:75 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:85 msgid "the background of the scene will be set to ``WHITE``. This applies regardless of where the manim command is invoked from." msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:78 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:88 msgid "Command line arguments override ``.cfg`` files. In the previous example, executing" msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:85 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:95 msgid "will set the background color to BLUE, regardless of the contents of ``manim.cfg``." msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:88 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:98 msgid "Finally, any programmatic changes made within the scene script itself will override the command line arguments. For example, if ``scene.py`` contains the following" msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:101 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig:111 msgid "the background color will be set to RED, regardless of the contents of ``manim.cfg`` or the CLI arguments used when invoking manim." msgstr "" @@ -196,6 +200,11 @@ msgstr "" msgid "Enable wireframe debugging mode in opengl." msgstr "" +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.aspect_ratio:1::1 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.ffmpeg_executable:1 +msgid "Manually specify the path to the ffmpeg executable" +msgstr "" + #: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.aspect_ratio:1::1 #: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.ffmpeg_loglevel:1 msgid "Verbosity level of ffmpeg (no flag)." @@ -348,7 +357,7 @@ msgstr "" #: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.aspect_ratio:1::1 #: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.renderer:1 -msgid "\"cairo\", \"opengl\", \"webgl" +msgid "\"cairo\", \"opengl" msgstr "" #: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.aspect_ratio:1::1 @@ -435,11 +444,6 @@ msgstr "" msgid "Use shaders for OpenGLVMobject stroke which are compatible with transformation matrices." msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.aspect_ratio:1::1 -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.use_webgl_renderer:1 -msgid "Whether or not to use WebGL renderer." -msgstr "" - #: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.aspect_ratio:1::1 #: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.verbosity:1 msgid "Logger verbosity; \"DEBUG\", \"INFO\", \"WARNING\", \"ERROR\", or \"CRITICAL\" (-v)." @@ -449,11 +453,6 @@ msgstr "" msgid "Directory to place videos (no flag)." msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.aspect_ratio:1::1 -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.webgl_renderer_path:1 -msgid "Path to WebGL renderer." -msgstr "" - #: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.aspect_ratio:1::1 #: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.window_monitor:1 msgid "The monitor on which the scene will be rendered" @@ -597,23 +596,23 @@ msgstr "" msgid "The value of ``config.tex_dir`` is ``'{media_dir}/Tex'`` by default, i.e. it is a subfolder of wherever ``config.media_dir`` is located. In order to get the *actual* directory, use :meth:`~ManimConfig.get_dir`." msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.get_dir:40 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.get_dir:41 msgid "Resolving directories is done in a lazy way, at the last possible moment, to reflect any changes in other config options:" msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.get_dir:49 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.get_dir:50 msgid "Some directories depend on information that is not available to :class:`ManimConfig`. For example, the default value of `video_dir` includes the name of the input file and the video quality (e.g. 480p15). This informamtion has to be supplied via ``kwargs``:" msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.get_dir:64 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.get_dir:65 msgid "Note the quality does not need to be passed as keyword argument since :class:`ManimConfig` does store information about quality." msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.get_dir:67 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.get_dir:68 msgid "Directories may be recursively defined. For example, the config option ``partial_movie_dir`` depends on ``video_dir``, which in turn depends on ``media_dir``:" msgstr "" -#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.get_dir:83 +#: ../../../manim/_config/utils.py:docstring of manim._config.utils.ManimConfig.get_dir:84 msgid "Standard f-string syntax is used. Arbitrary names can be used when defining directories, as long as the corresponding values are passed to :meth:`ManimConfig.get_dir` via ``kwargs``." msgstr "" diff --git a/docs/i18n/gettext/reference/manim._config.utils.pot b/docs/i18n/gettext/reference/manim._config.utils.pot index 02c1066d28..97c2d9774a 100644 --- a/docs/i18n/gettext/reference/manim._config.utils.pot +++ b/docs/i18n/gettext/reference/manim._config.utils.pot @@ -19,7 +19,7 @@ msgid "The main class exported by this module is :class:`ManimConfig`. This cla msgstr "" #: ../../../manim/_config/utils.py:docstring of manim._config.utils:9 -msgid "See :doc:`/tutorials/configuration` for an introduction to Manim's configuration system." +msgid "See :doc:`/guides/configuration` for an introduction to Manim's configuration system." msgstr "" #: ../../source/reference/manim._config.utils.rst:15 diff --git a/docs/i18n/gettext/reference/manim.animation.animation.Animation.pot b/docs/i18n/gettext/reference/manim.animation.animation.Animation.pot index 1590490bb5..ebd350ca77 100644 --- a/docs/i18n/gettext/reference/manim.animation.animation.Animation.pot +++ b/docs/i18n/gettext/reference/manim.animation.animation.Animation.pot @@ -70,23 +70,43 @@ msgstr "" msgid "For example ``rate_func(0.5)`` is the proportion of the animation that is done after half of the animations run time." msgstr "" -#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:17 -msgid "The name of the animation. This gets displayed while rendering the animation. Defaults to ()." +#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:21 +msgid "reverse_rate_function" msgstr "" #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:19 +msgid "Reverses the rate function of the animation. Setting ``reverse_rate_function`` does not have any effect on ``remover`` or ``introducer``. These need to be set explicitly if an introducer-animation should be turned into a remover one and vice versa." +msgstr "" + +#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:24 +msgid "name" +msgstr "" + +#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:24 +msgid "The name of the animation. This gets displayed while rendering the animation. Defaults to ()." +msgstr "" + +#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:26 +msgid "remover" +msgstr "" + +#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:27 msgid "Whether the given mobject should be removed from the scene after this animation." msgstr "" -#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:20 +#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:30 +msgid "suspend_mobject_updating" +msgstr "" + +#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:29 msgid "Whether updaters of the mobject should be suspended during the animation." msgstr "" -#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:24 +#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:34 msgid "In the current implementation of this class, the specified rate function is applied within :meth:`.Animation.interpolate_mobject` call as part of the call to :meth:`.Animation.interpolate_submobject`. For subclasses of :class:`.Animation` that are implemented by overriding :meth:`interpolate_mobject`, the rate function has to be applied manually (e.g., by passing ``self.rate_func(alpha)`` instead of just ``alpha``)." msgstr "" -#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:33 +#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation:43 msgid "Examples" msgstr "" @@ -149,9 +169,12 @@ msgstr "" msgid "Interpolates the mobject of the :class:`Animation` based on alpha value." msgstr "" -#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.begin:1::1 #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.begin:1::1 #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.is_introducer:1 +msgid "Test if a the animation is an introducer." +msgstr "" + +#: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.begin:1::1 #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.is_remover:1 msgid "Test if a the animation is a remover." msgstr "" @@ -278,6 +301,9 @@ msgid "A float between 0 and 1 expressing the ratio to which the animation is co msgstr "" #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.is_introducer:3 +msgid "``True`` if the animation is an introducer, ``False`` otherwise." +msgstr "" + #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.is_remover:3 msgid "``True`` if the animation is a remover, ``False`` otherwise." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.composition.AnimationGroup.pot b/docs/i18n/gettext/reference/manim.animation.composition.AnimationGroup.pot index 7aac5c939a..059e7e9e22 100644 --- a/docs/i18n/gettext/reference/manim.animation.composition.AnimationGroup.pot +++ b/docs/i18n/gettext/reference/manim.animation.composition.AnimationGroup.pot @@ -56,14 +56,10 @@ msgstr "" msgid "Updates things like starting_mobject, and (for Transforms) target_mobject." msgstr "" -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup:0 -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.clean_up_from_scene:0 -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.interpolate:0 -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.update_mobjects:0 -msgid "Parameters" +#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.begin:3 +msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." msgstr "" -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup:0 #: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.begin:0 #: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.build_animations_with_timings:0 #: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.clean_up_from_scene:0 @@ -74,14 +70,16 @@ msgstr "" msgid "Return type" msgstr "" -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.begin:3 -msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." -msgstr "" - #: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.clean_up_from_scene:3 msgid "This includes to :meth:`~.Scene.remove` the Animation's :class:`~.Mobject` if the animation is a remover." msgstr "" +#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.clean_up_from_scene:0 +#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.interpolate:0 +#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.update_mobjects:0 +msgid "Parameters" +msgstr "" + #: ../../../manim/animation/composition.py:docstring of manim.animation.composition.AnimationGroup.clean_up_from_scene:6 msgid "The scene the animation should be cleaned up from." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.composition.LaggedStart.pot b/docs/i18n/gettext/reference/manim.animation.composition.LaggedStart.pot index f4f2993b9a..3f5aa193b3 100644 --- a/docs/i18n/gettext/reference/manim.animation.composition.LaggedStart.pot +++ b/docs/i18n/gettext/reference/manim.animation.composition.LaggedStart.pot @@ -18,8 +18,4 @@ msgstr "" msgid "Bases: :py:class:`manim.animation.composition.AnimationGroup`" msgstr "" -#: ../../source/reference/manim.animation.composition.LaggedStart.rst:14 -msgid "Methods" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.composition.LaggedStartMap.pot b/docs/i18n/gettext/reference/manim.animation.composition.LaggedStartMap.pot index 15c9a872b8..885a4730de 100644 --- a/docs/i18n/gettext/reference/manim.animation.composition.LaggedStartMap.pot +++ b/docs/i18n/gettext/reference/manim.animation.composition.LaggedStartMap.pot @@ -18,12 +18,4 @@ msgstr "" msgid "Bases: :py:class:`manim.animation.composition.LaggedStart`" msgstr "" -#: ../../source/reference/manim.animation.composition.LaggedStartMap.rst:14 -msgid "Methods" -msgstr "" - -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.LaggedStartMap:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.composition.Succession.pot b/docs/i18n/gettext/reference/manim.animation.composition.Succession.pot index a9d1e954f8..0b9c73266d 100644 --- a/docs/i18n/gettext/reference/manim.animation.composition.Succession.pot +++ b/docs/i18n/gettext/reference/manim.animation.composition.Succession.pot @@ -41,13 +41,10 @@ msgstr "" msgid "Updates things like starting_mobject, and (for Transforms) target_mobject." msgstr "" -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession:0 -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.interpolate:0 -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.update_mobjects:0 -msgid "Parameters" +#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.begin:3 +msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." msgstr "" -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession:0 #: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.begin:0 #: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.finish:0 #: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.interpolate:0 @@ -55,10 +52,6 @@ msgstr "" msgid "Return type" msgstr "" -#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.begin:3 -msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." -msgstr "" - #: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.finish:3 msgid "This method gets called when the animation is over." msgstr "" @@ -67,6 +60,11 @@ msgstr "" msgid "This method gets called for every frame during an animation." msgstr "" +#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.interpolate:0 +#: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.update_mobjects:0 +msgid "Parameters" +msgstr "" + #: ../../../manim/animation/composition.py:docstring of manim.animation.composition.Succession.interpolate:5 msgid "The relative time to set the animation to, 0 meaning the start, 1 meaning the end." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.creation.AddTextLetterByLetter.pot b/docs/i18n/gettext/reference/manim.animation.creation.AddTextLetterByLetter.pot index 3414c38344..21768a4061 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.AddTextLetterByLetter.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.AddTextLetterByLetter.pot @@ -34,8 +34,4 @@ msgstr "" msgid "This is currently only possible for class:`~.Text` and not for class:`~.MathTex`" msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.AddTextLetterByLetter:0 -msgid "Return type" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.creation.AddTextWordByWord.pot b/docs/i18n/gettext/reference/manim.animation.creation.AddTextWordByWord.pot index 13ff1286af..a37c706b12 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.AddTextWordByWord.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.AddTextWordByWord.pot @@ -22,12 +22,4 @@ msgstr "" msgid "Show a :class:`~.Text` word by word on the scene. Note: currently broken." msgstr "" -#: ../../source/reference/manim.animation.creation.AddTextWordByWord.rst:14 -msgid "Methods" -msgstr "" - -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.AddTextWordByWord:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.creation.Create.pot b/docs/i18n/gettext/reference/manim.animation.creation.Create.pot index 9fe7cffa91..f8f9b51069 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.Create.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.Create.pot @@ -38,10 +38,6 @@ msgstr "" msgid "If ``mobject`` is not an instance of :class:`~.VMobject`." msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Create:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Create:9 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.creation.DrawBorderThenFill.pot b/docs/i18n/gettext/reference/manim.animation.creation.DrawBorderThenFill.pot index 5e8dd83cfd..cd9c033b3a 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.DrawBorderThenFill.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.DrawBorderThenFill.pot @@ -40,20 +40,15 @@ msgstr "" msgid "Get all mobjects involved in the animation." msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.DrawBorderThenFill:0 -msgid "Parameters" +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.DrawBorderThenFill.begin:3 +msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.DrawBorderThenFill:0 #: ../../../manim/animation/creation.py:docstring of manim.animation.creation.DrawBorderThenFill.begin:0 #: ../../../manim/animation/creation.py:docstring of manim.animation.creation.DrawBorderThenFill.get_all_mobjects:0 msgid "Return type" msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.DrawBorderThenFill.begin:3 -msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." -msgstr "" - #: ../../../manim/animation/creation.py:docstring of manim.animation.creation.DrawBorderThenFill.get_all_mobjects:3 msgid "Ordering must match the ordering of arguments to interpolate_submobject" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.creation.ShowIncreasingSubsets.pot b/docs/i18n/gettext/reference/manim.animation.creation.ShowIncreasingSubsets.pot index bbcf77d718..0cb0e993c6 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.ShowIncreasingSubsets.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.ShowIncreasingSubsets.pot @@ -35,14 +35,12 @@ msgstr "" msgid "Interpolates the mobject of the :class:`Animation` based on alpha value." msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.ShowIncreasingSubsets:0 #: ../../../manim/animation/creation.py:docstring of manim.animation.creation.ShowIncreasingSubsets.interpolate_mobject:0 msgid "Parameters" msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.ShowIncreasingSubsets:0 -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.ShowIncreasingSubsets.interpolate_mobject:0 -msgid "Return type" +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.ShowIncreasingSubsets.interpolate_mobject:3 +msgid "A float between 0 and 1 expressing the ratio to which the animation is completed. For example, alpha-values of 0, 0.5, and 1 correspond to the animation being completed 0%, 50%, and 100%, respectively." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.creation.ShowPartial.pot b/docs/i18n/gettext/reference/manim.animation.creation.ShowPartial.pot index 2cb7468858..6abed1c161 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.ShowPartial.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.ShowPartial.pot @@ -30,10 +30,6 @@ msgstr "" msgid "If ``mobject`` is not an instance of :class:`~.VMobject`." msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.ShowPartial:0 -msgid "Parameters" -msgstr "" - #: ../../source/reference/manim.animation.creation.ShowPartial.rst:14 msgid "Methods" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.creation.ShowSubmobjectsOneByOne.pot b/docs/i18n/gettext/reference/manim.animation.creation.ShowSubmobjectsOneByOne.pot index 2eeaf09a24..f8f58f258a 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.ShowSubmobjectsOneByOne.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.ShowSubmobjectsOneByOne.pot @@ -26,8 +26,4 @@ msgstr "" msgid "Methods" msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.ShowSubmobjectsOneByOne:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.creation.SpiralIn.pot b/docs/i18n/gettext/reference/manim.animation.creation.SpiralIn.pot new file mode 100644 index 0000000000..dad241e4f7 --- /dev/null +++ b/docs/i18n/gettext/reference/manim.animation.creation.SpiralIn.pot @@ -0,0 +1,59 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/reference/manim.animation.creation.SpiralIn.rst:2 +msgid "SpiralIn" +msgstr "" + +#: ../../source/reference/manim.animation.creation.SpiralIn.rst:4 +msgid "Qualified name: ``manim.animation.creation.SpiralIn``" +msgstr "" + +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn:1 +msgid "Bases: :py:class:`manim.animation.animation.Animation`" +msgstr "" + +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn:1 +msgid "Create the Mobject with sub-Mobjects flying in on spiral trajectories." +msgstr "" + +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn:0 +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn.interpolate_mobject:0 +msgid "Parameters" +msgstr "" + +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn:3 +msgid "The Mobject on which to be operated." +msgstr "" + +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn:4 +msgid "The factor used for scaling the effect." +msgstr "" + +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn:5 +msgid "Fractional duration of initial fade-in of sub-Mobjects as they fly inward." +msgstr "" + +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn:8 +msgid "Examples" +msgstr "" + +#: ../../source/reference/manim.animation.creation.SpiralIn.rst:14 +msgid "Methods" +msgstr "" + +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn.interpolate_mobject:1::1 +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn.interpolate_mobject:1 +msgid "Interpolates the mobject of the :class:`Animation` based on alpha value." +msgstr "" + +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.SpiralIn.interpolate_mobject:3 +msgid "A float between 0 and 1 expressing the ratio to which the animation is completed. For example, alpha-values of 0, 0.5, and 1 correspond to the animation being completed 0%, 50%, and 100%, respectively." +msgstr "" + + diff --git a/docs/i18n/gettext/reference/manim.animation.creation.Uncreate.pot b/docs/i18n/gettext/reference/manim.animation.creation.Uncreate.pot index 04cd9b9084..5ce7effd57 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.Uncreate.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.Uncreate.pot @@ -26,12 +26,4 @@ msgstr "" msgid "Examples" msgstr "" -#: ../../source/reference/manim.animation.creation.Uncreate.rst:14 -msgid "Methods" -msgstr "" - -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Uncreate:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.creation.Unwrite.pot b/docs/i18n/gettext/reference/manim.animation.creation.Unwrite.pot index 2cf6060fd8..553eae3646 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.Unwrite.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.Unwrite.pot @@ -30,10 +30,6 @@ msgstr "" msgid "Set True to have the animation start erasing from the last submobject first." msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Unwrite:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Unwrite:7 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.creation.Write.pot b/docs/i18n/gettext/reference/manim.animation.creation.Write.pot index 4a179e9e39..62551c553a 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.Write.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.Write.pot @@ -40,18 +40,13 @@ msgstr "" msgid "Finish the animation." msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Write:0 -msgid "Parameters" +#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Write.begin:3 +msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Write:0 #: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Write.begin:0 #: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Write.finish:0 msgid "Return type" msgstr "" -#: ../../../manim/animation/creation.py:docstring of manim.animation.creation.Write.begin:3 -msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.creation.pot b/docs/i18n/gettext/reference/manim.animation.creation.pot index a50531d589..490ed23815 100644 --- a/docs/i18n/gettext/reference/manim.animation.creation.pot +++ b/docs/i18n/gettext/reference/manim.animation.creation.pot @@ -18,39 +18,43 @@ msgstr "" msgid "Classes" msgstr "" -#: ../../source/reference/manim.animation.creation.rst:38::1 +#: ../../source/reference/manim.animation.creation.rst:40::1 msgid "Show a :class:`~.Text` letter by letter on the scene." msgstr "" -#: ../../source/reference/manim.animation.creation.rst:38::1 +#: ../../source/reference/manim.animation.creation.rst:40::1 msgid "Show a :class:`~.Text` word by word on the scene." msgstr "" -#: ../../source/reference/manim.animation.creation.rst:38::1 +#: ../../source/reference/manim.animation.creation.rst:40::1 msgid "Incrementally show a VMobject." msgstr "" -#: ../../source/reference/manim.animation.creation.rst:38::1 +#: ../../source/reference/manim.animation.creation.rst:40::1 msgid "Draw the border first and then show the fill." msgstr "" -#: ../../source/reference/manim.animation.creation.rst:38::1 +#: ../../source/reference/manim.animation.creation.rst:40::1 msgid "Show one submobject at a time, leaving all previous ones displayed on screen." msgstr "" -#: ../../source/reference/manim.animation.creation.rst:38::1 +#: ../../source/reference/manim.animation.creation.rst:40::1 msgid "Abstract class for Animations that show the VMobject partially." msgstr "" -#: ../../source/reference/manim.animation.creation.rst:38::1 +#: ../../source/reference/manim.animation.creation.rst:40::1 msgid "Show one submobject at a time, removing all previously displayed ones from screen." msgstr "" -#: ../../source/reference/manim.animation.creation.rst:38::1 +#: ../../source/reference/manim.animation.creation.rst:40::1 +msgid "Create the Mobject with sub-Mobjects flying in on spiral trajectories." +msgstr "" + +#: ../../source/reference/manim.animation.creation.rst:40::1 msgid "Like :class:`Create` but in reverse." msgstr "" -#: ../../source/reference/manim.animation.creation.rst:38::1 +#: ../../source/reference/manim.animation.creation.rst:40::1 msgid "Simulate erasing by hand a :class:`~.Text` or a :class:`~.VMobject`." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.fading.FadeIn.pot b/docs/i18n/gettext/reference/manim.animation.fading.FadeIn.pot index e906160605..dca41945e4 100644 --- a/docs/i18n/gettext/reference/manim.animation.fading.FadeIn.pot +++ b/docs/i18n/gettext/reference/manim.animation.fading.FadeIn.pot @@ -42,10 +42,6 @@ msgstr "" msgid "The factor by which the mobject is scaled initially before being rescaling to its original size while being faded in." msgstr "" -#: ../../../manim/animation/fading.py:docstring of manim.animation.fading.FadeIn:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/fading.py:docstring of manim.animation.fading.FadeIn:11 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.fading.FadeOut.pot b/docs/i18n/gettext/reference/manim.animation.fading.FadeOut.pot index 61f74f992b..928f9ff500 100644 --- a/docs/i18n/gettext/reference/manim.animation.fading.FadeOut.pot +++ b/docs/i18n/gettext/reference/manim.animation.fading.FadeOut.pot @@ -43,11 +43,6 @@ msgstr "" msgid "The factor by which the mobject is scaled while being faded out." msgstr "" -#: ../../../manim/animation/fading.py:docstring of manim.animation.fading.FadeOut:0 -#: ../../../manim/animation/fading.py:docstring of manim.animation.fading.FadeOut.clean_up_from_scene:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/fading.py:docstring of manim.animation.fading.FadeOut:10 msgid "Examples" msgstr "" @@ -69,4 +64,8 @@ msgstr "" msgid "This includes to :meth:`~.Scene.remove` the Animation's :class:`~.Mobject` if the animation is a remover." msgstr "" +#: ../../../manim/animation/fading.py:docstring of manim.animation.fading.FadeOut.clean_up_from_scene:6 +msgid "The scene the animation should be cleaned up from." +msgstr "" + diff --git a/docs/i18n/gettext/reference/manim.animation.growing.GrowArrow.pot b/docs/i18n/gettext/reference/manim.animation.growing.GrowArrow.pot index 7ed156b655..b4fe1544f5 100644 --- a/docs/i18n/gettext/reference/manim.animation.growing.GrowArrow.pot +++ b/docs/i18n/gettext/reference/manim.animation.growing.GrowArrow.pot @@ -34,10 +34,6 @@ msgstr "" msgid "Initial color of the arrow before growing to its full size. Leave empty to match arrow's color." msgstr "" -#: ../../../manim/animation/growing.py:docstring of manim.animation.growing.GrowArrow:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/growing.py:docstring of manim.animation.growing.GrowArrow:7 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.growing.GrowFromCenter.pot b/docs/i18n/gettext/reference/manim.animation.growing.GrowFromCenter.pot index c0e21d1181..07bb84a79b 100644 --- a/docs/i18n/gettext/reference/manim.animation.growing.GrowFromCenter.pot +++ b/docs/i18n/gettext/reference/manim.animation.growing.GrowFromCenter.pot @@ -34,10 +34,6 @@ msgstr "" msgid "Initial color of the mobject before growing to its full size. Leave empty to match mobject's color." msgstr "" -#: ../../../manim/animation/growing.py:docstring of manim.animation.growing.GrowFromCenter:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/growing.py:docstring of manim.animation.growing.GrowFromCenter:7 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.growing.GrowFromEdge.pot b/docs/i18n/gettext/reference/manim.animation.growing.GrowFromEdge.pot index 640811c03b..3b5d7def14 100644 --- a/docs/i18n/gettext/reference/manim.animation.growing.GrowFromEdge.pot +++ b/docs/i18n/gettext/reference/manim.animation.growing.GrowFromEdge.pot @@ -38,10 +38,6 @@ msgstr "" msgid "Initial color of the mobject before growing to its full size. Leave empty to match mobject's color." msgstr "" -#: ../../../manim/animation/growing.py:docstring of manim.animation.growing.GrowFromEdge:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/growing.py:docstring of manim.animation.growing.GrowFromEdge:8 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.growing.GrowFromPoint.pot b/docs/i18n/gettext/reference/manim.animation.growing.GrowFromPoint.pot index 4aec39fc18..6d0672b1e0 100644 --- a/docs/i18n/gettext/reference/manim.animation.growing.GrowFromPoint.pot +++ b/docs/i18n/gettext/reference/manim.animation.growing.GrowFromPoint.pot @@ -38,10 +38,6 @@ msgstr "" msgid "Initial color of the mobject before growing to its full size. Leave empty to match mobject's color." msgstr "" -#: ../../../manim/animation/growing.py:docstring of manim.animation.growing.GrowFromPoint:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/growing.py:docstring of manim.animation.growing.GrowFromPoint:8 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.growing.SpinInFromNothing.pot b/docs/i18n/gettext/reference/manim.animation.growing.SpinInFromNothing.pot index 718ff0b5b1..b910e735ca 100644 --- a/docs/i18n/gettext/reference/manim.animation.growing.SpinInFromNothing.pot +++ b/docs/i18n/gettext/reference/manim.animation.growing.SpinInFromNothing.pot @@ -38,10 +38,6 @@ msgstr "" msgid "Initial color of the mobject before growing to its full size. Leave empty to match mobject's color." msgstr "" -#: ../../../manim/animation/growing.py:docstring of manim.animation.growing.SpinInFromNothing:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/growing.py:docstring of manim.animation.growing.SpinInFromNothing:9 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.indication.ApplyWave.pot b/docs/i18n/gettext/reference/manim.animation.indication.ApplyWave.pot index d5ae851381..e1822d9d93 100644 --- a/docs/i18n/gettext/reference/manim.animation.indication.ApplyWave.pot +++ b/docs/i18n/gettext/reference/manim.animation.indication.ApplyWave.pot @@ -54,16 +54,8 @@ msgstr "" msgid "The duration of the animation." msgstr "" -#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.ApplyWave:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/indication.py:docstring of manim.animation.indication.ApplyWave:12 msgid "Examples" msgstr "" -#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.ApplyWave:31 -msgid "Homotopy is a function from (x, y, z, t) to (x', y', z')" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.indication.Flash.pot b/docs/i18n/gettext/reference/manim.animation.indication.Flash.pot index 24eb2b599b..3467a3a8de 100644 --- a/docs/i18n/gettext/reference/manim.animation.indication.Flash.pot +++ b/docs/i18n/gettext/reference/manim.animation.indication.Flash.pot @@ -62,10 +62,6 @@ msgstr "" msgid "Additional arguments to be passed to the :class:`~.Succession` constructor" msgstr "" -#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.Flash:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/indication.py:docstring of manim.animation.indication.Flash:15 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.indication.FocusOn.pot b/docs/i18n/gettext/reference/manim.animation.indication.FocusOn.pot index 040e38d293..482c7f82b1 100644 --- a/docs/i18n/gettext/reference/manim.animation.indication.FocusOn.pot +++ b/docs/i18n/gettext/reference/manim.animation.indication.FocusOn.pot @@ -46,10 +46,6 @@ msgstr "" msgid "Additional arguments to be passed to the :class:`~.Succession` constructor" msgstr "" -#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.FocusOn:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/indication.py:docstring of manim.animation.indication.FocusOn:11 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.indication.Indicate.pot b/docs/i18n/gettext/reference/manim.animation.indication.Indicate.pot index c90485d5e9..136caba7f9 100644 --- a/docs/i18n/gettext/reference/manim.animation.indication.Indicate.pot +++ b/docs/i18n/gettext/reference/manim.animation.indication.Indicate.pot @@ -46,10 +46,6 @@ msgstr "" msgid "Additional arguments to be passed to the :class:`~.Succession` constructor" msgstr "" -#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.Indicate:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/indication.py:docstring of manim.animation.indication.Indicate:11 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.indication.ShowCreationThenFadeOut.pot b/docs/i18n/gettext/reference/manim.animation.indication.ShowCreationThenFadeOut.pot index 82b3ca4f6f..aff5c1edea 100644 --- a/docs/i18n/gettext/reference/manim.animation.indication.ShowCreationThenFadeOut.pot +++ b/docs/i18n/gettext/reference/manim.animation.indication.ShowCreationThenFadeOut.pot @@ -19,19 +19,7 @@ msgid "Bases: :py:class:`manim.animation.composition.Succession`" msgstr "" #: ../../../manim/animation/indication.py:docstring of manim.animation.indication.ShowCreationThenFadeOut:1 -msgid "Deprecated" -msgstr "" - -#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.ShowCreationThenFadeOut:4 -msgid "The class ShowCreationThenFadeOut has been deprecated since v0.15.0 and is expected to be removed after v0.16.0. Use Create then FadeOut to achieve this effect." -msgstr "" - -#: ../../source/reference/manim.animation.indication.ShowCreationThenFadeOut.rst:14 -msgid "Methods" -msgstr "" - -#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.ShowCreationThenFadeOut:0 -msgid "Parameters" +msgid "Deprecated The class ShowCreationThenFadeOut has been deprecated since v0.15.0 and is expected to be removed after v0.16.0. Use Create then FadeOut to achieve this effect." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.indication.ShowPassingFlash.pot b/docs/i18n/gettext/reference/manim.animation.indication.ShowPassingFlash.pot index 02acdc6b96..0cad303763 100644 --- a/docs/i18n/gettext/reference/manim.animation.indication.ShowPassingFlash.pot +++ b/docs/i18n/gettext/reference/manim.animation.indication.ShowPassingFlash.pot @@ -35,11 +35,6 @@ msgstr "" msgid "The length of the sliver relative to the length of the stroke." msgstr "" -#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.ShowPassingFlash:0 -#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.ShowPassingFlash.clean_up_from_scene:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/indication.py:docstring of manim.animation.indication.ShowPassingFlash:7 msgid "Examples" msgstr "" @@ -57,4 +52,8 @@ msgstr "" msgid "This includes to :meth:`~.Scene.remove` the Animation's :class:`~.Mobject` if the animation is a remover." msgstr "" +#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.ShowPassingFlash.clean_up_from_scene:6 +msgid "The scene the animation should be cleaned up from." +msgstr "" + diff --git a/docs/i18n/gettext/reference/manim.animation.indication.Wiggle.pot b/docs/i18n/gettext/reference/manim.animation.indication.Wiggle.pot index 3cc8218912..a1e7b8201d 100644 --- a/docs/i18n/gettext/reference/manim.animation.indication.Wiggle.pot +++ b/docs/i18n/gettext/reference/manim.animation.indication.Wiggle.pot @@ -54,10 +54,6 @@ msgstr "" msgid "The duration of the animation" msgstr "" -#: ../../../manim/animation/indication.py:docstring of manim.animation.indication.Wiggle:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/indication.py:docstring of manim.animation.indication.Wiggle:13 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.indication.pot b/docs/i18n/gettext/reference/manim.animation.indication.pot index 445048431b..5724a18b18 100644 --- a/docs/i18n/gettext/reference/manim.animation.indication.pot +++ b/docs/i18n/gettext/reference/manim.animation.indication.pot @@ -42,6 +42,10 @@ msgstr "" msgid "Indicate a Mobject by temporarily resizing and recoloring it." msgstr "" +#: ../../source/reference/manim.animation.indication.rst:36::1 +msgid "Deprecated" +msgstr "" + #: ../../source/reference/manim.animation.indication.rst:36::1 msgid "Show only a sliver of the VMobject each frame." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.movement.ComplexHomotopy.pot b/docs/i18n/gettext/reference/manim.animation.movement.ComplexHomotopy.pot index 1b5f7adaea..2c202d313f 100644 --- a/docs/i18n/gettext/reference/manim.animation.movement.ComplexHomotopy.pot +++ b/docs/i18n/gettext/reference/manim.animation.movement.ComplexHomotopy.pot @@ -22,12 +22,4 @@ msgstr "" msgid "Complex Homotopy a function Cx[0, 1] to C" msgstr "" -#: ../../source/reference/manim.animation.movement.ComplexHomotopy.rst:14 -msgid "Methods" -msgstr "" - -#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.ComplexHomotopy:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.movement.Homotopy.pot b/docs/i18n/gettext/reference/manim.animation.movement.Homotopy.pot index b96b29a460..b4d2762f55 100644 --- a/docs/i18n/gettext/reference/manim.animation.movement.Homotopy.pot +++ b/docs/i18n/gettext/reference/manim.animation.movement.Homotopy.pot @@ -19,15 +19,39 @@ msgid "Bases: :py:class:`manim.animation.animation.Animation`" msgstr "" #: ../../../manim/animation/movement.py:docstring of manim.animation.movement.Homotopy:1 -msgid "Homotopy is a function from (x, y, z, t) to (x', y', z')" +msgid "A Homotopy." msgstr "" -#: ../../source/reference/manim.animation.movement.Homotopy.rst:14 -msgid "Methods" +#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.Homotopy:3 +msgid "This is an animation transforming the points of a mobject according to the specified transformation function. With the parameter :math:`t` moving from 0 to 1 throughout the animation and :math:`(x, y, z)` describing the coordinates of the point of a mobject, the function passed to the ``homotopy`` keyword argument should transform the tuple :math:`(x, y, z, t)` to :math:`(x', y', z')`, the coordinates the original point is transformed to at time :math:`t`." msgstr "" #: ../../../manim/animation/movement.py:docstring of manim.animation.movement.Homotopy:0 msgid "Parameters" msgstr "" +#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.Homotopy:11 +msgid "A function mapping :math:`(x, y, z, t)` to :math:`(x', y', z')`." +msgstr "" + +#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.Homotopy:12 +msgid "The mobject transformed under the given homotopy." +msgstr "" + +#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.Homotopy:13 +msgid "The run time of the animation." +msgstr "" + +#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.Homotopy:14 +msgid "Keyword arguments propagated to :meth:`.Mobject.apply_function`." +msgstr "" + +#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.Homotopy:15 +msgid "Further keyword arguments passed to the parent class." +msgstr "" + +#: ../../source/reference/manim.animation.movement.Homotopy.rst:14 +msgid "Methods" +msgstr "" + diff --git a/docs/i18n/gettext/reference/manim.animation.movement.MoveAlongPath.pot b/docs/i18n/gettext/reference/manim.animation.movement.MoveAlongPath.pot index f30d54ef24..5fe157f9cb 100644 --- a/docs/i18n/gettext/reference/manim.animation.movement.MoveAlongPath.pot +++ b/docs/i18n/gettext/reference/manim.animation.movement.MoveAlongPath.pot @@ -31,14 +31,12 @@ msgstr "" msgid "Interpolates the mobject of the :class:`Animation` based on alpha value." msgstr "" -#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.MoveAlongPath:0 #: ../../../manim/animation/movement.py:docstring of manim.animation.movement.MoveAlongPath.interpolate_mobject:0 msgid "Parameters" msgstr "" -#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.MoveAlongPath:0 -#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.MoveAlongPath.interpolate_mobject:0 -msgid "Return type" +#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.MoveAlongPath.interpolate_mobject:3 +msgid "A float between 0 and 1 expressing the ratio to which the animation is completed. For example, alpha-values of 0, 0.5, and 1 correspond to the animation being completed 0%, 50%, and 100%, respectively." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.movement.PhaseFlow.pot b/docs/i18n/gettext/reference/manim.animation.movement.PhaseFlow.pot index 54c2cc2f4b..52540ff949 100644 --- a/docs/i18n/gettext/reference/manim.animation.movement.PhaseFlow.pot +++ b/docs/i18n/gettext/reference/manim.animation.movement.PhaseFlow.pot @@ -27,14 +27,12 @@ msgstr "" msgid "Interpolates the mobject of the :class:`Animation` based on alpha value." msgstr "" -#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.PhaseFlow:0 #: ../../../manim/animation/movement.py:docstring of manim.animation.movement.PhaseFlow.interpolate_mobject:0 msgid "Parameters" msgstr "" -#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.PhaseFlow:0 -#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.PhaseFlow.interpolate_mobject:0 -msgid "Return type" +#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.PhaseFlow.interpolate_mobject:3 +msgid "A float between 0 and 1 expressing the ratio to which the animation is completed. For example, alpha-values of 0, 0.5, and 1 correspond to the animation being completed 0%, 50%, and 100%, respectively." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.movement.SmoothedVectorizedHomotopy.pot b/docs/i18n/gettext/reference/manim.animation.movement.SmoothedVectorizedHomotopy.pot index 59e693eb6a..6259c703bf 100644 --- a/docs/i18n/gettext/reference/manim.animation.movement.SmoothedVectorizedHomotopy.pot +++ b/docs/i18n/gettext/reference/manim.animation.movement.SmoothedVectorizedHomotopy.pot @@ -18,10 +18,6 @@ msgstr "" msgid "Bases: :py:class:`manim.animation.movement.Homotopy`" msgstr "" -#: ../../../manim/animation/movement.py:docstring of manim.animation.movement.SmoothedVectorizedHomotopy:1 -msgid "Homotopy is a function from (x, y, z, t) to (x', y', z')" -msgstr "" - #: ../../source/reference/manim.animation.movement.SmoothedVectorizedHomotopy.rst:14 msgid "Methods" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.movement.pot b/docs/i18n/gettext/reference/manim.animation.movement.pot index 77ad3fe2f4..52b838bf07 100644 --- a/docs/i18n/gettext/reference/manim.animation.movement.pot +++ b/docs/i18n/gettext/reference/manim.animation.movement.pot @@ -23,8 +23,7 @@ msgid "Complex Homotopy a function Cx[0, 1] to C" msgstr "" #: ../../source/reference/manim.animation.movement.rst:28::1 -#: ../../source/reference/manim.animation.movement.rst:28::1 -msgid "Homotopy is a function from (x, y, z, t) to (x', y', z')" +msgid "A Homotopy." msgstr "" #: ../../source/reference/manim.animation.movement.rst:28::1 diff --git a/docs/i18n/gettext/reference/manim.animation.numbers.ChangeDecimalToValue.pot b/docs/i18n/gettext/reference/manim.animation.numbers.ChangeDecimalToValue.pot index 7972854c8c..1836100e7c 100644 --- a/docs/i18n/gettext/reference/manim.animation.numbers.ChangeDecimalToValue.pot +++ b/docs/i18n/gettext/reference/manim.animation.numbers.ChangeDecimalToValue.pot @@ -18,12 +18,4 @@ msgstr "" msgid "Bases: :py:class:`manim.animation.numbers.ChangingDecimal`" msgstr "" -#: ../../source/reference/manim.animation.numbers.ChangeDecimalToValue.rst:14 -msgid "Methods" -msgstr "" - -#: ../../../manim/animation/numbers.py:docstring of manim.animation.numbers.ChangeDecimalToValue:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.numbers.ChangingDecimal.pot b/docs/i18n/gettext/reference/manim.animation.numbers.ChangingDecimal.pot index 7a75504c01..de340bcf66 100644 --- a/docs/i18n/gettext/reference/manim.animation.numbers.ChangingDecimal.pot +++ b/docs/i18n/gettext/reference/manim.animation.numbers.ChangingDecimal.pot @@ -27,14 +27,12 @@ msgstr "" msgid "Interpolates the mobject of the :class:`Animation` based on alpha value." msgstr "" -#: ../../../manim/animation/numbers.py:docstring of manim.animation.numbers.ChangingDecimal:0 #: ../../../manim/animation/numbers.py:docstring of manim.animation.numbers.ChangingDecimal.interpolate_mobject:0 msgid "Parameters" msgstr "" -#: ../../../manim/animation/numbers.py:docstring of manim.animation.numbers.ChangingDecimal:0 -#: ../../../manim/animation/numbers.py:docstring of manim.animation.numbers.ChangingDecimal.interpolate_mobject:0 -msgid "Return type" +#: ../../../manim/animation/numbers.py:docstring of manim.animation.numbers.ChangingDecimal.interpolate_mobject:3 +msgid "A float between 0 and 1 expressing the ratio to which the animation is completed. For example, alpha-values of 0, 0.5, and 1 correspond to the animation being completed 0%, 50%, and 100%, respectively." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.rotation.Rotate.pot b/docs/i18n/gettext/reference/manim.animation.rotation.Rotate.pot index b4f89cba93..c8b0b5458c 100644 --- a/docs/i18n/gettext/reference/manim.animation.rotation.Rotate.pot +++ b/docs/i18n/gettext/reference/manim.animation.rotation.Rotate.pot @@ -46,10 +46,6 @@ msgstr "" msgid "If ``about_point``is ``None``, this argument specifies the direction of the bounding box point to be taken as the rotation center." msgstr "" -#: ../../../manim/animation/rotation.py:docstring of manim.animation.rotation.Rotate:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/rotation.py:docstring of manim.animation.rotation.Rotate:12 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.rotation.Rotating.pot b/docs/i18n/gettext/reference/manim.animation.rotation.Rotating.pot index 72c2c4ea53..c94ddcd187 100644 --- a/docs/i18n/gettext/reference/manim.animation.rotation.Rotating.pot +++ b/docs/i18n/gettext/reference/manim.animation.rotation.Rotating.pot @@ -27,14 +27,12 @@ msgstr "" msgid "Interpolates the mobject of the :class:`Animation` based on alpha value." msgstr "" -#: ../../../manim/animation/rotation.py:docstring of manim.animation.rotation.Rotating:0 #: ../../../manim/animation/rotation.py:docstring of manim.animation.rotation.Rotating.interpolate_mobject:0 msgid "Parameters" msgstr "" -#: ../../../manim/animation/rotation.py:docstring of manim.animation.rotation.Rotating:0 -#: ../../../manim/animation/rotation.py:docstring of manim.animation.rotation.Rotating.interpolate_mobject:0 -msgid "Return type" +#: ../../../manim/animation/rotation.py:docstring of manim.animation.rotation.Rotating.interpolate_mobject:3 +msgid "A float between 0 and 1 expressing the ratio to which the animation is completed. For example, alpha-values of 0, 0.5, and 1 correspond to the animation being completed 0%, 50%, and 100%, respectively." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.speedmodifier.ChangeSpeed.pot b/docs/i18n/gettext/reference/manim.animation.speedmodifier.ChangeSpeed.pot new file mode 100644 index 0000000000..e9ac21bd31 --- /dev/null +++ b/docs/i18n/gettext/reference/manim.animation.speedmodifier.ChangeSpeed.pot @@ -0,0 +1,144 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:2 +msgid "ChangeSpeed" +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:4 +msgid "Qualified name: ``manim.animation.speedmodifier.ChangeSpeed``" +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed:1 +msgid "Bases: :py:class:`manim.animation.animation.Animation`" +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed:1 +msgid "Modifies the speed of passed animation. :class:`AnimationGroup` with different ``lag_ratio`` can also be used which combines multiple animations into one. The ``run_time`` of the passed animation is changed to modify the speed." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed:0 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.add_updater:0 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.clean_up_from_scene:0 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.interpolate:0 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.update_mobjects:0 +msgid "Parameters" +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed:6 +msgid "Animation of which the speed is to be modified." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed:7 +msgid "Contains nodes (percentage of ``run_time``) and its corresponding speed factor." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed:8 +msgid "Overrides ``rate_func`` of passed animation, applied before changing speed." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed:11 +msgid "Examples" +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:14 +msgid "Methods" +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:27::1 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.add_updater:1 +msgid "This static method can be used to apply speed change to updaters." +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:27::1 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.begin:1 +msgid "Begin the animation." +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:27::1 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.clean_up_from_scene:1 +msgid "Clean up the :class:`~.Scene` after finishing the animation." +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:27::1 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.finish:1 +msgid "Finish the animation." +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:27::1 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.get_scaled_total_time:1 +msgid "The time taken by the animation under the assumption that the ``run_time`` is 1." +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:27::1 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.interpolate:1 +msgid "Set the animation progress." +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:27::1 +msgid "Updates things like starting_mobject, and (for Transforms) target_mobject." +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.ChangeSpeed.rst:29 +msgid "Attributes" +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.add_updater:3 +msgid "This updater will follow speed and rate function of any :class:`.ChangeSpeed` animation that is playing with ``affects_speed_updaters=True``. By default, updater functions added via the usual :meth:`.Mobject.add_updater` method do not respect the change of animation speed." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.add_updater:8 +msgid "The mobject to which the updater should be attached." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.add_updater:9 +msgid "The function that is called whenever a new frame is rendered." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.add_updater:10 +msgid "The position in the list of the mobject's updaters at which the function should be inserted." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.add_updater:12 +msgid "If ``True``, calls the update function when attaching it to the mobject." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.begin:3 +msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.begin:0 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.clean_up_from_scene:0 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.finish:0 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.get_scaled_total_time:0 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.interpolate:0 +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.update_mobjects:0 +msgid "Return type" +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.clean_up_from_scene:3 +msgid "This includes to :meth:`~.Scene.remove` the Animation's :class:`~.Mobject` if the animation is a remover." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.clean_up_from_scene:6 +msgid "The scene the animation should be cleaned up from." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.finish:3 +msgid "This method gets called when the animation is over." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.interpolate:3 +msgid "This method gets called for every frame during an animation." +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier.ChangeSpeed.interpolate:5 +msgid "The relative time to set the animation to, 0 meaning the start, 1 meaning the end." +msgstr "" + + diff --git a/docs/i18n/gettext/reference/manim.animation.speedmodifier.pot b/docs/i18n/gettext/reference/manim.animation.speedmodifier.pot new file mode 100644 index 0000000000..e44ae23c43 --- /dev/null +++ b/docs/i18n/gettext/reference/manim.animation.speedmodifier.pot @@ -0,0 +1,21 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/reference/manim.animation.speedmodifier.rst:2 +msgid "speedmodifier" +msgstr "" + +#: ../../../manim/animation/speedmodifier.py:docstring of manim.animation.speedmodifier:1 +msgid "Utilities for modifying the speed at which animations are played." +msgstr "" + +#: ../../source/reference/manim.animation.speedmodifier.rst:15 +msgid "Classes" +msgstr "" + + diff --git a/docs/i18n/gettext/reference/manim.animation.transform.ApplyComplexFunction.pot b/docs/i18n/gettext/reference/manim.animation.transform.ApplyComplexFunction.pot index 112a2c6873..a087a06b63 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.ApplyComplexFunction.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.ApplyComplexFunction.pot @@ -26,8 +26,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ApplyComplexFunction:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.ApplyFunction.pot b/docs/i18n/gettext/reference/manim.animation.transform.ApplyFunction.pot index 20a44312a6..30cd26b0a1 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.ApplyFunction.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.ApplyFunction.pot @@ -26,8 +26,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ApplyFunction:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.ApplyMatrix.pot b/docs/i18n/gettext/reference/manim.animation.transform.ApplyMatrix.pot index b3a8bf609a..49331eeb99 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.ApplyMatrix.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.ApplyMatrix.pot @@ -42,10 +42,6 @@ msgstr "" msgid "Further keyword arguments that are passed to :class:`ApplyPointwiseFunction`." msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ApplyMatrix:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ApplyMatrix:9 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.transform.ApplyMethod.pot b/docs/i18n/gettext/reference/manim.animation.transform.ApplyMethod.pot index d9c6a1eedc..320085ca09 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.ApplyMethod.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.ApplyMethod.pot @@ -42,10 +42,6 @@ msgstr "" msgid "Any keyword arguments passed to :class:`~.Transform`." msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ApplyMethod:0 -msgid "Return type" -msgstr "" - #: ../../source/reference/manim.animation.transform.ApplyMethod.rst:14 msgid "Methods" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.transform.ApplyPointwiseFunction.pot b/docs/i18n/gettext/reference/manim.animation.transform.ApplyPointwiseFunction.pot index 5291a225bb..36d818db66 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.ApplyPointwiseFunction.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.ApplyPointwiseFunction.pot @@ -34,8 +34,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ApplyPointwiseFunction:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.ApplyPointwiseFunctionToCenter.pot b/docs/i18n/gettext/reference/manim.animation.transform.ApplyPointwiseFunctionToCenter.pot index e5d7f648cd..84ed1cd0e4 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.ApplyPointwiseFunctionToCenter.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.ApplyPointwiseFunctionToCenter.pot @@ -31,13 +31,8 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ApplyPointwiseFunctionToCenter:0 -msgid "Parameters" -msgstr "" - -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ApplyPointwiseFunctionToCenter:0 -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ApplyPointwiseFunctionToCenter.begin:0 -msgid "Return type" +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ApplyPointwiseFunctionToCenter.begin:3 +msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.transform.ClockwiseTransform.pot b/docs/i18n/gettext/reference/manim.animation.transform.ClockwiseTransform.pot index 99ce9194c2..331c76c280 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.ClockwiseTransform.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.ClockwiseTransform.pot @@ -34,8 +34,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ClockwiseTransform:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.CounterclockwiseTransform.pot b/docs/i18n/gettext/reference/manim.animation.transform.CounterclockwiseTransform.pot index bd9b425a0b..41d2723333 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.CounterclockwiseTransform.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.CounterclockwiseTransform.pot @@ -34,8 +34,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.CounterclockwiseTransform:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.CyclicReplace.pot b/docs/i18n/gettext/reference/manim.animation.transform.CyclicReplace.pot index 90209fce40..54881283d2 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.CyclicReplace.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.CyclicReplace.pot @@ -26,8 +26,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.CyclicReplace:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.FadeToColor.pot b/docs/i18n/gettext/reference/manim.animation.transform.FadeToColor.pot index ab7fb81ea0..9385df131f 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.FadeToColor.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.FadeToColor.pot @@ -34,8 +34,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.FadeToColor:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.MoveToTarget.pot b/docs/i18n/gettext/reference/manim.animation.transform.MoveToTarget.pot index b375158de4..50a593be89 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.MoveToTarget.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.MoveToTarget.pot @@ -38,8 +38,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.MoveToTarget:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.ReplacementTransform.pot b/docs/i18n/gettext/reference/manim.animation.transform.ReplacementTransform.pot index 428ecf85bb..707df6190e 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.ReplacementTransform.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.ReplacementTransform.pot @@ -38,10 +38,6 @@ msgstr "" msgid "Further keyword arguments that are passed to :class:`Transform`." msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ReplacementTransform:0 -msgid "Return type" -msgstr "" - #: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ReplacementTransform:8 msgid "Examples" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.transform.Restore.pot b/docs/i18n/gettext/reference/manim.animation.transform.Restore.pot index c79a64a83a..bb8983d573 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.Restore.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.Restore.pot @@ -38,8 +38,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Restore:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.ScaleInPlace.pot b/docs/i18n/gettext/reference/manim.animation.transform.ScaleInPlace.pot index a87c08d9a2..5fcf2fb7a8 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.ScaleInPlace.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.ScaleInPlace.pot @@ -34,8 +34,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ScaleInPlace:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.ShrinkToCenter.pot b/docs/i18n/gettext/reference/manim.animation.transform.ShrinkToCenter.pot index 704df9cf06..afb2b118db 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.ShrinkToCenter.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.ShrinkToCenter.pot @@ -34,8 +34,4 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.ShrinkToCenter:0 -msgid "Parameters" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.animation.transform.Transform.pot b/docs/i18n/gettext/reference/manim.animation.transform.Transform.pot index e305a2c686..33af82e09b 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.Transform.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.Transform.pot @@ -18,6 +18,63 @@ msgstr "" msgid "Bases: :py:class:`manim.animation.animation.Animation`" msgstr "" +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:1 +msgid "A Transform transforms a Mobject into a target Mobject." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:0 +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform.clean_up_from_scene:0 +msgid "Parameters" +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:3 +msgid "The :class:`.Mobject` to be transformed. It will be mutated to become the ``target_mobject``." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:4 +msgid "The target of the transformation." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:5 +msgid "A function defining the path that the points of the ``mobject`` are being moved along until they match the points of the ``target_mobject``, see :mod:`.utils.paths`." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:7 +msgid "The arc angle (in radians) that the points of ``mobject`` will follow to reach the points of the target if using a circular path arc, see ``path_arc_centers``. See also :func:`manim.utils.paths.path_along_arc`." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:10 +msgid "The axis to rotate along if using a circular path arc, see ``path_arc_centers``." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:11 +msgid "The center of the circular arcs along which the points of ``mobject`` are moved by the transformation. If this is set and ``path_func`` is not set, then a ``path_along_circles`` path will be generated using the ``path_arc`` parameters and stored in ``path_func``. If ``path_func`` is set, this and the other ``path_arc`` fields are set as attributes, but a ``path_func`` is not generated from it." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:11 +msgid "The center of the circular arcs along which the points of ``mobject`` are moved by the transformation." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:14 +msgid "If this is set and ``path_func`` is not set, then a ``path_along_circles`` path will be generated using the ``path_arc`` parameters and stored in ``path_func``. If ``path_func`` is set, this and the other ``path_arc`` fields are set as attributes, but a ``path_func`` is not generated from it." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:17 +msgid "Controls which mobject is replaced when the transformation is complete. If set to True, ``mobject`` will be removed from the scene and ``target_mobject`` will replace it. Otherwise, ``target_mobject`` is never added and ``mobject`` just takes its shape." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:17 +msgid "Controls which mobject is replaced when the transformation is complete." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:19 +msgid "If set to True, ``mobject`` will be removed from the scene and ``target_mobject`` will replace it. Otherwise, ``target_mobject`` is never added and ``mobject`` just takes its shape." +msgstr "" + +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:23 +msgid "Examples" +msgstr "" + #: ../../source/reference/manim.animation.transform.Transform.rst:14 msgid "Methods" msgstr "" @@ -41,22 +98,16 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:0 -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform.clean_up_from_scene:0 -msgid "Parameters" +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform.begin:3 +msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform:0 #: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform.begin:0 #: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform.clean_up_from_scene:0 #: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform.get_all_mobjects:0 msgid "Return type" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform.begin:3 -msgid "This method is called right as an animation is being played. As much initialization as possible, especially any mobject copying, should live in this method." -msgstr "" - #: ../../../manim/animation/transform.py:docstring of manim.animation.transform.Transform.clean_up_from_scene:3 msgid "This includes to :meth:`~.Scene.remove` the Animation's :class:`~.Mobject` if the animation is a remover." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.transform.TransformAnimations.pot b/docs/i18n/gettext/reference/manim.animation.transform.TransformAnimations.pot index be48e628a4..b753ae9f62 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.TransformAnimations.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.TransformAnimations.pot @@ -31,18 +31,16 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformAnimations:0 -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformAnimations.interpolate:0 -msgid "Parameters" +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformAnimations.interpolate:3 +msgid "This method gets called for every frame during an animation." msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformAnimations:0 #: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformAnimations.interpolate:0 -msgid "Return type" +msgid "Parameters" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformAnimations.interpolate:3 -msgid "This method gets called for every frame during an animation." +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformAnimations.interpolate:5 +msgid "The relative time to set the animation to, 0 meaning the start, 1 meaning the end." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.transform.TransformFromCopy.pot b/docs/i18n/gettext/reference/manim.animation.transform.TransformFromCopy.pot index c79f095c34..48930a5725 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.TransformFromCopy.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.TransformFromCopy.pot @@ -35,18 +35,16 @@ msgstr "" msgid "Attributes" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformFromCopy:0 -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformFromCopy.interpolate:0 -msgid "Parameters" +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformFromCopy.interpolate:3 +msgid "This method gets called for every frame during an animation." msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformFromCopy:0 #: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformFromCopy.interpolate:0 -msgid "Return type" +msgid "Parameters" msgstr "" -#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformFromCopy.interpolate:3 -msgid "This method gets called for every frame during an animation." +#: ../../../manim/animation/transform.py:docstring of manim.animation.transform.TransformFromCopy.interpolate:5 +msgid "The relative time to set the animation to, 0 meaning the start, 1 meaning the end." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.transform.pot b/docs/i18n/gettext/reference/manim.animation.transform.pot index 9956c62eb3..13575090ea 100644 --- a/docs/i18n/gettext/reference/manim.animation.transform.pot +++ b/docs/i18n/gettext/reference/manim.animation.transform.pot @@ -70,4 +70,8 @@ msgstr "" msgid "Animation that makes a mobject shrink to center." msgstr "" +#: ../../source/reference/manim.animation.transform.rst:60::1 +msgid "A Transform transforms a Mobject into a target Mobject." +msgstr "" + diff --git a/docs/i18n/gettext/reference/manim.animation.updaters.update.MaintainPositionRelativeTo.pot b/docs/i18n/gettext/reference/manim.animation.updaters.update.MaintainPositionRelativeTo.pot index 7d0930de33..348be8cd65 100644 --- a/docs/i18n/gettext/reference/manim.animation.updaters.update.MaintainPositionRelativeTo.pot +++ b/docs/i18n/gettext/reference/manim.animation.updaters.update.MaintainPositionRelativeTo.pot @@ -27,14 +27,12 @@ msgstr "" msgid "Interpolates the mobject of the :class:`Animation` based on alpha value." msgstr "" -#: ../../../manim/animation/updaters/update.py:docstring of manim.animation.updaters.update.MaintainPositionRelativeTo:0 #: ../../../manim/animation/updaters/update.py:docstring of manim.animation.updaters.update.MaintainPositionRelativeTo.interpolate_mobject:0 msgid "Parameters" msgstr "" -#: ../../../manim/animation/updaters/update.py:docstring of manim.animation.updaters.update.MaintainPositionRelativeTo:0 -#: ../../../manim/animation/updaters/update.py:docstring of manim.animation.updaters.update.MaintainPositionRelativeTo.interpolate_mobject:0 -msgid "Return type" +#: ../../../manim/animation/updaters/update.py:docstring of manim.animation.updaters.update.MaintainPositionRelativeTo.interpolate_mobject:3 +msgid "A float between 0 and 1 expressing the ratio to which the animation is completed. For example, alpha-values of 0, 0.5, and 1 correspond to the animation being completed 0%, 50%, and 100%, respectively." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.animation.updaters.update.UpdateFromFunc.pot b/docs/i18n/gettext/reference/manim.animation.updaters.update.UpdateFromFunc.pot index bed3f29766..f976b33052 100644 --- a/docs/i18n/gettext/reference/manim.animation.updaters.update.UpdateFromFunc.pot +++ b/docs/i18n/gettext/reference/manim.animation.updaters.update.UpdateFromFunc.pot @@ -31,14 +31,12 @@ msgstr "" msgid "Interpolates the mobject of the :class:`Animation` based on alpha value." msgstr "" -#: ../../../manim/animation/updaters/update.py:docstring of manim.animation.updaters.update.UpdateFromFunc:0 #: ../../../manim/animation/updaters/update.py:docstring of manim.animation.updaters.update.UpdateFromFunc.interpolate_mobject:0 msgid "Parameters" msgstr "" -#: ../../../manim/animation/updaters/update.py:docstring of manim.animation.updaters.update.UpdateFromFunc:0 -#: ../../../manim/animation/updaters/update.py:docstring of manim.animation.updaters.update.UpdateFromFunc.interpolate_mobject:0 -msgid "Return type" +#: ../../../manim/animation/updaters/update.py:docstring of manim.animation.updaters.update.UpdateFromFunc.interpolate_mobject:3 +msgid "A float between 0 and 1 expressing the ratio to which the animation is completed. For example, alpha-values of 0, 0.5, and 1 correspond to the animation being completed 0%, 50%, and 100%, respectively." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.camera.moving_camera.CameraFrame.pot b/docs/i18n/gettext/reference/manim.camera.moving_camera.CameraFrame.pot index 047c6e4cc2..8b13789179 100644 --- a/docs/i18n/gettext/reference/manim.camera.moving_camera.CameraFrame.pot +++ b/docs/i18n/gettext/reference/manim.camera.moving_camera.CameraFrame.pot @@ -1,45 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/reference/manim.camera.moving_camera.CameraFrame.rst:2 -msgid "CameraFrame" -msgstr "" - -#: ../../source/reference/manim.camera.moving_camera.CameraFrame.rst:4 -msgid "Qualified name: ``manim.camera.moving\\_camera.CameraFrame``" -msgstr "" - -#: ../../../manim/camera/moving_camera.py:docstring of manim.camera.moving_camera.CameraFrame:1 -msgid "Bases: :py:class:`manim.mobject.types.vectorized_mobject.VGroup`" -msgstr "" - -#: ../../source/reference/manim.camera.moving_camera.CameraFrame.rst:14 -msgid "Methods" -msgstr "" - -#: ../../source/reference/manim.camera.moving_camera.CameraFrame.rst:21 -msgid "Attributes" -msgstr "" - -#: ../../source/reference/manim.camera.moving_camera.CameraFrame.rst:32::1 -msgid "Used to animate the application of any method of :code:`self`." -msgstr "" - -#: ../../source/reference/manim.camera.moving_camera.CameraFrame.rst:32::1 -msgid "The depth of the mobject." -msgstr "" - -#: ../../source/reference/manim.camera.moving_camera.CameraFrame.rst:32::1 -msgid "If there are multiple colors (for gradient) this returns the first one" -msgstr "" - -#: ../../source/reference/manim.camera.moving_camera.CameraFrame.rst:32::1 -msgid "The height of the mobject." -msgstr "" - - diff --git a/docs/i18n/gettext/reference/manim.camera.moving_camera.MovingCamera.pot b/docs/i18n/gettext/reference/manim.camera.moving_camera.MovingCamera.pot index 11d7cd810a..37e3cfc10d 100644 --- a/docs/i18n/gettext/reference/manim.camera.moving_camera.MovingCamera.pot +++ b/docs/i18n/gettext/reference/manim.camera.moving_camera.MovingCamera.pot @@ -90,6 +90,10 @@ msgstr "" msgid "If set to ``True``, only allows focusing on mobjects that are already in frame." msgstr "" +#: ../../../manim/camera/moving_camera.py:docstring of manim.camera.moving_camera.MovingCamera.auto_zoom:12 +msgid "If set to ``False``, applies the changes instead of returning the corresponding animation" +msgstr "" + #: ../../../manim/camera/moving_camera.py:docstring of manim.camera.moving_camera.MovingCamera.auto_zoom:0 #: ../../../manim/camera/moving_camera.py:docstring of manim.camera.moving_camera.MovingCamera.frame_center:0 #: ../../../manim/camera/moving_camera.py:docstring of manim.camera.moving_camera.MovingCamera.frame_height:0 @@ -97,8 +101,8 @@ msgstr "" msgid "Returns" msgstr "" -#: ../../../manim/camera/moving_camera.py:docstring of manim.camera.moving_camera.MovingCamera.auto_zoom:13 -msgid "Returns an animation that zooms the camera view to a given list of mobjects." +#: ../../../manim/camera/moving_camera.py:docstring of manim.camera.moving_camera.MovingCamera.auto_zoom:14 +msgid "_AnimationBuilder that zooms the camera view to a given list of mobjects or ScreenRectangle with position and size updated to zoomed position." msgstr "" #: ../../../manim/camera/moving_camera.py:docstring of manim.camera.moving_camera.MovingCamera.auto_zoom:0 diff --git a/docs/i18n/gettext/reference/manim.mobject.geometry.Arc.pot b/docs/i18n/gettext/reference/manim.mobject.geometry.Arc.pot index a90df840fb..8b13789179 100644 --- a/docs/i18n/gettext/reference/manim.mobject.geometry.Arc.pot +++ b/docs/i18n/gettext/reference/manim.mobject.geometry.Arc.pot @@ -1,75 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:2 -msgid "arc" -msgstr "" - -#: ../../../manim/mobject/geometry/arc.py:docstring of manim.mobject.geometry.arc:1 -msgid "Mobjects that are curved." -msgstr "" - -#: ../../../manim/mobject/geometry/arc.py:docstring of manim.mobject.geometry.arc:4 -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::0 -msgid "Examples" -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:15 -msgid "Classes" -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -msgid "A dot with bigger radius and bold stroke to annotate scenes." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::0 -msgid "param inner_radius" -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -msgid "The inside radius of the Annular Sector." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -msgid "Region between two concentric :class:`Circles <.Circle>`." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -msgid "A circular arc." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -msgid "Inherits from Arc and additionally takes 2 points between which the arc is spanned." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -msgid "A generalized polygon allowing for points to be connected with arcs." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -msgid "A circle." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::0 -msgid "Example" -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -msgid "A circle with a very small radius." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -msgid "A circular shape; oval, circle." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 -msgid "A :class:`Dot` containing a label in its center." -msgstr "" - - diff --git a/docs/i18n/gettext/reference/manim.mobject.geometry.Line.pot b/docs/i18n/gettext/reference/manim.mobject.geometry.Line.pot index 3e988739f5..8b13789179 100644 --- a/docs/i18n/gettext/reference/manim.mobject.geometry.Line.pot +++ b/docs/i18n/gettext/reference/manim.mobject.geometry.Line.pot @@ -1,49 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/reference/manim.mobject.geometry.line.rst:2 -msgid "line" -msgstr "" - -#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line:1 -msgid "Mobjects that are lines or variations of them." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.line.rst:15 -msgid "Classes" -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 -msgid "A circular arc or elbow-type mobject representing an angle of two lines." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 -msgid "An arrow." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 -msgid "A dashed :class:`Line`." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 -msgid "An arrow with tips on both ends." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 -msgid "Two lines that create a right angle about each other: L-shape." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 -msgid "An elbow-type mobject representing a right angle between two lines." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 -msgid "Constructs a line tangent to a :class:`~.VMobject` at a specific point." -msgstr "" - - diff --git a/docs/i18n/gettext/reference/manim.mobject.geometry.Polygram.pot b/docs/i18n/gettext/reference/manim.mobject.geometry.Polygram.pot index 91cae7205f..8b13789179 100644 --- a/docs/i18n/gettext/reference/manim.mobject.geometry.Polygram.pot +++ b/docs/i18n/gettext/reference/manim.mobject.geometry.Polygram.pot @@ -1,57 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:2 -msgid "polygram" -msgstr "" - -#: ../../../manim/mobject/geometry/polygram.py:docstring of manim.mobject.geometry.polygram:1 -msgid "Mobjects that are simple geometric shapes." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:15 -msgid "Classes" -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 -msgid "A shape with smaller cutouts." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 -msgid "A shape consisting of one closed loop of vertices." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 -msgid "A generalized :class:`Polygon`, allowing for disconnected sets of edges." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 -msgid "A quadrilateral with two sets of parallel sides." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 -msgid "An n-sided regular :class:`Polygon`." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 -msgid "A :class:`Polygram` with regularly spaced vertices." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 -msgid "A rectangle with rounded corners." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 -msgid "A rectangle with equal side lengths." -msgstr "" - -#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 -msgid "A regular polygram without the intersecting lines." -msgstr "" - - diff --git a/docs/i18n/gettext/reference/manim.mobject.geometry.arc.pot b/docs/i18n/gettext/reference/manim.mobject.geometry.arc.pot new file mode 100644 index 0000000000..a90df840fb --- /dev/null +++ b/docs/i18n/gettext/reference/manim.mobject.geometry.arc.pot @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:2 +msgid "arc" +msgstr "" + +#: ../../../manim/mobject/geometry/arc.py:docstring of manim.mobject.geometry.arc:1 +msgid "Mobjects that are curved." +msgstr "" + +#: ../../../manim/mobject/geometry/arc.py:docstring of manim.mobject.geometry.arc:4 +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::0 +msgid "Examples" +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:15 +msgid "Classes" +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +msgid "A dot with bigger radius and bold stroke to annotate scenes." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::0 +msgid "param inner_radius" +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +msgid "The inside radius of the Annular Sector." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +msgid "Region between two concentric :class:`Circles <.Circle>`." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +msgid "A circular arc." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +msgid "Inherits from Arc and additionally takes 2 points between which the arc is spanned." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +msgid "A generalized polygon allowing for points to be connected with arcs." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +msgid "A circle." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::0 +msgid "Example" +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +msgid "A circle with a very small radius." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +msgid "A circular shape; oval, circle." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.arc.rst:50::1 +msgid "A :class:`Dot` containing a label in its center." +msgstr "" + + diff --git a/docs/i18n/gettext/reference/manim.mobject.geometry.line.Angle.pot b/docs/i18n/gettext/reference/manim.mobject.geometry.line.Angle.pot index 193feb1640..e62b85dd8c 100644 --- a/docs/i18n/gettext/reference/manim.mobject.geometry.line.Angle.pot +++ b/docs/i18n/gettext/reference/manim.mobject.geometry.line.Angle.pot @@ -23,6 +23,7 @@ msgid "A circular arc or elbow-type mobject representing an angle of two lines." msgstr "" #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle:0 +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:0 #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_value:0 msgid "Parameters" msgstr "" @@ -72,6 +73,7 @@ msgid "Further keyword arguments that are passed to the constructor of :class:`A msgstr "" #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle:30 +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:15 #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:7 #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_value:9 msgid "Examples" @@ -85,54 +87,85 @@ msgstr "" msgid "Methods" msgstr "" -#: ../../source/reference/manim.mobject.geometry.line.Angle.rst:21::1 +#: ../../source/reference/manim.mobject.geometry.line.Angle.rst:22::1 +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:1 +msgid "The angle between the lines AB and BC." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.line.Angle.rst:22::1 #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:1 msgid "Get the lines forming an angle of the :class:`Angle` class." msgstr "" -#: ../../source/reference/manim.mobject.geometry.line.Angle.rst:21::1 +#: ../../source/reference/manim.mobject.geometry.line.Angle.rst:22::1 #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_value:1 msgid "Get the value of an angle of the :class:`Angle` class." msgstr "" -#: ../../source/reference/manim.mobject.geometry.line.Angle.rst:23 +#: ../../source/reference/manim.mobject.geometry.line.Angle.rst:24 msgid "Attributes" msgstr "" -#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:1::1 +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:1::1 msgid "Used to animate the application of any method of :code:`self`." msgstr "" -#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:1::1 +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:1::1 msgid "The depth of the mobject." msgstr "" -#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:1::1 +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:1::1 msgid "If there are multiple colors (for gradient) this returns the first one" msgstr "" -#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:1::1 +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:1::1 msgid "The height of the mobject." msgstr "" -#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:1::1 +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:1::1 msgid "The width of the mobject." msgstr "" +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:3 +msgid "This constructs the angle :math:`\\angle ABC`." +msgstr "" + +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:5 +msgid "The endpoint of the first angle leg" +msgstr "" + +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:6 +msgid "The vertex of the angle" +msgstr "" + +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:7 +msgid "The endpoint of the second angle leg" +msgstr "" + +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:8 +msgid "Further keyword arguments are passed to :class:`.Angle`" +msgstr "" + +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:0 #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:0 #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_value:0 msgid "Returns" msgstr "" -#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:3 -msgid "A :class:`~.VGroup` containing the lines that form the angle of the :class:`Angle` class." +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:10 +msgid "Angle(line1, line2, radius=0.5, quadrant=(-1,1), stroke_width=8), Angle(line1, line2, radius=0.7, quadrant=(-1,-1), color=RED, other_angle=True)," msgstr "" +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.from_three_points:0 #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:0 #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_value:0 msgid "Return type" msgstr "" +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_lines:3 +msgid "A :class:`~.VGroup` containing the lines that form the angle of the :class:`Angle` class." +msgstr "" + #: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line.Angle.get_value:3 msgid "A boolean to decide the unit (deg/rad) in which the value of the angle is returned." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.geometry.line.pot b/docs/i18n/gettext/reference/manim.mobject.geometry.line.pot new file mode 100644 index 0000000000..3e988739f5 --- /dev/null +++ b/docs/i18n/gettext/reference/manim.mobject.geometry.line.pot @@ -0,0 +1,49 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/reference/manim.mobject.geometry.line.rst:2 +msgid "line" +msgstr "" + +#: ../../../manim/mobject/geometry/line.py:docstring of manim.mobject.geometry.line:1 +msgid "Mobjects that are lines or variations of them." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.line.rst:15 +msgid "Classes" +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 +msgid "A circular arc or elbow-type mobject representing an angle of two lines." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 +msgid "An arrow." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 +msgid "A dashed :class:`Line`." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 +msgid "An arrow with tips on both ends." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 +msgid "Two lines that create a right angle about each other: L-shape." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 +msgid "An elbow-type mobject representing a right angle between two lines." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.line.rst:36::1 +msgid "Constructs a line tangent to a :class:`~.VMobject` at a specific point." +msgstr "" + + diff --git a/docs/i18n/gettext/reference/manim.mobject.geometry.polygram.pot b/docs/i18n/gettext/reference/manim.mobject.geometry.polygram.pot new file mode 100644 index 0000000000..91cae7205f --- /dev/null +++ b/docs/i18n/gettext/reference/manim.mobject.geometry.polygram.pot @@ -0,0 +1,57 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:2 +msgid "polygram" +msgstr "" + +#: ../../../manim/mobject/geometry/polygram.py:docstring of manim.mobject.geometry.polygram:1 +msgid "Mobjects that are simple geometric shapes." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:15 +msgid "Classes" +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 +msgid "A shape with smaller cutouts." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 +msgid "A shape consisting of one closed loop of vertices." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 +msgid "A generalized :class:`Polygon`, allowing for disconnected sets of edges." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 +msgid "A quadrilateral with two sets of parallel sides." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 +msgid "An n-sided regular :class:`Polygon`." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 +msgid "A :class:`Polygram` with regularly spaced vertices." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 +msgid "A rectangle with rounded corners." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 +msgid "A rectangle with equal side lengths." +msgstr "" + +#: ../../source/reference/manim.mobject.geometry.polygram.rst:38::1 +msgid "A regular polygram without the intersecting lines." +msgstr "" + + diff --git a/docs/i18n/gettext/reference/manim.mobject.graph.Graph.pot b/docs/i18n/gettext/reference/manim.mobject.graph.Graph.pot index e144a57769..ded7c4d5b4 100644 --- a/docs/i18n/gettext/reference/manim.mobject.graph.Graph.pot +++ b/docs/i18n/gettext/reference/manim.mobject.graph.Graph.pot @@ -135,10 +135,14 @@ msgid "All vertices in your graph which are not listed in any of the partitions msgstr "" #: ../../../manim/mobject/graph.py:docstring of manim.mobject.graph.Graph:159 +msgid "The representation of a linear artificial neural network is facilitated by the use of the partite layout and defining partitions for each layer." +msgstr "" + +#: ../../../manim/mobject/graph.py:docstring of manim.mobject.graph.Graph:193 msgid "The custom tree layout can be used to show the graph by distance from the root vertex. You must pass the root vertex of the tree." msgstr "" -#: ../../../manim/mobject/graph.py:docstring of manim.mobject.graph.Graph:185 +#: ../../../manim/mobject/graph.py:docstring of manim.mobject.graph.Graph:219 msgid "The following code sample illustrates the use of the ``vertex_spacing`` layout parameter specific to the ``\"tree\"`` layout. As mentioned above, setting ``vertex_spacing`` overrides the specified value for ``layout_scale``, and as such it is harder to control the size of the mobject. However, we can adjust the captured frame and zoom out by using a :class:`.MovingCameraScene`::" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.Axes.pot b/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.Axes.pot index 994cd3f671..9eba72c307 100644 --- a/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.Axes.pot +++ b/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.Axes.pot @@ -66,9 +66,9 @@ msgid "Additional arguments to be passed to :class:`CoordinateSystem` and :class msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes:14 -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:9 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:16 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.plot_line_graph:21 -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.point_to_coords:9 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.point_to_coords:11 msgid "Examples" msgstr "" @@ -120,10 +120,26 @@ msgstr "" msgid "The width of the mobject." msgstr "" +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:3 +msgid "The coordinates. Each coord is passed as a separate argument: ``ax.coords_to_point(1, 2, 3)``. Also accepts a list of coordinates ``ax.coords_to_point( [x_0, x_1, ...], [y_0, y_1, ...], ... )`` ``ax.coords_to_point( [[x_0, y_0, z_0], [x_1, y_1, z_1]] )``" +msgstr "" + #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:3 msgid "The coordinates. Each coord is passed as a separate argument: ``ax.coords_to_point(1, 2, 3)``." msgstr "" +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:5 +msgid "Also accepts a list of coordinates" +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:7 +msgid "``ax.coords_to_point( [x_0, x_1, ...], [y_0, y_1, ...], ... )``" +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:9 +msgid "``ax.coords_to_point( [[x_0, y_0, z_0], [x_1, y_1, z_1]] )``" +msgstr "" + #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.get_axes:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.plot_line_graph:0 @@ -131,8 +147,8 @@ msgstr "" msgid "Returns" msgstr "" -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:5 -msgid "A point with respect to the scene's coordinate system." +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:11 +msgid "A point with respect to the scene's coordinate system. The shape of the array will be similar to the shape of the input." msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.coords_to_point:0 @@ -187,7 +203,7 @@ msgid "A VDict containing both the line and dots (if specified). The line can be msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.Axes.point_to_coords:3 -msgid "The point, i.e. ``RIGHT`` or ``[0, 1, 0]``." +msgid "The point, i.e. ``RIGHT`` or ``[0, 1, 0]``. Also accepts a list of points as ``[RIGHT, [0, 1, 0]]``." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.CoordinateSystem.pot b/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.CoordinateSystem.pot index f49f657bd0..b2f20b2dd5 100644 --- a/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.CoordinateSystem.pot +++ b/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.CoordinateSystem.pot @@ -19,7 +19,7 @@ msgid "Bases: :py:class:`object`" msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem:1 -msgid "Abstract class for Axes and NumberPlane" +msgid "Abstract base class for Axes and NumberPlane." msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem:4 @@ -27,7 +27,7 @@ msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.angle_of_tangent:12 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_T_label:17 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_area:16 -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:15 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:17 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_graph_label:16 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_horizontal_line:10 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_lines_to_point:14 @@ -39,11 +39,12 @@ msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_y_axis_label:12 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.input_to_graph_coords:5 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.input_to_graph_point:12 -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot:16 -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:17 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot:18 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:20 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_derivative_graph:11 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_implicit_curve:9 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_polar_graph:8 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:17 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.polar_to_point:10 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.slope_of_tangent:11 msgid "Examples" @@ -64,7 +65,7 @@ msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.add_coordinates:1::1 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.c2p:1 -msgid "Abbreviation for coords_to_point" +msgid "Abbreviation for :meth:`coords_to_point`" msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.add_coordinates:1::1 @@ -78,6 +79,7 @@ msgid "Returns a :class:`~.Polygon` representing the area under the graph passed msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.add_coordinates:1::1 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:1 msgid "Defines labels for the x_axis and y_axis of the graph." msgstr "" @@ -158,7 +160,7 @@ msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.add_coordinates:1::1 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.p2c:1 -msgid "Abbreviation for point_to_coords" +msgid "Abbreviation for :meth:`point_to_coords`" msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.add_coordinates:1::1 @@ -181,11 +183,21 @@ msgstr "" msgid "Creates the curves of an implicit function." msgstr "" +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.add_coordinates:1::1 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_parametric_curve:1 +msgid "A parametric curve." +msgstr "" + #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.add_coordinates:1::1 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_polar_graph:1 msgid "A polar graph." msgstr "" +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.add_coordinates:1::1 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:1 +msgid "Generates a surface based on a function." +msgstr "" + #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.add_coordinates:1::1 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.point_to_polar:1 msgid "Gets polar coordinates from a point." @@ -238,7 +250,9 @@ msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_derivative_graph:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_implicit_curve:0 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_parametric_curve:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_polar_graph:0 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.point_to_polar:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.polar_to_point:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.pr2pt:0 @@ -288,6 +302,7 @@ msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_derivative_graph:0 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.point_to_polar:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.polar_to_point:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.slope_of_tangent:0 @@ -321,7 +336,9 @@ msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_derivative_graph:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_implicit_curve:0 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_parametric_curve:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_polar_graph:0 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.point_to_polar:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.polar_to_point:0 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.pr2pt:0 @@ -403,23 +420,23 @@ msgstr "" msgid "When x_ranges do not match (either area x_range, graph's x_range or bounded_graph's x_range)." msgstr "" -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:1 -msgid "Defines labels for the x_axis and y_axis of the graph. For increased control over the position of the labels, use :meth:`get_x_axis_label` and :meth:`get_y_axis_label`." +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:3 +msgid "For increased control over the position of the labels, use :meth:`get_x_axis_label` and :meth:`get_y_axis_label`." msgstr "" -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:4 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:6 msgid "The label for the x_axis. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs." msgstr "" -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:5 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:7 msgid "The label for the y_axis. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs." msgstr "" -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:7 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:9 msgid "A :class:`~.Vgroup` of the labels for the x_axis and y_axis." msgstr "" -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:11 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.get_axis_labels:13 msgid ":class:`get_x_axis_label` :class:`get_y_axis_label`" msgstr "" @@ -702,14 +719,18 @@ msgid "The range of the curve along the axes. ``x_range = [x_min, x_max, x_step] msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot:5 -msgid "Additional parameters to be passed to :class:`~.ParametricFunction`." +msgid "Whether to pass in the generated t value array to the function. Only use this if your function supports it. Output should be a numpy array of shape ``[y_0, y_1, ...]``" msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot:7 +msgid "Additional parameters to be passed to :class:`~.ParametricFunction`." +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot:9 msgid "The plotted curve." msgstr "" -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot:11 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot:13 msgid "This method may not produce accurate graphs since Manim currently relies on interpolation between evenly-spaced samples of the curve, instead of intelligent plotting. See the example below for some solutions to this problem." msgstr "" @@ -726,15 +747,19 @@ msgid "The number of points to take the area under the graph." msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:6 +msgid "Whether to use the vectorized version of the antiderivative. This means to pass in the generated t value array to the function. Only use this if your function supports it. Output should be a numpy array of shape ``[y_0, y_1, ...]``" +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:9 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_derivative_graph:5 msgid "Any valid keyword argument of :class:`~.ParametricFunction`." msgstr "" -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:8 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:11 msgid "The curve of the antiderivative." msgstr "" -#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:12 +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_antiderivative_graph:15 msgid "This graph is plotted from the values of area under the reference graph. The result might not be ideal if the reference graph contains uncalculatable areas from x=0." msgstr "" @@ -766,6 +791,22 @@ msgstr "" msgid "Additional parameters to pass into :class:`ImplicitFunction`." msgstr "" +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_parametric_curve:3 +msgid "A parametric function mapping a number to a point in the coordinate system." +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_parametric_curve:5 +msgid "Whether to pass in the generated t value array to the function. Only use this if your function supports it." +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_parametric_curve:6 +msgid "Any further keyword arguments are passed to :class:`.ParametricFunction`." +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_parametric_curve:9 +msgid "Example" +msgstr "" + #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_polar_graph:3 msgid "The function r of theta." msgstr "" @@ -778,6 +819,34 @@ msgstr "" msgid "Additional parameters passed to :class:`~.ParametricFunction`." msgstr "" +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:3 +msgid "The function used to construct the :class:`~.Surface`." +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:4 +msgid "The range of the ``u`` variable: ``(u_min, u_max)``." +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:5 +msgid "The range of the ``v`` variable: ``(v_min, v_max)``." +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:6 +msgid "Colors of the surface. Passing a list of colors will color the surface by z-value. Passing a list of tuples in the form ``(color, pivot)`` allows user-defined pivots where the color transitions." +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:9 +msgid "Defines the axis on which the colorscale is applied (0 = x, 1 = y, 2 = z), default is z-axis (2)." +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:11 +msgid "Additional parameters to be passed to :class:`~.Surface`." +msgstr "" + +#: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.plot_surface:13 +msgid "The plotted surface." +msgstr "" + #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.point_to_polar:3 #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.CoordinateSystem.polar_to_point:6 msgid "The point." diff --git a/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.NumberPlane.pot b/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.NumberPlane.pot index 0b2f123e73..e31a3beee6 100644 --- a/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.NumberPlane.pot +++ b/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.NumberPlane.pot @@ -63,7 +63,7 @@ msgid "Additional arguments to be passed to :class:`Axes`." msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.NumberPlane:14 -msgid "If :attr:`x_length` or :attr:`y_length` are not defined, the plane automatically adjusts its lengths based on the :attr:`x_range` and :attr:`y_range` values to set the ``unit_size`` to 1." +msgid "If :attr:`x_length` or :attr:`y_length` are not defined, they are automatically calculated such that one unit on each axis is one Manim unit long." msgstr "" #: ../../../manim/mobject/graphing/coordinate_systems.py:docstring of manim.mobject.graphing.coordinate_systems.NumberPlane:18 diff --git a/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.pot b/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.pot index 4ca16af714..dff35f65a2 100644 --- a/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.pot +++ b/docs/i18n/gettext/reference/manim.mobject.graphing.coordinate_systems.pot @@ -27,7 +27,7 @@ msgid "A :class:`~.NumberPlane` specialized for use with complex numbers." msgstr "" #: ../../source/reference/manim.mobject.graphing.coordinate_systems.rst:30::1 -msgid "Abstract class for Axes and NumberPlane" +msgid "Abstract base class for Axes and NumberPlane." msgstr "" #: ../../source/reference/manim.mobject.graphing.coordinate_systems.rst:30::1 diff --git a/docs/i18n/gettext/reference/manim.mobject.graphing.functions.ParametricFunction.pot b/docs/i18n/gettext/reference/manim.mobject.graphing.functions.ParametricFunction.pot index bbf76c1e1a..7548f5c5af 100644 --- a/docs/i18n/gettext/reference/manim.mobject.graphing.functions.ParametricFunction.pot +++ b/docs/i18n/gettext/reference/manim.mobject.graphing.functions.ParametricFunction.pot @@ -43,18 +43,22 @@ msgid "Whether to interpolate between the points of the function after they have msgstr "" #: ../../../manim/mobject/graphing/functions.py:docstring of manim.mobject.graphing.functions.ParametricFunction:8 +msgid "Whether to pass in the generated t value array to the function as ``[t_0, t_1, ...]``. Only use this if your function supports it. Output should be a numpy array of shape ``[[x_0, x_1, ...], [y_0, y_1, ...], [z_0, z_1, ...]]`` but ``z`` can also be 0 if the Axes is 2D" +msgstr "" + +#: ../../../manim/mobject/graphing/functions.py:docstring of manim.mobject.graphing.functions.ParametricFunction:12 msgid "Values of t at which the function experiences discontinuity." msgstr "" -#: ../../../manim/mobject/graphing/functions.py:docstring of manim.mobject.graphing.functions.ParametricFunction:9 +#: ../../../manim/mobject/graphing/functions.py:docstring of manim.mobject.graphing.functions.ParametricFunction:13 msgid "The left and right tolerance for the discontinuities." msgstr "" -#: ../../../manim/mobject/graphing/functions.py:docstring of manim.mobject.graphing.functions.ParametricFunction:12 +#: ../../../manim/mobject/graphing/functions.py:docstring of manim.mobject.graphing.functions.ParametricFunction:16 msgid "Examples" msgstr "" -#: ../../../manim/mobject/graphing/functions.py:docstring of manim.mobject.graphing.functions.ParametricFunction:42 +#: ../../../manim/mobject/graphing/functions.py:docstring of manim.mobject.graphing.functions.ParametricFunction:46 msgid "If your function has discontinuities, you'll have to specify the location of the discontinuities manually. See the following example for guidance." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.graphing.number_line.NumberLine.pot b/docs/i18n/gettext/reference/manim.mobject.graphing.number_line.NumberLine.pot index 9544f8bf5b..42be00957c 100644 --- a/docs/i18n/gettext/reference/manim.mobject.graphing.number_line.NumberLine.pot +++ b/docs/i18n/gettext/reference/manim.mobject.graphing.number_line.NumberLine.pot @@ -127,6 +127,8 @@ msgid "Number ranges that include both negative and positive values will be gene msgstr "" #: ../../../manim/mobject/graphing/number_line.py:docstring of manim.mobject.graphing.number_line.NumberLine:34 +#: ../../../manim/mobject/graphing/number_line.py:docstring of manim.mobject.graphing.number_line.NumberLine.number_to_point:10 +#: ../../../manim/mobject/graphing/number_line.py:docstring of manim.mobject.graphing.number_line.NumberLine.point_to_number:10 msgid "Examples" msgstr "" @@ -308,11 +310,11 @@ msgid "A numpy array of floats represnting values along the number line." msgstr "" #: ../../../manim/mobject/graphing/number_line.py:docstring of manim.mobject.graphing.number_line.NumberLine.number_to_point:4 -msgid "The value to be transformed into a coordinate." +msgid "The value to be transformed into a coordinate. Or a list of values." msgstr "" #: ../../../manim/mobject/graphing/number_line.py:docstring of manim.mobject.graphing.number_line.NumberLine.number_to_point:6 -msgid "A point with respect to the scene's coordinate system." +msgid "A point with respect to the scene's coordinate system. Or a list of points." msgstr "" #: ../../../manim/mobject/graphing/number_line.py:docstring of manim.mobject.graphing.number_line.NumberLine.point_to_number:4 diff --git a/docs/i18n/gettext/reference/manim.mobject.graphing.probability.BarChart.pot b/docs/i18n/gettext/reference/manim.mobject.graphing.probability.BarChart.pot index 9fa6bfdcc6..18f5e0e4c1 100644 --- a/docs/i18n/gettext/reference/manim.mobject.graphing.probability.BarChart.pot +++ b/docs/i18n/gettext/reference/manim.mobject.graphing.probability.BarChart.pot @@ -29,11 +29,11 @@ msgid "Parameters" msgstr "" #: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart:5 -msgid "An iterable of values that determines the height of each bar. Accepts negative values." +msgid "A sequence of values that determines the height of each bar. Accepts negative values." msgstr "" #: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart:6 -msgid "An iterable of names for each bar. Does not have to match the length of ``values``." +msgid "A sequence of names for each bar. Does not have to match the length of ``values``." msgstr "" #: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart:7 @@ -49,7 +49,7 @@ msgid "The length of the y-axis." msgstr "" #: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart:12 -msgid "The color for the bars. Accepts a single color or an iterable of colors. If the length of``bar_colors`` does not match that of ``values``, intermediate colors will be automatically determined." +msgid "The color for the bars. Accepts a sequence of colors (can contain just one item). If the length of``bar_colors`` does not match that of ``values``, intermediate colors will be automatically determined." msgstr "" #: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart:15 @@ -65,7 +65,7 @@ msgid "The stroke width of the bars." msgstr "" #: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart:20 -#: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart.change_bar_values:7 +#: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart.change_bar_values:8 #: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart.get_bar_labels:10 msgid "Examples" msgstr "" @@ -111,6 +111,10 @@ msgstr "" msgid "The values that will be used to update the height of the bars. Does not have to match the number of bars." msgstr "" +#: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart.change_bar_values:5 +msgid "Whether to re-initalize the colors of the bars based on ``self.bar_colors``." +msgstr "" + #: ../../../manim/mobject/graphing/probability.py:docstring of manim.mobject.graphing.probability.BarChart.get_bar_labels:1 msgid "Annotates each bar with its corresponding value. Use ``self.bar_labels`` to access the labels after creation." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.matrix.Matrix.pot b/docs/i18n/gettext/reference/manim.mobject.matrix.Matrix.pot index a81b5c3354..996df14df3 100644 --- a/docs/i18n/gettext/reference/manim.mobject.matrix.Matrix.pot +++ b/docs/i18n/gettext/reference/manim.mobject.matrix.Matrix.pot @@ -91,6 +91,10 @@ msgid "The right bracket type, by default ``\"]\"``." msgstr "" #: ../../../manim/mobject/matrix.py:docstring of manim.mobject.matrix.Matrix:69 +msgid "``True`` if should stretch the brackets to fit the height of matrix contents, by default ``True``." +msgstr "" + +#: ../../../manim/mobject/matrix.py:docstring of manim.mobject.matrix.Matrix:70 msgid "Additional arguments to be passed to :class:`~.MathTex` when constructing the brackets." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.matrix.MobjectMatrix.pot b/docs/i18n/gettext/reference/manim.mobject.matrix.MobjectMatrix.pot index 4c402dd5bd..e7a29ce27b 100644 --- a/docs/i18n/gettext/reference/manim.mobject.matrix.MobjectMatrix.pot +++ b/docs/i18n/gettext/reference/manim.mobject.matrix.MobjectMatrix.pot @@ -79,6 +79,10 @@ msgid "The right bracket type, by default ``\"]\"``." msgstr "" #: ../../../manim/mobject/matrix.py:docstring of manim.mobject.matrix.MobjectMatrix:30 +msgid "``True`` if should stretch the brackets to fit the height of matrix contents, by default ``True``." +msgstr "" + +#: ../../../manim/mobject/matrix.py:docstring of manim.mobject.matrix.MobjectMatrix:31 msgid "Additional arguments to be passed to :class:`~.MathTex` when constructing the brackets." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.mobject.Group.pot b/docs/i18n/gettext/reference/manim.mobject.mobject.Group.pot index 5e44eb075d..f22c37b286 100644 --- a/docs/i18n/gettext/reference/manim.mobject.mobject.Group.pot +++ b/docs/i18n/gettext/reference/manim.mobject.mobject.Group.pot @@ -22,6 +22,14 @@ msgstr "" msgid "Groups together multiple :class:`Mobjects <.Mobject>`." msgstr "" +#: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Group:4 +msgid "Notes" +msgstr "" + +#: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Group:5 +msgid "When adding the same mobject more than once, repetitions are ignored. Use :meth:`.Mobject.copy` to create a separate copy which can then be added to the group." +msgstr "" + #: ../../source/reference/manim.mobject.mobject.Group.rst:14 msgid "Methods" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.mobject.Mobject.pot b/docs/i18n/gettext/reference/manim.mobject.mobject.Mobject.pot index 0b80228c7d..c1b1b0e014 100644 --- a/docs/i18n/gettext/reference/manim.mobject.mobject.Mobject.pot +++ b/docs/i18n/gettext/reference/manim.mobject.mobject.Mobject.pot @@ -47,469 +47,474 @@ msgstr "" msgid "Methods" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.add:1 msgid "Add mobjects as submobjects." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.add_animation_override:1 msgid "Add an animation override." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.add_background_rectangle:1 msgid "Add a BackgroundRectangle as submobject." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.add_to_back:1 msgid "Add all passed mobjects to the back of the submobjects." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.add_updater:1 msgid "Add an update function to this mobject." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.align_data:1 msgid "Aligns the data of this mobject with another mobject." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.align_on_border:1 msgid "Direction just needs to be a vector pointing towards side or corner in the 2d plane." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.align_to:1 msgid "Aligns mobject to another :class:`~.Mobject` in a certain direction." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.animation_override_for:1 msgid "Returns the function defining a specific animation override for this class." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 msgid "Applies a complex function to a :class:`Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.apply_to_family:1 msgid "Apply a function to ``self`` and every submobject with points recursively." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.arrange:1 msgid "Sorts :class:`~.Mobject` next to each other on screen." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.arrange_in_grid:1 msgid "Arrange submobjects in a grid." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.arrange_submobjects:1 msgid "Arrange the position of :attr:`submobjects` with a small buffer." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.become:1 msgid "Edit points, colors and submobjects to be identical to another :class:`~.Mobject`" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.clear_updaters:1 msgid "Remove every updater." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.copy:1 msgid "Create and return an identical copy of the :class:`Mobject` including all :attr:`submobjects`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.flip:1 msgid "Flips/Mirrors an mobject about its center." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.generate_points:1 msgid "Initializes :attr:`points` and therefore the shape." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_bottom:1 msgid "Get bottom coordinates of a box bounding the :class:`~.Mobject`" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_center:1 msgid "Get center coordinates" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_color:1 msgid "Returns the color of the :class:`~.Mobject`" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_coord:1 msgid "Meant to generalize ``get_x``, ``get_y`` and ``get_z``" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_corner:1 msgid "Get corner coordinates for certain direction." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 msgid "Picture a box bounding the :class:`~.Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_edge_center:1 msgid "Get edge coordinates for certain direction." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_end:1 msgid "Returns the point, where the stroke that surrounds the :class:`~.Mobject` ends." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_left:1 msgid "Get left coordinates of a box bounding the :class:`~.Mobject`" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_midpoint:1 msgid "Get coordinates of the middle of the path that forms the :class:`~.Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_nadir:1 msgid "Get nadir (opposite the zenith) coordinates of a box bounding a 3D :class:`~.Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 msgid "The simplest :class:`~.Mobject` to be transformed to or from self." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_right:1 msgid "Get right coordinates of a box bounding the :class:`~.Mobject`" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_start:1 msgid "Returns the point, where the stroke that surrounds the :class:`~.Mobject` starts." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_start_and_end:1 msgid "Returns starting and ending point of a stroke as a ``tuple``." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_time_based_updaters:1 msgid "Return all updaters using the ``dt`` parameter." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_top:1 msgid "Get top coordinates of a box bounding the :class:`~.Mobject`" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_updaters:1 msgid "Return all updaters." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_x:1 msgid "Returns x coordinate of the center of the :class:`~.Mobject` as ``float``" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_y:1 msgid "Returns y coordinate of the center of the :class:`~.Mobject` as ``float``" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_z:1 msgid "Returns z coordinate of the center of the :class:`~.Mobject` as ``float``" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.get_zenith:1 msgid "Get zenith coordinates of a box bounding a 3D :class:`~.Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.has_no_points:1 msgid "Check if :class:`~.Mobject` *does not* contains points." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.has_points:1 msgid "Check if :class:`~.Mobject` contains points." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.has_time_based_updater:1 msgid "Test if ``self`` has a time based updater." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.init_colors:1 msgid "Initializes the colors." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 +#: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.insert:1 +msgid "Inserts a mobject at a specific position into self.submobjects" +msgstr "" + +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.interpolate:1 msgid "Turns this :class:`~.Mobject` into an interpolation between ``mobject1`` and ``mobject2``." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.invert:1 msgid "Inverts the list of :attr:`submobjects`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.length_over_dim:1 msgid "Measure the length of an :class:`~.Mobject` in a certain direction." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.match_color:1 msgid "Match the color with the color of another :class:`~.Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.match_coord:1 msgid "Match the coordinates with the coordinates of another :class:`~.Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.match_depth:1 msgid "Match the depth with the depth of another :class:`~.Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.match_dim_size:1 msgid "Match the specified dimension with the dimension of another :class:`~.Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.match_height:1 msgid "Match the height with the height of another :class:`~.Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.match_points:1 msgid "Edit points, positions, and submobjects to be identical to another :class:`~.Mobject`, while keeping the style unchanged." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.match_updaters:1 msgid "Match the updaters of the given mobject." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.match_width:1 msgid "Match the width with the width of another :class:`~.Mobject`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 msgid "Match x coord." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 msgid "Match y coord." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 msgid "Match z coord." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.move_to:1 msgid "Move center of the :class:`~.Mobject` to certain coordinate." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.next_to:1 msgid "Move this :class:`~.Mobject` next to another's :class:`~.Mobject` or coordinate." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.null_point_align:1 msgid "If a :class:`~.Mobject` with points is being aligned to one without, treat both as groups, and push the one with points into its own submobjects list." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.remove:1 msgid "Remove :attr:`submobjects`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.remove_updater:1 msgid "Remove an updater." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.repeat:1 msgid "This can make transition animations nicer" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.reset_points:1 msgid "Sets :attr:`points` to be an empty array." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.restore:1 msgid "Restores the state that was previously saved with :meth:`~.Mobject.save_state`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.resume_updating:1 msgid "Enable updating from updaters and animations." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.rotate:1 msgid "Rotates the :class:`~.Mobject` about a certain point." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.rotate_about_origin:1 msgid "Rotates the :class:`~.Mobject` about the ORIGIN, which is at [0,0,0]." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.save_image:1 msgid "Saves an image of only this :class:`Mobject` at its position to a png file." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 msgid "Save the current state (position, color & size)." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.scale:1 msgid "Scale the size by a factor." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.scale_to_fit_depth:1 msgid "Scales the :class:`~.Mobject` to fit a depth while keeping width/height proportional." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.scale_to_fit_height:1 msgid "Scales the :class:`~.Mobject` to fit a height while keeping width/depth proportional." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.scale_to_fit_width:1 msgid "Scales the :class:`~.Mobject` to fit a width while keeping height/depth proportional." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.set:1 msgid "Sets attributes." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 msgid "Condition is function which takes in one arguments, (x, y, z)." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.set_default:1 msgid "Sets the default values of keyword arguments." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.set_x:1 msgid "Set x value of the center of the :class:`~.Mobject` (``int`` or ``float``)" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.set_y:1 msgid "Set y value of the center of the :class:`~.Mobject` (``int`` or ``float``)" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.set_z:1 msgid "Set z value of the center of the :class:`~.Mobject` (``int`` or ``float``)" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.set_z_index:1 msgid "Sets the :class:`~.Mobject`'s :attr:`z_index` to the value specified in `z_index_value`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.set_z_index_by_z_coordinate:1 msgid "Sets the :class:`~.Mobject`'s z coordinate to the value of :attr:`z_index`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.shift:1 msgid "Shift by the given vectors." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.shuffle:1 msgid "Shuffles the list of :attr:`submobjects`." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.shuffle_submobjects:1 msgid "Shuffles the order of :attr:`submobjects`" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.sort:1 msgid "Sorts the list of :attr:`submobjects` by a function defined by ``submob_func``." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.sort_submobjects:1 msgid "Sort the :attr:`submobjects`" msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.stretch_to_fit_depth:1 msgid "Stretches the :class:`~.Mobject` to fit a depth, not keeping width/height proportional." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.stretch_to_fit_height:1 msgid "Stretches the :class:`~.Mobject` to fit a height, not keeping width/depth proportional." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.stretch_to_fit_width:1 msgid "Stretches the :class:`~.Mobject` to fit a width, not keeping height/depth proportional." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.suspend_updating:1 msgid "Disable updating from updaters and animations." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:174::1 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:175::1 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.update:1 msgid "Apply all updaters." msgstr "" -#: ../../source/reference/manim.mobject.mobject.Mobject.rst:176 +#: ../../source/reference/manim.mobject.mobject.Mobject.rst:177 msgid "Attributes" msgstr "" @@ -556,6 +561,7 @@ msgstr "" #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.become:0 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.clear_updaters:0 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.copy:0 +#: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.insert:0 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.invert:0 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.match_color:0 #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.match_coord:0 @@ -757,6 +763,10 @@ msgstr "" msgid "Adding an object to itself raises an error::" msgstr "" +#: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.add:45 +msgid "A given mobject cannot be added as a submobject twice to some parent::" +msgstr "" + #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.add_animation_override:3 msgid "This does not apply to subclasses." msgstr "" @@ -1019,6 +1029,22 @@ msgstr "" msgid "`bool`" msgstr "" +#: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.insert:3 +msgid "Effectively just calls ``self.submobjects.insert(index, mobject)``, where ``self.submobjects`` is a list." +msgstr "" + +#: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.insert:6 +msgid "Highly adapted from ``Mobject.add``." +msgstr "" + +#: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.insert:8 +msgid "The index at which" +msgstr "" + +#: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.insert:9 +msgid "The mobject to be inserted." +msgstr "" + #: ../../../manim/mobject/mobject.py:docstring of manim.mobject.mobject.Mobject.invert:3 msgid "If ``True``, all submobject lists of this mobject's family are inverted." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.table.DecimalTable.pot b/docs/i18n/gettext/reference/manim.mobject.table.DecimalTable.pot index 24ccb3a5b0..6f0eeeb40e 100644 --- a/docs/i18n/gettext/reference/manim.mobject.table.DecimalTable.pot +++ b/docs/i18n/gettext/reference/manim.mobject.table.DecimalTable.pot @@ -19,7 +19,7 @@ msgid "Bases: :py:class:`manim.mobject.table.Table`" msgstr "" #: ../../../manim/mobject/table.py:docstring of manim.mobject.table.DecimalTable:1 -msgid "A specialized :class:`~.Table` mobject for use with with :class:`~.DecimalNumber` to display decimal entries." +msgid "A specialized :class:`~.Table` mobject for use with :class:`~.DecimalNumber` to display decimal entries." msgstr "" #: ../../../manim/mobject/table.py:docstring of manim.mobject.table.DecimalTable:4 diff --git a/docs/i18n/gettext/reference/manim.mobject.table.IntegerTable.pot b/docs/i18n/gettext/reference/manim.mobject.table.IntegerTable.pot index ba3128a7c6..b90d65c359 100644 --- a/docs/i18n/gettext/reference/manim.mobject.table.IntegerTable.pot +++ b/docs/i18n/gettext/reference/manim.mobject.table.IntegerTable.pot @@ -19,7 +19,7 @@ msgid "Bases: :py:class:`manim.mobject.table.Table`" msgstr "" #: ../../../manim/mobject/table.py:docstring of manim.mobject.table.IntegerTable:1 -msgid "A specialized :class:`~.Table` mobject for use with with :class:`~.Integer`." +msgid "A specialized :class:`~.Table` mobject for use with :class:`~.Integer`." msgstr "" #: ../../../manim/mobject/table.py:docstring of manim.mobject.table.IntegerTable:4 diff --git a/docs/i18n/gettext/reference/manim.mobject.table.MathTable.pot b/docs/i18n/gettext/reference/manim.mobject.table.MathTable.pot index 27388822b6..f13ff50680 100644 --- a/docs/i18n/gettext/reference/manim.mobject.table.MathTable.pot +++ b/docs/i18n/gettext/reference/manim.mobject.table.MathTable.pot @@ -19,7 +19,7 @@ msgid "Bases: :py:class:`manim.mobject.table.Table`" msgstr "" #: ../../../manim/mobject/table.py:docstring of manim.mobject.table.MathTable:1 -msgid "A specialized :class:`~.Table` mobject for use with with LaTeX." +msgid "A specialized :class:`~.Table` mobject for use with LaTeX." msgstr "" #: ../../../manim/mobject/table.py:docstring of manim.mobject.table.MathTable:4 diff --git a/docs/i18n/gettext/reference/manim.mobject.table.MobjectTable.pot b/docs/i18n/gettext/reference/manim.mobject.table.MobjectTable.pot index 834b89fbcd..32b21bfc5a 100644 --- a/docs/i18n/gettext/reference/manim.mobject.table.MobjectTable.pot +++ b/docs/i18n/gettext/reference/manim.mobject.table.MobjectTable.pot @@ -19,7 +19,7 @@ msgid "Bases: :py:class:`manim.mobject.table.Table`" msgstr "" #: ../../../manim/mobject/table.py:docstring of manim.mobject.table.MobjectTable:1 -msgid "A specialized :class:`~.Table` mobject for use with with :class:`~.Mobject`." +msgid "A specialized :class:`~.Table` mobject for use with :class:`~.Mobject`." msgstr "" #: ../../../manim/mobject/table.py:docstring of manim.mobject.table.MobjectTable:4 diff --git a/docs/i18n/gettext/reference/manim.mobject.table.pot b/docs/i18n/gettext/reference/manim.mobject.table.pot index fffec1c1a4..9dbab0b358 100644 --- a/docs/i18n/gettext/reference/manim.mobject.table.pot +++ b/docs/i18n/gettext/reference/manim.mobject.table.pot @@ -23,19 +23,19 @@ msgid "Classes" msgstr "" #: ../../source/reference/manim.mobject.table.rst:28::1 -msgid "A specialized :class:`~.Table` mobject for use with with :class:`~.DecimalNumber` to display decimal entries." +msgid "A specialized :class:`~.Table` mobject for use with :class:`~.DecimalNumber` to display decimal entries." msgstr "" #: ../../source/reference/manim.mobject.table.rst:28::1 -msgid "A specialized :class:`~.Table` mobject for use with with :class:`~.Integer`." +msgid "A specialized :class:`~.Table` mobject for use with :class:`~.Integer`." msgstr "" #: ../../source/reference/manim.mobject.table.rst:28::1 -msgid "A specialized :class:`~.Table` mobject for use with with LaTeX." +msgid "A specialized :class:`~.Table` mobject for use with LaTeX." msgstr "" #: ../../source/reference/manim.mobject.table.rst:28::1 -msgid "A specialized :class:`~.Table` mobject for use with with :class:`~.Mobject`." +msgid "A specialized :class:`~.Table` mobject for use with :class:`~.Mobject`." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.MarkupText.pot b/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.MarkupText.pot index 30fc0bd4fb..66bb467eb4 100644 --- a/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.MarkupText.pot +++ b/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.MarkupText.pot @@ -147,7 +147,7 @@ msgid "Escaping of special characters: ``>`` **should** be written as ``>`` w msgstr "" #: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:103 -msgid "You can find more information about Pango markup formatting at the corresponding documentation page: `Pango Markup `_. Please be aware that not all features are supported by this class and that the ```` tag mentioned above is not supported by Pango." +msgid "You can find more information about Pango markup formatting at the corresponding documentation page: `Pango Markup `_. Please be aware that not all features are supported by this class and that the ```` tag mentioned above is not supported by Pango." msgstr "" #: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:0 @@ -155,38 +155,38 @@ msgid "Parameters" msgstr "" #: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:109 -msgid "The text that need to created as mobject." +msgid "The text that needs to be created as mobject." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:111 -msgid "The fill opacity with 1 meaning opaque and 0 meaning transparent." +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:110 +msgid "The fill opacity, with 1 meaning opaque and 0 meaning transparent." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:113 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:111 msgid "Stroke width." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:115 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:112 msgid "Font size." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:117 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:113 msgid "Line spacing." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:119 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:114 msgid "Global font setting for the entire text. Local overrides are possible." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:121 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:115 msgid "Global slant setting, e.g. `NORMAL` or `ITALIC`. Local overrides are possible." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:123 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:116 msgid "Global weight setting, e.g. `NORMAL` or `BOLD`. Local overrides are possible." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:125 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:117 msgid "Global gradient setting. Local overrides are possible." msgstr "" @@ -194,7 +194,7 @@ msgstr "" msgid "Returns" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:128 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:119 msgid "The text displayed in form of a :class:`.VGroup`-like mobject." msgstr "" @@ -202,23 +202,23 @@ msgstr "" msgid "Return type" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:132 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:123 msgid "Examples" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:233 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:224 msgid "As :class:`MarkupText` uses Pango to render text, rendering non-English characters is easily possible:" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:252 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:243 msgid "You can justify the text by passing :attr:`justify` parameter." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:287 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:278 msgid "Tests" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:288 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.MarkupText:279 msgid "Check that the creation of :class:`~.MarkupText` works::" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.Paragraph.pot b/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.Paragraph.pot index ea2abf6139..8cff47aff6 100644 --- a/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.Paragraph.pot +++ b/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.Paragraph.pot @@ -31,22 +31,26 @@ msgid "Parameters" msgstr "" #: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Paragraph:8 -msgid "Represents the spacing between lines. Default to -1, which means auto." +msgid "Represents the spacing between lines. Defaults to -1, which means auto." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Paragraph:10 -msgid "Defines the alignment of paragraph. Default to \"left\". Possible values are \"left\", \"right\", \"center\"" +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Paragraph:9 +msgid "Defines the alignment of paragraph. Defaults to None. Possible values are \"left\", \"right\" or \"center\"." msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Paragraph:14 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Paragraph:0 +msgid "Return type" +msgstr "" + +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Paragraph:12 msgid "Examples" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Paragraph:15 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Paragraph:13 msgid "Normal usage::" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Paragraph:22 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Paragraph:20 msgid "Remove unwanted invisible characters::" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.Text.pot b/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.Text.pot index 20971ad133..5fdf413089 100644 --- a/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.Text.pot +++ b/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.Text.pot @@ -31,34 +31,34 @@ msgid "Parameters" msgstr "" #: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:6 -msgid "The text that need to created as mobject." +msgid "The text that needs to be created as a mobject." msgstr "" #: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:0 msgid "Returns" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:9 -msgid "The mobject like :class:`.VGroup`." +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:8 +msgid "The mobject-like :class:`.VGroup`." msgstr "" #: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:0 msgid "Return type" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:13 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:12 msgid "Examples" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:62 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:61 msgid "As :class:`Text` uses Pango to render text, rendering non-English characters is easily possible:" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:95 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:94 msgid "Tests" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:96 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.Text:95 msgid "Check that the creation of :class:`~.Text` works::" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.pot b/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.pot index 724ed064c3..315e8436d7 100644 --- a/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.pot +++ b/docs/i18n/gettext/reference/manim.mobject.text.text_mobject.pot @@ -114,7 +114,7 @@ msgstr "" msgid "Returns" msgstr "" -#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.remove_invisible_chars:6 +#: ../../../manim/mobject/text/text_mobject.py:docstring of manim.mobject.text.text_mobject.remove_invisible_chars:5 msgid "The SVGMobject without unwanted invisible characters." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.three_d.three_dimensions.Cylinder.pot b/docs/i18n/gettext/reference/manim.mobject.three_d.three_dimensions.Cylinder.pot index e4b4aefef3..1a0faa8e5e 100644 --- a/docs/i18n/gettext/reference/manim.mobject.three_d.three_dimensions.Cylinder.pot +++ b/docs/i18n/gettext/reference/manim.mobject.three_d.three_dimensions.Cylinder.pot @@ -23,7 +23,6 @@ msgid "A cylinder, defined by its height, radius and direction," msgstr "" #: ../../../manim/mobject/three_d/three_dimensions.py:docstring of manim.mobject.three_d.three_dimensions.Cylinder:4 -#: ../../../manim/mobject/three_d/three_dimensions.py:docstring of manim.mobject.three_d.three_dimensions.Cylinder.get_direction:6 msgid "Examples" msgstr "" @@ -65,7 +64,8 @@ msgid "Converts from cylindrical coordinates to cartesian." msgstr "" #: ../../source/reference/manim.mobject.three_d.three_dimensions.Cylinder.rst:23::1 -msgid "Uses :func:`~.space_ops.shoelace_direction` to calculate the direction." +#: ../../../manim/mobject/three_d/three_dimensions.py:docstring of manim.mobject.three_d.three_dimensions.Cylinder.get_direction:1 +msgid "Returns the direction of the central axis of the cylinder." msgstr "" #: ../../source/reference/manim.mobject.three_d.three_dimensions.Cylinder.rst:25 @@ -92,28 +92,4 @@ msgstr "" msgid "The width of the mobject." msgstr "" -#: ../../../manim/mobject/three_d/three_dimensions.py:docstring of manim.mobject.three_d.three_dimensions.Cylinder.func:1 -msgid "Converts from cylindrical coordinates to cartesian. :param u: The height. :type u: :class:`float` :param v: The azimuthal angle. :type v: :class:`float`" -msgstr "" - -#: ../../../manim/mobject/three_d/three_dimensions.py:docstring of manim.mobject.three_d.three_dimensions.Cylinder.get_direction:1 -msgid "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." -msgstr "" - -#: ../../../manim/mobject/three_d/three_dimensions.py:docstring of manim.mobject.three_d.three_dimensions.Cylinder.get_direction:7 -msgid "The default direction of a :class:`~.Circle` is counterclockwise::" -msgstr "" - -#: ../../../manim/mobject/three_d/three_dimensions.py:docstring of manim.mobject.three_d.three_dimensions.Cylinder.get_direction:0 -msgid "Returns" -msgstr "" - -#: ../../../manim/mobject/three_d/three_dimensions.py:docstring of manim.mobject.three_d.three_dimensions.Cylinder.get_direction:13 -msgid "Either ``\"CW\"`` or ``\"CCW\"``." -msgstr "" - -#: ../../../manim/mobject/three_d/three_dimensions.py:docstring of manim.mobject.three_d.three_dimensions.Cylinder.get_direction:0 -msgid "Return type" -msgstr "" - diff --git a/docs/i18n/gettext/reference/manim.mobject.types.image_mobject.ImageMobject.pot b/docs/i18n/gettext/reference/manim.mobject.types.image_mobject.ImageMobject.pot index fe4da00bda..f834d456fc 100644 --- a/docs/i18n/gettext/reference/manim.mobject.types.image_mobject.ImageMobject.pot +++ b/docs/i18n/gettext/reference/manim.mobject.types.image_mobject.ImageMobject.pot @@ -45,52 +45,47 @@ msgstr "" msgid "Methods" msgstr "" -#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:26::1 -#: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.change_to_rgba_array:1 -msgid "Converts an RGB array into RGBA with the alpha value opacity maxed." -msgstr "" - -#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:26::1 +#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:25::1 #: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.fade:1 msgid "Sets the image's opacity using a 1 - alpha relationship." msgstr "" -#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:26::1 +#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:25::1 #: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.get_pixel_array:1 msgid "A simple getter method." msgstr "" -#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:26::1 +#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:25::1 #: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.interpolate_color:1 msgid "Interpolates an array of pixel color values into another array of equal size." msgstr "" -#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:26::1 +#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:25::1 msgid "Condition is function which takes in one arguments, (x, y, z)." msgstr "" -#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:26::1 +#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:25::1 #: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.set_opacity:1 msgid "Sets the image's opacity." msgstr "" -#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:28 +#: ../../source/reference/manim.mobject.types.image_mobject.ImageMobject.rst:27 msgid "Attributes" msgstr "" -#: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.change_to_rgba_array:1::1 +#: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.fade:1::1 msgid "Used to animate the application of any method of :code:`self`." msgstr "" -#: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.change_to_rgba_array:1::1 +#: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.fade:1::1 msgid "The depth of the mobject." msgstr "" -#: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.change_to_rgba_array:1::1 +#: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.fade:1::1 msgid "The height of the mobject." msgstr "" -#: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.change_to_rgba_array:1::1 +#: ../../../manim/mobject/types/image_mobject.py:docstring of manim.mobject.types.image_mobject.ImageMobject.fade:1::1 msgid "The width of the mobject." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.types.vectorized_mobject.VGroup.pot b/docs/i18n/gettext/reference/manim.mobject.types.vectorized_mobject.VGroup.pot index b00c58b3a3..6ad6e4cf0e 100644 --- a/docs/i18n/gettext/reference/manim.mobject.types.vectorized_mobject.VGroup.pot +++ b/docs/i18n/gettext/reference/manim.mobject.types.vectorized_mobject.VGroup.pot @@ -27,11 +27,19 @@ msgid "This can be used to group multiple :class:`~.VMobject` instances together msgstr "" #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VGroup:7 +msgid "Notes" +msgstr "" + +#: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VGroup:8 +msgid "When adding the same mobject more than once, repetitions are ignored. Use :meth:`.Mobject.copy` to create a separate copy which can then be added to the group." +msgstr "" + +#: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VGroup:13 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VGroup.add:11 msgid "Examples" msgstr "" -#: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VGroup:8 +#: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VGroup:14 msgid "To add :class:`~.VMobject`s to a :class:`~.VGroup`, you can either use the :meth:`~.VGroup.add` method, or use the `+` and `+=` operators. Similarly, you can subtract elements of a VGroup via :meth:`~.VGroup.remove` method, or `-` and `-=` operators:" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.types.vectorized_mobject.VMobject.pot b/docs/i18n/gettext/reference/manim.mobject.types.vectorized_mobject.VMobject.pot index 502a99b733..2030503e47 100644 --- a/docs/i18n/gettext/reference/manim.mobject.types.vectorized_mobject.VMobject.pot +++ b/docs/i18n/gettext/reference/manim.mobject.types.vectorized_mobject.VMobject.pot @@ -76,230 +76,230 @@ msgstr "" msgid "Methods" msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.add_cubic_bezier_curve_to:1 msgid "Add cubic bezier curve to the path." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.add_line_to:1 msgid "Add a straight line from the last point of VMobject to the given point." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.add_quadratic_bezier_curve_to:1 msgid "Add Quadratic bezier curve to the path." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 msgid "Creates a smooth curve from given points and add it to the VMobject." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.align_points:1 msgid "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." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 msgid "Changes the anchor mode of the bezier curves." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.consider_points_equals_2d:1 msgid "Determine if two points are close enough to be considered equal." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.force_direction:1 msgid "Makes sure that points are either directed clockwise or counterclockwise." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.gen_cubic_bezier_tuples_from_points:1 msgid "Returns the bezier tuples from an array of points." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 msgid "First arg can be either a color, or a tuple/list of colors." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_anchors:1 msgid "Returns the anchors of the curves forming the VMobject." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_anchors_and_handles:1 msgid "Returns anchors1, handles1, handles2, anchors2, where (anchors1[i], handles1[i], handles2[i], anchors2[i]) will be four points defining a cubic bezier curve for any i in range(0, len(anchors1))" msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_arc_length:1 msgid "Return the approximated length of the whole curve." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_color:1 msgid "Returns the color of the :class:`~.Mobject`" msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_curve_functions:1 msgid "Gets the functions for the curves of the mobject." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_curve_functions_with_lengths:1 msgid "Gets the functions and lengths of the curves for the mobject." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 msgid "Uses :func:`~.space_ops.shoelace_direction` to calculate the direction." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_end_anchors:1 -msgid "Return the starting anchors of the bezier curves." +msgid "Return the end anchors of the bezier curves." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.add_cubic_bezier_curve_to:1::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.fill_color:1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_fill_color:1 msgid "If there are multiple colors (for gradient) this returns the first one" msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_fill_opacity:1 msgid "If there are multiple opacities, this returns the first" msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_nth_curve_function:1 msgid "Returns the expression of the nth curve." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_nth_curve_function_with_length:1 msgid "Returns the expression of the nth curve along with its (approximate) length." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_nth_curve_length:1 msgid "Returns the (approximate) length of the nth curve." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_nth_curve_length_pieces:1 msgid "Returns the array of short line lengths used for length approximation." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_nth_curve_points:1 msgid "Returns the points defining the nth curve of the vmobject." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_num_curves:1 msgid "Returns the number of curves of the vmobject." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 msgid "The simplest :class:`~.Mobject` to be transformed to or from self." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_start_anchors:1 msgid "Returns the start anchors of the bezier curves." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 msgid "Returns the subcurve of the VMobject between the interval [a, b]." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.get_subpaths:1 msgid "Returns subpaths formed by the curves of the VMobject." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.init_colors:1 msgid "Initializes the colors." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.insert_n_curves:1 msgid "Inserts n curves to the bezier curves of the vmobject." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.insert_n_curves_to_point_list:1 msgid "Given an array of k points defining a bezier curves (anchors and handles), returns points defining exactly k + n bezier curves." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.point_from_proportion:1 msgid "Gets the point at a proportion along the path of the :class:`VMobject`." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 msgid "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." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.proportion_from_point:1 msgid "Returns the proportion along the path of the :class:`VMobject` a particular given point is at." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.reverse_direction:1 msgid "Reverts the point direction by inverting the point order." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.rotate:1 msgid "Rotates the :class:`~.Mobject` about a certain point." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.rotate_sheen_direction:1 msgid "Rotates the direction of the applied sheen." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 msgid "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." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.set_anchors_and_handles:1 msgid "Given two sets of anchors and handles, process them to set them as anchors and handles of the VMobject." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 msgid "Condition is function which takes in one arguments, (x, y, z)." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.set_fill:1 msgid "Set the fill color and fill opacity of a :class:`VMobject`." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.set_points_as_corners:1 msgid "Given an array of points, set them as corner of the vmobject." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.set_sheen:1 msgid "Applies a color gradient from a direction." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:113::1 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:114::1 #: ../../../manim/mobject/types/vectorized_mobject.py:docstring of manim.mobject.types.vectorized_mobject.VMobject.set_sheen_direction:1 msgid "Sets the direction of the applied sheen." msgstr "" -#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:115 +#: ../../source/reference/manim.mobject.types.vectorized_mobject.VMobject.rst:116 msgid "Attributes" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.mobject.value_tracker.ComplexValueTracker.pot b/docs/i18n/gettext/reference/manim.mobject.value_tracker.ComplexValueTracker.pot index 8b13789179..f8d1c8929a 100644 --- a/docs/i18n/gettext/reference/manim.mobject.value_tracker.ComplexValueTracker.pot +++ b/docs/i18n/gettext/reference/manim.mobject.value_tracker.ComplexValueTracker.pot @@ -1 +1,67 @@ +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/reference/manim.mobject.value_tracker.ComplexValueTracker.rst:2 +msgid "ComplexValueTracker" +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ComplexValueTracker.rst:4 +msgid "Qualified name: ``manim.mobject.value\\_tracker.ComplexValueTracker``" +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ComplexValueTracker:1 +msgid "Bases: :py:class:`manim.mobject.value_tracker.ValueTracker`" +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ComplexValueTracker:1 +msgid "Tracks a complex-valued parameter." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ComplexValueTracker:3 +msgid "When the value is set through :attr:`animate`, the value will take a straight path from the source point to the destination point." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ComplexValueTracker:7 +msgid "Examples" +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ComplexValueTracker.rst:14 +msgid "Methods" +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ComplexValueTracker.rst:21::1 +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ComplexValueTracker.get_value:1 +msgid "Get the current value of this value tracker as a complex number." +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ComplexValueTracker.rst:21::1 +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ComplexValueTracker.set_value:1 +msgid "Sets a new complex value to the ComplexValueTracker" +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ComplexValueTracker.rst:23 +msgid "Attributes" +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ComplexValueTracker.get_value:1::1 +msgid "Used to animate the application of any method of :code:`self`." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ComplexValueTracker.get_value:1::1 +msgid "The depth of the mobject." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ComplexValueTracker.get_value:1::1 +msgid "The height of the mobject." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ComplexValueTracker.get_value:1::1 +msgid "The width of the mobject." +msgstr "" + + diff --git a/docs/i18n/gettext/reference/manim.mobject.value_tracker.ValueTracker.pot b/docs/i18n/gettext/reference/manim.mobject.value_tracker.ValueTracker.pot index 8b13789179..f56be56bb3 100644 --- a/docs/i18n/gettext/reference/manim.mobject.value_tracker.ValueTracker.pot +++ b/docs/i18n/gettext/reference/manim.mobject.value_tracker.ValueTracker.pot @@ -1 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/reference/manim.mobject.value_tracker.ValueTracker.rst:2 +msgid "ValueTracker" +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ValueTracker.rst:4 +msgid "Qualified name: ``manim.mobject.value\\_tracker.ValueTracker``" +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker:1 +msgid "Bases: :py:class:`manim.mobject.mobject.Mobject`" +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker:1 +msgid "A mobject that can be used for tracking (real-valued) parameters. Useful for animating parameter changes." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker:4 +msgid "Not meant to be displayed. Instead the position encodes some number, often one which another animation or continual_animation uses for its update function, and by treating it as a mobject it can still be animated and manipulated just like anything else." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker:9 +msgid "This value changes continuously when animated using the :attr:`animate` syntax." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker:12 +msgid "Examples" +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker:41 +msgid "You can also link ValueTrackers to updaters. In this case, you have to make sure that the ValueTracker is added to the scene by ``add``" +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ValueTracker.rst:14 +msgid "Methods" +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ValueTracker.rst:23::1 +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker.get_value:1 +msgid "Get the current value of this ValueTracker." +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ValueTracker.rst:23::1 +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker.increment_value:1 +msgid "Increments (adds) a scalar value to the ValueTracker" +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ValueTracker.rst:23::1 +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker.interpolate:1 +msgid "Turns self into an interpolation between mobject1 and mobject2." +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ValueTracker.rst:23::1 +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker.set_value:1 +msgid "Sets a new scalar value to the ValueTracker" +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.ValueTracker.rst:25 +msgid "Attributes" +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker.get_value:1::1 +msgid "Used to animate the application of any method of :code:`self`." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker.get_value:1::1 +msgid "The depth of the mobject." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker.get_value:1::1 +msgid "The height of the mobject." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker.get_value:1::1 +msgid "The width of the mobject." +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker.ValueTracker.get_value:0 +msgid "Return type" +msgstr "" + + diff --git a/docs/i18n/gettext/reference/manim.mobject.value_tracker.pot b/docs/i18n/gettext/reference/manim.mobject.value_tracker.pot index 8b13789179..d2e20ae2cc 100644 --- a/docs/i18n/gettext/reference/manim.mobject.value_tracker.pot +++ b/docs/i18n/gettext/reference/manim.mobject.value_tracker.pot @@ -1 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/reference/manim.mobject.value_tracker.rst:2 +msgid "value\\_tracker" +msgstr "" + +#: ../../../manim/mobject/value_tracker.py:docstring of manim.mobject.value_tracker:1 +msgid "Simple mobjects that can be used for storing (and updating) a value." +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.rst:15 +msgid "Classes" +msgstr "" + +#: ../../source/reference/manim.mobject.value_tracker.rst:22::1 +msgid "Tracks a complex-valued parameter." +msgstr "" + + diff --git a/docs/i18n/gettext/reference/manim.mobject.vector_field.VectorField.pot b/docs/i18n/gettext/reference/manim.mobject.vector_field.VectorField.pot index bfd00886cb..636e41dee3 100644 --- a/docs/i18n/gettext/reference/manim.mobject.vector_field.VectorField.pot +++ b/docs/i18n/gettext/reference/manim.mobject.vector_field.VectorField.pot @@ -27,6 +27,7 @@ msgid "Vector fields are based on a function defining a vector at every position msgstr "" #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField:0 +#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.fit_to_coordinate_system:0 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_colored_background_image:0 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_nudge_updater:0 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_vectorized_rgba_gradient_function:0 @@ -71,75 +72,92 @@ msgstr "" msgid "Methods" msgstr "" -#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:28::1 +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:29::1 +#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.fit_to_coordinate_system:1 +msgid "Scale the vector field to fit a coordinate system." +msgstr "" + +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:29::1 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_colored_background_image:1 msgid "Generate an image that displays the vector field." msgstr "" -#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:28::1 +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:29::1 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_nudge_updater:1 msgid "Get an update function to move a :class:`~.Mobject` along the vector field." msgstr "" -#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:28::1 +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:29::1 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_vectorized_rgba_gradient_function:1 msgid "Generates a gradient of rgbas as a numpy array" msgstr "" -#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:28::1 +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:29::1 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.nudge:1 msgid "Nudge a :class:`~.Mobject` along the vector field." msgstr "" -#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:28::1 +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:29::1 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.nudge_submobjects:1 msgid "Apply a nudge along the vector field to all submobjects." msgstr "" -#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:28::1 +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:29::1 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.scale_func:1 msgid "Scale a vector field function." msgstr "" -#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:28::1 +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:29::1 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.shift_func:1 msgid "Shift a vector field function." msgstr "" -#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:28::1 +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:29::1 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.start_submobject_movement:1 msgid "Start continuously moving all submobjects along the vector field." msgstr "" -#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:28::1 +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:29::1 #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.stop_submobject_movement:1 msgid "Stops the continuous movement started using :meth:`start_submobject_movement`." msgstr "" -#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:30 +#: ../../source/reference/manim.mobject.vector_field.VectorField.rst:31 msgid "Attributes" msgstr "" -#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_colored_background_image:1::1 +#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.fit_to_coordinate_system:1::1 msgid "Used to animate the application of any method of :code:`self`." msgstr "" -#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_colored_background_image:1::1 +#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.fit_to_coordinate_system:1::1 msgid "The depth of the mobject." msgstr "" -#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_colored_background_image:1::1 +#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.fit_to_coordinate_system:1::1 msgid "If there are multiple colors (for gradient) this returns the first one" msgstr "" -#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_colored_background_image:1::1 +#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.fit_to_coordinate_system:1::1 msgid "The height of the mobject." msgstr "" -#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_colored_background_image:1::1 +#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.fit_to_coordinate_system:1::1 msgid "The width of the mobject." msgstr "" +#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.fit_to_coordinate_system:3 +msgid "This method is useful when the vector field is defined in a coordinate system different from the one used to display the vector field." +msgstr "" + +#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.fit_to_coordinate_system:6 +msgid "This method can only be used once because it transforms the origin of each vector." +msgstr "" + +#: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.fit_to_coordinate_system:8 +msgid "The coordinate system to fit the vector field to." +msgstr "" + #: ../../../manim/mobject/vector_field.py:docstring of manim.mobject.vector_field.VectorField.get_colored_background_image:3 msgid "The color at each position is calculated by passing the positing through a series of steps: Calculate the vector field function at that position, map that vector to a single value using `self.color_scheme` and finally generate a color from that value using the color gradient." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.scene.scene.Scene.pot b/docs/i18n/gettext/reference/manim.scene.scene.Scene.pot index 6d148bef57..0ef62d99fd 100644 --- a/docs/i18n/gettext/reference/manim.scene.scene.Scene.pot +++ b/docs/i18n/gettext/reference/manim.scene.scene.Scene.pot @@ -78,6 +78,11 @@ msgstr "" msgid "Adds an entry in the corresponding subcaption file at the current time stamp." msgstr "" +#: ../../source/reference/manim.scene.scene.Scene.rst:74::1 +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_updater:1 +msgid "Add an update function to the scene." +msgstr "" + #: ../../source/reference/manim.scene.scene.Scene.rst:74::1 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.begin_animations:1 msgid "Start the animations of the scene." @@ -190,6 +195,11 @@ msgstr "" msgid "Removes mobjects from the foreground, and internally from the list foreground_mobjects." msgstr "" +#: ../../source/reference/manim.scene.scene.Scene.rst:74::1 +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.remove_updater:1 +msgid "Remove an update function from the scene." +msgstr "" + #: ../../source/reference/manim.scene.scene.Scene.rst:74::1 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.render:1 msgid "Renders this Scene." @@ -220,6 +230,11 @@ msgstr "" msgid "Begins updating all mobjects in the Scene." msgstr "" +#: ../../source/reference/manim.scene.scene.Scene.rst:74::1 +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.update_self:1 +msgid "Run all scene updater functions." +msgstr "" + #: ../../source/reference/manim.scene.scene.Scene.rst:74::1 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.wait:1 msgid "Plays a \"no operation\" animation." @@ -238,6 +253,7 @@ msgstr "" #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_foreground_mobjects:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_sound:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_subcaption:0 +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_updater:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.bring_to_back:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.bring_to_front:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.compile_animation_data:0 @@ -254,9 +270,11 @@ msgstr "" #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.remove:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.remove_foreground_mobject:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.remove_foreground_mobjects:0 +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.remove_updater:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.render:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.restructure_mobjects:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.update_mobjects:0 +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.update_self:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.wait:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.wait_until:0 msgid "Parameters" @@ -295,6 +313,7 @@ msgstr "" #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_foreground_mobject:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_foreground_mobjects:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_subcaption:0 +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_updater:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.begin_animations:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.bring_to_back:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.bring_to_front:0 @@ -312,6 +331,7 @@ msgstr "" #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.next_section:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.remove_foreground_mobject:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.remove_foreground_mobjects:0 +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.remove_updater:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.restructure_mobjects:0 #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.should_update_mobjects:0 msgid "Return type" @@ -369,6 +389,22 @@ msgstr "" msgid "This example illustrates both possibilities for adding subcaptions to Manimations::" msgstr "" +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_updater:3 +msgid "The scene updater functions are run every frame, and they are the last type of updaters to run." +msgstr "" + +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_updater:8 +msgid "When using the Cairo renderer, scene updaters that modify mobjects are not detected in the same way that mobject updaters are. To be more concrete, a mobject only modified via a scene updater will not necessarily be added to the list of *moving mobjects* and thus might not be updated every frame." +msgstr "" + +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_updater:15 +msgid "TL;DR: Use mobject updaters to update mobjects." +msgstr "" + +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.add_updater:17 +msgid "The updater function. It takes a float, which is the time difference since the last update (usually equal to the frame rate)." +msgstr "" + #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.bring_to_back:4 msgid "The mobject(s) to push to the back of the scene." msgstr "" @@ -504,7 +540,7 @@ msgid "List of top level mobjects." msgstr "" #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.next_section:1 -msgid "Create separation here; the last section gets finished and a new one gets created. ``skip_animations`` skips the rendering of all animations in this section. Refer to :doc:`the documentation` on how to use sections." +msgid "Create separation here; the last section gets finished and a new one gets created. ``skip_animations`` skips the rendering of all animations in this section. Refer to :doc:`the documentation` on how to use sections." msgstr "" #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.pause:3 @@ -559,6 +595,10 @@ msgstr "" msgid "The Scene, with the foreground mobjects removed." msgstr "" +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.remove_updater:3 +msgid "The updater function to be removed." +msgstr "" + #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.render:3 msgid "If true, opens scene in a file viewer." msgstr "" @@ -611,6 +651,14 @@ msgstr "" msgid "Change in time between updates. Defaults (mostly) to 1/frames_per_second" msgstr "" +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.update_self:3 +msgid "Among all types of update functions (mobject updaters, mesh updaters, scene updaters), scene update functions are called last." +msgstr "" + +#: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.update_self:6 +msgid "Scene time since last update." +msgstr "" + #: ../../../manim/scene/scene.py:docstring of manim.scene.scene.Scene.wait:3 msgid "The run time of the animation." msgstr "" diff --git a/docs/i18n/gettext/reference/manim.scene.section.Section.pot b/docs/i18n/gettext/reference/manim.scene.section.Section.pot index 58f8a5ed5c..0db463d896 100644 --- a/docs/i18n/gettext/reference/manim.scene.section.Section.pot +++ b/docs/i18n/gettext/reference/manim.scene.section.Section.pot @@ -19,7 +19,7 @@ msgid "Bases: :py:class:`object`" msgstr "" #: ../../../manim/scene/section.py:docstring of manim.scene.section.Section:1 -msgid "A :class:`.Scene` can be segmented into multiple Sections. Refer to :doc:`the documentation` for more info. It consists of multiple animations." +msgid "A :class:`.Scene` can be segmented into multiple Sections. Refer to :doc:`the documentation` for more info. It consists of multiple animations." msgstr "" #: ../../../manim/scene/section.py:docstring of manim.scene.section.Section:0 diff --git a/docs/i18n/gettext/reference/manim.utils.bezier.pot b/docs/i18n/gettext/reference/manim.utils.bezier.pot index f7c8ebf845..91eea0758e 100644 --- a/docs/i18n/gettext/reference/manim.utils.bezier.pot +++ b/docs/i18n/gettext/reference/manim.utils.bezier.pot @@ -34,6 +34,9 @@ msgstr "" #: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.partial_bezier_points:0 #: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.point_lies_on_bezier:0 #: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.proportions_along_bezier_curve_for_point:0 +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.quadratic_bezier_remap:0 +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.split_quadratic_bezier:0 +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.subdivide_quadratic_bezier:0 msgid "Parameters" msgstr "" @@ -46,6 +49,7 @@ msgstr "" #: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.partial_bezier_points:0 #: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.point_lies_on_bezier:0 #: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.proportions_along_bezier_curve_for_point:0 +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.split_quadratic_bezier:0 msgid "Returns" msgstr "" @@ -65,6 +69,9 @@ msgstr "" #: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.partial_bezier_points:0 #: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.point_lies_on_bezier:0 #: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.proportions_along_bezier_curve_for_point:0 +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.quadratic_bezier_remap:0 +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.split_quadratic_bezier:0 +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.subdivide_quadratic_bezier:0 msgid "Return type" msgstr "" @@ -162,4 +169,60 @@ msgstr "" msgid "Raises" msgstr "" +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.proportions_along_bezier_curve_for_point:25 +msgid "When ``point`` and the control points have different shapes." +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.quadratic_bezier_remap:1 +msgid "Remaps the number of curves to a higher amount by splitting bezier curves" +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.quadratic_bezier_remap:3 +msgid "The triplets of the quadratic bezier curves to be remapped" +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.quadratic_bezier_remap:4 +msgid "The number of curves that the output will contain. This needs to be higher than the current number." +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.split_quadratic_bezier:1 +msgid "Split a quadratic Bézier curve at argument ``t`` into two quadratic curves." +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.split_quadratic_bezier:3 +msgid "The control points of the bezier curve has shape ``[a1, h1, b1]``" +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.split_quadratic_bezier:5 +msgid "The ``t``-value at which to split the Bézier curve" +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.split_quadratic_bezier:7 +msgid "* *The two Bézier curves as a list of tuples,* * has the shape ``[a1, h1, b1], [a2, h2, b2]``" +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.split_quadratic_bezier:7 +msgid "*The two Bézier curves as a list of tuples,*" +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.split_quadratic_bezier:8 +msgid "has the shape ``[a1, h1, b1], [a2, h2, b2]``" +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.subdivide_quadratic_bezier:1 +msgid "Subdivide a quadratic Bézier curve into ``n`` subcurves which have the same shape." +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.subdivide_quadratic_bezier:3 +msgid "The points at which the curve is split are located at the arguments :math:`t = i/n` for :math:`i = 1, ..., n-1`." +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.subdivide_quadratic_bezier:6 +msgid "The control points of the Bézier curve in form ``[a1, h1, b1]``" +msgstr "" + +#: ../../../manim/utils/bezier.py:docstring of manim.utils.bezier.subdivide_quadratic_bezier:7 +msgid "The number of curves to subdivide the Bézier curve into" +msgstr "" + diff --git a/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.ManimDirective.pot b/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.ManimDirective.pot index 3b45641217..8b13789179 100644 --- a/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.ManimDirective.pot +++ b/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.ManimDirective.pot @@ -1,53 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.ManimDirective.rst:2 -msgid "ManimDirective" -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.ManimDirective.rst:4 -msgid "Qualified name: ``manim.utils.docbuild.manim\\_directive.ManimDirective``" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive.ManimDirective:1 -msgid "Bases: :py:class:`docutils.parsers.rst.Directive`" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive.ManimDirective:1 -msgid "The manim directive, rendering videos while building the documentation." -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive.ManimDirective:4 -msgid "See the module docstring for documentation." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.ManimDirective.rst:14 -msgid "Methods" -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.ManimDirective.rst:22 -msgid "Attributes" -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.ManimDirective.rst:29::1 -msgid "May the final argument contain whitespace?" -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.ManimDirective.rst:29::1 -msgid "May the directive have content?" -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.ManimDirective.rst:29::1 -msgid "Mapping of option names to validator functions." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.ManimDirective.rst:29::1 -msgid "Number of optional arguments after the required arguments." -msgstr "" - - diff --git a/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.pot b/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.pot index d352b7656d..8b13789179 100644 --- a/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.pot +++ b/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.pot @@ -1,125 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:2 -msgid "A directive for including Manim videos in a Sphinx document" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:4 -msgid "When rendering the HTML documentation, the ``.. manim::`` directive implemented here allows to include rendered videos." -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:7 -msgid "Its basic usage that allows processing **inline content** looks as follows::" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:16 -msgid "It is required to pass the name of the class representing the scene to be rendered to the directive." -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:19 -msgid "As a second application, the directive can also be used to render scenes that are defined within doctests, for example::" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:35 -msgid "Options" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:37 -msgid "Options can be passed as follows::" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:42 -msgid "The following configuration options are supported by the directive:" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:47 -msgid "hide_source" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:46 -msgid "If this flag is present without argument, the source code is not displayed above the rendered video." -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:51 -msgid "quality" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:None -msgid "{'low', 'medium', 'high', 'fourk'}" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:50 -msgid "Controls render quality of the video, in analogy to the corresponding command line flags." -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:55 -msgid "save_as_gif" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:54 -msgid "If this flag is present without argument, the scene is rendered as a gif." -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:60 -msgid "save_last_frame" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:58 -msgid "If this flag is present without argument, an image representing the last frame of the scene will be rendered and displayed, instead of a video." -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:64 -msgid "ref_classes" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:63 -msgid "A list of classes, separated by spaces, that is rendered in a reference block after the source code." -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:68 -msgid "ref_functions" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:67 -msgid "A list of functions, separated by spaces, that is rendered in a reference block after the source code." -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:72 -msgid "ref_methods" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive:71 -msgid "A list of methods, separated by spaces, that is rendered in a reference block after the source code." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.rst:15 -msgid "Classes" -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.rst:28::1 -msgid "The manim directive, rendering videos while building the documentation." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.rst:31 -msgid "Functions" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive.process_name_list:1 -msgid "Reformats a string of space separated class names as a list of strings containing valid Sphinx references." -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive.process_name_list:5 -msgid "Tests" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive.process_name_list:0 -msgid "Parameters" -msgstr "" - - diff --git a/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.skip_manim_node.pot b/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.skip_manim_node.pot index 53a5e8abc8..8b13789179 100644 --- a/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.skip_manim_node.pot +++ b/docs/i18n/gettext/reference/manim.utils.docbuild.manim_directive.skip_manim_node.pot @@ -1,65 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:2 -msgid "skip\\_manim\\_node" -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:4 -msgid "Qualified name: ``manim.utils.docbuild.manim\\_directive.skip\\_manim\\_node``" -msgstr "" - -#: ../../../manim/utils/docbuild/manim_directive.py:docstring of manim.utils.docbuild.manim_directive.skip_manim_node:1 -msgid "Bases: :py:class:`docutils.nodes.Admonition`, :py:class:`docutils.nodes.Element`" -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:14 -msgid "Methods" -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:21 -msgid "Attributes" -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:36::1 -msgid "List attributes which are defined for every Element-derived class instance and can be safely transferred to a different node." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:36::1 -msgid "Separator for child nodes, used by `astext()` method." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:36::1 -msgid "Return the `document` node at the root of the tree containing this Node." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:36::1 -msgid "List attributes that are known to the Element base class." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:36::1 -msgid "The line number (1-based) of the beginning of this Node in `source`." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:36::1 -msgid "List attributes, automatically initialized to empty lists for all nodes." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:36::1 -msgid "A list of class-specific attributes that should not be copied with the standard attributes when replacing a node." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:36::1 -msgid "Back-reference to the Node immediately containing this Node." -msgstr "" - -#: ../../source/reference/manim.utils.docbuild.manim_directive.skip_manim_node.rst:36::1 -msgid "Path or description of the input source which generated this Node." -msgstr "" - - diff --git a/docs/i18n/gettext/reference/manim.utils.docbuild.pot b/docs/i18n/gettext/reference/manim.utils.docbuild.pot new file mode 100644 index 0000000000..d881a71ccf --- /dev/null +++ b/docs/i18n/gettext/reference/manim.utils.docbuild.pot @@ -0,0 +1,9 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + + diff --git a/docs/i18n/gettext/reference/manim.utils.images.pot b/docs/i18n/gettext/reference/manim.utils.images.pot index 9d0b3d5973..0423696fe9 100644 --- a/docs/i18n/gettext/reference/manim.utils.images.pot +++ b/docs/i18n/gettext/reference/manim.utils.images.pot @@ -18,6 +18,10 @@ msgstr "" msgid "Functions" msgstr "" +#: ../../../manim/utils/images.py:docstring of manim.utils.images.change_to_rgba_array:1 +msgid "Converts an RGB array into RGBA with the alpha value opacity maxed." +msgstr "" + #: ../../../manim/utils/images.py:docstring of manim.utils.images.drag_pixels:0 #: ../../../manim/utils/images.py:docstring of manim.utils.images.get_full_raster_image_path:0 #: ../../../manim/utils/images.py:docstring of manim.utils.images.invert_image:0 diff --git a/docs/i18n/gettext/reference/manim.utils.ipython_magic.ManimMagic.pot b/docs/i18n/gettext/reference/manim.utils.ipython_magic.ManimMagic.pot index 1548a46a5c..778c678992 100644 --- a/docs/i18n/gettext/reference/manim.utils.ipython_magic.ManimMagic.pot +++ b/docs/i18n/gettext/reference/manim.utils.ipython_magic.ManimMagic.pot @@ -35,11 +35,6 @@ msgstr "" msgid "The parent Configurable instance of this object." msgstr "" -#: ../../../manim/utils/ipython_magic.py:docstring of manim.utils.ipython_magic.ManimMagic:0 -#: ../../../manim/utils/ipython_magic.py:docstring of manim.utils.ipython_magic.ManimMagic.manim:0 -msgid "Return type" -msgstr "" - #: ../../../manim/utils/ipython_magic.py:docstring of manim.utils.ipython_magic.ManimMagic:11 msgid "Notes" msgstr "" @@ -121,4 +116,8 @@ msgstr "" msgid "Evaluating this cell will render and display the ``BannerExample`` scene defined in the body of the cell." msgstr "" +#: ../../../manim/utils/ipython_magic.py:docstring of manim.utils.ipython_magic.ManimMagic.manim:68 +msgid "In case you want to hide the red box containing the output progress bar, the ``progress_bar`` config option should be set to ``None``. This can also be done by passing ``--progress_bar None`` as a CLI flag." +msgstr "" + diff --git a/docs/i18n/gettext/reference/manim.utils.iterables.pot b/docs/i18n/gettext/reference/manim.utils.iterables.pot index 551d7bb73a..442b4d673c 100644 --- a/docs/i18n/gettext/reference/manim.utils.iterables.pot +++ b/docs/i18n/gettext/reference/manim.utils.iterables.pot @@ -18,12 +18,201 @@ msgstr "" msgid "Functions" msgstr "" +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_n_tuples:1 +msgid "Returns the Sequence objects cyclically split into n length tuples." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_n_tuples:6 +msgid "alias with n=2" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_n_tuples:9 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_pairs:6 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.batch_by_property:8 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.concatenate_lists:4 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_difference_update:4 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_update:6 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.listify:4 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even:10 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even_by_cycling:10 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.remove_nones:4 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_array:13 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_preserving_order:16 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_with_interpolation:16 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.tuplify:4 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.uniq_chain:5 +msgid "Examples" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_n_tuples:10 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_pairs:7 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.batch_by_property:9 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.concatenate_lists:5 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_difference_update:5 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_update:7 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.listify:5 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even:11 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even_by_cycling:11 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.remove_nones:5 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_array:14 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_preserving_order:17 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_with_interpolation:17 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.tuplify:5 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.uniq_chain:6 +msgid "Normal usage::" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_n_tuples:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_pairs:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.all_elements_are_instances:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.batch_by_property:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.concatenate_lists:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_difference_update:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_update:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even_by_cycling:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.remove_list_redundancies:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.remove_nones:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_array:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_preserving_order:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_with_interpolation:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.stretch_array_to_length:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.uniq_chain:0 +msgid "Parameters" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_n_tuples:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_pairs:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.all_elements_are_instances:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.batch_by_property:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.concatenate_lists:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_difference_update:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_update:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.listify:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even_by_cycling:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.remove_list_redundancies:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.remove_nones:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_array:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_preserving_order:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_with_interpolation:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.stretch_array_to_length:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.tuplify:0 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.uniq_chain:0 +msgid "Return type" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.adjacent_pairs:1 +msgid "Alias for ``adjacent_n_tuples(objects, 2)``." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.all_elements_are_instances:1 +msgid "Returns ``True`` if all elements of iterable are instances of Class. False otherwise." +msgstr "" + #: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.batch_by_property:1 -msgid "Takes in a list, and returns a list of tuples, (batch, prop) such that all items in a batch have the same output when put into property_func, and such that chaining all these batches together would give the original list (i.e. order is preserved)" +msgid "Takes in a Sequence, and returns a list of tuples, (batch, prop) such that all items in a batch have the same output when put into the Callable property_func, and such that chaining all these batches together would give the original Sequence (i.e. order is preserved)." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.concatenate_lists:1 +msgid "Combines the Iterables provided as arguments into one list." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_difference_update:1 +msgid "Returns a list containing all the elements of l1 not in l2." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_update:3 +msgid "Used instead of ``set.update()`` to maintain order," +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_update:2 +msgid "making sure duplicates are removed from l1, not l2. Removes overlap of l1 and l2 and then concatenates l2 unchanged." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.listify:1 +msgid "Converts obj to a list intelligently." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even:2 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even_by_cycling:2 +msgid "Extends the shorter of the two iterables with duplicate values until its" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even:2 +msgid "length is equal to the longer iterable (favours earlier elements)." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even:7 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_preserving_order:10 +msgid "cycles elements instead of favouring earlier ones" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even_by_cycling:2 +msgid "length is equal to the longer iterable (cycles over shorter iterable)." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.make_even_by_cycling:7 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_array:7 +msgid "favours earlier elements instead of cycling them" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.remove_list_redundancies:1 +msgid "Used instead of ``list(set(l))`` to maintain order. Keeps the last occurrence of each element." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.remove_nones:1 +msgid "Removes elements where bool(x) evaluates to False." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_array:2 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_preserving_order:5 +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_with_interpolation:5 +msgid "Extends/truncates nparray so that ``len(result) == length``." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_array:2 +msgid "The elements of nparray are cycled to achieve the desired length." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_array:10 +msgid "similar cycling behaviour for balancing 2 iterables" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_preserving_order:2 +msgid "The elements of nparray are duplicated to achieve the desired length (favours earlier elements)." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_preserving_order:5 +msgid "Constructs a zeroes array of length if nparray is empty." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_preserving_order:13 +msgid "similar earlier-favouring behaviour for balancing 2 iterables" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_with_interpolation:2 +msgid "New elements are interpolated to achieve the desired length." +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_with_interpolation:4 +msgid "Note that if nparray's length changes, its dtype may too (e.g. int -> float: see Examples)" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_with_interpolation:10 +msgid "cycles elements instead of interpolating" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.resize_with_interpolation:13 +msgid "favours earlier elements instead of interpolating" +msgstr "" + +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.tuplify:1 +msgid "Converts obj to a tuple intelligently." msgstr "" -#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.list_update:1 -msgid "Used instead of list(set(l1).update(l2)) to maintain order, making sure duplicates are removed from l1, not l2." +#: ../../../manim/utils/iterables.py:docstring of manim.utils.iterables.uniq_chain:2 +msgid "Returns a generator that yields all unique elements of the Iterables" msgstr "" diff --git a/docs/i18n/gettext/reference/manim.utils.simple_functions.pot b/docs/i18n/gettext/reference/manim.utils.simple_functions.pot index 2639ffa55a..9c39b35b23 100644 --- a/docs/i18n/gettext/reference/manim.utils.simple_functions.pot +++ b/docs/i18n/gettext/reference/manim.utils.simple_functions.pot @@ -14,4 +14,89 @@ msgstr "" msgid "A collection of simple functions." msgstr "" +#: ../../source/reference/manim.utils.simple_functions.rst:20 +msgid "Functions" +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.binary_search:1 +msgid "Searches for a value in a range by repeatedly dividing the range in half." +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.binary_search:3 +msgid "To be more precise, performs numerical binary search to determine the input to ``function``, between the bounds given, that outputs ``target`` to within ``tolerance`` (default of 0.0001). Returns ``None`` if no input can be found within the bounds." +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.binary_search:9 +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.clip:8 +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.get_parameters:5 +msgid "Examples" +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.binary_search:10 +msgid "Consider the polynomial :math:`x^2 + 3x + 1` where we search for a target value of :math:`11`. An exact solution is :math:`x = 2`." +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.binary_search:22 +msgid "Searching in the interval :math:`[0, 5]` for a target value of :math:`71` does not yield a solution::" +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.binary_search:0 +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.choose:0 +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.get_parameters:0 +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.sigmoid:0 +msgid "Parameters" +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.binary_search:0 +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.choose:0 +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.get_parameters:0 +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.sigmoid:0 +msgid "Return type" +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.choose:1 +msgid "The binomial coefficient n choose k." +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.choose:3 +msgid ":math:`\\binom{n}{k}` describes the number of possible choices of :math:`k` elements from a set of :math:`n` elements." +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.choose:7 +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.sigmoid:7 +msgid "References" +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.choose:8 +msgid "https://en.wikipedia.org/wiki/Combination" +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.choose:9 +msgid "https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.comb.html" +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.clip:1 +msgid "Clips ``a`` to the interval [``min_a``, ``max_a``]." +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.clip:3 +msgid "Accepts any comparable objects (i.e. those that support <, >). Returns ``a`` if it is between ``min_a`` and ``max_a``. Otherwise, whichever of ``min_a`` and ``max_a`` is closest." +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.get_parameters:1 +msgid "Return the parameters of ``function`` as an ordered mapping of parameters' names to their corresponding ``Parameter`` objects." +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.sigmoid:1 +msgid "Returns the output of the logistic function." +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.sigmoid:3 +msgid "The logistic function, a common example of a sigmoid function, is defined as :math:`\\frac{1}{1 + e^{-x}}`." +msgstr "" + +#: ../../../manim/utils/simple_functions.py:docstring of manim.utils.simple_functions.sigmoid:8 +msgid "https://en.wikipedia.org/wiki/Sigmoid_function" +msgstr "" + diff --git a/docs/i18n/gettext/reference_index/animations.pot b/docs/i18n/gettext/reference_index/animations.pot index fac595137d..406b4afeea 100644 --- a/docs/i18n/gettext/reference_index/animations.pot +++ b/docs/i18n/gettext/reference_index/animations.pot @@ -10,51 +10,55 @@ msgstr "" msgid "Animations" msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Animate mobjects." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Animation of a mobject boundary and tracing of points." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Tools for displaying multiple animations at once." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Animate the display or removal of a mobject from a scene." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Fading in and out of view." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Animations that introduce mobjects to scene by growing them from points." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Animations drawing attention to particular mobjects." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Animations related to movement." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Animations for changing numbers." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Animations related to rotation." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 +msgid "Utilities for modifying the speed at which animations are played." +msgstr "" + +#: ../../source/reference_index/animations.rst:23::1 msgid "Animations transforming one mobject into another." msgstr "" -#: ../../source/reference_index/animations.rst:22::1 +#: ../../source/reference_index/animations.rst:23::1 msgid "Animations that try to transform Mobjects while keeping track of identical parts." msgstr "" diff --git a/docs/i18n/gettext/reference_index/mobjects.pot b/docs/i18n/gettext/reference_index/mobjects.pot index 81a4b653f8..8fe6870a0b 100644 --- a/docs/i18n/gettext/reference_index/mobjects.pot +++ b/docs/i18n/gettext/reference_index/mobjects.pot @@ -10,52 +10,56 @@ msgstr "" msgid "Mobjects" msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Special rectangles." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Various geometric Mobjects." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Mobjects used to represent mathematical graphs (think graph theory, not plotting)." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Coordinate systems and function graphing related mobjects." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Utilities for Manim's logo and banner." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Mobjects representing matrices." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Base classes for objects that can be displayed." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Mobjects related to SVG images." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Mobjects representing tables." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Mobjects used to display Text using Pango or LaTeX." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Three-dimensional mobjects." msgstr "" -#: ../../source/reference_index/mobjects.rst:21::1 +#: ../../source/reference_index/mobjects.rst:22::1 msgid "Specialized mobject base classes." msgstr "" +#: ../../source/reference_index/mobjects.rst:22::1 +msgid "Simple mobjects that can be used for storing (and updating) a value." +msgstr "" + diff --git a/docs/i18n/gettext/reference_index/utilities_misc.pot b/docs/i18n/gettext/reference_index/utilities_misc.pot index 73a1550386..f17bc661a1 100644 --- a/docs/i18n/gettext/reference_index/utilities_misc.pot +++ b/docs/i18n/gettext/reference_index/utilities_misc.pot @@ -14,71 +14,71 @@ msgstr "" msgid "Module Index" msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Constant definitions." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Utility functions related to Bézier curves." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Colors and utility functions for conversion between different color models." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Utilities that might be useful for configuration dictionaries." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Decorators for deprecating classes, functions and function parameters." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Debugging utilities." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Utilities for scene caching." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Utilities for using Manim with IPython (in particular: Jupyter notebooks)" msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Image manipulation utilities." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Operations on iterables." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Functions determining transformation paths between sets of points." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "A selection of rate functions, i.e., *speed curves* for animations." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "A collection of simple functions." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Sound-related utility functions." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Utility functions for two- and three-dimensional vectors." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "Utilities for processing LaTeX templates." msgstr "" -#: ../../source/reference_index/utilities_misc.rst:30::1 +#: ../../source/reference_index/utilities_misc.rst:31::1 msgid "A library of LaTeX templates." msgstr "" diff --git a/docs/i18n/gettext/reporting_bugs.pot b/docs/i18n/gettext/reporting_bugs.pot index af1af500db..8b13789179 100644 --- a/docs/i18n/gettext/reporting_bugs.pot +++ b/docs/i18n/gettext/reporting_bugs.pot @@ -1,41 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/reporting_bugs.rst:2 -msgid "Reporting bugs" -msgstr "" - -#: ../../source/reporting_bugs.rst:4 -msgid "One of the best ways of contributing to Manim is by reporting bugs. If you have encountered something that you believe is a bug, please follow these steps:" -msgstr "" - -#: ../../source/reporting_bugs.rst:8 -msgid "First of all, make sure you are running the latest version of manim. If not, update your version and try again." -msgstr "" - -#: ../../source/reporting_bugs.rst:11 -msgid "Search for other users who may have had similar issues in the past. Search the repository's `issues page `_ (don't forget to search closed issues), bring it up on our `Discord server `_, use sites like StackOverflow, and exercise your best Google practices. If you can't find anything helpful, then go to the next step." -msgstr "" - -#: ../../source/reporting_bugs.rst:17 -msgid "Can reproduce the issue, i.e. that you have some code that illustrates the bug **every time** (or at least most of the time) it is executed." -msgstr "" - -#: ../../source/reporting_bugs.rst:21 -msgid "Clarify what behavior you expected, and how the actual behavior differs from your expectation." -msgstr "" - -#: ../../source/reporting_bugs.rst:24 -msgid "Gather information about your environment, such as your operating system, python version, and any stack traces that the code may have generated (if applicable)." -msgstr "" - -#: ../../source/reporting_bugs.rst:28 -msgid "Please open an issue only after you have gathered this information. When submitting an issue, make sure to follow the template (this is the default text you are shown when first opening the 'New Issue' page). A community member will (hopefully) respond and start a conversation to address the issue." -msgstr "" - - diff --git a/docs/i18n/gettext/tutorials.pot b/docs/i18n/gettext/tutorials.pot index a62dc41cf8..8b13789179 100644 --- a/docs/i18n/gettext/tutorials.pot +++ b/docs/i18n/gettext/tutorials.pot @@ -1,14 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/tutorials.rst:4 -#: ../../source/tutorials.rst:4 -msgid "Table of Contents" -msgstr "" - - diff --git a/docs/i18n/gettext/tutorials/a_deeper_look.pot b/docs/i18n/gettext/tutorials/a_deeper_look.pot index aa77b8257a..8b13789179 100644 --- a/docs/i18n/gettext/tutorials/a_deeper_look.pot +++ b/docs/i18n/gettext/tutorials/a_deeper_look.pot @@ -1,129 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/tutorials/a_deeper_look.rst:2 -msgid "A deeper look" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:4 -msgid "This document will focus on understanding manim's output files and some of the main command-line flags available." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:7 -msgid "This tutorial picks up where :doc:`quickstart` left off, so please read that document before starting this one." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:11 -msgid "Manim output folders" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:13 -msgid "At this point, you have just executed the following command." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:19 -msgid "Let's dissect what just happened step by step. First, this command executes manim on the file ``scene.py``, which contains our animation code. Further, this command tells manim exactly which ``Scene`` is to be rendered, in this case, it is ``SquareToCircle``. This is necessary because a single scene file may contain more than one scene. Next, the flag `-p` tells manim to play the scene once it's rendered, and the `-ql` flag tells manim to render the scene in low quality." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:27 -msgid "After the video is rendered, you will see that manim has generated some new files and the project folder will look as follows." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:44 -msgid "There are quite a few new files. The main output is in ``media/videos/scene/480p15/SquareToCircle.mp4``. By default, the ``media`` folder will contain all of manim's output files. The ``media/videos`` subfolder contains the rendered videos. Inside of it, you will find one folder for each different video quality. In our case, since we used the ``-l`` flag, the video was generated at 480 resolution at 15 frames per second from the ``scene.py`` file. Therefore, the output can be found inside ``media/videos/scene/480p15``. The additional folders ``media/videos/scene/480p15/partial_movie_files`` as well as ``media/text`` and ``media/Tex`` contain files that are used by manim internally." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:55 -msgid "You can see how manim makes use of the generated folder structure by executing the following command," -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:62 -msgid "The ``-ql`` flag (for low quality) has been replaced by the ``-qh`` flag, for high quality. Manim will take considerably longer to render this file, and it will play it once it's done since we are using the ``-p`` flag. The output should look like this:" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:84 -msgid "And the folder structure should look as follows." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:102 -msgid "Manim has created a new folder ``media/videos/1080p60``, which corresponds to the high resolution and the 60 frames per second. Inside of it, you can find the new ``SquareToCircle.mp4``, as well as the corresponding ``partial_movie_files``." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:107 -msgid "When working on a project with multiple scenes, and trying out multiple resolutions, the structure of the output directories will keep all your videos organized." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:111 -msgid "Further, manim has the option to output the last frame of a scene, when adding the flag ``-s``. This is the fastest option to quickly get a preview of a scene. The corresponding folder structure looks like this:" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:134 -msgid "Saving the last frame with ``-s`` can be combined with the flags for different resolutions, e.g. ``-s -ql``, ``-s -qh``" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:141 -msgid "Sections" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:143 -msgid "In addition to the movie output file one can use sections. Each section produces its own output video. The cuts between two sections can be set like this:" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:157 -msgid "All the animations between two of these cuts get concatenated into a single output video file. Be aware that you need at least one animation in each section. For example this wouldn't create an output video:" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:171 -msgid "One way of fixing this is to wait a little:" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:182 -msgid "For videos to be created for each section you have to add the ``--save_sections`` flag to the Manim call like this:" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:188 -msgid "If you do this, the ``media`` folder will look like this:" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:214 -msgid "As you can see each section receives their own output video in the ``sections`` directory. The JSON file in here contains some useful information for each section:" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:255 -msgid "This data can be used by third party applications, like a presentation system or automated video editing tool." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:257 -msgid "You can also skip rendering all animations belonging to a section like this:" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:271 -msgid "Some command line flags" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:273 -msgid "When executing the command" -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:279 -msgid "it was necessary to specify which ``Scene`` class to render. This is because a single file can contain more than one ``Scene`` class. If your file contains multiple ``Scene`` classes, and you want to render them all, you can use the ``-a`` flag." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:284 -msgid "As discussed previously, the ``-ql`` specifies low render quality. This does not look very good, but is very useful for rapid prototyping and testing. The other options that specify render quality are ``-qm``, ``-qh``, and ``-qk`` for medium, high, and 4k quality, respectively." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:289 -msgid "The ``-p`` flag plays the animation once it is rendered. If you want to open the file browser at the location of the animation instead of playing it, you can use the ``-f`` flag. You can also omit these two flags." -msgstr "" - -#: ../../source/tutorials/a_deeper_look.rst:293 -msgid "Finally, by default manim will output .mp4 files. If you want your animations in .gif format instead, use the ``-i`` flag. The output files will be in the same folder as the .mp4 files, and with the same name, but a different file extension." -msgstr "" - - diff --git a/docs/i18n/gettext/tutorials/building_blocks.pot b/docs/i18n/gettext/tutorials/building_blocks.pot index 705f5f83b9..21212cdc0e 100644 --- a/docs/i18n/gettext/tutorials/building_blocks.pot +++ b/docs/i18n/gettext/tutorials/building_blocks.pot @@ -19,7 +19,7 @@ msgid "Essentially, manim puts at your disposal three different concepts that yo msgstr "" #: ../../source/tutorials/building_blocks.rst:15 -msgid "It is recommended that you read the tutorials :doc:`quickstart` and :doc:`a_deeper_look` before reading this page." +msgid "It is recommended that you read the tutorials :doc:`quickstart` and :doc:`output_and_config` before reading this page." msgstr "" #: ../../source/tutorials/building_blocks.rst:21 diff --git a/docs/i18n/gettext/tutorials/configuration.pot b/docs/i18n/gettext/tutorials/configuration.pot index 568f12b2ba..8b13789179 100644 --- a/docs/i18n/gettext/tutorials/configuration.pot +++ b/docs/i18n/gettext/tutorials/configuration.pot @@ -1,301 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/tutorials/configuration.rst:2 -msgid "Configuration" -msgstr "" - -#: ../../source/tutorials/configuration.rst:4 -msgid "Manim provides an extensive configuration system that allows it to adapt to many different use cases. There are many configuration options that can be configured at different times during the scene rendering process. Each option can be configured programmatically via `the ManimConfig class`_, at the time of command invocation via `command-line arguments`_, or at the time the library is first imported via `the config files`_." -msgstr "" - -#: ../../source/tutorials/configuration.rst:11 -msgid "The most common, simplest and recommended way to set the configure Manim is via the command-line interface (CLI), which is described directly below." -msgstr "" - -#: ../../source/tutorials/configuration.rst:15 -msgid "Command-line arguments" -msgstr "" - -#: ../../source/tutorials/configuration.rst:17 -msgid "By far the most commonly used command in the CLI is the ``render`` command, which is used to render scene(s) to an output file. It is used with the following arguments:" -msgstr "" - -#: ../../source/tutorials/configuration.rst:24 -msgid "However, since manim defaults to the :code:`render` command whenever no command is specified, the following form is far more common and can be used instead:" -msgstr "" - -#: ../../source/tutorials/configuration.rst:31 -msgid "An example of using the above form is:" -msgstr "" - -#: ../../source/tutorials/configuration.rst:37 -msgid "This asks manim to search for a Scene class called :code:`SceneOne` inside the file ``file.py`` and render it with medium quality (specified by the ``-qm`` flag)." -msgstr "" - -#: ../../source/tutorials/configuration.rst:40 -msgid "Another frequently used flag is ``-p`` (\"preview\"), which makes manim open the rendered video after it's done rendering." -msgstr "" - -#: ../../source/tutorials/configuration.rst:43 -msgid "The ``-p`` flag does not change any properties of the global ``config`` dict. The ``-p`` flag is only a command-line convenience." -msgstr "" - -#: ../../source/tutorials/configuration.rst:47 -msgid "Advanced examples" -msgstr "" - -#: ../../source/tutorials/configuration.rst:49 -msgid "To render a scene in high quality, but only output the last frame of the scene instead of the whole video, you can execute" -msgstr "" - -#: ../../source/tutorials/configuration.rst:56 -msgid "The following example specifies the output file name (with the :code:`-o` flag), renders only the first ten animations (:code:`-n` flag) with a white background (:code:`-c` flag), and saves the animation as a ``.gif`` instead of as a ``.mp4`` file (``--format=gif`` flag). It uses the default quality and does not try to open the file after it is rendered." -msgstr "" - -#: ../../source/tutorials/configuration.rst:67 -msgid "A list of all CLI flags" -msgstr "" - -#: ../../source/tutorials/configuration.rst:75 -msgid "The ManimConfig class" -msgstr "" - -#: ../../source/tutorials/configuration.rst:77 -msgid "The most direct way of configuring manim is through the global ``config`` object, which is an instance of :class:`.ManimConfig`. Each property of this class is a config option that can be accessed either with standard attribute syntax or with dict-like syntax:" -msgstr "" - -#: ../../source/tutorials/configuration.rst:88 -msgid "The former is preferred; the latter is provided for backwards compatibility." -msgstr "" - -#: ../../source/tutorials/configuration.rst:91 -msgid "Most classes, including :class:`.Camera`, :class:`.Mobject`, and :class:`.Animation`, read some of their default configuration from the global ``config``." -msgstr "" - -#: ../../source/tutorials/configuration.rst:103 -msgid ":class:`.ManimConfig` is designed to keep internal consistency. For example, setting ``frame_y_radius`` will affect ``frame_height``:" -msgstr "" - -#: ../../source/tutorials/configuration.rst:114 -msgid "The global ``config`` object is meant to be the single source of truth for all config options. All of the other ways of setting config options ultimately change the values of the global ``config`` object." -msgstr "" - -#: ../../source/tutorials/configuration.rst:118 -msgid "The following example illustrates the video resolution chosen for examples rendered in our documentation with a reference frame." -msgstr "" - -#: ../../source/tutorials/configuration.rst:140 -msgid "The config files" -msgstr "" - -#: ../../source/tutorials/configuration.rst:142 -msgid "As the last example shows, executing manim from the command-line may involve using many flags at the same time. This may become a nuisance if you must execute the same script many times in a short time period, for example when making small incremental tweaks to your scene script. For this reason, manim can also be configured using a configuration file. A configuration file is a file ending with the suffix ``.cfg``." -msgstr "" - -#: ../../source/tutorials/configuration.rst:149 -msgid "To use a local configuration file when rendering your scene, you must create a file with name ``manim.cfg`` in the same directory as your scene code." -msgstr "" - -#: ../../source/tutorials/configuration.rst:152 -msgid "The config file **must** be named ``manim.cfg``. Currently, manim does not support config files with any other name." -msgstr "" - -#: ../../source/tutorials/configuration.rst:155 -msgid "The config file must start with the section header ``[CLI]``. The configuration options under this header have the same name as the CLI flags, and serve the same purpose. Take for example the following config file." -msgstr "" - -#: ../../source/tutorials/configuration.rst:167 -msgid "Config files are parsed with the standard python library ``configparser``. In particular, they will ignore any line that starts with a pound symbol ``#``." -msgstr "" - -#: ../../source/tutorials/configuration.rst:170 -msgid "Now, executing the following command" -msgstr "" - -#: ../../source/tutorials/configuration.rst:176 -msgid "is equivalent to executing the following command, provided that ``manim.cfg`` is in the same directory as ," -msgstr "" - -#: ../../source/tutorials/configuration.rst:183 -msgid "The names of the configuration options admissible in config files are exactly the same as the **long names** of the corresponding command- line flags. For example, the ``-c`` and ``--background_color`` flags are interchangeable, but the config file only accepts :code:`background_color` as an admissible option." -msgstr "" - -#: ../../source/tutorials/configuration.rst:189 -msgid "Since config files are meant to replace CLI flags, all CLI flags can be set via a config file. Moreover, any config option can be set via a config file, whether or not it has an associated CLI flag. For a list of all CLI flags and all config options, see the bottom of this document." -msgstr "" - -#: ../../source/tutorials/configuration.rst:194 -msgid "Manim will look for a ``manim.cfg`` config file in the same directory as the file being rendered, and **not** in the directory of execution. For example," -msgstr "" - -#: ../../source/tutorials/configuration.rst:201 -msgid "will use the config file found in ``path/to/file.py``, if any. It will **not** use the config file found in the current working directory, even if it exists. In this way, the user may keep different config files for different scenes or projects, and execute them with the right configuration from anywhere in the system." -msgstr "" - -#: ../../source/tutorials/configuration.rst:207 -msgid "The file described here is called the **folder-wide** config file because it affects all scene scripts found in the same folder." -msgstr "" - -#: ../../source/tutorials/configuration.rst:212 -msgid "The user config file" -msgstr "" - -#: ../../source/tutorials/configuration.rst:214 -msgid "As explained in the previous section, a :code:`manim.cfg` config file only affects the scene scripts in its same folder. However, the user may also create a special config file that will apply to all scenes rendered by that user. This is referred to as the **user-wide** config file, and it will apply regardless of where manim is executed from, and regardless of where the scene script is stored." -msgstr "" - -#: ../../source/tutorials/configuration.rst:221 -msgid "The user-wide config file lives in a special folder, depending on the operating system." -msgstr "" - -#: ../../source/tutorials/configuration.rst:224 -msgid "Windows: :code:`UserDirectory`/AppData/Roaming/Manim/manim.cfg" -msgstr "" - -#: ../../source/tutorials/configuration.rst:225 -msgid "MacOS: :code:`UserDirectory`/.config/manim/manim.cfg" -msgstr "" - -#: ../../source/tutorials/configuration.rst:226 -msgid "Linux: :code:`UserDirectory`/.config/manim/manim.cfg" -msgstr "" - -#: ../../source/tutorials/configuration.rst:228 -msgid "Here, :code:`UserDirectory` is the user's home folder." -msgstr "" - -#: ../../source/tutorials/configuration.rst:231 -msgid "A user may have many **folder-wide** config files, one per folder, but only one **user-wide** config file. Different users in the same computer may each have their own user-wide config file." -msgstr "" - -#: ../../source/tutorials/configuration.rst:235 -msgid "Do not store scene scripts in the same folder as the user-wide config file. In this case, the behavior is undefined." -msgstr "" - -#: ../../source/tutorials/configuration.rst:238 -msgid "Whenever you use manim from anywhere in the system, manim will look for a user-wide config file and read its configuration." -msgstr "" - -#: ../../source/tutorials/configuration.rst:243 -msgid "Cascading config files" -msgstr "" - -#: ../../source/tutorials/configuration.rst:245 -msgid "What happens if you execute manim and it finds both a folder-wide config file and a user-wide config file? Manim will read both files, but if they are incompatible, **the folder-wide file takes precedence**." -msgstr "" - -#: ../../source/tutorials/configuration.rst:249 -msgid "For example, take the following user-wide config file" -msgstr "" - -#: ../../source/tutorials/configuration.rst:259 -msgid "and the following folder-wide file" -msgstr "" - -#: ../../source/tutorials/configuration.rst:267 -msgid "Then, executing :code:`manim SceneName` will be equivalent to not using any config files and executing" -msgstr "" - -#: ../../source/tutorials/configuration.rst:274 -msgid "Any command-line flags have precedence over any config file. For example, using the previous two config files and executing :code:`manim -c RED SceneName` is equivalent to not using any config files and executing" -msgstr "" - -#: ../../source/tutorials/configuration.rst:283 -msgid "There is also a **library-wide** config file that determines manim's default behavior and applies to every user of the library. It has the least precedence, so any config options in the user-wide and any folder-wide files will override the library-wide file. This is referred to as the *cascading* config file system." -msgstr "" - -#: ../../source/tutorials/configuration.rst:289 -msgid "**The user should not try to modify the library-wide file**. Contributors should receive explicit confirmation from the core developer team before modifying it." -msgstr "" - -#: ../../source/tutorials/configuration.rst:295 -msgid "Order of operations" -msgstr "" - -#: ../../source/tutorials/configuration.rst:304 -msgid "With so many different ways of configuring manim, it can be difficult to know when each config option is being set. In fact, this will depend on how manim is being used." -msgstr "" - -#: ../../source/tutorials/configuration.rst:308 -msgid "If manim is imported from a module, then the configuration system will follow these steps:" -msgstr "" - -#: ../../source/tutorials/configuration.rst:311 -msgid "The library-wide config file is loaded." -msgstr "" - -#: ../../source/tutorials/configuration.rst:312 -msgid "The user-wide and folder-wide files are loaded, if they exist." -msgstr "" - -#: ../../source/tutorials/configuration.rst:313 -msgid "All files found in the previous two steps are parsed in a single :class:`ConfigParser` object, called ``parser``. This is where *cascading* happens." -msgstr "" - -#: ../../source/tutorials/configuration.rst:316 -msgid ":class:`logging.Logger` is instantiated to create manim's global ``logger`` object. It is configured using the \"logger\" section of the parser, i.e. ``parser['logger']``." -msgstr "" - -#: ../../source/tutorials/configuration.rst:319 -msgid ":class:`ManimConfig` is instantiated to create the global ``config`` object." -msgstr "" - -#: ../../source/tutorials/configuration.rst:320 -msgid "The ``parser`` from step 3 is fed into the ``config`` from step 5 via :meth:`ManimConfig.digest_parser`." -msgstr "" - -#: ../../source/tutorials/configuration.rst:322 -msgid "Both ``logger`` and ``config`` are exposed to the user." -msgstr "" - -#: ../../source/tutorials/configuration.rst:324 -msgid "If manim is being invoked from the command-line, all of the previous steps happen, and are complemented by:" -msgstr "" - -#: ../../source/tutorials/configuration.rst:327 -msgid "The CLI flags are parsed and fed into ``config`` via :meth:`~ManimConfig.digest_args`." -msgstr "" - -#: ../../source/tutorials/configuration.rst:329 -msgid "If the ``--config_file`` flag was used, a new :class:`ConfigParser` object is created with the contents of the library-wide file, the user-wide file if it exists, and the file passed via ``--config_file``. In this case, the folder-wide file, if it exists, is ignored." -msgstr "" - -#: ../../source/tutorials/configuration.rst:333 -msgid "The new parser is fed into ``config``." -msgstr "" - -#: ../../source/tutorials/configuration.rst:334 -msgid "The rest of the CLI flags are processed." -msgstr "" - -#: ../../source/tutorials/configuration.rst:336 -msgid "To summarize, the order of precedence for configuration options, from lowest to highest precedence is:" -msgstr "" - -#: ../../source/tutorials/configuration.rst:339 -msgid "Library-wide config file," -msgstr "" - -#: ../../source/tutorials/configuration.rst:340 -msgid "user-wide config file, if it exists," -msgstr "" - -#: ../../source/tutorials/configuration.rst:341 -msgid "folder-wide config file, if it exists OR custom config file, if passed via ``--config_file``," -msgstr "" - -#: ../../source/tutorials/configuration.rst:343 -msgid "other CLI flags, and" -msgstr "" - -#: ../../source/tutorials/configuration.rst:344 -msgid "any programmatic changes made after the config system is set." -msgstr "" - - diff --git a/docs/i18n/gettext/tutorials/index.pot b/docs/i18n/gettext/tutorials/index.pot new file mode 100644 index 0000000000..e44d718cbd --- /dev/null +++ b/docs/i18n/gettext/tutorials/index.pot @@ -0,0 +1,14 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/tutorials/index.rst:4 +#: ../../source/tutorials/index.rst:4 +msgid "Table of Contents" +msgstr "" + + diff --git a/docs/i18n/gettext/tutorials/output_and_config.pot b/docs/i18n/gettext/tutorials/output_and_config.pot new file mode 100644 index 0000000000..3b9e720250 --- /dev/null +++ b/docs/i18n/gettext/tutorials/output_and_config.pot @@ -0,0 +1,129 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/tutorials/output_and_config.rst:2 +msgid "Manim's Output Settings" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:4 +msgid "This document will focus on understanding manim's output files and some of the main command-line flags available." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:7 +msgid "This tutorial picks up where :doc:`quickstart` left off, so please read that document before starting this one." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:11 +msgid "Manim output folders" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:13 +msgid "At this point, you have just executed the following command." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:19 +msgid "Let's dissect what just happened step by step. First, this command executes manim on the file ``scene.py``, which contains our animation code. Further, this command tells manim exactly which ``Scene`` is to be rendered, in this case, it is ``SquareToCircle``. This is necessary because a single scene file may contain more than one scene. Next, the flag `-p` tells manim to play the scene once it's rendered, and the `-ql` flag tells manim to render the scene in low quality." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:27 +msgid "After the video is rendered, you will see that manim has generated some new files and the project folder will look as follows." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:44 +msgid "There are quite a few new files. The main output is in ``media/videos/scene/480p15/SquareToCircle.mp4``. By default, the ``media`` folder will contain all of manim's output files. The ``media/videos`` subfolder contains the rendered videos. Inside of it, you will find one folder for each different video quality. In our case, since we used the ``-l`` flag, the video was generated at 480 resolution at 15 frames per second from the ``scene.py`` file. Therefore, the output can be found inside ``media/videos/scene/480p15``. The additional folders ``media/videos/scene/480p15/partial_movie_files`` as well as ``media/text`` and ``media/Tex`` contain files that are used by manim internally." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:55 +msgid "You can see how manim makes use of the generated folder structure by executing the following command," +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:62 +msgid "The ``-ql`` flag (for low quality) has been replaced by the ``-qh`` flag, for high quality. Manim will take considerably longer to render this file, and it will play it once it's done since we are using the ``-p`` flag. The output should look like this:" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:84 +msgid "And the folder structure should look as follows." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:102 +msgid "Manim has created a new folder ``media/videos/1080p60``, which corresponds to the high resolution and the 60 frames per second. Inside of it, you can find the new ``SquareToCircle.mp4``, as well as the corresponding ``partial_movie_files``." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:107 +msgid "When working on a project with multiple scenes, and trying out multiple resolutions, the structure of the output directories will keep all your videos organized." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:111 +msgid "Further, manim has the option to output the last frame of a scene, when adding the flag ``-s``. This is the fastest option to quickly get a preview of a scene. The corresponding folder structure looks like this:" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:134 +msgid "Saving the last frame with ``-s`` can be combined with the flags for different resolutions, e.g. ``-s -ql``, ``-s -qh``" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:141 +msgid "Sections" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:143 +msgid "In addition to the movie output file one can use sections. Each section produces its own output video. The cuts between two sections can be set like this:" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:157 +msgid "All the animations between two of these cuts get concatenated into a single output video file. Be aware that you need at least one animation in each section. For example this wouldn't create an output video:" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:171 +msgid "One way of fixing this is to wait a little:" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:182 +msgid "For videos to be created for each section you have to add the ``--save_sections`` flag to the Manim call like this:" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:188 +msgid "If you do this, the ``media`` folder will look like this:" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:214 +msgid "As you can see each section receives their own output video in the ``sections`` directory. The JSON file in here contains some useful information for each section:" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:255 +msgid "This data can be used by third party applications, like a presentation system or automated video editing tool." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:257 +msgid "You can also skip rendering all animations belonging to a section like this:" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:271 +msgid "Some command line flags" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:273 +msgid "When executing the command" +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:279 +msgid "it was necessary to specify which ``Scene`` class to render. This is because a single file can contain more than one ``Scene`` class. If your file contains multiple ``Scene`` classes, and you want to render them all, you can use the ``-a`` flag." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:284 +msgid "As discussed previously, the ``-ql`` specifies low render quality. This does not look very good, but is very useful for rapid prototyping and testing. The other options that specify render quality are ``-qm``, ``-qh``, and ``-qk`` for medium, high, and 4k quality, respectively." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:289 +msgid "The ``-p`` flag plays the animation once it is rendered. If you want to open the file browser at the location of the animation instead of playing it, you can use the ``-f`` flag. You can also omit these two flags." +msgstr "" + +#: ../../source/tutorials/output_and_config.rst:293 +msgid "Finally, by default manim will output .mp4 files. If you want your animations in .gif format instead, use the ``-i`` flag. The output files will be in the same folder as the .mp4 files, and with the same name, but a different file extension." +msgstr "" + + diff --git a/docs/i18n/gettext/tutorials/quickstart.pot b/docs/i18n/gettext/tutorials/quickstart.pot index f5d3ab23c3..1c4f8f0537 100644 --- a/docs/i18n/gettext/tutorials/quickstart.pot +++ b/docs/i18n/gettext/tutorials/quickstart.pot @@ -63,7 +63,7 @@ msgid "If you see an animation of a pink circle being drawn, congratulations! Yo msgstr "" #: ../../source/tutorials/quickstart.rst:86 -msgid "If you get an error message instead, you do not see a video, or if the video output does not look like the preceding animation, it is likely that Manim has not been installed correctly. Please refer to the :doc:`../installation/troubleshooting` page for more information." +msgid "If you get an error message instead, you do not see a video, or if the video output does not look like the preceding animation, it is likely that Manim has not been installed correctly. Please refer to our :doc:`FAQ section ` for help with the most common issues." msgstr "" #: ../../source/tutorials/quickstart.rst:95 diff --git a/docs/i18n/gettext/tutorials/using_text.pot b/docs/i18n/gettext/tutorials/using_text.pot index c8f47f3a2e..8b13789179 100644 --- a/docs/i18n/gettext/tutorials/using_text.pot +++ b/docs/i18n/gettext/tutorials/using_text.pot @@ -1,269 +1 @@ -msgid "" -msgstr "" -"Project-Id-Version: Manim \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../source/tutorials/using_text.rst:3 -msgid "Using Text" -msgstr "" - -#: ../../source/tutorials/using_text.rst:5 -msgid "There are two different ways by which you can render **Text** in videos:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:7 -msgid "Using Pango (:mod:`~.text_mobject`)" -msgstr "" - -#: ../../source/tutorials/using_text.rst:8 -msgid "Using LaTeX (:mod:`~.tex_mobject`)" -msgstr "" - -#: ../../source/tutorials/using_text.rst:10 -msgid "If you want to render simple text, you should use either :class:`~.Text` or :class:`~.MarkupText`, or one of its derivatives like :class:`~.Paragraph`. See :ref:`using-text-objects` for more information." -msgstr "" - -#: ../../source/tutorials/using_text.rst:14 -msgid "LaTeX should be used when you need mathematical typesetting. See :ref:`rendering-with-latex` for more information." -msgstr "" - -#: ../../source/tutorials/using_text.rst:20 -msgid "Text Without LaTeX" -msgstr "" - -#: ../../source/tutorials/using_text.rst:22 -msgid "The simplest way to add text to your animations is to use the :class:`~.Text` class. It uses the `Pango library`_ to render text. With Pango, you can also render non-English alphabets like 你好 or こんにちは or 안녕하세요 or مرحبا بالعالم." -msgstr "" - -#: ../../source/tutorials/using_text.rst:27 -msgid "Here is a simple *Hello World* animation." -msgstr "" - -#: ../../source/tutorials/using_text.rst:38 -msgid "You can also use :class:`~.MarkupText` which allows the use of PangoMarkup (see the documentation of :class:`~.MarkupText` for details) to render text. For example:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:56 -msgid "Working with :class:`~.Text`" -msgstr "" - -#: ../../source/tutorials/using_text.rst:58 -msgid "This section explains the properties of :class:`~.Text` and how can it be used in your animations." -msgstr "" - -#: ../../source/tutorials/using_text.rst:62 -msgid "Using Fonts" -msgstr "" - -#: ../../source/tutorials/using_text.rst:64 -msgid "You can set a different font using :attr:`~.Text.font`." -msgstr "" - -#: ../../source/tutorials/using_text.rst:68 -msgid "The font used must be installed in your system, and Pango should know about it. You can get a list of fonts using :func:`manimpango.list_fonts`." -msgstr "" - -#: ../../source/tutorials/using_text.rst:85 -msgid "Setting Slant and Weight" -msgstr "" - -#: ../../source/tutorials/using_text.rst:86 -msgid "Slant is the style of the Text, and it can be ``NORMAL`` (the default), ``ITALIC`` or ``OBLIQUE``. Usually, for many fonts both ``ITALIC`` and ``OBLIQUE`` look similar, but ``ITALIC`` uses **Roman Style**, whereas ``OBLIQUE`` uses **Italic Style**." -msgstr "" - -#: ../../source/tutorials/using_text.rst:91 -msgid "Weight specifies the boldness of a font. You can see a list of weights in :class:`manimpango.Weight`." -msgstr "" - -#: ../../source/tutorials/using_text.rst:126 -msgid "Using Colors" -msgstr "" - -#: ../../source/tutorials/using_text.rst:128 -msgid "You can set the color of the text using :attr:`~.Text.color`:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:138 -msgid "You can use utilities like :attr:`~.Text.t2c` for coloring specific characters. This may be problematic if your text contains ligatures as explained in :ref:`iterating-text`." -msgstr "" - -#: ../../source/tutorials/using_text.rst:142 -msgid ":attr:`~Text.t2c` accepts two types of dictionaries," -msgstr "" - -#: ../../source/tutorials/using_text.rst:144 -msgid "The keys can contain indices like ``[2:-1]`` or ``[4:8]``, this works similar to how `slicing `_ works in Python. The values should be the color of the Text from :class:`~.Color`." -msgstr "" - -#: ../../source/tutorials/using_text.rst:149 -msgid "The keys contain words or characters which should be colored separately and the values should be the color from :class:`~.Color`:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:161 -msgid "If you want to avoid problems when using colors (due to ligatures), consider using :class:`MarkupText`." -msgstr "" - -#: ../../source/tutorials/using_text.rst:166 -msgid "Using Gradients" -msgstr "" - -#: ../../source/tutorials/using_text.rst:168 -msgid "You can add a gradient using :attr:`~.Text.gradient`. The value must be an iterable of any length:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:179 -msgid "You can also use :attr:`~.Text.t2g` for gradients with specific characters of the text. It shares a similar syntax to :ref:`the interface for colors `:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:203 -msgid "Setting Line Spacing" -msgstr "" - -#: ../../source/tutorials/using_text.rst:205 -msgid "You can set the line spacing using :attr:`~.Text.line_spacing`:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:220 -msgid "Disabling Ligatures" -msgstr "" - -#: ../../source/tutorials/using_text.rst:222 -msgid "By disabling ligatures you would get a one-to-one mapping between characters and submobjects. This fixes the issues with coloring text." -msgstr "" - -#: ../../source/tutorials/using_text.rst:228 -msgid "Be aware that using this method with text that heavily depends on ligatures (Arabic text) may yield unexpected results." -msgstr "" - -#: ../../source/tutorials/using_text.rst:231 -msgid "You can disable ligatures by passing ``disable_ligatures`` to :class:`Text`. For example:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:246 -msgid "Iterating :class:`~.Text`" -msgstr "" - -#: ../../source/tutorials/using_text.rst:248 -msgid "Text objects behave like :class:`VGroups <.VGroup>`. Therefore, you can slice and index the text." -msgstr "" - -#: ../../source/tutorials/using_text.rst:251 -msgid "For example, you can set each letter to different color by iterating it." -msgstr "" - -#: ../../source/tutorials/using_text.rst:265 -msgid "Please note that `Ligature`_ can cause problems here. If you need a one-to-one mapping of characters to submobjects you should pass the ``disable_ligatures`` parameter to :class:`~.Text`. See :ref:`disable-ligatures`." -msgstr "" - -#: ../../source/tutorials/using_text.rst:273 -msgid "Working with :class:`~.MarkupText`" -msgstr "" - -#: ../../source/tutorials/using_text.rst:275 -msgid "MarkupText is similar to :class:`~.Text`, the only difference between them is that this accepts and processes PangoMarkup (which is similar to html), instead of just rendering plain text." -msgstr "" - -#: ../../source/tutorials/using_text.rst:279 -msgid "Consult the documentation of :class:`~.MarkupText` for more details and further references about PangoMarkup." -msgstr "" - -#: ../../source/tutorials/using_text.rst:297 -msgid "Text With LaTeX" -msgstr "" - -#: ../../source/tutorials/using_text.rst:299 -msgid "Just as you can use :class:`~.Text` to add text to your videos, you can use :class:`~.Tex` to insert LaTeX." -msgstr "" - -#: ../../source/tutorials/using_text.rst:302 -msgid "For example," -msgstr "" - -#: ../../source/tutorials/using_text.rst:314 -msgid "Note that we are using a raw string (``r'...'``) instead of a regular string (``'...'``). This is because TeX code uses a lot of special characters - like ``\\`` for example - that have special meaning within a regular python string. An alternative would have been to write ``\\\\`` to escape the backslash: ``Tex('\\\\LaTeX')``." -msgstr "" - -#: ../../source/tutorials/using_text.rst:320 -msgid "Working with :class:`~.MathTex`" -msgstr "" - -#: ../../source/tutorials/using_text.rst:322 -msgid "Everything passed to :class:`~.MathTex` is in math mode by default. To be more precise, :class:`~.MathTex` is processed within an ``align*`` environment. You can achieve a similar effect with :class:`~.Tex` by enclosing your formula with ``$`` symbols: ``$\\xrightarrow{x^6y^8}$``:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:339 -msgid "LaTeX commands and keyword arguments" -msgstr "" - -#: ../../source/tutorials/using_text.rst:341 -msgid "We can use any standard LaTeX commands in the AMS maths packages. Such as the ``mathtt`` math-text type or the ``looparrowright`` arrow." -msgstr "" - -#: ../../source/tutorials/using_text.rst:352 -msgid "On the Manim side, the :class:`~.Tex` class also accepts attributes to change the appearance of the output. This is very similar to the :class:`~.Text` class. For example, the ``color`` keyword changes the color of the TeX mobject." -msgstr "" - -#: ../../source/tutorials/using_text.rst:366 -msgid "Extra LaTeX Packages" -msgstr "" - -#: ../../source/tutorials/using_text.rst:368 -msgid "Some commands require special packages to be loaded into the TeX template. For example, to use the ``mathscr`` script, we need to add the ``mathrsfs`` package. Since this package isn't loaded into Manim's tex template by default, we have to add it manually." -msgstr "" - -#: ../../source/tutorials/using_text.rst:388 -msgid "Substrings and parts" -msgstr "" - -#: ../../source/tutorials/using_text.rst:390 -msgid "The TeX mobject can accept multiple strings as arguments. Afterwards you can refer to the individual parts either by their index (like ``tex[1]``), or by selecting parts of the tex code. In this example, we set the color of the ``\\bigstar`` using :func:`~.set_color_by_tex`:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:404 -msgid "Note that :func:`~.set_color_by_tex` colors the entire substring containing the Tex, not just the specific symbol or Tex expression. Consider the following example:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:418 -msgid "As you can see, this colors the entire equation yellow, contrary to what may be expected. To color only ``x`` yellow, we have to do the following:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:433 -msgid "By setting ``substrings_to_isolate`` to ``x``, we split up the :class:`~.MathTex` into substrings automatically and isolate the ``x`` components into individual substrings. Only then can :meth:`~.set_color_by_tex` be used to achieve the desired result." -msgstr "" - -#: ../../source/tutorials/using_text.rst:438 -msgid "Note that Manim also supports a custom syntax that allows splitting a TeX string into substrings easily: simply enclose parts of your formula that you want to isolate with double braces. In the string ``MathTex(r\"{{ a^2 }} + {{ b^2 }} = {{ c^2 }}\")``, the rendered mobject will consist of the substrings ``a^2``, ``+``, ``b^2``, ``=``, and ``c^2``. This makes transformations between similar text fragments easy to write using :class:`~.TransformMatchingTex`." -msgstr "" - -#: ../../source/tutorials/using_text.rst:447 -msgid "Using ``index_labels`` to work with complicated strings" -msgstr "" - -#: ../../source/tutorials/using_text.rst:449 -msgid "You might sometimes be working with a very complicated :class:`~.MathTex` mobject that makes it difficult to work with its individual components. This is where the debugging function :func:`.index_labels` is very useful." -msgstr "" - -#: ../../source/tutorials/using_text.rst:453 -msgid "The method shows the index of a mobject's submobjects, allowing you to easily find the components of the mobject you would like to change." -msgstr "" - -#: ../../source/tutorials/using_text.rst:472 -msgid "LaTeX Maths Fonts - The Template Library" -msgstr "" - -#: ../../source/tutorials/using_text.rst:474 -msgid "Changing fonts in LaTeX when typesetting mathematical formulae is trickier than regular text. It requires changing the template that is used to compile the TeX. Manim comes with a collection of :class:`~.TexFontTemplates` ready for you to use. These templates will all work in math mode:" -msgstr "" - -#: ../../source/tutorials/using_text.rst:491 -msgid "Manim also has a :class:`~.TexTemplateLibrary` containing the TeX templates used by 3Blue1Brown. One example is the ctex template, used for typesetting Chinese script. For this to work, the ctex LaTeX package must be installed on your system. Furthermore, if you are only typesetting Text, you probably do not need :class:`~.Tex` at all, and should use :class:`~.Text` instead." -msgstr "" - -#: ../../source/tutorials/using_text.rst:508 -msgid "Aligning formulae" -msgstr "" - - diff --git a/docs/i18n/gettext/tutorials_guides.pot b/docs/i18n/gettext/tutorials_guides.pot new file mode 100644 index 0000000000..8215184f81 --- /dev/null +++ b/docs/i18n/gettext/tutorials_guides.pot @@ -0,0 +1,14 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Manim \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/tutorials_guides.rst:4 +#: ../../source/tutorials_guides.rst:4 +msgid "Table of Contents" +msgstr "" + + diff --git a/docs/i18n/readyForTranslation b/docs/i18n/readyForTranslation index 9e8328e890..c2397ab8db 100644 --- a/docs/i18n/readyForTranslation +++ b/docs/i18n/readyForTranslation @@ -9,6 +9,12 @@ examples.po reference.po tutorials.po tutorials/building_blocks.po -tutorials/output_and_config.po tutorials/quickstart.po -tutorials/configuration.po +guides/output_and_config.po +guides/configuration.po +guides/deep_dive.po +guides/using_text.po +faq/general.po +faq/help.po +faq/installation.po +faq/opengl.po diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index f151b241af..e0ab4e874e 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -5,6 +5,7 @@ Changelog .. toctree:: + changelog/0.16.0-changelog changelog/0.15.2-changelog changelog/0.15.1-changelog changelog/0.15.0-changelog diff --git a/docs/source/changelog/0.16.0-changelog.rst b/docs/source/changelog/0.16.0-changelog.rst new file mode 100644 index 0000000000..88279c7b62 --- /dev/null +++ b/docs/source/changelog/0.16.0-changelog.rst @@ -0,0 +1,273 @@ +******* +v0.16.0 +******* + +:Date: July 13, 2022 + +Contributors +============ + +A total of 44 people contributed to this +release. People with a '+' by their names authored a patch for the first +time. + +* Alex Lembcke +* Baroudi Aymen + +* Benjamin Hackl +* Charalampos Georgiou + +* Cindy Park + +* Ejar + +* Francesco Frassinelli + +* Francisco Manríquez Novoa + +* Jacob Evan Shreve + +* Jaime Santos + +* Jonathan Alpert +* Joshua Mankelow + +* Kevin Lubick + +* Laith Bahodi +* Lingren Kong + +* Logen + +* Naveen M K +* Noam Zaks +* Pedro Lamkowski + +* Raghav Goel +* Simeon Widdis +* Sparsh Goenka +* TornaxO7 + +* Tristan Schulz + +* WillSoltas +* ad_chaos +* conor-oneill-2 + +* fcrozatier + +* mooncaker816 + +* niklebedenko + +* nyabkun + +* quark67 + + +The patches included in this release have been reviewed by +the following contributors. + +* Alex Lembcke +* Benjamin Hackl +* Darylgolden +* Francesco Frassinelli +* Francisco Manríquez Novoa +* Gianluca Gippetto +* Jan-Hendrik Müller +* Jonathan Alpert +* Kevin Lubick +* Laith Bahodi +* Naveen M K +* Pedro Lamkowski +* Philipp Imhof +* Raghav Goel +* Ryan McCauley +* Sparsh Goenka +* TornaxO7 +* Tristan Schulz +* ad_chaos +* hickmott99 + +Pull requests merged +==================== + +A total of 56 pull requests were merged for this release. + +Highlights +---------- + +* :pr:`2550`: New thematic guide: a deep dive into the internals of the library + This new :doc:`thematic guide ` aims to be a comprehensive walkthrough + describing all the things that Manim does when you run it to produce a video. + +* :pr:`2732`: Improved overall structure of deployed documentation; added a dedicated :doc:`FAQ section ` + + +* :pr:`2749`: Added :class:`.ChangeSpeed`, an animation wrapper that allows to smoothly change the speed at which an animation is played + The speed of any animation can be changed by wrapping the animation with :class:`.ChangeSpeed` and passing a dictionary as ``speedinfo`` whose keys are the relative animation run time stamps and whose values are the absolute speed factors; e.g., ``{0.5: 2, 0.75: 0.25}`` smoothly speeds up the animation by a factor of 2 once it has been completed to 50%, and then it is smoothly slowed down to 1/4 of the default run speed after 75% of the animation are completed. The ``run_time`` of the animation will be adjusted to match the changed play speed. + + It is also possible to add time-based updaters that respect the change in speed, use the auxiliary :meth:`.ChangeSpeed.add_updater` method to do so. + +New features +------------ + +* :pr:`2667`: Made FFmpeg executable path configurable + + +* :pr:`2739`: Added vectorized plotting functionality via keyword argument ``use_vectorized`` to improve performance + + +Enhancements +------------ + +* :pr:`2186`: Enabled filling color by value for :class:`.OpenGLSurface`, replaced ``colors`` keyword argument of :meth:`.Surface.set_fill_by_value` with ``colorscale`` + + +* :pr:`2288`: Added warning when attempting to add same mobject as child twice + + +* :pr:`2707`: Fixed missing ``get_nth_curve_length_pieces`` method of :class:`.OpenGLVMobject` + - Removed duplicate definition of ``get_curve_functions_with_lengths`` in ``OpenGLVMobject`` + - Added definition of ``get_nth_curve_length_pieces`` to ``OpenGLVMobject`` + +* :pr:`2709`: Improved the look of the brackets of :class:`.Matrix` + + +* :pr:`2714`: Fixed :meth:`.OpenGLVMobject.pointwise_become_partial` to improve stroke rendering + + +* :pr:`2727`: Slight performance improvement for :class:`.ArrowVectorField` and Bézier curve computation + + +* :pr:`2728`: Added :meth:`.VectorField.fit_to_coordinate_system` to fit a vector field to a given coordinate system + + +* :pr:`2730`: Added note to let users find documentation of default CLI subcommand easier + + +* :pr:`2746`: Installed ghostscript in the docker image + + +* :pr:`2841`: Added :func:`.split_quadratic_bezier` and :func:`.subdivide_quadratic_bezier` + + +* :pr:`2842`: CLI: Moved functionality from ``manim new`` to ``manim init`` and added deprecation warning for ``manim new`` + + +* :pr:`2866`: Reorganize test files to match library module structure + + +Fixed bugs +---------- + +* :pr:`2567`: Use tempconfig for every scene render + + +* :pr:`2638`: Fixed :meth:`BarChart.change_bar_values` not updating when height is 0 + + +* :pr:`2661`: Fixed tip resize functionality for :class:`.Axes` to match documentation + + +* :pr:`2703`: Default to utf-8 when reading files in :class:`.Code` + + +* :pr:`2721`: Fixed bad text slicing for lines in :class:`.Paragraph` + + +* :pr:`2725`: Fixed wrong indentation in :class:`.Code` + + +* :pr:`2734`: Fixed OpenGL segfaults when running :meth:`.Scene.play` or :meth:`.Scene.wait` in interactive mode + + +* :pr:`2753`: Fixed multiplatform builds for docker images in pipeline + + +* :pr:`2757`: Added missing ``__init__.py`` file in :mod:`.docbuild` module + + +* :pr:`2770`: Fixed bug in :meth:`.VMobject.proportion_from_point` that caused proportions greater than 1 to be returned + + +* :pr:`2826`: Fixed leaked mobjects coming from :class:`.TransformMatchingAbstractBase` + + +* :pr:`2870`: Fixed issue with ``manim init scene SCENE_NAME filename.py`` and removed necessity of ``main.py`` to be present in working directory + + +Documentation-related changes +----------------------------- + +* :pr:`2704`: Updated URL to Pango Markup formatting page + + +* :pr:`2716`: Improved the order of the reference manuals + + +* :pr:`2720`: Fixed typo in docstring of :class:`.Angle` + + +* :pr:`2722`: Fixed typos in docstrings of classes in :mod:`.mobject.table` + + +* :pr:`2726`: Edited note on :class:`.NumberPlane` length and added another example + + +* :pr:`2740`: Fixed documentation of :meth:`.Cylinder.get_direction` + + +* :pr:`2755`: Fixed docstring of :meth:`.VMobject.get_end_anchors` + + +* :pr:`2760`: Removed ``cmake`` from the MacOS installation section + + +* :pr:`2767`: Added more questions and answers to FAQ section, new :doc:`OpenGL FAQ ` + + +* :pr:`2771`: Added documentation and testing for ``path_func`` keyword argument of :class:`.Transform` + + +* :pr:`2828`: Removed suggestion issue template, added FAQ answer regarding proposing new features + + +* :pr:`2849`: Added example for ``path_arc`` keyword argument of :class:`.Transform` + + +* :pr:`2851`: Added an example on constructing a (neural) network using a partite :class:`.Graph` + + +* :pr:`2855`: Added implicit ``docker.io/`` URL base in reference to docker images + + +* :pr:`2861`: Added docstring for :meth:`.CoordinateSystem.plot_parametric_curve` + + +Changes concerning the testing system +------------------------------------- + +* :pr:`2743`: Replaced ``assert`` statements with with assertion functions from ``np.testing`` + + +Changes to our development infrastructure +----------------------------------------- + +* :pr:`2700`: CI: updated Python versions + + +* :pr:`2701`: CI: added a workflow to publish docker image after releases and commits to main branch + + +Code quality improvements and similar refactors +----------------------------------------------- + +* :pr:`2680`: Increased minimum required version of ``numpy`` to 1.19 + + +* :pr:`2687`: Migrated from ``os.path`` to ``pathlib`` in :class:`.SVGMobject` and other locations + + +* :pr:`2715`: Updated deprecated ``pillow`` constants + + +* :pr:`2735`: Bump pyjwt from 2.3.0 to 2.4.0 + + +* :pr:`2748`: Bump pillow from 9.1.0 to 9.1.1 + + +* :pr:`2751`: Fixed flake C417 and improved a comment + + +* :pr:`2825`: Bump notebook from 6.4.11 to 6.4.12 + + +* :pr:`2864`: Updated lockfile + + +New releases +------------ + +* :pr:`2863`: Prepared new release, ``v0.16.0`` diff --git a/docs/source/examples.rst b/docs/source/examples.rst index 79ed27a9c4..b8da417d3e 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -667,7 +667,7 @@ Special Camera Settings class ThreeDSurfacePlot(ThreeDScene): def construct(self): - resolution_fa = 42 + resolution_fa = 24 self.set_camera_orientation(phi=75 * DEGREES, theta=-30 * DEGREES) def param_gauss(u, v): diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 3615dedc2c..3fdb9e33bd 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -901,7 +901,7 @@ def plot_surface( class PlotSurfaceExample(ThreeDScene): def construct(self): - resolution_fa = 42 + resolution_fa = 16 self.set_camera_orientation(phi=75 * DEGREES, theta=-60 * DEGREES) axes = ThreeDAxes(x_range=(-3, 3, 1), y_range=(-3, 3, 1), z_range=(-5, 5, 1)) def param_trig(u, v): diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 9d4aeca731..fab20e01e1 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -1054,10 +1054,7 @@ def construct(self): "Praesent feugiat metus sit amet iaculis pulvinar. Nulla posuere " "quam a ex aliquam, eleifend consectetur tellus viverra. Aliquam " "fermentum interdum justo, nec rutrum elit pretium ac. Nam quis " - "leo pulvinar, dignissim est at, venenatis nisi. Quisque mattis " - "dolor ut euismod hendrerit. Nullam eu ante sollicitudin, commodo " - "risus a, vehicula odio. Nam urna tortor, aliquam a nibh eu, commodo " - "imperdiet arcu. Donec tincidunt commodo enim a tincidunt." + "leo pulvinar, dignissim est at, venenatis nisi." ) justified_text = MarkupText(ipsum_text, justify=True).scale(0.4) not_justified_text = MarkupText(ipsum_text, justify=False).scale(0.4) @@ -1065,15 +1062,10 @@ def construct(self): njust_title = Title("Not Justified") self.add(njust_title, not_justified_text) self.play( - Transform( - not_justified_text, - justified_text, - ), - Transform( - njust_title, - just_title, - ), - run_time=2, + FadeOut(not_justified_text), + FadeIn(justified_text), + FadeOut(njust_title), + FadeIn(just_title), ) self.wait(1) diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 9a005d0867..bbde7d7c76 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -71,7 +71,8 @@ def construct(self): surface = Surface( lambda u, v: axes.c2p(*self.func(u, v)), u_range=[-PI, PI], - v_range=[0, TAU] + v_range=[0, TAU], + resolution=8, ) self.set_camera_orientation(theta=70 * DEGREES, phi=75 * DEGREES) self.add(axes, surface) @@ -198,7 +199,7 @@ def set_fill_by_value( class FillByValueExample(ThreeDScene): def construct(self): - resolution_fa = 42 + resolution_fa = 8 self.set_camera_orientation(phi=75 * DEGREES, theta=-160 * DEGREES) axes = ThreeDAxes(x_range=(0, 5, 1), y_range=(0, 5, 1), z_range=(-1, 1, 0.5)) def param_surface(u, v): @@ -457,7 +458,7 @@ class Cone(Surface): class ExampleCone(ThreeDScene): def construct(self): axes = ThreeDAxes() - cone = Cone(direction=X_AXIS+Y_AXIS+2*Z_AXIS) + cone = Cone(direction=X_AXIS+Y_AXIS+2*Z_AXIS, resolution=8) self.set_camera_orientation(phi=5*PI/11, theta=PI/9) self.add(axes, cone) @@ -871,7 +872,11 @@ class Arrow3D(Line3D): class ExampleArrow3D(ThreeDScene): def construct(self): axes = ThreeDAxes() - arrow = Arrow3D(start=np.array([0, 0, 0]), end=np.array([2, 2, 2])) + arrow = Arrow3D( + start=np.array([0, 0, 0]), + end=np.array([2, 2, 2]), + resolution=8 + ) self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES) self.add(axes, arrow) diff --git a/pyproject.toml b/pyproject.toml index 2169f9b9e2..0f802253be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "manim" -version = "0.15.2" +version = "0.16.0" description = "Animation engine for explanatory math videos." authors = ["The Manim Community Developers ", "3b1b "] license="MIT" diff --git a/scripts/dev_changelog.py b/scripts/dev_changelog.py index 8fdbcfb0f2..d5ecdd3390 100755 --- a/scripts/dev_changelog.py +++ b/scripts/dev_changelog.py @@ -66,10 +66,10 @@ PR_LABELS = { "breaking changes": "Breaking changes", "highlight": "Highlights", - "deprecation": "Deprecated classes and functions", + "pr:deprecation": "Deprecated classes and functions", "new feature": "New features", "enhancement": "Enhancements", - "bugfix": "Fixed bugs", + "pr:bugfix": "Fixed bugs", "documentation": "Documentation-related changes", "testing": "Changes concerning the testing system", "infrastructure": "Changes to our development infrastructure", From efd7371fa0c856414d1c0fca455460eac4c0b81d Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Thu, 14 Jul 2022 20:52:41 +0530 Subject: [PATCH 100/555] Update minimum required Pillow version (#2876) Fixes https://github.com/ManimCommunity/manim/issues/2875 --- poetry.lock | 386 +++++++++++++++++++++++++++++++++++++++++++------ pyproject.toml | 4 +- 2 files changed, 340 insertions(+), 50 deletions(-) diff --git a/poetry.lock b/poetry.lock index 82b94d212b..fea7b30c83 100644 --- a/poetry.lock +++ b/poetry.lock @@ -187,7 +187,7 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["build (0.8.0)", "flake8 (4.0.1)", "hashin (0.17.0)", "pip-tools (6.6.2)", "pytest (7.1.2)", "Sphinx (4.3.2)", "tox (3.25.0)", "twine (4.0.1)", "wheel (0.37.1)", "black (22.3.0)", "mypy (0.961)"] +dev = ["build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "Sphinx (==4.3.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)", "black (==22.3.0)", "mypy (==0.961)"] [[package]] name = "certifi" @@ -290,7 +290,7 @@ optional = false python-versions = "*" [package.extras] -test = ["flake8 (3.7.8)", "hypothesis (3.55.3)"] +test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "coverage" @@ -331,7 +331,7 @@ optional = false python-versions = ">=3.6" [package.extras] -dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (0.770)", "numpy", "pandas", "pytest"] +dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", "pandas", "pytest"] [[package]] name = "dearpygui" @@ -392,7 +392,7 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "distlib" -version = "0.3.4" +version = "0.3.5" description = "Distribution utilities" category = "dev" optional = false @@ -795,7 +795,7 @@ python-versions = ">=3.6" parso = ">=0.8.0,<0.9.0" [package.extras] -qa = ["flake8 (3.8.3)", "mypy (0.782)"] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] @@ -1014,7 +1014,7 @@ typing_extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [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"] @@ -1080,7 +1080,7 @@ python-versions = "~=3.6" markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -code_style = ["pre-commit (2.6)"] +code_style = ["pre-commit (==2.6)"] rtd = ["myst-parser (>=0.14.0,<0.15.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] @@ -1226,7 +1226,7 @@ traitlets = ">=4.2.1" [package.extras] docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] json-logging = ["json-logging"] -test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium (4.1.5)", "pytest-cov", "pytest-tornasync", "requests-unixsocket"] +test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium (==4.1.5)", "pytest-cov", "pytest-tornasync", "requests-unixsocket"] [[package]] name = "nbclient" @@ -1313,8 +1313,8 @@ optional = false python-versions = ">=3.7" [package.extras] -default = ["numpy (>=1.19)", "scipy (>=1.5,<1.6.1 || >1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] -developer = ["black (21.5b1)", "pre-commit (>=2.12)"] +default = ["numpy (>=1.19)", "scipy (>=1.5,!=1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] +developer = ["black (==21.5b1)", "pre-commit (>=2.12)"] doc = ["sphinx (>=4.0,<5.0)", "pydata-sphinx-theme (>=0.6,<1.0)", "sphinx-gallery (>=0.9,<1.0)", "numpydoc (>=1.1)", "pillow (>=8.2)", "nb2plots (>=0.6)", "texext (>=0.6.6)"] extra = ["lxml (>=4.5)", "pygraphviz (>=1.7)", "pydot (>=1.4.1)"] test = ["pytest (>=6.2)", "pytest-cov (>=2.12)", "codecov (>=2.1)"] @@ -1377,7 +1377,7 @@ optional = true python-versions = ">=3.6" [package.extras] -qa = ["flake8 (3.8.3)", "mypy (0.782)"] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["docopt", "pytest (<6.0.0)"] [[package]] @@ -1429,7 +1429,7 @@ python-versions = ">=3.7" [package.extras] docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pluggy" @@ -1620,9 +1620,9 @@ python-versions = ">=3.6" [package.extras] crypto = ["cryptography (>=3.3.1)"] -dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (5.0.4)", "mypy", "pre-commit"] +dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"] docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (5.0.4)"] +tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] [[package]] name = "pylint" @@ -1658,7 +1658,7 @@ cffi = ">=1.4.1" [package.extras] docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] -tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)", "hypothesis (>=3.27.0)"] +tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] [[package]] name = "pyobjc-core" @@ -1860,7 +1860,7 @@ idna = ">=2.5,<4" urllib3 = ">=1.21.1,<1.27" [package.extras] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)"] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] [[package]] @@ -2053,7 +2053,7 @@ python-versions = ">=3.6" sphinx = ">=1.8" [package.extras] -code_style = ["pre-commit (2.12.1)"] +code_style = ["pre-commit (==2.12.1)"] rtd = ["sphinx", "ipython", "sphinx-book-theme"] [[package]] @@ -2294,7 +2294,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.28.0" +version = "2.28.1" description = "Typing stubs for requests" category = "dev" optional = false @@ -2338,7 +2338,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, [package.extras] brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" @@ -2426,7 +2426,7 @@ jupyterlab = ["jupyterlab"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "228320f1c5c1ebf0e96109b1ef71cc9b3320d13729ee94ef81daba7739286f01" +content-hash = "82b7c7e693d6634409e27e31818c29fa2a9ba3d13dbf86d3f130ea6c1ef40300" [metadata.files] alabaster = [ @@ -2472,8 +2472,13 @@ 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 = [] -atomicwrites = [] +astroid = [ + {file = "astroid-2.11.7-py3-none-any.whl", hash = "sha256:86b0a340a512c65abf4368b80252754cda17c02cdbbd3f587dddf98112233e7b"}, + {file = "astroid-2.11.7.tar.gz", hash = "sha256:bb24615c77f4837c707669d16907331374ae8a964650a66999da3f5ca68dc946"}, +] +atomicwrites = [ + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, +] attrs = [ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, @@ -2486,7 +2491,10 @@ backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] -"backports.cached-property" = [] +"backports.cached-property" = [ + {file = "backports.cached-property-1.0.2.tar.gz", hash = "sha256:9306f9eed6ec55fd156ace6bc1094e2c86fae5fb2bf07b6a9c00745c656e75dd"}, + {file = "backports.cached_property-1.0.2-py3-none-any.whl", hash = "sha256:baeb28e1cd619a3c9ab8941431fe34e8490861fb998c6c4590693d50171db0cc"}, +] beautifulsoup4 = [ {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, @@ -2524,7 +2532,72 @@ certifi = [ {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, ] -cffi = [] +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"}, @@ -2533,7 +2606,10 @@ charset-normalizer = [ {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, ] -click = [] +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"}, ] @@ -2553,7 +2629,49 @@ commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] -coverage = [] +coverage = [ + {file = "coverage-6.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a9032f9b7d38bdf882ac9f66ebde3afb8145f0d4c24b2e600bc4c6304aafb87e"}, + {file = "coverage-6.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e0524adb49c716ca763dbc1d27bedce36b14f33e6b8af6dba56886476b42957c"}, + {file = "coverage-6.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4548be38a1c810d79e097a38107b6bf2ff42151900e47d49635be69943763d8"}, + {file = "coverage-6.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f23876b018dfa5d3e98e96f5644b109090f16a4acb22064e0f06933663005d39"}, + {file = "coverage-6.4.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fe75dcfcb889b6800f072f2af5a331342d63d0c1b3d2bf0f7b4f6c353e8c9c0"}, + {file = "coverage-6.4.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2f8553878a24b00d5ab04b7a92a2af50409247ca5c4b7a2bf4eabe94ed20d3ee"}, + {file = "coverage-6.4.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d774d9e97007b018a651eadc1b3970ed20237395527e22cbeb743d8e73e0563d"}, + {file = "coverage-6.4.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d56f105592188ce7a797b2bd94b4a8cb2e36d5d9b0d8a1d2060ff2a71e6b9bbc"}, + {file = "coverage-6.4.2-cp310-cp310-win32.whl", hash = "sha256:d230d333b0be8042ac34808ad722eabba30036232e7a6fb3e317c49f61c93386"}, + {file = "coverage-6.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:5ef42e1db047ca42827a85e34abe973971c635f83aed49611b7f3ab49d0130f0"}, + {file = "coverage-6.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:25b7ec944f114f70803d6529394b64f8749e93cbfac0fe6c5ea1b7e6c14e8a46"}, + {file = "coverage-6.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bb00521ab4f99fdce2d5c05a91bddc0280f0afaee0e0a00425e28e209d4af07"}, + {file = "coverage-6.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2dff52b3e7f76ada36f82124703f4953186d9029d00d6287f17c68a75e2e6039"}, + {file = "coverage-6.4.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147605e1702d996279bb3cc3b164f408698850011210d133a2cb96a73a2f7996"}, + {file = "coverage-6.4.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:422fa44070b42fef9fb8dabd5af03861708cdd6deb69463adc2130b7bf81332f"}, + {file = "coverage-6.4.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8af6c26ba8df6338e57bedbf916d76bdae6308e57fc8f14397f03b5da8622b4e"}, + {file = "coverage-6.4.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5336e0352c0b12c7e72727d50ff02557005f79a0b8dcad9219c7c4940a930083"}, + {file = "coverage-6.4.2-cp37-cp37m-win32.whl", hash = "sha256:0f211df2cba951ffcae210ee00e54921ab42e2b64e0bf2c0befc977377fb09b7"}, + {file = "coverage-6.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a13772c19619118903d65a91f1d5fea84be494d12fd406d06c849b00d31bf120"}, + {file = "coverage-6.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f7bd0ffbcd03dc39490a1f40b2669cc414fae0c4e16b77bb26806a4d0b7d1452"}, + {file = "coverage-6.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0895ea6e6f7f9939166cc835df8fa4599e2d9b759b02d1521b574e13b859ac32"}, + {file = "coverage-6.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4e7ced84a11c10160c0697a6cc0b214a5d7ab21dfec1cd46e89fbf77cc66fae"}, + {file = "coverage-6.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80db4a47a199c4563d4a25919ff29c97c87569130375beca3483b41ad5f698e8"}, + {file = "coverage-6.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3def6791adf580d66f025223078dc84c64696a26f174131059ce8e91452584e1"}, + {file = "coverage-6.4.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4f89d8e03c8a3757aae65570d14033e8edf192ee9298303db15955cadcff0c63"}, + {file = "coverage-6.4.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6d0b48aff8e9720bdec315d67723f0babd936a7211dc5df453ddf76f89c59933"}, + {file = "coverage-6.4.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2b20286c2b726f94e766e86a3fddb7b7e37af5d0c635bdfa7e4399bc523563de"}, + {file = "coverage-6.4.2-cp38-cp38-win32.whl", hash = "sha256:d714af0bdba67739598849c9f18efdcc5a0412f4993914a0ec5ce0f1e864d783"}, + {file = "coverage-6.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:5f65e5d3ff2d895dab76b1faca4586b970a99b5d4b24e9aafffc0ce94a6022d6"}, + {file = "coverage-6.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a697977157adc052284a7160569b36a8bbec09db3c3220642e6323b47cec090f"}, + {file = "coverage-6.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c77943ef768276b61c96a3eb854eba55633c7a3fddf0a79f82805f232326d33f"}, + {file = "coverage-6.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54d8d0e073a7f238f0666d3c7c0d37469b2aa43311e4024c925ee14f5d5a1cbe"}, + {file = "coverage-6.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f22325010d8824594820d6ce84fa830838f581a7fd86a9235f0d2ed6deb61e29"}, + {file = "coverage-6.4.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24b04d305ea172ccb21bee5bacd559383cba2c6fcdef85b7701cf2de4188aa55"}, + {file = "coverage-6.4.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:866ebf42b4c5dbafd64455b0a1cd5aa7b4837a894809413b930026c91e18090b"}, + {file = "coverage-6.4.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e36750fbbc422c1c46c9d13b937ab437138b998fe74a635ec88989afb57a3978"}, + {file = "coverage-6.4.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:79419370d6a637cb18553ecb25228893966bd7935a9120fa454e7076f13b627c"}, + {file = "coverage-6.4.2-cp39-cp39-win32.whl", hash = "sha256:b5e28db9199dd3833cc8a07fa6cf429a01227b5d429facb56eccd765050c26cd"}, + {file = "coverage-6.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:edfdabe7aa4f97ed2b9dd5dde52d2bb29cb466993bb9d612ddd10d0085a683cf"}, + {file = "coverage-6.4.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:e2618cb2cf5a7cc8d698306e42ebcacd02fb7ef8cfc18485c59394152c70be97"}, + {file = "coverage-6.4.2.tar.gz", hash = "sha256:6c3ccfe89c36f3e5b9837b9ee507472310164f352c9fe332120b764c9d60adbe"}, +] cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, @@ -2620,7 +2738,26 @@ dearpygui = [ {file = "dearpygui-1.6.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b0c77bd722eb0168c4ea30bf46e0b493ce398c7398e315996ab27535781dc99a"}, {file = "dearpygui-1.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:7cf534cb7662e9f49ee93cb4ca34d6c245913b6dfb887d8a5e0b630597a34677"}, ] -debugpy = [] +debugpy = [ + {file = "debugpy-1.6.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:77a47d596ce8c69673d5f0c9876a80cb5a6cbc964f3b31b2d44683c7c01b6634"}, + {file = "debugpy-1.6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:726e5cc0ed5bc63e821dc371d88ddae5cba85e2ad207bf5fefc808b29421cb4c"}, + {file = "debugpy-1.6.2-cp310-cp310-win32.whl", hash = "sha256:9809bd1cdc0026fab711e280e0cb5d8f89ae5f4f74701aba5bda9a20a6afb567"}, + {file = "debugpy-1.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:40741d4bbf59baca1e97a5123514afcc036423caae5f24db23a865c0b4167c34"}, + {file = "debugpy-1.6.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:67749e972213c395647a8798cc8377646e581e1fe97d0b1b7607e6b112ae4511"}, + {file = "debugpy-1.6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e3c43d650a1e5fa7110af380fb59061bcba1e7348c00237e7473c55ae499b96"}, + {file = "debugpy-1.6.2-cp37-cp37m-win32.whl", hash = "sha256:9e572c2ac3dd93f3f1a038a9226e7cc0d7326b8d345c9b9ce6fbf9cb9822e314"}, + {file = "debugpy-1.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ac5d9e625d291a041ff3eaf65bdb816eb79a5b204cf9f1ffaf9617c0eadf96fa"}, + {file = "debugpy-1.6.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:9f72435bc9a2026a35a41221beff853dd4b6b17567ba9b9d349ee9512eb71ce6"}, + {file = "debugpy-1.6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aaf579de5ecd02634d601d7cf5b6baae5f5bab89a55ef78e0904d766ef477729"}, + {file = "debugpy-1.6.2-cp38-cp38-win32.whl", hash = "sha256:0984086a670f46c75b5046b39a55f34e4120bee78928ac4c3c7f1c7b8be1d8be"}, + {file = "debugpy-1.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:19337bb8ff87da2535ac00ea3877ceaf40ff3c681421d1a96ab4d67dad031a16"}, + {file = "debugpy-1.6.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:163f282287ce68b00a51e9dcd7ad461ef288d740dcb3a2f22c01c62f31b62696"}, + {file = "debugpy-1.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4909bb2f8e5c8fe33d6ec5b7764100b494289252ebe94ec7838b30467435f1cb"}, + {file = "debugpy-1.6.2-cp39-cp39-win32.whl", hash = "sha256:3b4657d3cd20aa454b62a70040524d3e785efc9a8488d16cd0e6caeb7b2a3f07"}, + {file = "debugpy-1.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:79d9ac34542b830a7954ab111ad8a4c790f1f836b895d03223aea4216b739208"}, + {file = "debugpy-1.6.2-py2.py3-none-any.whl", hash = "sha256:0bfdcf261f97a603d7ef7ab6972cdf7136201fde93d19bf3f917d0d2e43a5694"}, + {file = "debugpy-1.6.2.zip", hash = "sha256:e6047272e97a11aa6898138c1c88c8cf61838deeb2a4f0a74e63bb567f8dafc6"}, +] decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -2638,8 +2775,8 @@ dill = [ {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, ] distlib = [ - {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, - {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, + {file = "distlib-0.3.5-py2.py3-none-any.whl", hash = "sha256:b710088c59f06338ca514800ad795a132da19fda270e3ce4affc74abf955a26c"}, + {file = "distlib-0.3.5.tar.gz", hash = "sha256:a7f75737c70be3b25e2bee06288cec4e4c221de18455b2dd037fe2a795cab2fe"}, ] docutils = [ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, @@ -2689,12 +2826,18 @@ 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 = [] +flake8-rst-docstrings = [ + {file = "flake8-rst-docstrings-0.2.6.tar.gz", hash = "sha256:7d9526a264a1c2827b3408ea5f921f12ee0689ac123fecfa95744988aea02e6c"}, + {file = "flake8_rst_docstrings-0.2.6-py3-none-any.whl", hash = "sha256:a7a9bd9008e763339b2e19dbece7767ac0887cfaeaf9a70b12eb4449d5df1849"}, +] 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 = [] +fonttools = [ + {file = "fonttools-4.34.4-py3-none-any.whl", hash = "sha256:d73f25b283cd8033367451122aa868a23de0734757a01984e4b30b18b9050c72"}, + {file = "fonttools-4.34.4.zip", hash = "sha256:9a1c52488045cd6c6491fd07711a380f932466e317cb8e016fc4e99dc7eac2f0"}, +] furo = [ {file = "furo-2022.6.21-py3-none-any.whl", hash = "sha256:061b68e323345e27fcba024cf33a1e77f3dfd8d9987410be822749a706e2add6"}, {file = "furo-2022.6.21.tar.gz", hash = "sha256:9aa983b7488a4601d13113884bfb7254502c8729942e073a0acb87a5512af223"}, @@ -2707,7 +2850,46 @@ gitpython = [ {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, ] -glcontext = [] +glcontext = [ + {file = "glcontext-2.3.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2eb3c2d7879076a33e801283ab2403788b78e1a45dc89e664a3100b967d471a1"}, + {file = "glcontext-2.3.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:86441e63363dcbb97ee813c9978c1d8998563e76b3726776da04b7be49813be3"}, + {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e613a52a32b9fd5a528981c94b39078064a96380cad91ade4c312340d5404af"}, + {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ba701c46e7b774857b756ac6af15487b917a29dce195e40d834638edaad6f4"}, + {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:861304731c2fa5413e24abc32ac8335e93cf9f8dc7ab767ea69d380d8d503b1b"}, + {file = "glcontext-2.3.6-cp310-cp310-win32.whl", hash = "sha256:cb5b67ffc75ff4a358e8f739d3c65e1bbcc9e75c651dd5945c787d7b9c3ad03f"}, + {file = "glcontext-2.3.6-cp310-cp310-win_amd64.whl", hash = "sha256:032d10008de005b51a2401820356e9f7d51bc9c2a28f8194cc1c345bf1a8a3f9"}, + {file = "glcontext-2.3.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:16bde9cf3bae7129f5308be4a1143db58e68b49b10c77e4e34f9a51cf98fd557"}, + {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25a94ddd93eef639fd0a377b7ebc1ac972978796a2ada74fd5b03b88719d88a"}, + {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a800ba7fd1912f6424bd5979ba596f08308a9e949da73aba942b0a535860170"}, + {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bcb5b2ddd21d37f8a1b2aaa62e3952e54a09bc31d29b861a4dcc57a536514f0"}, + {file = "glcontext-2.3.6-cp37-cp37m-win32.whl", hash = "sha256:e646d9c5af3b583f74a586fd151b787314352116e7c06c4902da93e15082bdb4"}, + {file = "glcontext-2.3.6-cp37-cp37m-win_amd64.whl", hash = "sha256:2ac6f80440510473621d287603ef69a08b985c06619f62f42cb485e5ca6e872c"}, + {file = "glcontext-2.3.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b6030d9deedba125d95d39abd72c36fbf6f0a7f866e600f22b210e368afbf522"}, + {file = "glcontext-2.3.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8ca64b73e16712537a95d2e848a13391f83d72f5c19bde5f05562b62b2a1fee6"}, + {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:226453bb7ff5a79e88c59ae38b60d1ce002fa2196b19aa8fada147221816e78c"}, + {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48f299b77612b9c80f026204ee3a3062b56cb0776c1d25a6b5ce05fb7e18b261"}, + {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81addba70acbc3fa84ace2b53509c89ff3c7bfe068d1ba2d7d3478140aed2838"}, + {file = "glcontext-2.3.6-cp38-cp38-win32.whl", hash = "sha256:233a9a977d545acf7d2ea1065c986fe6b711948f31499ce5e49e5366eefafa08"}, + {file = "glcontext-2.3.6-cp38-cp38-win_amd64.whl", hash = "sha256:7f114582574c8013fdec09154767b2c3f87875b74ff9938b20d3265971d08971"}, + {file = "glcontext-2.3.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c8adc530ecbb0c01c0abcc56ee71c7bcf8799209bff9e5c32f1a1d77f7035468"}, + {file = "glcontext-2.3.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:01106836f02d0098cbcacbc6d0c911f27fa728177d5a651ff44325dfafba7077"}, + {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3f573bde2183943f6161aeb81cad14a2978f143c686dd52253a38cdae7e7667"}, + {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:60a982fc78b4400d3b5075f9790977c4d2bdf99824af3cd0428ae5a54437635f"}, + {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64c0425155174fd2faaff7f631d41792365e357484c7f44a6b38efc1ea38468c"}, + {file = "glcontext-2.3.6-cp39-cp39-win32.whl", hash = "sha256:8789947abf3594a11655f23be88481dae0a660bbf8f42e2a5fa95a8fce59ba2c"}, + {file = "glcontext-2.3.6-cp39-cp39-win_amd64.whl", hash = "sha256:22699f81696756ec98fcf8b9a2ebd1dd73a42f81501d7748855e66b63d963c36"}, + {file = "glcontext-2.3.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:970a2769c6aed12e29bd1edbb30a04fa17871a6cf7bb95190e65302c693ce928"}, + {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a30c62c6168b42a32083dc8c967e421f8c346e4452a00809c056ce6c6bea0c4"}, + {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e531662f37d171c08fcdc4ca442468266bef77da14c72c183bcaa2cd80111386"}, + {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98d5dfc4629ed85e51176fc1d8563944e0439b77bc6fe2365cb42207838ea32f"}, + {file = "glcontext-2.3.6-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:41a69166c20b1a67b2652a5074a78078df7e19f36c65d92f6552535a1182d4cc"}, + {file = "glcontext-2.3.6-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8b118f0361e61e21279e414a1fa759288421ac311e44ce08e718de38f788183"}, + {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4f862f2b4426f1786743448c899d225e8383538602a04c3ffc9622956d08140"}, + {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e59f5afe61c5bc18dc7766c36a0ac912794a53605b30469c6c6be20483f4b42f"}, + {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d399cba251b301d94eb7a41017ba68e001673f642606229fba7a0d4183b3273"}, + {file = "glcontext-2.3.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:bd50f826bb70df2415c7166d5e0aebdda3e47df8af385f562d8d5ba6018f87e9"}, + {file = "glcontext-2.3.6.tar.gz", hash = "sha256:cdb540eec587deddca037fb4dfdaa0921dcab0fd4d7ea5f1079e44fcb1b81e67"}, +] identify = [ {file = "identify-2.5.1-py2.py3-none-any.whl", hash = "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa"}, {file = "identify-2.5.1.tar.gz", hash = "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82"}, @@ -2720,7 +2902,10 @@ 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 = [] +importlib-metadata = [ + {file = "importlib_metadata-4.12.0-py3-none-any.whl", hash = "sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23"}, + {file = "importlib_metadata-4.12.0.tar.gz", hash = "sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670"}, +] importlib-resources = [ {file = "importlib_resources-5.8.0-py3-none-any.whl", hash = "sha256:7952325ffd516c05a8ad0858c74dff2c3343f136fe66a6002b2623dd1d43f223"}, {file = "importlib_resources-5.8.0.tar.gz", hash = "sha256:568c9f16cb204f9decc8d6d24a572eeea27dacbb4cee9e6b03a8025736769751"}, @@ -2729,7 +2914,10 @@ 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 = [] +ipykernel = [ + {file = "ipykernel-6.15.1-py3-none-any.whl", hash = "sha256:d8969c5b23b0e453a23166da5a669c954db399789293fcb03fec5cb25367e43c"}, + {file = "ipykernel-6.15.1.tar.gz", hash = "sha256:37acc3254caa8a0dafcddddc8dc863a60ad1b46487b68aee361d9a15bda98112"}, +] ipython = [ {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, @@ -2757,12 +2945,18 @@ jinja2 = [ json5 = [ {file = "json5-0.9.8.tar.gz", hash = "sha256:0fa6e4d3ef062f93ba9cf2a9103fe8e68c7917dfa33519ae3ac8c7e48e3c84ff"}, ] -jsonschema = [] +jsonschema = [ + {file = "jsonschema-4.7.2-py3-none-any.whl", hash = "sha256:c7448a421b25e424fccfceea86b4e3a8672b4436e1988ccbde92c80828d4f085"}, + {file = "jsonschema-4.7.2.tar.gz", hash = "sha256:73764f461d61eb97a057c929368610a134d1d1fffd858acfe88864ee94f1f1d3"}, +] jupyter-client = [ {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"}, {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"}, ] -jupyter-core = [] +jupyter-core = [ + {file = "jupyter_core-4.11.1-py3-none-any.whl", hash = "sha256:715e22bb6cc7db3718fddfac1f69f1c7e899ca00e42bdfd4bf3705452b9fd84a"}, + {file = "jupyter_core-4.11.1.tar.gz", hash = "sha256:2e5f244d44894c4154d06aeae3419dd7f1b0ef4494dc5584929b398c61cfd314"}, +] jupyter-server = [ {file = "jupyter_server-1.18.1-py3-none-any.whl", hash = "sha256:022759b09c96a4e2feb95de59ce4283e04e17782efe197b91d23a47521609b77"}, {file = "jupyter_server-1.18.1.tar.gz", hash = "sha256:2b72fc595bccae292260aad8157a0ead8da2c703ec6ae1bb7b36dbad0e267ea7"}, @@ -2956,7 +3150,43 @@ markupsafe = [ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] -matplotlib = [] +matplotlib = [ + {file = "matplotlib-3.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:03bbb3f5f78836855e127b5dab228d99551ad0642918ccbf3067fcd52ac7ac5e"}, + {file = "matplotlib-3.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49a5938ed6ef9dda560f26ea930a2baae11ea99e1c2080c8714341ecfda72a89"}, + {file = "matplotlib-3.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:77157be0fc4469cbfb901270c205e7d8adb3607af23cef8bd11419600647ceed"}, + {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5844cea45d804174bf0fac219b4ab50774e504bef477fc10f8f730ce2d623441"}, + {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c87973ddec10812bddc6c286b88fdd654a666080fbe846a1f7a3b4ba7b11ab78"}, + {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a05f2b37222319753a5d43c0a4fd97ed4ff15ab502113e3f2625c26728040cf"}, + {file = "matplotlib-3.5.2-cp310-cp310-win32.whl", hash = "sha256:9776e1a10636ee5f06ca8efe0122c6de57ffe7e8c843e0fb6e001e9d9256ec95"}, + {file = "matplotlib-3.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:b4fedaa5a9aa9ce14001541812849ed1713112651295fdddd640ea6620e6cf98"}, + {file = "matplotlib-3.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ee175a571e692fc8ae8e41ac353c0e07259113f4cb063b0ec769eff9717e84bb"}, + {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e8bda1088b941ead50caabd682601bece983cadb2283cafff56e8fcddbf7d7f"}, + {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9480842d5aadb6e754f0b8f4ebeb73065ac8be1855baa93cd082e46e770591e9"}, + {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6c623b355d605a81c661546af7f24414165a8a2022cddbe7380a31a4170fa2e9"}, + {file = "matplotlib-3.5.2-cp37-cp37m-win32.whl", hash = "sha256:a91426ae910819383d337ba0dc7971c7cefdaa38599868476d94389a329e599b"}, + {file = "matplotlib-3.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c4b82c2ae6d305fcbeb0eb9c93df2602ebd2f174f6e8c8a5d92f9445baa0c1d3"}, + {file = "matplotlib-3.5.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ebc27ad11df3c1661f4677a7762e57a8a91dd41b466c3605e90717c9a5f90c82"}, + {file = "matplotlib-3.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a32ea6e12e80dedaca2d4795d9ed40f97bfa56e6011e14f31502fdd528b9c89"}, + {file = "matplotlib-3.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a0967d4156adbd0d46db06bc1a877f0370bce28d10206a5071f9ecd6dc60b79"}, + {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2b696699386766ef171a259d72b203a3c75d99d03ec383b97fc2054f52e15cf"}, + {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f409716119fa39b03da3d9602bd9b41142fab7a0568758cd136cd80b1bf36c8"}, + {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b8d3f4e71e26307e8c120b72c16671d70c5cd08ae412355c11254aa8254fb87f"}, + {file = "matplotlib-3.5.2-cp38-cp38-win32.whl", hash = "sha256:b6c63cd01cad0ea8704f1fd586e9dc5777ccedcd42f63cbbaa3eae8dd41172a1"}, + {file = "matplotlib-3.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:75c406c527a3aa07638689586343f4b344fcc7ab1f79c396699eb550cd2b91f7"}, + {file = "matplotlib-3.5.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a44cdfdb9d1b2f18b1e7d315eb3843abb097869cd1ef89cfce6a488cd1b5182"}, + {file = "matplotlib-3.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d8e129af95b156b41cb3be0d9a7512cc6d73e2b2109f82108f566dbabdbf377"}, + {file = "matplotlib-3.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:364e6bca34edc10a96aa3b1d7cd76eb2eea19a4097198c1b19e89bee47ed5781"}, + {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea75df8e567743207e2b479ba3d8843537be1c146d4b1e3e395319a4e1a77fe9"}, + {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:44c6436868186564450df8fd2fc20ed9daaef5caad699aa04069e87099f9b5a8"}, + {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d7705022df2c42bb02937a2a824f4ec3cca915700dd80dc23916af47ff05f1a"}, + {file = "matplotlib-3.5.2-cp39-cp39-win32.whl", hash = "sha256:ee0b8e586ac07f83bb2950717e66cb305e2859baf6f00a9c39cc576e0ce9629c"}, + {file = "matplotlib-3.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:c772264631e5ae61f0bd41313bbe48e1b9bcc95b974033e1118c9caa1a84d5c6"}, + {file = "matplotlib-3.5.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:751d3815b555dcd6187ad35b21736dc12ce6925fc3fa363bbc6dc0f86f16484f"}, + {file = "matplotlib-3.5.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:31fbc2af27ebb820763f077ec7adc79b5a031c2f3f7af446bd7909674cd59460"}, + {file = "matplotlib-3.5.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fa28ca76ac5c2b2d54bc058b3dad8e22ee85d26d1ee1b116a6fd4d2277b6a04"}, + {file = "matplotlib-3.5.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:24173c23d1bcbaed5bf47b8785d27933a1ac26a5d772200a0f3e0e38f471b001"}, + {file = "matplotlib-3.5.2.tar.gz", hash = "sha256:48cf850ce14fa18067f2d9e0d646763681948487a8080ec0af2686468b4607a2"}, +] matplotlib-inline = [ {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, @@ -2978,6 +3208,15 @@ mistune = [ {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, ] moderngl = [ + {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:186f8ab2b869c56f677dc87de0577a60790fb9306bd5149cedc433a39e9291e5"}, + {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de252103b24a8dc40c7f6e1755e29bc9263c33b92141787b50c7ab0266c74906"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bcfcec3bc3b9a1ee19e94fa524913fd45c37214ea69301a6911e8e53f966029"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d76b0fb489a5dc6da591b979f8c471bb5b67409afaa9fe4569bc0abf25221f4"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_27_x86_64.whl", hash = "sha256:792ffe1ec233ed5fcfb0c14955a7f944d64c0d49713ff8b9c5fa3176d96f05c3"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:1f9ed0bc0d706124a01be2ad59b5774bb3b023e61dcf39faf7c4c7ef4b9f4f75"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7c2fce8b7a68f3df9189a19f424478e1d853cfd3e142efd1eb0d4cdf44148d7"}, + {file = "moderngl-5.6.4-cp310-cp310-win32.whl", hash = "sha256:0c6b482f678641e56bd44acecd10eddf74d2cd31e472eff6cca05493cf01e2c9"}, + {file = "moderngl-5.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:28b517fc56c9ab9eb1f5833f7d7b1274d3719b962f95f55ccd8a0f6db884a92b"}, {file = "moderngl-5.6.4-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:bc3764d67f037b67051871345a1d0b7a3d2c19cb5c0c0af0a84c532e802d6642"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:90006d9dfd5333da604a7d26b2a5e70e1a570f291cd745b8bf80e4833d8821b6"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:af44437545380a840dafd09658eb56592831dbd4fb481d320249d0d42c591bae"}, @@ -2986,21 +3225,45 @@ moderngl = [ {file = "moderngl-5.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:331fd4bce60b10a08eed81a3ed4c70b7c297c38f981fdf3968d03a1c892af247"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1bd864b5cc2fc1255785e33575cec98fa5ded698503c4f8f3fa9230abeaa3a04"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b22534529f5bc52c1fe43336787c06d51123ae978fb56e74e47cabd85056c934"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5151ccf38af80ce8600eac089df1c814eb72aa99c8768307348c1a170104b7e"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ef57f65c639d12d534dce70e5c08965f0856ac371c669c7586904b8db6453eb"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0032c07b31bec50b26bba7ee7999e0f697000b31456bfa84391614bb92dba376"}, {file = "moderngl-5.6.4-cp36-cp36m-win32.whl", hash = "sha256:ee5b1eced39d7f6dc68782c2abf01c1130a40b6d83d333d175ee71adbea7c721"}, {file = "moderngl-5.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:52ee915a559762f0e992344961b35e0d241be32f8aa7464494e958f777e0534c"}, {file = "moderngl-5.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f83f6ab1fafdba2d9c06a7a1c8a4e460689ea1d514146606acc74f14e0831d93"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c350e06affea9fabc636b2350cf6e58d83ee2e7264527eee0f5d142c167f5463"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3eb65afc8ec4a1d4a4c48696fb0f4f6cf7a7ada6bef97818d717dbca73c57b11"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ec09bb3382d36e5ef3e627e85744b719db1175c3a3fdbadf9acde48eb1aca6"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23b6b30c5a16807d9d2b92f343fcdca8713a88801d8afa985decd302bb6ef7e9"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5eb217b7726511d2382bfdd56b2a8ff5489aa7d1d73bf4f854343b07df286fa9"}, {file = "moderngl-5.6.4-cp37-cp37m-win32.whl", hash = "sha256:4fd721eb83e73d34c3f7b5a11aec656fef461b51bbe7503b07ea27370c593cbd"}, {file = "moderngl-5.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:01c71d94dbd59b5d37ead463991e2998c0924426cffa393b9da2b8334551c998"}, + {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:46e7e03360eafa77159e0d6142904de0d2e9400254414820bbc2d0ca16b14388"}, {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2ec6ecd845f21ba44a08c11521cb71f2a9c2ea2ec189b7ed30d17837d392d70"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:40f74a2246e5302f93f2d46f76c0d2a26cbed1eb29731674c4052476f1e9c9ea"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5e158e6881034c7e1d0c583d7c82ff608439606f2359dc6098e4be4fd93cef9d"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eb8fb5efab2716938308732d16d0caf1a195015d84d73f2b73e3adacd228ba6"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59907d8855dd3ccf1950e8f43f5a1a7cdd93910d8edf538bf52e62098be22360"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8037b6934843000d5fecd2b1933d3894687123fc9afdb19af52a9a628971163d"}, {file = "moderngl-5.6.4-cp38-cp38-win32.whl", hash = "sha256:a28dc741469eeb69549ee85b4ddbf8e9cfca6a2b19ce0406df9fde20f78082c8"}, {file = "moderngl-5.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:ce87962b91635d857cac4a753c5d5f647d94dc66dcb0f090bb8d758fd226c3e8"}, + {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d4c56e15a5fb29de0295891ec3b153e2bd8aeada0c0825135aa5851fa481ff28"}, {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fb139bcdd25eae2c546e5788e9d8719f6c4b18a2ba68a9df31699b4ac57d62d"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9645afaa1704b2628d8a58be0760243d9954a62902283b176ea00a55b54eafe"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a3aaa15eb4d43b79e06a46945869feb13f325312ad63666ef2b7d3e216e3a09"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a07531c6b0f3da3058bd8927bc6c75eface98ce1416d8be4072b9b11b314b718"}, {file = "moderngl-5.6.4-cp39-cp39-win32.whl", hash = "sha256:fc5cc1601a3df8f45f1901c6b9960731e0619d1781b0d036e12341fbf2ef55d3"}, {file = "moderngl-5.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:1c74b71c9acee9f0e69807a086d76e92f37c1960c3bb1d6a6e2472fd03f7be5b"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1927a52fd3465c508045a1c4a8ea8c793399830d48458d431936f24f8827f136"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d04747cc9a96f786d04c8a176d5d2cbb51159efd66287d0e676ac674f53e861"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9092c50a2bb293be770f6f0ae5f1cb940848bf03682696c473a6d3f2c7710d2"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571e524fde685e21dbe132f4eb7bb223cfc235dc917a4cf122bc44897be18e89"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ee02dba4b32d7a165a36c797ce495d71deb085a7e29cfa7f1236fa7ccdfc6160"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0c02fdd386c45ad5d5053a436da64181a7821a042f6665c4ae415edfbdfe244c"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e2b40f1e11ee5f251a0d564e6a5d285ff91adf361e84f6912fc10959b92bd83"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d5f918dda6dc1ec5465d7105b06c5525041fbc368df5d4636145006ce3d303"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a6bd0e342388b931954671ccf8300ab36cc7d8c991547581efa6df5628bda8b"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:890caba3795a0288259d76a2cee014c6ffc00619bef179a8d0a87fd9c16a3729"}, {file = "moderngl-5.6.4.tar.gz", hash = "sha256:8c6d04559f5e3bf75a18525cd46d213c0f3a8409363718978e6de691bdb551fb"}, ] moderngl-window = [ @@ -3042,7 +3305,10 @@ 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 = [] +nbclassic = [ + {file = "nbclassic-0.4.3-py3-none-any.whl", hash = "sha256:4b01076effdac53e775cd1b6a4e891663568b32621468e205b502a23b2921899"}, + {file = "nbclassic-0.4.3.tar.gz", hash = "sha256:f03111b2cebaa69b88370a7b23b19b2b37c9bb71767f1828cdfd7a047eae8edd"}, +] nbclient = [ {file = "nbclient-0.6.6-py3-none-any.whl", hash = "sha256:09bae4ea2df79fa6bc50aeb8278d8b79d2036792824337fa6eee834afae17312"}, {file = "nbclient-0.6.6.tar.gz", hash = "sha256:0df76a7961d99a681b4796c74a1f2553b9f998851acc01896dce064ad19a9027"}, @@ -3196,12 +3462,18 @@ 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 = [] +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.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, ] -prompt-toolkit = [] +prompt-toolkit = [ + {file = "prompt_toolkit-3.0.30-py3-none-any.whl", hash = "sha256:d8916d3f62a7b67ab353a952ce4ced6a1d2587dfe9ef8ebc30dd7c386751f289"}, + {file = "prompt_toolkit-3.0.30.tar.gz", hash = "sha256:859b283c50bde45f5f97829f77a4674d1c1fcd88539364f1b28a37805cfd89c0"}, +] psutil = [ {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"}, {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"}, @@ -3523,7 +3795,10 @@ requests = [ restructuredtext-lint = [ {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, ] -rich = [] +rich = [ + {file = "rich-12.5.1-py3-none-any.whl", hash = "sha256:2eb4e6894cde1e017976d2975ac210ef515d7548bc595ba20e195fb9628acdeb"}, + {file = "rich-12.5.1.tar.gz", hash = "sha256:63a5c5ce3673d3d5fbbf23cd87e11ab84b6b451436f1b7f19ec54b6bc36ed7ca"}, +] scipy = [ {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, {file = "scipy-1.7.3-1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b0e0aeb061a1d7dcd2ed59ea57ee56c9b23dd60100825f98238c06ee5cc4467e"}, @@ -3563,7 +3838,10 @@ send2trash = [ {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, ] -setuptools-scm = [] +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"}, @@ -3624,7 +3902,10 @@ 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 = [] +sphinx-basic-ng = [ + {file = "sphinx_basic_ng-0.0.1a12-py3-none-any.whl", hash = "sha256:e8b6efd2c5ece014156de76065eda01ddfca0fee465aa020b1e3c12f84570bbe"}, + {file = "sphinx_basic_ng-0.0.1a12.tar.gz", hash = "sha256:cffffb14914ddd26c94b1330df1d72dab5a42e220aaeb5953076a40b9c50e801"}, +] 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"}, @@ -3731,7 +4012,10 @@ 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 = [] +types-docutils = [ + {file = "types-docutils-0.19.0.tar.gz", hash = "sha256:94936b1961aacda61ec6bb0acf1169cd7830b5230b645855c1d4789baf19685e"}, + {file = "types_docutils-0.19.0-py3-none-any.whl", hash = "sha256:198ed1c0ef6c1a79411da9e1745514eda433d37770e24f26b0e13a302904cc97"}, +] 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"}, @@ -3745,8 +4029,8 @@ types-pygments = [ {file = "types_Pygments-2.12.1-py3-none-any.whl", hash = "sha256:b171949fc6074793a7fb559d938bb0332e66363d65b2e07b28770badf05768c5"}, ] types-requests = [ - {file = "types-requests-2.28.0.tar.gz", hash = "sha256:9863d16dfbb3fa55dcda64fa3b989e76e8859033b26c1e1623e30465cfe294d3"}, - {file = "types_requests-2.28.0-py3-none-any.whl", hash = "sha256:85383b4ef0535f639c3f06c5bbb6494bbf59570c4cd88bbcf540f0b2ac1b49ab"}, + {file = "types-requests-2.28.1.tar.gz", hash = "sha256:acd8ed78509d27bdf04cddcc05f7066dfde4d30dd7dba67b808cdb1141d62ffe"}, + {file = "types_requests-2.28.1-py3-none-any.whl", hash = "sha256:b097692e124001f0ed5e4490245bb090f5e8e929819972f9ace84f9c3e146e8c"}, ] types-setuptools = [ {file = "types-setuptools-57.4.18.tar.gz", hash = "sha256:8ee03d823fe7fda0bd35faeae33d35cb5c25b497263e6a58b34c4cfd05f40bcf"}, @@ -3760,7 +4044,10 @@ typing-extensions = [ {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, ] -urllib3 = [] +urllib3 = [ + {file = "urllib3-1.26.10-py2.py3-none-any.whl", hash = "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec"}, + {file = "urllib3-1.26.10.tar.gz", hash = "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6"}, +] virtualenv = [ {file = "virtualenv-20.15.1-py2.py3-none-any.whl", hash = "sha256:b30aefac647e86af6d82bfc944c556f8f1a9c90427b2fb4e3bfbf338cb82becf"}, {file = "virtualenv-20.15.1.tar.gz", hash = "sha256:288171134a2ff3bfb1a2f54f119e77cd1b81c29fc1265a2356f3e8d14c7d58c4"}, @@ -3870,4 +4157,7 @@ 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 = [] +zipp = [ + {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, + {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, +] diff --git a/pyproject.toml b/pyproject.toml index 0f802253be..163e0bdc38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "manim" -version = "0.16.0" +version = "0.16.0.post0" description = "Animation engine for explanatory math videos." authors = ["The Manim Community Developers ", "3b1b "] license="MIT" @@ -31,7 +31,7 @@ click = ">=7.2<=9.0" click-default-group = "^1.2.2" colour = "^0.1.5" numpy = "^1.19" -Pillow = ">=8.4,<10.0" +Pillow = ">=9.1,<10.0" scipy = "^1.7.3" tqdm = "^4.62.3" pydub = "^0.25.1" From cd40bc3baf2dfa3e46d7f2817275282200fd464f Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 15 Jul 2022 16:13:55 +0200 Subject: [PATCH 101/555] Fixed binder launch problem by adding missing optional ``notebook`` dependency (#2877) * explicitly added notebook to list of optional dependencies * update lockfile --- poetry.lock | 420 ++++++++++--------------------------------------- pyproject.toml | 3 +- 2 files changed, 81 insertions(+), 342 deletions(-) diff --git a/poetry.lock b/poetry.lock index fea7b30c83..ab3c64e8d1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -187,7 +187,7 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "Sphinx (==4.3.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)", "black (==22.3.0)", "mypy (==0.961)"] +dev = ["build (0.8.0)", "flake8 (4.0.1)", "hashin (0.17.0)", "pip-tools (6.6.2)", "pytest (7.1.2)", "Sphinx (4.3.2)", "tox (3.25.0)", "twine (4.0.1)", "wheel (0.37.1)", "black (22.3.0)", "mypy (0.961)"] [[package]] name = "certifi" @@ -290,7 +290,7 @@ optional = false python-versions = "*" [package.extras] -test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] +test = ["flake8 (3.7.8)", "hypothesis (3.55.3)"] [[package]] name = "coverage" @@ -331,7 +331,7 @@ optional = false python-versions = ">=3.6" [package.extras] -dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", "pandas", "pytest"] +dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (0.770)", "numpy", "pandas", "pytest"] [[package]] name = "dearpygui" @@ -795,7 +795,7 @@ python-versions = ">=3.6" parso = ">=0.8.0,<0.9.0" [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (3.8.3)", "mypy (0.782)"] testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] @@ -1014,7 +1014,7 @@ typing_extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [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"] @@ -1080,7 +1080,7 @@ python-versions = "~=3.6" markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -code_style = ["pre-commit (==2.6)"] +code_style = ["pre-commit (2.6)"] rtd = ["myst-parser (>=0.14.0,<0.15.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] @@ -1226,7 +1226,7 @@ traitlets = ">=4.2.1" [package.extras] docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] json-logging = ["json-logging"] -test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium (==4.1.5)", "pytest-cov", "pytest-tornasync", "requests-unixsocket"] +test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium (4.1.5)", "pytest-cov", "pytest-tornasync", "requests-unixsocket"] [[package]] name = "nbclient" @@ -1313,8 +1313,8 @@ optional = false python-versions = ">=3.7" [package.extras] -default = ["numpy (>=1.19)", "scipy (>=1.5,!=1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] -developer = ["black (==21.5b1)", "pre-commit (>=2.12)"] +default = ["numpy (>=1.19)", "scipy (>=1.5,<1.6.1 || >1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] +developer = ["black (21.5b1)", "pre-commit (>=2.12)"] doc = ["sphinx (>=4.0,<5.0)", "pydata-sphinx-theme (>=0.6,<1.0)", "sphinx-gallery (>=0.9,<1.0)", "numpydoc (>=1.1)", "pillow (>=8.2)", "nb2plots (>=0.6)", "texext (>=0.6.6)"] extra = ["lxml (>=4.5)", "pygraphviz (>=1.7)", "pydot (>=1.4.1)"] test = ["pytest (>=6.2)", "pytest-cov (>=2.12)", "codecov (>=2.1)"] @@ -1327,6 +1327,36 @@ category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +[[package]] +name = "notebook" +version = "6.4.12" +description = "A web-based notebook environment for interactive computing" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=5.3.4" +jupyter-core = ">=4.6.1" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] +json-logging = ["json-logging"] +test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] + [[package]] name = "notebook-shim" version = "0.1.0" @@ -1377,7 +1407,7 @@ optional = true python-versions = ">=3.6" [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (3.8.3)", "mypy (0.782)"] testing = ["docopt", "pytest (<6.0.0)"] [[package]] @@ -1429,7 +1459,7 @@ python-versions = ">=3.7" [package.extras] docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +test = ["appdirs (1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pluggy" @@ -1620,9 +1650,9 @@ python-versions = ">=3.6" [package.extras] crypto = ["cryptography (>=3.3.1)"] -dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"] +dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (5.0.4)", "mypy", "pre-commit"] docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] +tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (5.0.4)"] [[package]] name = "pylint" @@ -1658,7 +1688,7 @@ cffi = ">=1.4.1" [package.extras] docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] -tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] +tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)", "hypothesis (>=3.27.0)"] [[package]] name = "pyobjc-core" @@ -1860,7 +1890,7 @@ idna = ">=2.5,<4" urllib3 = ">=1.21.1,<1.27" [package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)"] use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] [[package]] @@ -2053,7 +2083,7 @@ python-versions = ">=3.6" sphinx = ">=1.8" [package.extras] -code_style = ["pre-commit (==2.12.1)"] +code_style = ["pre-commit (2.12.1)"] rtd = ["sphinx", "ipython", "sphinx-book-theme"] [[package]] @@ -2338,7 +2368,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, [package.extras] brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] [[package]] name = "virtualenv" @@ -2421,12 +2451,12 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [extras] gui = ["dearpygui"] -jupyterlab = ["jupyterlab"] +jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "82b7c7e693d6634409e27e31818c29fa2a9ba3d13dbf86d3f130ea6c1ef40300" +content-hash = "c2a44c7802a88f2d2d5cd0a5dd422c54947c05d11a841ec5cdcb43abde425604" [metadata.files] alabaster = [ @@ -2472,13 +2502,8 @@ 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.11.7-py3-none-any.whl", hash = "sha256:86b0a340a512c65abf4368b80252754cda17c02cdbbd3f587dddf98112233e7b"}, - {file = "astroid-2.11.7.tar.gz", hash = "sha256:bb24615c77f4837c707669d16907331374ae8a964650a66999da3f5ca68dc946"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, -] +astroid = [] +atomicwrites = [] attrs = [ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, @@ -2491,10 +2516,7 @@ backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] -"backports.cached-property" = [ - {file = "backports.cached-property-1.0.2.tar.gz", hash = "sha256:9306f9eed6ec55fd156ace6bc1094e2c86fae5fb2bf07b6a9c00745c656e75dd"}, - {file = "backports.cached_property-1.0.2-py3-none-any.whl", hash = "sha256:baeb28e1cd619a3c9ab8941431fe34e8490861fb998c6c4590693d50171db0cc"}, -] +"backports.cached-property" = [] beautifulsoup4 = [ {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, @@ -2532,72 +2554,7 @@ certifi = [ {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, ] -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"}, -] +cffi = [] cfgv = [ {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, @@ -2606,10 +2563,7 @@ charset-normalizer = [ {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, ] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] +click = [] click-default-group = [ {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, ] @@ -2629,49 +2583,7 @@ commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] -coverage = [ - {file = "coverage-6.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a9032f9b7d38bdf882ac9f66ebde3afb8145f0d4c24b2e600bc4c6304aafb87e"}, - {file = "coverage-6.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e0524adb49c716ca763dbc1d27bedce36b14f33e6b8af6dba56886476b42957c"}, - {file = "coverage-6.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4548be38a1c810d79e097a38107b6bf2ff42151900e47d49635be69943763d8"}, - {file = "coverage-6.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f23876b018dfa5d3e98e96f5644b109090f16a4acb22064e0f06933663005d39"}, - {file = "coverage-6.4.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fe75dcfcb889b6800f072f2af5a331342d63d0c1b3d2bf0f7b4f6c353e8c9c0"}, - {file = "coverage-6.4.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2f8553878a24b00d5ab04b7a92a2af50409247ca5c4b7a2bf4eabe94ed20d3ee"}, - {file = "coverage-6.4.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d774d9e97007b018a651eadc1b3970ed20237395527e22cbeb743d8e73e0563d"}, - {file = "coverage-6.4.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d56f105592188ce7a797b2bd94b4a8cb2e36d5d9b0d8a1d2060ff2a71e6b9bbc"}, - {file = "coverage-6.4.2-cp310-cp310-win32.whl", hash = "sha256:d230d333b0be8042ac34808ad722eabba30036232e7a6fb3e317c49f61c93386"}, - {file = "coverage-6.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:5ef42e1db047ca42827a85e34abe973971c635f83aed49611b7f3ab49d0130f0"}, - {file = "coverage-6.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:25b7ec944f114f70803d6529394b64f8749e93cbfac0fe6c5ea1b7e6c14e8a46"}, - {file = "coverage-6.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bb00521ab4f99fdce2d5c05a91bddc0280f0afaee0e0a00425e28e209d4af07"}, - {file = "coverage-6.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2dff52b3e7f76ada36f82124703f4953186d9029d00d6287f17c68a75e2e6039"}, - {file = "coverage-6.4.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147605e1702d996279bb3cc3b164f408698850011210d133a2cb96a73a2f7996"}, - {file = "coverage-6.4.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:422fa44070b42fef9fb8dabd5af03861708cdd6deb69463adc2130b7bf81332f"}, - {file = "coverage-6.4.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8af6c26ba8df6338e57bedbf916d76bdae6308e57fc8f14397f03b5da8622b4e"}, - {file = "coverage-6.4.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5336e0352c0b12c7e72727d50ff02557005f79a0b8dcad9219c7c4940a930083"}, - {file = "coverage-6.4.2-cp37-cp37m-win32.whl", hash = "sha256:0f211df2cba951ffcae210ee00e54921ab42e2b64e0bf2c0befc977377fb09b7"}, - {file = "coverage-6.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a13772c19619118903d65a91f1d5fea84be494d12fd406d06c849b00d31bf120"}, - {file = "coverage-6.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f7bd0ffbcd03dc39490a1f40b2669cc414fae0c4e16b77bb26806a4d0b7d1452"}, - {file = "coverage-6.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0895ea6e6f7f9939166cc835df8fa4599e2d9b759b02d1521b574e13b859ac32"}, - {file = "coverage-6.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4e7ced84a11c10160c0697a6cc0b214a5d7ab21dfec1cd46e89fbf77cc66fae"}, - {file = "coverage-6.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80db4a47a199c4563d4a25919ff29c97c87569130375beca3483b41ad5f698e8"}, - {file = "coverage-6.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3def6791adf580d66f025223078dc84c64696a26f174131059ce8e91452584e1"}, - {file = "coverage-6.4.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4f89d8e03c8a3757aae65570d14033e8edf192ee9298303db15955cadcff0c63"}, - {file = "coverage-6.4.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6d0b48aff8e9720bdec315d67723f0babd936a7211dc5df453ddf76f89c59933"}, - {file = "coverage-6.4.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2b20286c2b726f94e766e86a3fddb7b7e37af5d0c635bdfa7e4399bc523563de"}, - {file = "coverage-6.4.2-cp38-cp38-win32.whl", hash = "sha256:d714af0bdba67739598849c9f18efdcc5a0412f4993914a0ec5ce0f1e864d783"}, - {file = "coverage-6.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:5f65e5d3ff2d895dab76b1faca4586b970a99b5d4b24e9aafffc0ce94a6022d6"}, - {file = "coverage-6.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a697977157adc052284a7160569b36a8bbec09db3c3220642e6323b47cec090f"}, - {file = "coverage-6.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c77943ef768276b61c96a3eb854eba55633c7a3fddf0a79f82805f232326d33f"}, - {file = "coverage-6.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54d8d0e073a7f238f0666d3c7c0d37469b2aa43311e4024c925ee14f5d5a1cbe"}, - {file = "coverage-6.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f22325010d8824594820d6ce84fa830838f581a7fd86a9235f0d2ed6deb61e29"}, - {file = "coverage-6.4.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24b04d305ea172ccb21bee5bacd559383cba2c6fcdef85b7701cf2de4188aa55"}, - {file = "coverage-6.4.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:866ebf42b4c5dbafd64455b0a1cd5aa7b4837a894809413b930026c91e18090b"}, - {file = "coverage-6.4.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e36750fbbc422c1c46c9d13b937ab437138b998fe74a635ec88989afb57a3978"}, - {file = "coverage-6.4.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:79419370d6a637cb18553ecb25228893966bd7935a9120fa454e7076f13b627c"}, - {file = "coverage-6.4.2-cp39-cp39-win32.whl", hash = "sha256:b5e28db9199dd3833cc8a07fa6cf429a01227b5d429facb56eccd765050c26cd"}, - {file = "coverage-6.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:edfdabe7aa4f97ed2b9dd5dde52d2bb29cb466993bb9d612ddd10d0085a683cf"}, - {file = "coverage-6.4.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:e2618cb2cf5a7cc8d698306e42ebcacd02fb7ef8cfc18485c59394152c70be97"}, - {file = "coverage-6.4.2.tar.gz", hash = "sha256:6c3ccfe89c36f3e5b9837b9ee507472310164f352c9fe332120b764c9d60adbe"}, -] +coverage = [] cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, @@ -2738,26 +2650,7 @@ dearpygui = [ {file = "dearpygui-1.6.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b0c77bd722eb0168c4ea30bf46e0b493ce398c7398e315996ab27535781dc99a"}, {file = "dearpygui-1.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:7cf534cb7662e9f49ee93cb4ca34d6c245913b6dfb887d8a5e0b630597a34677"}, ] -debugpy = [ - {file = "debugpy-1.6.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:77a47d596ce8c69673d5f0c9876a80cb5a6cbc964f3b31b2d44683c7c01b6634"}, - {file = "debugpy-1.6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:726e5cc0ed5bc63e821dc371d88ddae5cba85e2ad207bf5fefc808b29421cb4c"}, - {file = "debugpy-1.6.2-cp310-cp310-win32.whl", hash = "sha256:9809bd1cdc0026fab711e280e0cb5d8f89ae5f4f74701aba5bda9a20a6afb567"}, - {file = "debugpy-1.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:40741d4bbf59baca1e97a5123514afcc036423caae5f24db23a865c0b4167c34"}, - {file = "debugpy-1.6.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:67749e972213c395647a8798cc8377646e581e1fe97d0b1b7607e6b112ae4511"}, - {file = "debugpy-1.6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e3c43d650a1e5fa7110af380fb59061bcba1e7348c00237e7473c55ae499b96"}, - {file = "debugpy-1.6.2-cp37-cp37m-win32.whl", hash = "sha256:9e572c2ac3dd93f3f1a038a9226e7cc0d7326b8d345c9b9ce6fbf9cb9822e314"}, - {file = "debugpy-1.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ac5d9e625d291a041ff3eaf65bdb816eb79a5b204cf9f1ffaf9617c0eadf96fa"}, - {file = "debugpy-1.6.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:9f72435bc9a2026a35a41221beff853dd4b6b17567ba9b9d349ee9512eb71ce6"}, - {file = "debugpy-1.6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aaf579de5ecd02634d601d7cf5b6baae5f5bab89a55ef78e0904d766ef477729"}, - {file = "debugpy-1.6.2-cp38-cp38-win32.whl", hash = "sha256:0984086a670f46c75b5046b39a55f34e4120bee78928ac4c3c7f1c7b8be1d8be"}, - {file = "debugpy-1.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:19337bb8ff87da2535ac00ea3877ceaf40ff3c681421d1a96ab4d67dad031a16"}, - {file = "debugpy-1.6.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:163f282287ce68b00a51e9dcd7ad461ef288d740dcb3a2f22c01c62f31b62696"}, - {file = "debugpy-1.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4909bb2f8e5c8fe33d6ec5b7764100b494289252ebe94ec7838b30467435f1cb"}, - {file = "debugpy-1.6.2-cp39-cp39-win32.whl", hash = "sha256:3b4657d3cd20aa454b62a70040524d3e785efc9a8488d16cd0e6caeb7b2a3f07"}, - {file = "debugpy-1.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:79d9ac34542b830a7954ab111ad8a4c790f1f836b895d03223aea4216b739208"}, - {file = "debugpy-1.6.2-py2.py3-none-any.whl", hash = "sha256:0bfdcf261f97a603d7ef7ab6972cdf7136201fde93d19bf3f917d0d2e43a5694"}, - {file = "debugpy-1.6.2.zip", hash = "sha256:e6047272e97a11aa6898138c1c88c8cf61838deeb2a4f0a74e63bb567f8dafc6"}, -] +debugpy = [] decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -2774,10 +2667,7 @@ dill = [ {file = "dill-0.3.5.1-py2.py3-none-any.whl", hash = "sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302"}, {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, ] -distlib = [ - {file = "distlib-0.3.5-py2.py3-none-any.whl", hash = "sha256:b710088c59f06338ca514800ad795a132da19fda270e3ce4affc74abf955a26c"}, - {file = "distlib-0.3.5.tar.gz", hash = "sha256:a7f75737c70be3b25e2bee06288cec4e4c221de18455b2dd037fe2a795cab2fe"}, -] +distlib = [] docutils = [ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, @@ -2826,18 +2716,12 @@ 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.6.tar.gz", hash = "sha256:7d9526a264a1c2827b3408ea5f921f12ee0689ac123fecfa95744988aea02e6c"}, - {file = "flake8_rst_docstrings-0.2.6-py3-none-any.whl", hash = "sha256:a7a9bd9008e763339b2e19dbece7767ac0887cfaeaf9a70b12eb4449d5df1849"}, -] +flake8-rst-docstrings = [] 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.34.4-py3-none-any.whl", hash = "sha256:d73f25b283cd8033367451122aa868a23de0734757a01984e4b30b18b9050c72"}, - {file = "fonttools-4.34.4.zip", hash = "sha256:9a1c52488045cd6c6491fd07711a380f932466e317cb8e016fc4e99dc7eac2f0"}, -] +fonttools = [] furo = [ {file = "furo-2022.6.21-py3-none-any.whl", hash = "sha256:061b68e323345e27fcba024cf33a1e77f3dfd8d9987410be822749a706e2add6"}, {file = "furo-2022.6.21.tar.gz", hash = "sha256:9aa983b7488a4601d13113884bfb7254502c8729942e073a0acb87a5512af223"}, @@ -2850,46 +2734,7 @@ gitpython = [ {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, ] -glcontext = [ - {file = "glcontext-2.3.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2eb3c2d7879076a33e801283ab2403788b78e1a45dc89e664a3100b967d471a1"}, - {file = "glcontext-2.3.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:86441e63363dcbb97ee813c9978c1d8998563e76b3726776da04b7be49813be3"}, - {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e613a52a32b9fd5a528981c94b39078064a96380cad91ade4c312340d5404af"}, - {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ba701c46e7b774857b756ac6af15487b917a29dce195e40d834638edaad6f4"}, - {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:861304731c2fa5413e24abc32ac8335e93cf9f8dc7ab767ea69d380d8d503b1b"}, - {file = "glcontext-2.3.6-cp310-cp310-win32.whl", hash = "sha256:cb5b67ffc75ff4a358e8f739d3c65e1bbcc9e75c651dd5945c787d7b9c3ad03f"}, - {file = "glcontext-2.3.6-cp310-cp310-win_amd64.whl", hash = "sha256:032d10008de005b51a2401820356e9f7d51bc9c2a28f8194cc1c345bf1a8a3f9"}, - {file = "glcontext-2.3.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:16bde9cf3bae7129f5308be4a1143db58e68b49b10c77e4e34f9a51cf98fd557"}, - {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25a94ddd93eef639fd0a377b7ebc1ac972978796a2ada74fd5b03b88719d88a"}, - {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a800ba7fd1912f6424bd5979ba596f08308a9e949da73aba942b0a535860170"}, - {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bcb5b2ddd21d37f8a1b2aaa62e3952e54a09bc31d29b861a4dcc57a536514f0"}, - {file = "glcontext-2.3.6-cp37-cp37m-win32.whl", hash = "sha256:e646d9c5af3b583f74a586fd151b787314352116e7c06c4902da93e15082bdb4"}, - {file = "glcontext-2.3.6-cp37-cp37m-win_amd64.whl", hash = "sha256:2ac6f80440510473621d287603ef69a08b985c06619f62f42cb485e5ca6e872c"}, - {file = "glcontext-2.3.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b6030d9deedba125d95d39abd72c36fbf6f0a7f866e600f22b210e368afbf522"}, - {file = "glcontext-2.3.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8ca64b73e16712537a95d2e848a13391f83d72f5c19bde5f05562b62b2a1fee6"}, - {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:226453bb7ff5a79e88c59ae38b60d1ce002fa2196b19aa8fada147221816e78c"}, - {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48f299b77612b9c80f026204ee3a3062b56cb0776c1d25a6b5ce05fb7e18b261"}, - {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81addba70acbc3fa84ace2b53509c89ff3c7bfe068d1ba2d7d3478140aed2838"}, - {file = "glcontext-2.3.6-cp38-cp38-win32.whl", hash = "sha256:233a9a977d545acf7d2ea1065c986fe6b711948f31499ce5e49e5366eefafa08"}, - {file = "glcontext-2.3.6-cp38-cp38-win_amd64.whl", hash = "sha256:7f114582574c8013fdec09154767b2c3f87875b74ff9938b20d3265971d08971"}, - {file = "glcontext-2.3.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c8adc530ecbb0c01c0abcc56ee71c7bcf8799209bff9e5c32f1a1d77f7035468"}, - {file = "glcontext-2.3.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:01106836f02d0098cbcacbc6d0c911f27fa728177d5a651ff44325dfafba7077"}, - {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3f573bde2183943f6161aeb81cad14a2978f143c686dd52253a38cdae7e7667"}, - {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:60a982fc78b4400d3b5075f9790977c4d2bdf99824af3cd0428ae5a54437635f"}, - {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64c0425155174fd2faaff7f631d41792365e357484c7f44a6b38efc1ea38468c"}, - {file = "glcontext-2.3.6-cp39-cp39-win32.whl", hash = "sha256:8789947abf3594a11655f23be88481dae0a660bbf8f42e2a5fa95a8fce59ba2c"}, - {file = "glcontext-2.3.6-cp39-cp39-win_amd64.whl", hash = "sha256:22699f81696756ec98fcf8b9a2ebd1dd73a42f81501d7748855e66b63d963c36"}, - {file = "glcontext-2.3.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:970a2769c6aed12e29bd1edbb30a04fa17871a6cf7bb95190e65302c693ce928"}, - {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a30c62c6168b42a32083dc8c967e421f8c346e4452a00809c056ce6c6bea0c4"}, - {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e531662f37d171c08fcdc4ca442468266bef77da14c72c183bcaa2cd80111386"}, - {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98d5dfc4629ed85e51176fc1d8563944e0439b77bc6fe2365cb42207838ea32f"}, - {file = "glcontext-2.3.6-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:41a69166c20b1a67b2652a5074a78078df7e19f36c65d92f6552535a1182d4cc"}, - {file = "glcontext-2.3.6-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8b118f0361e61e21279e414a1fa759288421ac311e44ce08e718de38f788183"}, - {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4f862f2b4426f1786743448c899d225e8383538602a04c3ffc9622956d08140"}, - {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e59f5afe61c5bc18dc7766c36a0ac912794a53605b30469c6c6be20483f4b42f"}, - {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d399cba251b301d94eb7a41017ba68e001673f642606229fba7a0d4183b3273"}, - {file = "glcontext-2.3.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:bd50f826bb70df2415c7166d5e0aebdda3e47df8af385f562d8d5ba6018f87e9"}, - {file = "glcontext-2.3.6.tar.gz", hash = "sha256:cdb540eec587deddca037fb4dfdaa0921dcab0fd4d7ea5f1079e44fcb1b81e67"}, -] +glcontext = [] identify = [ {file = "identify-2.5.1-py2.py3-none-any.whl", hash = "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa"}, {file = "identify-2.5.1.tar.gz", hash = "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82"}, @@ -2902,10 +2747,7 @@ 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-4.12.0-py3-none-any.whl", hash = "sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23"}, - {file = "importlib_metadata-4.12.0.tar.gz", hash = "sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670"}, -] +importlib-metadata = [] importlib-resources = [ {file = "importlib_resources-5.8.0-py3-none-any.whl", hash = "sha256:7952325ffd516c05a8ad0858c74dff2c3343f136fe66a6002b2623dd1d43f223"}, {file = "importlib_resources-5.8.0.tar.gz", hash = "sha256:568c9f16cb204f9decc8d6d24a572eeea27dacbb4cee9e6b03a8025736769751"}, @@ -2914,10 +2756,7 @@ 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.15.1-py3-none-any.whl", hash = "sha256:d8969c5b23b0e453a23166da5a669c954db399789293fcb03fec5cb25367e43c"}, - {file = "ipykernel-6.15.1.tar.gz", hash = "sha256:37acc3254caa8a0dafcddddc8dc863a60ad1b46487b68aee361d9a15bda98112"}, -] +ipykernel = [] ipython = [ {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, @@ -2945,18 +2784,12 @@ jinja2 = [ json5 = [ {file = "json5-0.9.8.tar.gz", hash = "sha256:0fa6e4d3ef062f93ba9cf2a9103fe8e68c7917dfa33519ae3ac8c7e48e3c84ff"}, ] -jsonschema = [ - {file = "jsonschema-4.7.2-py3-none-any.whl", hash = "sha256:c7448a421b25e424fccfceea86b4e3a8672b4436e1988ccbde92c80828d4f085"}, - {file = "jsonschema-4.7.2.tar.gz", hash = "sha256:73764f461d61eb97a057c929368610a134d1d1fffd858acfe88864ee94f1f1d3"}, -] +jsonschema = [] jupyter-client = [ {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"}, {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"}, ] -jupyter-core = [ - {file = "jupyter_core-4.11.1-py3-none-any.whl", hash = "sha256:715e22bb6cc7db3718fddfac1f69f1c7e899ca00e42bdfd4bf3705452b9fd84a"}, - {file = "jupyter_core-4.11.1.tar.gz", hash = "sha256:2e5f244d44894c4154d06aeae3419dd7f1b0ef4494dc5584929b398c61cfd314"}, -] +jupyter-core = [] jupyter-server = [ {file = "jupyter_server-1.18.1-py3-none-any.whl", hash = "sha256:022759b09c96a4e2feb95de59ce4283e04e17782efe197b91d23a47521609b77"}, {file = "jupyter_server-1.18.1.tar.gz", hash = "sha256:2b72fc595bccae292260aad8157a0ead8da2c703ec6ae1bb7b36dbad0e267ea7"}, @@ -3150,43 +2983,7 @@ markupsafe = [ {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.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:03bbb3f5f78836855e127b5dab228d99551ad0642918ccbf3067fcd52ac7ac5e"}, - {file = "matplotlib-3.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49a5938ed6ef9dda560f26ea930a2baae11ea99e1c2080c8714341ecfda72a89"}, - {file = "matplotlib-3.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:77157be0fc4469cbfb901270c205e7d8adb3607af23cef8bd11419600647ceed"}, - {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5844cea45d804174bf0fac219b4ab50774e504bef477fc10f8f730ce2d623441"}, - {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c87973ddec10812bddc6c286b88fdd654a666080fbe846a1f7a3b4ba7b11ab78"}, - {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a05f2b37222319753a5d43c0a4fd97ed4ff15ab502113e3f2625c26728040cf"}, - {file = "matplotlib-3.5.2-cp310-cp310-win32.whl", hash = "sha256:9776e1a10636ee5f06ca8efe0122c6de57ffe7e8c843e0fb6e001e9d9256ec95"}, - {file = "matplotlib-3.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:b4fedaa5a9aa9ce14001541812849ed1713112651295fdddd640ea6620e6cf98"}, - {file = "matplotlib-3.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ee175a571e692fc8ae8e41ac353c0e07259113f4cb063b0ec769eff9717e84bb"}, - {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e8bda1088b941ead50caabd682601bece983cadb2283cafff56e8fcddbf7d7f"}, - {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9480842d5aadb6e754f0b8f4ebeb73065ac8be1855baa93cd082e46e770591e9"}, - {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6c623b355d605a81c661546af7f24414165a8a2022cddbe7380a31a4170fa2e9"}, - {file = "matplotlib-3.5.2-cp37-cp37m-win32.whl", hash = "sha256:a91426ae910819383d337ba0dc7971c7cefdaa38599868476d94389a329e599b"}, - {file = "matplotlib-3.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c4b82c2ae6d305fcbeb0eb9c93df2602ebd2f174f6e8c8a5d92f9445baa0c1d3"}, - {file = "matplotlib-3.5.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ebc27ad11df3c1661f4677a7762e57a8a91dd41b466c3605e90717c9a5f90c82"}, - {file = "matplotlib-3.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a32ea6e12e80dedaca2d4795d9ed40f97bfa56e6011e14f31502fdd528b9c89"}, - {file = "matplotlib-3.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a0967d4156adbd0d46db06bc1a877f0370bce28d10206a5071f9ecd6dc60b79"}, - {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2b696699386766ef171a259d72b203a3c75d99d03ec383b97fc2054f52e15cf"}, - {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f409716119fa39b03da3d9602bd9b41142fab7a0568758cd136cd80b1bf36c8"}, - {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b8d3f4e71e26307e8c120b72c16671d70c5cd08ae412355c11254aa8254fb87f"}, - {file = "matplotlib-3.5.2-cp38-cp38-win32.whl", hash = "sha256:b6c63cd01cad0ea8704f1fd586e9dc5777ccedcd42f63cbbaa3eae8dd41172a1"}, - {file = "matplotlib-3.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:75c406c527a3aa07638689586343f4b344fcc7ab1f79c396699eb550cd2b91f7"}, - {file = "matplotlib-3.5.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a44cdfdb9d1b2f18b1e7d315eb3843abb097869cd1ef89cfce6a488cd1b5182"}, - {file = "matplotlib-3.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d8e129af95b156b41cb3be0d9a7512cc6d73e2b2109f82108f566dbabdbf377"}, - {file = "matplotlib-3.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:364e6bca34edc10a96aa3b1d7cd76eb2eea19a4097198c1b19e89bee47ed5781"}, - {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea75df8e567743207e2b479ba3d8843537be1c146d4b1e3e395319a4e1a77fe9"}, - {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:44c6436868186564450df8fd2fc20ed9daaef5caad699aa04069e87099f9b5a8"}, - {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d7705022df2c42bb02937a2a824f4ec3cca915700dd80dc23916af47ff05f1a"}, - {file = "matplotlib-3.5.2-cp39-cp39-win32.whl", hash = "sha256:ee0b8e586ac07f83bb2950717e66cb305e2859baf6f00a9c39cc576e0ce9629c"}, - {file = "matplotlib-3.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:c772264631e5ae61f0bd41313bbe48e1b9bcc95b974033e1118c9caa1a84d5c6"}, - {file = "matplotlib-3.5.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:751d3815b555dcd6187ad35b21736dc12ce6925fc3fa363bbc6dc0f86f16484f"}, - {file = "matplotlib-3.5.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:31fbc2af27ebb820763f077ec7adc79b5a031c2f3f7af446bd7909674cd59460"}, - {file = "matplotlib-3.5.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fa28ca76ac5c2b2d54bc058b3dad8e22ee85d26d1ee1b116a6fd4d2277b6a04"}, - {file = "matplotlib-3.5.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:24173c23d1bcbaed5bf47b8785d27933a1ac26a5d772200a0f3e0e38f471b001"}, - {file = "matplotlib-3.5.2.tar.gz", hash = "sha256:48cf850ce14fa18067f2d9e0d646763681948487a8080ec0af2686468b4607a2"}, -] +matplotlib = [] matplotlib-inline = [ {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, @@ -3208,15 +3005,6 @@ mistune = [ {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, ] moderngl = [ - {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:186f8ab2b869c56f677dc87de0577a60790fb9306bd5149cedc433a39e9291e5"}, - {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de252103b24a8dc40c7f6e1755e29bc9263c33b92141787b50c7ab0266c74906"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bcfcec3bc3b9a1ee19e94fa524913fd45c37214ea69301a6911e8e53f966029"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d76b0fb489a5dc6da591b979f8c471bb5b67409afaa9fe4569bc0abf25221f4"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_27_x86_64.whl", hash = "sha256:792ffe1ec233ed5fcfb0c14955a7f944d64c0d49713ff8b9c5fa3176d96f05c3"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:1f9ed0bc0d706124a01be2ad59b5774bb3b023e61dcf39faf7c4c7ef4b9f4f75"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7c2fce8b7a68f3df9189a19f424478e1d853cfd3e142efd1eb0d4cdf44148d7"}, - {file = "moderngl-5.6.4-cp310-cp310-win32.whl", hash = "sha256:0c6b482f678641e56bd44acecd10eddf74d2cd31e472eff6cca05493cf01e2c9"}, - {file = "moderngl-5.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:28b517fc56c9ab9eb1f5833f7d7b1274d3719b962f95f55ccd8a0f6db884a92b"}, {file = "moderngl-5.6.4-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:bc3764d67f037b67051871345a1d0b7a3d2c19cb5c0c0af0a84c532e802d6642"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:90006d9dfd5333da604a7d26b2a5e70e1a570f291cd745b8bf80e4833d8821b6"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:af44437545380a840dafd09658eb56592831dbd4fb481d320249d0d42c591bae"}, @@ -3225,45 +3013,21 @@ moderngl = [ {file = "moderngl-5.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:331fd4bce60b10a08eed81a3ed4c70b7c297c38f981fdf3968d03a1c892af247"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1bd864b5cc2fc1255785e33575cec98fa5ded698503c4f8f3fa9230abeaa3a04"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b22534529f5bc52c1fe43336787c06d51123ae978fb56e74e47cabd85056c934"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5151ccf38af80ce8600eac089df1c814eb72aa99c8768307348c1a170104b7e"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ef57f65c639d12d534dce70e5c08965f0856ac371c669c7586904b8db6453eb"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0032c07b31bec50b26bba7ee7999e0f697000b31456bfa84391614bb92dba376"}, {file = "moderngl-5.6.4-cp36-cp36m-win32.whl", hash = "sha256:ee5b1eced39d7f6dc68782c2abf01c1130a40b6d83d333d175ee71adbea7c721"}, {file = "moderngl-5.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:52ee915a559762f0e992344961b35e0d241be32f8aa7464494e958f777e0534c"}, {file = "moderngl-5.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f83f6ab1fafdba2d9c06a7a1c8a4e460689ea1d514146606acc74f14e0831d93"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c350e06affea9fabc636b2350cf6e58d83ee2e7264527eee0f5d142c167f5463"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3eb65afc8ec4a1d4a4c48696fb0f4f6cf7a7ada6bef97818d717dbca73c57b11"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ec09bb3382d36e5ef3e627e85744b719db1175c3a3fdbadf9acde48eb1aca6"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23b6b30c5a16807d9d2b92f343fcdca8713a88801d8afa985decd302bb6ef7e9"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5eb217b7726511d2382bfdd56b2a8ff5489aa7d1d73bf4f854343b07df286fa9"}, {file = "moderngl-5.6.4-cp37-cp37m-win32.whl", hash = "sha256:4fd721eb83e73d34c3f7b5a11aec656fef461b51bbe7503b07ea27370c593cbd"}, {file = "moderngl-5.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:01c71d94dbd59b5d37ead463991e2998c0924426cffa393b9da2b8334551c998"}, - {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:46e7e03360eafa77159e0d6142904de0d2e9400254414820bbc2d0ca16b14388"}, {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2ec6ecd845f21ba44a08c11521cb71f2a9c2ea2ec189b7ed30d17837d392d70"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:40f74a2246e5302f93f2d46f76c0d2a26cbed1eb29731674c4052476f1e9c9ea"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5e158e6881034c7e1d0c583d7c82ff608439606f2359dc6098e4be4fd93cef9d"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eb8fb5efab2716938308732d16d0caf1a195015d84d73f2b73e3adacd228ba6"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59907d8855dd3ccf1950e8f43f5a1a7cdd93910d8edf538bf52e62098be22360"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8037b6934843000d5fecd2b1933d3894687123fc9afdb19af52a9a628971163d"}, {file = "moderngl-5.6.4-cp38-cp38-win32.whl", hash = "sha256:a28dc741469eeb69549ee85b4ddbf8e9cfca6a2b19ce0406df9fde20f78082c8"}, {file = "moderngl-5.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:ce87962b91635d857cac4a753c5d5f647d94dc66dcb0f090bb8d758fd226c3e8"}, - {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d4c56e15a5fb29de0295891ec3b153e2bd8aeada0c0825135aa5851fa481ff28"}, {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fb139bcdd25eae2c546e5788e9d8719f6c4b18a2ba68a9df31699b4ac57d62d"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9645afaa1704b2628d8a58be0760243d9954a62902283b176ea00a55b54eafe"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a3aaa15eb4d43b79e06a46945869feb13f325312ad63666ef2b7d3e216e3a09"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a07531c6b0f3da3058bd8927bc6c75eface98ce1416d8be4072b9b11b314b718"}, {file = "moderngl-5.6.4-cp39-cp39-win32.whl", hash = "sha256:fc5cc1601a3df8f45f1901c6b9960731e0619d1781b0d036e12341fbf2ef55d3"}, {file = "moderngl-5.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:1c74b71c9acee9f0e69807a086d76e92f37c1960c3bb1d6a6e2472fd03f7be5b"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1927a52fd3465c508045a1c4a8ea8c793399830d48458d431936f24f8827f136"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d04747cc9a96f786d04c8a176d5d2cbb51159efd66287d0e676ac674f53e861"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9092c50a2bb293be770f6f0ae5f1cb940848bf03682696c473a6d3f2c7710d2"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571e524fde685e21dbe132f4eb7bb223cfc235dc917a4cf122bc44897be18e89"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ee02dba4b32d7a165a36c797ce495d71deb085a7e29cfa7f1236fa7ccdfc6160"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0c02fdd386c45ad5d5053a436da64181a7821a042f6665c4ae415edfbdfe244c"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e2b40f1e11ee5f251a0d564e6a5d285ff91adf361e84f6912fc10959b92bd83"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d5f918dda6dc1ec5465d7105b06c5525041fbc368df5d4636145006ce3d303"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a6bd0e342388b931954671ccf8300ab36cc7d8c991547581efa6df5628bda8b"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:890caba3795a0288259d76a2cee014c6ffc00619bef179a8d0a87fd9c16a3729"}, {file = "moderngl-5.6.4.tar.gz", hash = "sha256:8c6d04559f5e3bf75a18525cd46d213c0f3a8409363718978e6de691bdb551fb"}, ] moderngl-window = [ @@ -3305,10 +3069,7 @@ 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.3-py3-none-any.whl", hash = "sha256:4b01076effdac53e775cd1b6a4e891663568b32621468e205b502a23b2921899"}, - {file = "nbclassic-0.4.3.tar.gz", hash = "sha256:f03111b2cebaa69b88370a7b23b19b2b37c9bb71767f1828cdfd7a047eae8edd"}, -] +nbclassic = [] nbclient = [ {file = "nbclient-0.6.6-py3-none-any.whl", hash = "sha256:09bae4ea2df79fa6bc50aeb8278d8b79d2036792824337fa6eee834afae17312"}, {file = "nbclient-0.6.6.tar.gz", hash = "sha256:0df76a7961d99a681b4796c74a1f2553b9f998851acc01896dce064ad19a9027"}, @@ -3333,6 +3094,10 @@ 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.4.12-py3-none-any.whl", hash = "sha256:8c07a3bb7640e371f8a609bdbb2366a1976c6a2589da8ef917f761a61e3ad8b1"}, + {file = "notebook-6.4.12.tar.gz", hash = "sha256:6268c9ec9048cff7a45405c990c29ac9ca40b0bc3ec29263d218c5e01f2b4e86"}, +] notebook-shim = [ {file = "notebook_shim-0.1.0-py3-none-any.whl", hash = "sha256:02432d55a01139ac16e2100888aa2b56c614720cec73a27e71f40a5387e45324"}, {file = "notebook_shim-0.1.0.tar.gz", hash = "sha256:7897e47a36d92248925a2143e3596f19c60597708f7bef50d81fcd31d7263e85"}, @@ -3462,18 +3227,12 @@ 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"}, -] +pre-commit = [] prometheus-client = [ {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, ] -prompt-toolkit = [ - {file = "prompt_toolkit-3.0.30-py3-none-any.whl", hash = "sha256:d8916d3f62a7b67ab353a952ce4ced6a1d2587dfe9ef8ebc30dd7c386751f289"}, - {file = "prompt_toolkit-3.0.30.tar.gz", hash = "sha256:859b283c50bde45f5f97829f77a4674d1c1fcd88539364f1b28a37805cfd89c0"}, -] +prompt-toolkit = [] psutil = [ {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"}, {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"}, @@ -3795,10 +3554,7 @@ requests = [ restructuredtext-lint = [ {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, ] -rich = [ - {file = "rich-12.5.1-py3-none-any.whl", hash = "sha256:2eb4e6894cde1e017976d2975ac210ef515d7548bc595ba20e195fb9628acdeb"}, - {file = "rich-12.5.1.tar.gz", hash = "sha256:63a5c5ce3673d3d5fbbf23cd87e11ab84b6b451436f1b7f19ec54b6bc36ed7ca"}, -] +rich = [] scipy = [ {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, {file = "scipy-1.7.3-1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b0e0aeb061a1d7dcd2ed59ea57ee56c9b23dd60100825f98238c06ee5cc4467e"}, @@ -3838,10 +3594,7 @@ send2trash = [ {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, ] -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"}, -] +setuptools-scm = [] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -3902,10 +3655,7 @@ 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-0.0.1a12-py3-none-any.whl", hash = "sha256:e8b6efd2c5ece014156de76065eda01ddfca0fee465aa020b1e3c12f84570bbe"}, - {file = "sphinx_basic_ng-0.0.1a12.tar.gz", hash = "sha256:cffffb14914ddd26c94b1330df1d72dab5a42e220aaeb5953076a40b9c50e801"}, -] +sphinx-basic-ng = [] 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"}, @@ -4012,10 +3762,7 @@ 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.0.tar.gz", hash = "sha256:94936b1961aacda61ec6bb0acf1169cd7830b5230b645855c1d4789baf19685e"}, - {file = "types_docutils-0.19.0-py3-none-any.whl", hash = "sha256:198ed1c0ef6c1a79411da9e1745514eda433d37770e24f26b0e13a302904cc97"}, -] +types-docutils = [] 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"}, @@ -4028,10 +3775,7 @@ types-pygments = [ {file = "types-Pygments-2.12.1.tar.gz", hash = "sha256:a9ea353b5197fd00c19cfa327de4169f8dc63b30d5d506bcbb09064d688cc9b0"}, {file = "types_Pygments-2.12.1-py3-none-any.whl", hash = "sha256:b171949fc6074793a7fb559d938bb0332e66363d65b2e07b28770badf05768c5"}, ] -types-requests = [ - {file = "types-requests-2.28.1.tar.gz", hash = "sha256:acd8ed78509d27bdf04cddcc05f7066dfde4d30dd7dba67b808cdb1141d62ffe"}, - {file = "types_requests-2.28.1-py3-none-any.whl", hash = "sha256:b097692e124001f0ed5e4490245bb090f5e8e929819972f9ace84f9c3e146e8c"}, -] +types-requests = [] 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"}, @@ -4044,10 +3788,7 @@ typing-extensions = [ {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, ] -urllib3 = [ - {file = "urllib3-1.26.10-py2.py3-none-any.whl", hash = "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec"}, - {file = "urllib3-1.26.10.tar.gz", hash = "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6"}, -] +urllib3 = [] virtualenv = [ {file = "virtualenv-20.15.1-py2.py3-none-any.whl", hash = "sha256:b30aefac647e86af6d82bfc944c556f8f1a9c90427b2fb4e3bfbf338cb82becf"}, {file = "virtualenv-20.15.1.tar.gz", hash = "sha256:288171134a2ff3bfb1a2f54f119e77cd1b81c29fc1265a2356f3e8d14c7d58c4"}, @@ -4157,7 +3898,4 @@ 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 = [ - {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, - {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, -] +zipp = [] diff --git a/pyproject.toml b/pyproject.toml index 163e0bdc38..8cf46395f2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,6 +43,7 @@ decorator = "^5.0.7" importlib-metadata = { version = "^4.10.0", python = "<3.8" } watchdog = "^2.1.6" jupyterlab = { version = "^3.0", optional = true } +notebook = { version = "^6.4", optional = true } moderngl = "^5.6.3" moderngl-window = "^2.3.0" mapbox-earcut = "^0.12.10" @@ -57,7 +58,7 @@ Pygments = "^2.10.0" "backports.cached-property" = { version = "^1.0.1", python = "<3.8" } [tool.poetry.extras] -jupyterlab = ["jupyterlab"] +jupyterlab = ["jupyterlab", "notebook"] gui = ["dearpygui"] [tool.poetry.dev-dependencies] From 0147c416a3f685ffd053dbe27c029c3d3cbe7582 Mon Sep 17 00:00:00 2001 From: fcrozatier <48696601+fcrozatier@users.noreply.github.com> Date: Sun, 17 Jul 2022 08:19:29 +0200 Subject: [PATCH 102/555] Fix small typo in guide (#2881) * Fix small typo in guide * another one * oops --- docs/source/guides/deep_dive.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/guides/deep_dive.rst b/docs/source/guides/deep_dive.rst index b7d3aa3937..b46a22ccc4 100644 --- a/docs/source/guides/deep_dive.rst +++ b/docs/source/guides/deep_dive.rst @@ -927,7 +927,7 @@ First, the renderer prepares its :class:`.Camera` by checking whether the render has a ``static_image`` different from ``None`` stored already. If so, it sets the image as the *background image* of the camera via :meth:`.Camera.set_frame_to_background`, and otherwise it just resets the camera via :meth:`.Camera.reset`. The camera is then -asked to capture the scene with a call to :meth:`.Camera.camture_mobjects`. +asked to capture the scene with a call to :meth:`.Camera.capture_mobjects`. Things get a bit technical here, and at some point it is more efficient to delve into the implementation -- but here is a summary of what happens once the From aca9c750c30d4c5539439f24cb5a944a0da6cba0 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Tue, 19 Jul 2022 06:26:11 +0200 Subject: [PATCH 103/555] removed empty, old files (#2887) --- docs/i18n/gettext/reference/manim.mobject.geometry.Arc.pot | 1 - docs/i18n/gettext/reference/manim.mobject.geometry.Line.pot | 1 - docs/i18n/gettext/reference/manim.mobject.geometry.Polygram.pot | 1 - 3 files changed, 3 deletions(-) delete mode 100644 docs/i18n/gettext/reference/manim.mobject.geometry.Arc.pot delete mode 100644 docs/i18n/gettext/reference/manim.mobject.geometry.Line.pot delete mode 100644 docs/i18n/gettext/reference/manim.mobject.geometry.Polygram.pot diff --git a/docs/i18n/gettext/reference/manim.mobject.geometry.Arc.pot b/docs/i18n/gettext/reference/manim.mobject.geometry.Arc.pot deleted file mode 100644 index 8b13789179..0000000000 --- a/docs/i18n/gettext/reference/manim.mobject.geometry.Arc.pot +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/i18n/gettext/reference/manim.mobject.geometry.Line.pot b/docs/i18n/gettext/reference/manim.mobject.geometry.Line.pot deleted file mode 100644 index 8b13789179..0000000000 --- a/docs/i18n/gettext/reference/manim.mobject.geometry.Line.pot +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/i18n/gettext/reference/manim.mobject.geometry.Polygram.pot b/docs/i18n/gettext/reference/manim.mobject.geometry.Polygram.pot deleted file mode 100644 index 8b13789179..0000000000 --- a/docs/i18n/gettext/reference/manim.mobject.geometry.Polygram.pot +++ /dev/null @@ -1 +0,0 @@ - From b013c56edd5ad45ff928bae44ca30d41c2254884 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 22 Jul 2022 02:23:01 +0200 Subject: [PATCH 104/555] added docstring to and fixed type hint of get_winding_number (#2886) --- manim/utils/space_ops.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index d74a6dd593..e731496093 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -582,7 +582,29 @@ def find_intersection( return result -def get_winding_number(points: Sequence[float]) -> float: +def get_winding_number(points: Sequence[np.ndarray]) -> float: + """Determine the number of times a polygon winds around the origin. + + The orientation is measured mathematically positively, i.e., + counterclockwise. + + Parameters + ---------- + points + The vertices of the polygon being queried. + + Examples + -------- + + >>> from manim import Square, get_winding_number + >>> polygon = Square() + >>> get_winding_number(polygon.get_vertices()) + 1.0 + >>> polygon.shift(2*UP) + Square + >>> get_winding_number(polygon.get_vertices()) + 0.0 + """ total_angle = 0 for p1, p2 in adjacent_pairs(points): d_angle = angle_of_vector(p2) - angle_of_vector(p1) From 860ec0b6fae1ace88980d48d24713dbad05f3c66 Mon Sep 17 00:00:00 2001 From: John Hammond Date: Thu, 21 Jul 2022 19:35:59 -0500 Subject: [PATCH 105/555] Update PolygonOnAxes example (#2892) The PolygonOnAxes example get_rectangle_corners was only using the x coordinates of the bottom left corner of the rectangle, not its y coordinate. --- docs/source/examples.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/examples.rst b/docs/source/examples.rst index b8da417d3e..16b3ee7869 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -415,8 +415,8 @@ Plotting with Manim return [ (top_right[0], top_right[1]), (bottom_left[0], top_right[1]), - (bottom_left[0], bottom_left[0]), - (top_right[0], bottom_left[0]), + (bottom_left[0], bottom_left[1]), + (top_right[0], bottom_left[1]), ] def construct(self): From ce9acddd41f39929d499b45e52621a2849b8333e Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 22 Jul 2022 16:21:03 +0200 Subject: [PATCH 106/555] Improved performance of ``test_threed.py`` (#2893) * lower resolution of surfaces in 3D tests to greatly improve performance * regenerated test data * print test execution time by default --- pyproject.toml | 2 +- .../control_data/threed/Arrow3D.npz | Bin 2411 -> 2519 bytes .../control_data/threed/Cone.npz | Bin 34407 -> 25859 bytes .../control_data/threed/Line3D.npz | Bin 7655 -> 7371 bytes .../control_data/threed/SurfaceColorscale.npz | Bin 269188 -> 122822 bytes .../control_data/threed/Y_Direction.npz | Bin 152701 -> 88891 bytes tests/test_graphical_units/test_threed.py | 15 ++++++++------- 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8cf46395f2..326a9f5c70 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -112,7 +112,7 @@ markers = "platform_python_implementation == 'CPython'" [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" +addopts = "--no-cov-on-fail --cov=manim --cov-report xml --cov-report term -n auto --dist=loadfile --durations=0" [tool.isort] # from https://black.readthedocs.io/en/stable/compatible_configs.html diff --git a/tests/test_graphical_units/control_data/threed/Arrow3D.npz b/tests/test_graphical_units/control_data/threed/Arrow3D.npz index d066e9322364aebe97a47d26d684126f8e8da8a1..8de07115c4cc7cb33f45ba832068b0c3b3c4110e 100644 GIT binary patch delta 914 zcmV;D18w~464w(HP)h>@6aWAK2mk;8ApoBq3_z6s6e0S+40gWc+ z#f1w)FfS(2Q=bb*Zmu&8vnZ1^zkwe!_y62;?zu1vAI@C={`UKCzWd>mmfu_c=(sXC zHZa=pReQ%lpTAw`=xp!!>FVgOqy57_ULCzM82Q)zzl;qY=VL$jj|?6ke|Dj>{oROdGYwu=bi0;wKw?sw56pb0kQD~1Cjv+f53;TtE($LdGaLf?Chj#*RG|uwzj6P z2><}#Lvs1@<@Egd^Yr@l>vV8%kY2oak)A$%njSoOkR~T5)7i6Uo4!T>0D$*dUteF* zPrZ8e>O?+%^X5%@`SNA4pS8KUnMOuNn!a8D0Qi`lKYu>mzJ0rA%1sO&daq> zD~~;toHdeH=Zb4btzKT8E9ZI5)jY&;f38JdYfL#WU#FVqG4IN&bLBNv$JEM0xp&Gv zRqm^fj*bd(PCl=i$GP#_!82#hH2r%90094I!^6YHo=NPrgxFWfa#qb_AE#D+|Ni}x zanX1$FoQE@^Y=5#r1QZvz+JaRP#Khn#UefdG7N0f8pQq z@^PLkdZXx(a?h0asX~6`KB}JR=k!$o0Px>BckW!edGluB#*G_=nVFfw!otE^`St79 zi+p~5{?wRUTUuIrE6=qUGdnwbYD`??)~#DbtvV*=io9BjF*z^KH#awzmY0`n)>c+l zPOg*J9#&UZi@aKk&*fTqOx#P(f6KL4SGiW6Z*g(4SYNpoB9Ae-mh-i>wUfRo?>|+0 zrg)X}=(`?2ew@0yyPN*K0ssJLwt<0xQ+-tKq4GXeJae_XyPL+x$D6)h004mZ&Ct-$ zsXeNAUTSY|FHKEN`9JFb008gM+uK|8QSp4#^z?LUZEbD(ng9R*00000vH1Q1k^u%9 oJ_i2)P)h*<6ay3h000O8001EXpEG2FMG2EH2{s0W2><{907AppZvX%Q delta 803 zcmV+;1Kj-A6YCNbP)h>@6aWAK2mk;8AplZhn5x+bkrX6<*$4mt00000?c6&{tVb9J zaMMW&Kf_jPz``RZaL5NpmyjlcRgfG*kPt)!rOPPEroYqzP%rP(Ng%U z@WR*Ub#-+CvjG7C1CtN|3V%LT-QC^c^71mApPz??g@w@A*jV#30RRAeN;*0^!p+T1 zxV^m%cXxNi_p7U`aC&+g#>dA)LqkK&&jw_6 zHEU~Y3%k3!VQ+8m!O_uC#e8^p_$VJ792Dhq$H&JN_k2i=larH*Ie*ryR-;-jcaGBg zR6E!H{(jYSRQnyrnt4B!#GWekRcV~W>#@%o8XBtk=L!G-UXziLk>cOtXJ=@k>_-V(z>NJ78e&E?TLAIcJ@(?(z)g3v9Yn5pBDfC;A7L< z+Z)m=@2_GX6&e4Z<$Klv001f*7#MhXJ}N%T*4*4&^D_an0RaI6lMn$38oUPo08mQ- h0u%rg000080000X08(O@s@VvWn+Y}s83_OY007*&lm!3) diff --git a/tests/test_graphical_units/control_data/threed/Cone.npz b/tests/test_graphical_units/control_data/threed/Cone.npz index 50dc203646deaaa8ccc88bba8f1497dc4a1bc01a..92036acc51b7fd53915e69b417f52b406704bbab 100644 GIT binary patch literal 25859 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 b54{t2-G1xO5!zpVReW7gysJL``RV@y0E<4Y diff --git a/tests/test_graphical_units/control_data/threed/Line3D.npz b/tests/test_graphical_units/control_data/threed/Line3D.npz index 05d698208f69606d584251b358cafd72872a2fa2..4f84ff8e133e27a8ffe09d60a713df1fa09a5216 100644 GIT binary patch literal 7371 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 literal 7655 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 O06YKy0Ce900002#(D6(F literal 269188 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 gX6!!S(1S$qBUn` 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 )&o5`lZy~+g1B!|3C zr@&~`Y+(#?>g8paL2{U?(L@CHi^SEdzR-);j)Q^wILcU{H*|JGSipaQUyyibrec2u z;RX@cIz0b}4yvt@^(Vp#R~v?l6zg6pngyFtqwJFEh<+zZZwjcGRJ>~CYceF~*oZ8x zDrEz`P&EUVA6Y%9i#)O$pq3w}ez3 zUt&KG#3@Rl@0&g}yCo_4($He~7dZm6F~u3db5;nhx- zoNh~20>1&@w{AzJL#G^^{%HbKVrF0DUzu~~@XA8PW$hY$EB|xZBLT_BQ+0xvK@f(R zu?X3ys2{&-A{%NnDO<}aEX4kreJ1D`{vyAer&OQn^BGspIiVTeM#B^{TGc`}9Zvn^ z46(Gyr0U6gs`L@A#Z83?6xA+&p8ZL7O}qR-4d%}dErDj!dr+)uIm<&NHw8!qzgw@H zTCBzGM{hAN*T%$kG%3r^$_S~7q8?0j@o?hto`tw5tMh6D??f-H0=<9-_S}%UnFAI0 zX~NIk55)53-qhn$i7CYJf>bEPyq`Ns}9G8KFs*}7EUZG>3U7EO?C^>98xe;3}t z1?!WI(*hp-P+4vMnj;B0KYYvgxQA5cJqy+trMFP#lvvTjdAmgiW=hR{zfN|ylrTaq z;po$^8-a#@l05>oA-&TA)F!)3a2W!Ej={`=eM=jX^49_I`A%=%)GaS^&w;6z$0(uw zgH|{N>3@cyi{G-Nwb*?IvWYnF^uO2L7rI^^+2aG45A!6_^iEV)`s~wYvRT=0lv9pb z?x_0doDOhIimQznb731^N4@ z=6ioB#jXLn4#UV&`}t8R066qi(=!uQX4;{Lt!OC^5alf8Z_m>7$ZzXe-ue|i6L&}` z-r{|6LrT0fU-*m3w(BsSwjBT-Lv6{B$-;18il>pr*tR6FespTGH2UOG%DEzx^VD?X z;jG0&ofd0AH#g^HRjCpNaH$V>mL5H7sFi9Vcq^PWpPv48JOx8+~(yw53zPw-|9*7%)w{; zEgkRenjasLxqh&&^028itcj*Z5{*rG)2mj_6$D2KAHG-sT7%%qqr0_{`~tXXUqQ2v z+7LU@w7O0K0Z`h8sMIUcB;cD`C}J(|tT(yRQ)v{YuuwFUR)j8=y@NhAo_#T`Po=o5b4Q@%@t9DGrJOST*eW948HLd`*_NWfZo|ssZ^jjOe}iF zi!c|m8ZKLq*wb2pC;h#6m-SkCnBR7Cpm}_~XVYbG4^t@O$+pGv0{~nf!r>fC<|Dwn z_{YAE9f4o%#fo6b9N6&I2#c--XyKUaf7`eq<0$yo*-{@!A2^SHp(`+SWdw@?1e^s12YNx$o70-3T8u>^+&EELW6GU>&8mCjfVslpAwW zRxcU^FMdrnwsap{TS154n9lfI)rHuZ$!$ZpftKT)^^ z*2{hOamC8O*W~=5q2Atr6WAKtH2yFMo>Ar(wR>)oQV&)C7Vz$9cg8EZ&AAKOR){`E za$k*Ie>)FO48V{9fYc&-te;k&c~Qv+I``FKemRH~jw;}Dot@MQYrbHy^5ak&DX8-= zZFdc|3<%~o+F0p;-ehHAO*v7^9FOO`FtZs6fM9D83Gr+G zS6M<&-^qBLbz1LgS3MPQ{|!a4A8-k{>i#SMoNts#RXGo%KZgkmoo{UBhf$z;ITr~V zkGH`LfGhRtIltc*)V*oB!K;^*r%V7XV@W#;cWF${G|9W6n&_&xUm@jzVvbCFYAZ^! zfcP+44ujbJEfX6Hc>`iA&$cPL8MFxHu6lMB#oJa{uPxCFBtV-cYfE4u$z5zAw31KQ zcD~(x8F6V3i1={3UFB8QJpSiDUx)1d;(@v4IsPyIUYg`2n-Y7lTTG(b8j*QsuTTpw zfhsV>dR}^%*EzRceD$@vXEX$6dyn4ll`$pP(i!qZ}Ahq$&!@x^B_g7j7E>fa`;_`Id zYp_8=ttQiLaMDSyY7zV<4l5wX8!F%-@w*%1-A^_SUw$ zi)r%fHOx50jY^?F@Iap(-x0Y@G5LTwh4PzjZO{%Q;GsvAxST2Sk48fJ*Dl{PoVhQF zqL>C+QB5UD2hr5a2xTPI)Qv=8UN)Mq=co}cXK{*sVKVS_=NzEmz%ts#W9MYv7BSm! zlMFSzr2#_8Q|M%>x(uZ}))XKXxLffS8@@mXUBp%TEc$`qA|7vU^>}S6VBHW-gr-D% z5~FgsZ}o%~Rt)~!n5f}fho0r6F>3Vz#@vMYvqdJj>{ZJS6Hbv;57TBSCOmZbI-_X^ zV6g0W48=d_*cU@efCb|aNu%^y4XJqHlt!P6d*II@r^)T)tiWKDou^kPC9NY)tkX>I zTVT(V6_iP4CdkN*z>i8|69xy;=K)RDTGaMg2Cc{rtN~LyP=BCiMNJTfeAPs1NNWIY zbjtR_0@jcj@lUNPCh6;~m0Q70e!je==k^;jr?=hW7=>I({Ja=|56t4Ndy>U|jnh}} zJN*Z+p2HOn&;)U+L@qgSS3@{jnPb(~G-eZGQ~o-$ML}ts%T_;U03@4r-0(V6;yGbM z2=>4G4Lizv?&&|^#$CE${)Zkr+o&2_Ak1el`4UjCZ?Fpv@JwqkAujx0_k@UE&6?61 zTfvwfdoTD1<@G0NmpumCE`n!s3dFY`H$xJ2tNDJRv7hp-u4zN8M!&X8*53UYicQ`u zh60mRGQC)G+sLK?o0?F{hp+kWKlQ6GN||CW@Onqjv&udMPqDFf4f;cXdJq;>N&bo5 zmrrQVzK!lotecI`Uk{55NeVYuKjl~pTtJ7Lu$zNmgZ-yJ>X;f#>jh2=^T)R58CLFLD-@4=rUq!WL-;I6OPH-c zgF8QFx*I>+lE&l?lEh#TK#<#L286ub(XWuTt9;JvSCH`JZSXd!bWuK`Xw*LV^$+5RM{_cVHp;liv>cM30Hts+h0a<2k z_7o}zODo#Nb=JJ^GD$beOW}csZmMRdk6IWBjm3tw9u^8K}P4gN)fUKzyqDnPh1>_TU7Y z*H-+!BJC5xY2Wz?qsa0geR90b7QWk)9S_ODF>~kj-+6^kF=7fu2y*{!O!|OFws!Sm z`-fxS-(TA|QZcgL#r(@sAz%*A6`Qhe8Ohzd_e!TGTKVeAqoLmvPxj^kl|7GjHId)r zCI{4wFOu_Ekn9IYV&*mX$M-^=G``v=JrLa3W$ohK2v3NE3Uh`mk};{BXaKSMBB@bp zPSN*3=RDA}6#Kx8856!cMl~TGUg=YPExTP=$VMb|iuif~0zpfpk)xVReHA3fKe`>G zgnf+zF<|YMh4%{&*ANS=UXSlAyjLb9K>RjOCuDde4DV?9-z-aw_3na5oe<83h#})d zWAZ;0H;VG-70qH~?-DIDRbJU(HnarpK$S+QSQ%L9?KaYFn(RAnf|Yjem(<9lCNlov z&qqFALEO*#ubFI=-OuYUk1VO*;uvm&{MNg!n`k-7wyDkCY_t>GCcoKt#X=~#5s!K6R9JeYkr`<^B$zkfz7UU#t9IPD1O zj*ZFh^nh-sH=BZd(D^w^c?XHu6T1a2+=tU`U~q=`9nW@eZ!E@S)>~R0$p*;pRyz?6 zR;0nOe826+DA&J>+p&n9R^T>EdE`pQ%+k!pKk1=j2n=035ALtchfRNW(n~9MJdIfb zWQFDW-%&_e%HwGfd0ARwCuCh&wEum6%Ji>Q_UY_C&Y6+bC_)9W--j%j*S}JJ%3MGj zd*O;~O(W_eeCf5A!;qtxPihiDu0nH|n`@T?Ue+h(+d%d|I4&ME+1@@MAbqF??C zg#l&_>GlKK%_ZE1SLbyLX`&0men_c{pyeO7`;(m`T4{gj9GV4eu(PFr{ZEpV_SmA* zxw|-CbK~ZZ@ouEdhb76uCKYU-c)SZ>V|2HizBxgPqQY#OAoK9&4N&1Q;UA4ze80j= zb!}L!MSEdMYr}T`aE<172~u02A@R%DpofFSS`P|TAh(FS2Mh79r0`6nL>SyBxsnl{ zkV9{K_~udXH{}S~_*^l-!iI$81d1%X)B#i=Sfp9JWa{^|yQ!3`xNw$o=SRz7Uq3by z1!bS+W@cYH)k*cEXLTnE!2Smvr+))Qi($ELAQ9{|H8P8a$5m+ANuS^;=*M=MjqMN< zs=dkS7AeJvwROHb{zcBSqnbV~W%YK9nN+n^D6zqeoC-Qz#L?p|?>WD-pu4?jIk zh~SvbcmCA+NkJH1o2K{am2$hGN^~v@OHgb5JH@gg_Q_jQQjF1`?n-(N<13W2x*G*G3BgV&`m(*3^pI_rO zhucOA``ioY)R>=e5lcNl5$-L4U0K^dQ4znDFW^tfB}8K&50zHTVzPTxaa;dhO<*i)c*yh_{#U^AJg%M7kBHLJr>&(u^J{^v7uhf`_uVb~zIbq&B=N2=TcuX6bh zC1WRf0!`Z?IEjrhY=QUhKb(6C>3F}vWbBv4I##M>&<)kh;55m>A94U$n_M@ShW&EQ zKrRy)&4{i9_fghoezbm8SJ#=RKlvI@L~LqSBHQU;Fw)^(qqZG*WEw{P_R0$lT|>a_^IzmWquBfsu&6HBH?jMP7j2|+Iz6?acluh_9JiHb*GW_*%!29ZMzcUfEpKU+L$@w;UOt>yH zw+#F>#GsX7@;)>$@1VHS>-W`|fgla@c!^t0%~dAms&UlticsAzG_UvUz6!NNAC|gM zPsIehZMFur0W$#_AVsp4opI_iB#i6h=RtJtzMbWt9?2?2@66VPSS`~w15VhFPM8ZS zWm`vH81SC4NgD7AT z3G8(X%~Q0QV=ZLrJm52r0fG{sUo?grshyKpj4P;Pg#GnAfAF`m46Hbj-ci|`?w59THk!-W?PZU-ip|`9{9DoM{Jej3ZSo!cuw|L3)psDc@L%ef(u_jiT+&<%x(K(XB| z(Cv`jQpq*+d<;~cMWZ4CybWQCBa=ds9GD#Ng9&(GO@LiM%bnD%`m4Cm0^aysza5u$ zwptLjYPBLV>9eqRRw0gmI|JM)`deurLPm$vItgOSoMZ6M^P<;7Ceq9>9!KaFHqQ2% zTdTY!L@T)ImDUF?IH<_jxuex?sBz@`sNn|ZaQ7_PXkQn)%?K;ly%_)F7oEo>+ZS`k z@YGPR^3svm?%%Nizvfbx&-5RJ1MXqz$VA9+5us>zmZ47@(;v!CON>!X*=hA!`(eH#AlDEQ+kaK%E&r2ay{uNuq$p z?I1H1sg2oTfR+nia{Opa(pk9AO?Z5*GuyBN8gTko`d&8zfId=-mpveG)2N`OnqC>P zgLEAr9Fi&-%}v%)Gb%l=mTuMwd?L9A31o7&7?sH{MREKq3FW7r{s@%C_=PS}{QWAE znjydHyS?&#?RL-Zx{$G8`}?@_T#8pgf=i%$;52ZJ~D z%9_Hhd$*y%ftyN9gxLehqLwIEn@N8Az{qM0-?<8mvWJYeG_19@o+beU)WekwR&qlh z*Cgj&Y!4EJ+MV*_QLWg#q8c`KgvpK~HdJM|+m!{;``ZQ6yOPXlKT@29H+SjmZr^$}C z5{ILu3I=cE>{WSOd!Sd`;~!KvjTS4`a8$4me+XodYC#LIX96k!E#)h^{22Iu<`kPu zMSF3LXrpErA&eQxM}M|4cHmZ{pn#*TZ?XAcU@gfKQ$63-h%0IY%P)58^ZsUq z*#>QS*9aSfW$8|N;10R_V)UxY!V<6|1jvQy>>A^5FJhilGE5OwfEog3KCKrudk1(T zvup48`M#U@KIY;{f~P;^2261HQ$$*P{#ci`?GhxSJo1UZfrwTpHe^Qg6VY)p8Ds?5 zWJ|iGWJ)|SU%jT%G@6WhUS$5W zc^Sb0&*c9ny{}~z-Ntt$w)6|{Y^DC$>eDPQ{nLonvn;u&RxDek+>4H}3lwXw-I3w5 zUzXgLeHXmHn~E7LX89G=x*~rPWfyl^x3a*udz(|)rRM2I4{RFmR3|A_dCxiTJA3_+M6=DcjQQ+1r7XQtQiJI@&fcV_7Ko=E%xf;! zG{E23-O$PfEXrADo*?~{$LM~=c+=%X<^A^Q`(Hl#T-4}T5lgrPiiW3fftMVk zW`0-lRnq5wgXlP%({?|yAms{y7O#Y_3B^LiQ{EY-Ksq$eU;W15Ppc|6oyECdXmw%7 z0V*e1egCJf*ukcFfs<8gH$X zfonnlXf0;X21*iQl|Vco@5h%;i-KfcdIFpM{{Ep|I$M34?OV_x^W_lU>cL%r072Z5 zODfh@Gj#9!o%?s!gUd`92VS+lUz8y+w_h_x*D&4zJ$gY!C!-S)m6!AS&z{1{CZT>51i%O0%N@FYGsoR)4CDY6G7J16H+`G2S_$|4+q?4FiN z{OBZ(TgvzTiow};Rw8cgqR2jlZQXbv)hDjeA+zu_1SKT1uW%-ZG&OqlCx+@1p~xZA zu?{G6)cYxlIBcN5)?KXi6kv`+mqKIB<=2J`C3G9#l3#G9)0u*%DsK%uqG-WR2xO^; zxp}(V<4xu^%kF1B$Ux8Ri$7OF31qs(o$m=eTdA)&>OYJD=N5~rd^vT=dAEX)yLChO zFQB3K!-(V|+mPF-$1`-NXXTsB2URYME<-g3pxGhmkfxK(t5y_|=YjWGE5o_(*hYqI z?wPGQu2D*TIdP%M@rcR$c$d9!7I$@4{T|{g7vK2O<$=3qk7`o8TH)fkd!^<(1f}`o zi^LL|VVrvdj64nXD;tl(4|Vp7INm47+JY?gxaH4;+4rs6uE~J-G&Jg_<;T>NIU=sq zlBQb#3C4Eny!ayG#9@iO$TcO5`WURB9^kpV@g%!=WRJoU3C!VFOnFW6nzd};+ZQE4 z(v55Jgm)<|E1SAm&9fWVlf9QUQ~)utzpeuW&Hu1A*rjvmi~rNK^$5)%?SEt7(hc9P ziPfZ1+=upwk-};=*ps$KcvWN+HCr6|^)5+07qaZ`l>>(K@#jGt-T42`f^h>#OyFa< z-5eL=C$9^9x)6(^p@uorXt`F2Jeg1TN)`?SgfY6O2U68&YE=!zcxW$D^&Ha|XQ=->}veJ-mZ!$S;ksH@l zCzs!Ny$A&R{vXVd)Z6mM?6pNmMlz9cDwxm;(|L}V^x_JSe@jZ8w%WysWNiJt*0|mM z{fIwV#{o>Z0@9oAb!o?ySzeD5P8Jsi-n3{~Jsqs9c{`yM=XJq?gRF&&+5FzFk$%(i zeo&2B@b2yf5_S2#PwR1)Wf%+Ip_Z2}{(0^Fy|q}5i+p)fv%()c2CnmjC>H^?@3Fp&-dw7D&khlsJ=jf$zLQ!!S0e>VG&OCdBF13P`KTA5ji$uImzKv`$Vsw~1xw zoxO$Sjow!A$-qqnn9!hiwT7yubW?KUcfokDTT3+<)Z^<4#$zGRulV}%Qth*3r8c9-sbK3z!y5{P>+5x-PViWzHOt-9{N>$N9kyi&iEx z9&~4kwI;DUcEinbqsv9E@N@q4Cv44cESpsBq3T#R16-ozH)r7g5sPDn(Z_HKljJ_U zb6NMl@Huz!{jwb=IOnO{KLg3-0fj=IfhP7yTW3&o!j;_pI))SRNZ6gNrTe$~6{`Rf zt99JWI)4EKdwcD&M_a6g8ka3@3a4auPbTGMHfO-V>4$jD;@7U6H^F10BuY0#JE$XE z02!p>oy{e_tTrrh(8qi0CZrt|<#YXNkw|Bvr8LZ@Z`C7Y&v#ez*i#s>aw6h@NY>#* zSK8$n4Qz} zzNZWlY;7fd40%Pi{)m29)4y;Kx&tz_^-YeY%2M!)Y--a=_E_x||E65(8^JPC`@Y^+ zPjhc?zToXQGo_P;Epp2;SOxoqxENo18mHI_IY(5cpo(=d18Hy2*?WdQ!Pz(N))sx# zBz|hv&}sr@8gwtE){!;K>@Uh?Ww%;)9Ayupbm}GoR|v&{u2)4~7;fOb5>shSvHh11gG2^#!_J-UN9oMPWA3EA}o8Wl9~-64x* zYxb-Ez*phIv@X-`)*;+k2B1gEAFhU76lh4Tmn&R{?A{!G0>D9ohae8vH{E+yd z%ICCYqqzw&(ORj`h;IY;i8+2_Ls)p8v#cgG%@eOme_%+)G;18s`%;iA_m~bQ2G(m6 z5H*Zm%}E7(3U&;BEwviyfpj&LRw--t-SFd*0B(^a!>zpc2c5oT zsFx+{G>%qB>ln^IZ63np2csIP|)eoTS*YFud=ZC;I>g)TkPfV1!q zD~0}->B*;{=JYYRt^f_o;qa|C6aNtP_pl`3c- z3z1d9IZf*GPt(e(+`Een^QkFM+MqDm=||z%!g4pU52BXE<7|k$cvkLl%DM%PI_){; zt^TJow0`LB@rL?xSzyHk`J`x!db0neCUP<4n&W$hG5h`(T06Hv2bZK55awQy;O>_< zb&c!mcvRoD&Je2m(RZ#r#b6MCnjS>QV`G!k?DE3lUrR$AFx(1QNX_f$GJi>Hn~_>{eNI~R!5xeu1~GVUI_DiB@kwv-}{Zg(l0OhCcE%n#?5sdH~9;uePgAbEj~WE}8B02tqV( zSRVN+{!<(n6mj$Yq}j+4^B_{R<>*`@2nkW@(@wB5#d+AJ`C~1&vl~xtAh8YI#jaqr zObF{wgiA6xoYUQTK2GzFe{cqD@GFSrN0JkIC$kL_M8`D>k=*`pj=Bm?!TJjEYCU1Z zX$_BF$hpX#>V$0KnTz}J(lR)e5qw{z3)qxTeS;El zxsYul$&Xqldy7b})c;GtyF>hM9eK*^?K~|y_)p!=8l(F*^Qc8)(x_rX`oO(DIfq=c zM?nGenL9PJmpN$36+0192q~#B#jkAIv`V?7WMw9#j9e~jEgDk87_=0QIv?7d4qfAo zk#Mo@w`qfy6^vd*W*owU`Q8*qz2AK@cO$>Qi1bva&1^GXaw*RQe6yB)5x%lyGzu@G=#ahr zO`zBsXw(iVRr;2Q4>Y9G3)3))BW#7b>JT453R;8OnT@Y|C%@YTIW|aq9>b7+8yxv( zdGOO<>tmPqmT8d$^!L1wY@;TP^aoH>{r>%}#AbMWz63$BD;Mfws50*#RLQjbhpqMX zt4OFzfhTXyG_(&ofT`5Q?cw58QjZ=-=k4RJTF=_Sp0~&06}C00vuGPtr6V8jytqfE za5}S%)m`}*ddLpfc}#TI6uZ!s&-JdANjLjvT`TA3f3ciPemFFAnR!crKg$T3z+Su5@??G;;s~&d za;!8IQE%@4ZPuMmM@~Y^$M5LLPM7T3L!?#1E_&NKHHK}$Q%sdb7V zPmbmD6@Q(VNIjM*P>F?3v-PxEzxW5N9v`w*3N&^OvP+d_K-38edM`MB`eUIF^(+0h z`<;c1xRj&x+wgWuOXX=Y@EPlky2iJIS2me}-tf>Xas;l(uG>;dea0#{@s+|e8$M#Q zL1f9RSBN=fCt@T9RsoBY>;C3^9nykk=N8HUC&DB$#QUPpnuJ+w#*1%OV5z@tZcyeA zS1t}#Uq zpkLQNv}#j##MQ9nSeoX=fyHXhv7>z8Aock)M{2ca3u2+&-^D~SST~;+}AgmjHLITojp6weQ90sqKPT^8?kG}fjMNYH8##dP50nu}Ms^s#& z&)cUnE&Ea2h1}12s~Q0PTjbIsiUUY;cQ?t0aZmZYw#aN3F<-6I1mH6LSPz$64vd#7 zOrj<39N64uIKPiX9@OYdoZWZ-J%2Abp<%?7o=Y)6?h%Dm*tz6)(%-hNUX(-sSGId8 z%RwiUmCYP3rucd=2}Ni2D`7?z3~;2Ir*8jeP;rdN<;iufOzAR=8?wB)9_V?=#Trw= zyO*u7*kpf8jLP~|lLJBfi}4C*?^A-whyPM0)Vs;~PeQ6n zhd5`T(H7V1m&G?nVhd`k^yWZguKD%P@b!Z9S9cdToW`RJ#;J z?OlqcA>2^&&?nEsU(LKqbNqYiKfC<#zTw^P?$bfiRSq!3mLzKibg4==Tq8!)0Z_{l zEgJ>%F_kzGga_{k80|RtI{{_I6J5D_7P{q`+fNZ(CE=TjNOJJ_s6T&k(xJ?w>}mL> zRDn7j+6iEmmwpkd97aH73_e|6TnsR-ri1q-xhJg$1^>r05Sb)Y^oNGYDaqc5xrXFc zKcjxjefsY;g*}|8Rn3~+xdawOXCH?^+L}LB3GZd*eG;n;rmNjrFqHwI`#ztz4`dp! zoo1S^PKjUapdjI;5GeFYH(~`WGVzSqLFH-e)oQVlNT<2_R#>|jD4{AvSEeMKRmX$l z6)1hJwfTkURCnD%L6$adM23didwnU+Ih=Kb?D`9ZtQ+D44telq(5}4B72$ja0XESI4QvZyP>8;ucBWdPc06wm(GpA$= zClU->jZ`Sx&c0bG*#7I<69}RLbO@TpXce8Sf;xSR_##~%1mX4a{n!>PuQz2=}p~R%kM@rb@yN}0y)gJOV`LFc+N^*n0$^D?H$ef_EJH& zL>p^)%ACn`pLV=>m{7leL)_g+Sf7q9`1yIazWuJlv$bjpa;{#mSmmV~rw7%;_`ojN z*4QOCWWJwyu(cg$0br;=5$85z1Cbt%bAv1sK4$DwJbdr=y%ZgFr)59);!nbj2AfOZ zHVf#m;41D!lxVu)+p`-uZ+X)OqxCC9glLAb#uWaDixv#(nnliYjc8438<-$M3FdnG zmSxV&UhVz&Ecle#e_sGQ3F{XIeHTw+Z&#Z&lKe%g^-L%vgXXh;MWCxx_4$;u=U@mBY@gY%MER7 ziz0~kBA9kq7$EyH*%DSo9a#qLXsR6J62egUyx0~97&e5_pyZzrEQjtqFGBSz{i3m} zVemfi-pd%#+<70~$o}Gxi0*!aqZ#~RjC*rp_H`bkjA)Wwr+Bm^X+?>GxJ;RPvr~1b z00RJ}qn4xCuO(co#vd3VCJsFn+IOeC+{Oi{#PYg&zxNDu8C}DJ*+!hrr3j@}m16t2#<`3i8yl$!h7H0AVQZvf(Pu{u0 zZycX{&rdIVgx6|(FS4gU5GUmf$vH>2f7(x3$F%}C1FN=3OMi=-IK0kAc_b$?zHty* zf$qv}H_+yKi&};{XU9*YSEHua?}qN3L+eodL8UjXjrgN#!Htlt^IIp%B;ceBFH=b` zFD#(TdS)(9Og(X*VcJky=b6yEngU)y_U_4RGT@;X?tQ~o`tXUG4x0m#!mfLqaypqK zkbLfCAN29wHMbuLec4{s{RF3P> zTMgnzbwD5a4L}8Y-`eCeSTP=5Vf$WrEv4ZW?+AL}P7@Kz_?$O@7;0)cbhmbA&LfJb zWV_ZFVG|_^NeTZB@6|x=eGnXeyo8f;Twgy(wszJis0ywt)L7CIQ{SBk>rbOu3PW<6 zKuN%N?m~BkPQWB{YC2pbPt-dPe>o|jwS2JCnwtz9PP4eawW8S@%@MP>(|bYRR9}hA1u1lXK0moYCWiGglvm;}S+I>JWDNiYpWD)cwGtTa`nw8w zY0E2fuR|T%Efwe(?7~v<=BAfd`F7H>cxRwnq2vs_Iir3ae!HtzWTqMulH28qM_8}Oenq#Ea4?owApR&G=dCMWhUHCu0SQW-59~)Z9pxzPU)Un1I>BcP`UE;EfH>S3 zz}jZ%`cSb`$aSBTi2VZwyVmdP^<`?Oy%*rEKF=8fSQW7(CG+Smft?5tqT;6t6wEUD z3L`1mkhaivmQfwexZh+OL}HhpzmK0bqw49J9Z<0}oR-pAf$nhG_zT;bC-_QjJvr$8 z+@o>m;~$8qRSl7SAf@B7#fby?nznCsl=RcJ$Xt|-uew+r z0rz%Un8qpZE)T2LchBWqFJ0mYFG*czsPAp!G4MPTwg343#l5`CSZCXDU5Pq=`OF7k z$jSy%Fqzg2>zSe9Hnyv-Ps9iyIbD}R{D z8LqfCEe7VXlCHH4qYr5b%!&x%mLA{A3&d%Qb$!|-z?v^!=lXE=H&IATk~IOh0!2oo zFAaHW4`?jLpB!&R;kC&c&k<_BN>Y8_VZpC3dBT$~gNSB4^%;~9r}$3=(Ujv6Xkp87 z-@}q^u3PnPZ+Uy3^0+ zetZTBfu|Zo2_9OUk~skbRi0VQpF50$zIcDeo2Q%O5IDLW7!c7kA0g?GgZsr=8(nQe7OfzJZngU~F^bOW+<2 zQwHoICcWWv9lsI~YKgP@O#IKBbK@62JP(1(gBJlD-o7*Y6^s4VV(*ZtJ_iLMc%E6fRAoLusC|A~a8bNu zA-=xa+Ptm^n-%sDt#mx%uaIwgNz|79{+x03C5(ULXT+nVW;;l??ii=v02i?yRgT-Aa?MlYCpE5Xxh0^c|t z?fq{=>v_C9N`6@T??nrVW0iu75DC0MH$y8`S(&dze8L)22~e+xnu5w;d5NNq1p-lZ zo?77bLYKVHzo)3(k2S~>E-}-qj!2b$dVP=lX>aVtxqG>--2<FUw+n>U^WX=6c)N?U8mh&QSo; zGDo0{sZqv|BS@1i7c_{JQDGf^*+gdDY2n^9fbYf>Zewehnnl?U&jn5`cKQ>pg#{0%{M>2T+_tJK@+WCpJzB)I z!kBZIO$id-tJd?%-yX+WhG(!bCnl==S-CiK%rSuJm1#7Q5JuQzI&w@<-^KfB&Xluy zG~|hnAtOVp_(FVY(ZOd32cMnfvp}0f{ACo7;EupJ^-DD0=?NGWT){19>xJ1a4J|xj z67Of>9;VtZW)3Fe{s5T}`cZ1d%vAmsiCDps-@s<~;R_s1id&&wv0}YOJGlKI*f@2I zh*mby&a}E=1(daa>Go62eGg8*+QMaF*MDMT@i)vJ5ljgPZAAp6(Pg`m@Z1iHW?xm# z`8m3ZS1F&7RsWyOC8jn*1z5j`V!JY9r&7 zA5~54>GvJc0G=L&=|MUarek}h6JxJ8;f6Ma^Ult~I0F4*&v;Kv*U}cSe0)xjxkWeP zhj}kq#_{C}WD!9(;ozp{QWzy-b}O(KKRK8t{xW4*Eq3qhb|m?fK!Gm#b`D=J_iW5qtY0Bvtc!$>ce-H_&S+id`Wcf znsmbklVEwmIv^Q$9Ez0^)2+1narux6axN{R>DHzZTWPUg_O~LSv!@d&uLv@j{eAZ= z@j+$PjlftO9u;YSlZ4Drq0f~su;8|CTBUovU5bZDf{z7b>=Cc>)6ZvgSN5q)2R5qv z4tcNZ*ff!XjSHFcStakYk<-lauhlq;%64@X)cr7I0JL6LpYxVMD_kBYY({n_QitvY zm-=Rm#|`8qpc!4%3Lk!RgPgv1 z6+h?!&djT<5ltaPKMNG$>naXy5pmDnbD*poivwJC{P8Rh~CNrnkCm9$Dir{V{mhl~sO zYp8;(6bc4>%O-^KIpF_OvU{ zs=jjrjG^sHrI3_&UAQ?QvLva_bz?@k$*lKp`yK@@38A(Ir5^dOrmuO9Td7>BPlLr2 ziWdJYqk|WSMU!B8$x7iMQ?JI%MxXC>p{v7Xg0|>WJlYLXfFbDaR?=>DCl=k2lFu}J z8Q87ETKpGKtFamHsdFrZ_>mI2f8nR5=?6b_!D^&oCb(_llmuQ*+}L3q`V;_FFGMr$ zm72}|vVN4HDPr{AyjUDoUWxt#DD9n?Wo1(V}cM>Y0g&_PU%Y}J@2P*nmLSN;) z^f@K*pq+bTX@Tc8YS(dnTrnQ%H-|fi9{7%*KT6VaI9dlP&|QWcrFVTL_VOyR(7gTv zo}7S~hqiTNSG(C>(Y^Oo>IGz1j-^f#7S*0vp38jp@@0$;SM#m{9av0euIQ}#TxKmp zr-Q4@=O2ANX})MzU#v+!PSt1p;Y|!q`RvCay|W08_P4NnO3J_#zKnIE|0mzX;P1p7 zYZwOzETa|%<(32%$xz4AcN4hI7Zk5mizI@Vtc)_Ex45j(Vb_7ZQs9M#|}!TXz|ZTD`P>^+Ke4K&2RnF!3n-x$rj~vnRQURjjDAXf_*;)qGb`<~4 zst%xeO!r=(G(ZCQ_xtSuRq{eQRqnd-GK-88`%{lTHN)@S7Mt?%ya|7>-d*-l9DHu9 zzLt2l@+9#U^F@S(DqzN*RCme6q2dJ6ycL`b8 z4kzRL`U8gk-U?tHpT88knt;w{Z&{a=^wU_VQ6}Qhh>SfBbzeo%Py_R@$CH6J2HKVPrl3NA_3YoWj@M5rids z$3E%T2j;w@6PlN#tsB}AJ|h=25&d|M!1&uB&rTu(ZBcEUvF7@}5ze-F;AO88p=93Ni!JQ(&h5uz@4eYLcanC)f$>jvymAJ?gwO27s9Q+~2~v zZ%#Qpl@QfzdZC4(_1Q+1Blcw zGRxq1h6LuQgR_L)_2@#N@>jvsw=WZ`SHNs@c*T9zvi}C)-<2(?StvPT8q1=Jl^$js z|JoUNytgl`IKrs8CTL*3_Bs!bX6ooE%81``%KdIFUt^WA@A@33W*!mBIQX`b&^YzB z#l452FnNp1Q~&t@eKHr30And`5mGmX$|U~)xdd?AbJ35i&?J|X#`%pIb>YqtQEQbq%fi|PYNow_`ttG=5$%Q%|M@D!!S5~DEJe*c zUGMqi3UX5?2QJJ=?bv+tx^mwq2h-yp6ud7!=oP)f?fXe@z8e5pHtS_VX>>n!3AZqv zX|p{^VY8TCIW%V{I1YpxqO{8{-pzZxjKb`7|bWwSDq_4O2bRYA-gOrWGfxJ49 zgw9mTBzX*;+Kcrq9_q769ol7V^Cv$)aR9)FHEEh7B;~VjwjoR{*?k`BZaO38zO*nu zIeVsx&xfqOI%!*x-mq()pDaDSB~*RHpeb&u&$(t|mfWfu>U_JhSAGt<1*9x{9K1b| z%pv{d8lvWnUZ?kE_LVwt+Xy7rfUHJ$%E8t6r2#q9>Z^i3b9C9h?)5W<$PmnNQzzVaL?By~r0n#kA3=~{V&1HgDdYm9X2D=X1o`2bF}gGiIz z4A0Y|=i+y-nVad>=DsCzVUMj7u0>58?+TyV=G)02UK$MMS2UA0rVsXDrh$c}<9W6A zA1gd(y>Ah-kPW9*B&5dG&%bz>&!jHGgvu|#F%QwE&I^4rIT=HS8UJ|M3t$%>4~-l# zA%%ZLJe_j7RI(v`FKJj{Ib&z;(45WNT5NV6)-#NI?OKvfh>CO4GK`Zhm9aFiO4l^a zN+;CEJp@5o>)Wy8_(H-#&-3defpsmn>>7(yST%i0#h$MFTX0g*#EM0k#@dyLWIjPw%t_3+ooqbJDm(4>U zp6nVuz-Gj_V=U1nTfhPGSCvz{>l^>R##g-KenL6FYGqL>(UO}Otmwo#Bvx)P(0`E> zu7m;(l7DXp@4aHKK$}YQ6ALl1O4%SCGEv_Rv4e}|7?OyTbe>V-7|C{%W^(i1P1`K| z1DMu;wmuaHop8B_Bv^Twvv)mU0y%@Z<7z@M#nN^ikd~&C5i}Q5OiIU^KMt1UH^r$V zo?p^-Wuq2F0XGRxZ7i5$(Gg_b8Zfk(%1t`+k4{+3Mu4v&4?6|iy%I=68sA@} zQo%QU>`hiLX@>o=#)Hg$cC>Ux5~f!d$ir?q_1R1@L#yBz?|=96u97VnGJBn{XFED+ zJ@aatpZ(xa@758HDF!hEbxp#PyK4)wWDp*D{a#@6K0E3o{zH-2TCp^ElrZVCO<|sj z&>uLaF8nQYV90Er-R*R|*LPhrd`REICvkY`)2`@2OB2t;?9YUWiYytee2&Pubo{1< zgYUDzeVYwScasAg2+qc^c<_c!;k)Zqd1N@pD28<6@VsGF>$ghL!%Kywg!&Lkc~ldT zRqB`jOkVK~9d56pD57C8%Nv~;YsflN3LWnl)6i9{S~wKJot0qFQO;yI=h@oX?gqDT zVsnC+{Pth=j$h>wb7D(^TSH}NsL3fAo@)|yM=Y(+@Fq4*rrM?WxX?x^AaTZ1;KgM< z9!~Sm|FIcYNm3Ro9W8-svt?raLgat+)<>={9%^Km<1bggnV;YPnWK(HUDC-Ix*E3M z8gD^&?k56k%6?Ul$z_HUMkEPZKxGQ&dB2af&212~O06FB9-EdC7LZ@F@#;wPs+0F~|vvwuT;QMg?j>$KFrW+H#pZrtUW0!@)c)d9SBR1Q4Uj?69CTRM@OK8pJMlr`JR=96 zNIcJQQdkhSeeF0q4e->J*FqFc$Z?EF)no9BAR>ed6%=y(SB&qg{SMHP6wK=W5fTOuRYuSi&|>PIG=Gb?)I$w_g)A*4jSvFV zq7&M9%5JKz1*>RL3^+6ZOK`UvvJnuW?q%g+b4U;fC z?6rXRRny*ja2Q0g=i`^iki>&+aMy&7V^En-I_trRS0+g4&@zjo&aD{1@6iErT&4N5 zAivD*iVEP5ziZWhiH;@*$QT1QwNl5K-o;vW`LSnP|EXHGea1T5BNe9OxXrJ-RFiLr zU^{65Hr&?<_6whmsy+zr=+X#&8KcL_hj{|qNKc*z?GIK_>KAn z!bWEv-((9@3W7}W?9k)j>`&Jem@19I>P$4jQv6d?e4^u)5Ojz-tKWlwF^)qSNgZh9 z2NH<3XXW-^qfFc8v(@FWn)bzLU_kuyH;6E~5Y)QX{FxNb5|FC5q zO|iA)y)W$Ttvm3q9`wTf@W%;Xk`CNhF3i0{VT6jWC^zw};z->E3bC`2_)5YF5LrK{ z@d%bjYS-zO;3L83?Y&M0g8u>%nw%DVVuKF?e6Oymlj&|VtxcvK`e2=bMc)^p%K)Ym z7$2bt?WBy|z86I>J3e|Eu&p(A2MR*8p}4F>0=giXtHpeH_}6WgaN@ z3%zxpd0&pJ_|td+^@bJOHRpf*ypx#ra`981Ma1Ir%B&Pd81Mk!uk9+u`6WOhb!0^U zI78S$5%Mch9i|9wtMCYQ2Fl00MquP%TH3=#{3g)$sGOwT_gg4TW}}7(pUFT!&7Oj|6Gi|`b9YHv z@_@`{8Y-ICmX2NiIQsyG1xKGEVS7h6V8c}|+2=PzF+q6vuXFj9Ru{n2i?fuoFLO%R z?7E~Gw=GVnnp!ztlsnT=URx_ufJH3OMG}Sa$ha6?Y10Yp{U@m$mq6+Pb;6n1EZ#CA z;KmMj1f^pV@J#&NyCQQc;C%r```3;(03t+3j7bJdzSgEkaG2N;YElbv`j)1vp!Brt zoK|p050-~#_uSTgCbA>i$+j^hiKy#HL(HG-B?c+YlSbE8(yBgV%i(_NYINB<0zCiu%J9Z4LFzDJIgN$zyFyE!_K8$JX!l zpWo=MYmm2Vq7(7vvLUwyPaHF+UM;`kh8<27@q2oOr(zFc5v)Bd;Zd1e|M(`-8#5hk zu<@6P7Nx%p*Zxxm-QQnS4wuXZR&Y|G_4AtA{Q>mSa9e0OY2`aWo%Y62Ly{O#vE?wO z?J>qLQ}8kyZ%9Nt#MOzOvG@_8hrTE5(p0^%^gbpZ!Vi8QjLUG@_eYhmt@bi(cNmvd zWn@Mzg1txFfW+23=FjRy>%cs2k^T`~|Y2@SdvS>U#0hfpIaSgj^9JOOb*rYi|4ua{|x{UNw1wg|E139lA+5<@S~(C7O$OP zYaB%K8H>R>--jv(omM;-x-^Zi3HD3!PIdvt?;Lyj3hFCJ zEn%}ZqK=&2$2%??QxipyvL)=dK};#STR4jt7~?6+<6FEmGY`V_Zl_c6I^mX_V8ok# zH@G0f-wU#dH57@jViaBBi)7PJ?2lIo^>52fKyYRw`k~m9r{q?yDtO7W^16nuu@>A4 z$gi^~#4T8VuO#&S4v#EaA&o*U2!Y>q$KVb|1+~EUXGEidFj0Bo!GF{OQ-RnEL#$da zpwl7Qqg}0|`GS9YH zhD#7LioW~snH7dt6%t0)&M=3{I7MsAgF|q8k=)@qM-ZqlWS2W5`X96=rrlX#)do4` zgYDepck&3}?pCaHy3z8?6X!qam;w1D?r3QGw=(pek4p5AQZ;@GB_CIOlStVaXDXQ8 zV)qf$&V)lg=$~ZeGN1FsIu$p>mQnD(B#9TSJ=WX;l`EUezVV`YH!NaSag`1vy8>J7 z?sX%*Z-zT=4T%*6sYKk+H{-TljXFSPprR;H;E#X-4kRO)OxGN6>G=4@W65PQ-N1%S ztjii@LCu!*2jqrBSW%v^cO}?0(~DQ6Eo=ggARjF6!FaE0T5soyN|TwjVwPpGXBj?m zSwKjsJEKQ8w$Lp#sbn13jBD7Z(+>MBiu-fsjb5WJ?59(n-An6_F2X6xI~ZlEgriZA zRaoX7h+*awO4P{8-yT;SK*Uis$7nx;&6YzS+X$Ihj<_OboA(DS-tuV%vX%O#FXKd$ z)DTT(1Mdd|t)z@#o0I$NcUIbu&%Yy09M=uJXu`|@&1fr9`I4-Cp|q&|es|d+go5a2 zc)aCn<;_wp>p^$oIeF2&Wy|Nb^Eq87A?cD^&nK&FcW`FUa*2k6pU~a#V_T>)?fm*O z*7vzzg}rH0uT`To5X}>Tq91?mBEMD+U@De2IS1>1r@7VrJR6;Obb^$PW!7!LNeR;X zT-3c?f%*e{UsoRc!h9rE`BeRx*Y3AP{O0D@aSF}kTOl9}YpG!nR3_64e))T`JF%3Z zTAY6!A9IvrkeRCd`7{IU#@niy74F)0S3r--ckbY$taN^U&9_Ty_~M2IZ$D&}Cec!3 z7B}>o&RWY=u3bH_*fJ_bFYiYiNJiK0C;v(9f#)4EtAQ$l$#U^Ai_tCLiLZ9q*G~H9802-DN-V*CiYI!wi6|()-NCeyjVT0c!-S_?DMzkU-OOWT z$A2vvNfCnNS_0dYbgA!x{&Kp#BejkW&Y@rX7wu<~G!FDXX4e(HB|s4#M)X2fMA!;W zGZksRn)U}!gY)(>yXyXQKTFX-0G52=)(H8O2;y%M%RhCI?1M65$YV+Kq_HHrqel-- zp+xYQm}s>W<)@)s5KS$2*7VIH8o|IwF&UcV-I5-J!IkFs6Grw%Umf=H*FM>%StG#6 zzxMALD*5>M{E{^Jaz{NYy-@HNz$?#Fg)d~Rd0~0X_>pGvY>+!$kmX0QN~w6mmpYM8 zTD_Vwqv8>hXh&vI>is9Myr8|hUsxv{6a>_WU3ECVsDc;Bov;-2w4Mc}Et#o3omb17 z^E43hW{#h&60zw>lMUAoZFs^jyd#x}`}uR&*WO2*AH{%z{#m5_po1l%?{%J&6TEqh*HVo>x(7r za0SGph=gsoM2bP#!@*K=P4XRRMVx_as@1G5mz4f!tUtEDVPoJVqE~x7FouVnv`WcO zV%u2ILDY9}B4T2fj+q8)OQ>z(vrw_$mt^tRC%YLd#R z`l`ag;p8qe(FSu`#Sq1#qcIGX=%LMPXgAA7=ddPfzt~ph8-+@~8BD;njY97m;TN2- zcuhMK{47ZqQfBE?9Nm=@nGf{oQY&(bcRw(&RCk7O&o)Ku4zzYtBZ&dl`Uo=ITJPTK zG2ePNm|9M3PpP0qymU;9Ue38Gfp>RT4UL#O(2e`D&Rfv`JW_dGO$6p>C0^kQ4z$J(ZsDEcwX3?Cy<%?j6%g6{jdofbvK!{|KT@) zZn`8$Hg@GrbejnfEDUZ8?lv63Z|hi6oI1X3)9zQyWe z(eEU0_qsf^V-==W#`IV?09> z(NfE>OVx=kOht5g;RVdapR-)GPh-!XaY)Gc8=CYT^4ILh=eXWcd?-MgHuHuXBblPDlXjYx_4pgPUHM?iLYh)Hu_Yu8zWavCh!$Pm03 zCPDRe%hCP3;ic-^S}J@NI7dX+h|UnZOvdn1bib!JxhV7>{vumspdeij`Nbg1*#nY8 zl})Sh&<`B4hPCsCh2S1f~7+ZF6Z*YO*F*;fk`Q|oj0}0Cg|0g0*N4e`qC4J zuc=x)-T1TF{VHdBFmhPA;ZciVhbbKSXbRgW<+|hPzW3T7v#Eeb7C)lloy>mnRLWuN zq5IOzE(nHtImJP>u*t#l#=)duZP+WlYcBmi8xVL$;A{mL4+kOB?#9y!TY!=%;hRZl-6T5lM>*{8KwcuO!@ zzMz@ZJqo>pSjsN#aq*sB+#WuL@rJ)QtKsC6O(OLGBB?S@_9BOkKd`mvY2Pj$$!lHF){i3+Gq zVP5Gs=K@u_ZkWHSPM27@_RqohnW4RSzEvWqe)2~CWOiL;DI=l>OifdmGi?Nfta~O| zw5f#|;wxTQ_2*w1z$M~8S2M)Ax`N_ev~Zp2tzXMvW1u#NTFs`8cUm_gI=uFZ#om?A zba-=iwX&Dz-i-pIySdCh%>4e0Kba(JI@3pSIviBZIs9OlhCVX7(z3#Q=wKv&Z zd+&YiJ$~=Lzkgkihc}+@=j%Mr^PKat1QnGJUPVhAj#jd~#Dk2sh9gj%i7V+)_GG$~ zcq>kSOve&?522+fCp@=EIZ}3F?eZAby^p$*TT;YD!%T!OVq0|~OBY^c1|TC#1_9^L z&a(HyQ4zR@k<54~EF^A(8l0o87YAJt;?}F5(nEXvq&@+#KSIlLh^-$sPe$q~d5;|4gv$0TsVUTEg=>!xEm+kkK437m{RHX-hCuCS=}C0YI(r7F*`YCpSh1aI0QR=@=;zYrc%_ITUNn0 z<3Ai~yA8uW88~h=)zCZeD+VQ^aI}B|Sz75anxTQhs~&GFaDxfe6d{&~hQ=-fUR^(- z6g=--_D4v3-yBluO`O%8%C0+=EcSX2>>)f>xY}%zCb;e5kE^bP^~1HAYzqLn{{&pX z`P+&%W1w3o#p!OS+CBDfrO-7(P1THiXi z-`b?ocE52>gi6%i18|GbxMP;LWP_sAcYaFSqMynUY#u(ux4Hw|;IHPV_aox|{Nc@|n&T^a7bTsth z7^IT5Dq26l-kKS_tRRcVmqy~;FFFx%w`e}2!WX6{_QAlfdjMF+9;nC=t7l;YfItd4 zIJ#`pm-7Pb=ifiM#AyQdr=WL&&RY;^J;!Ig%Kx(05@X4AcFy@bJiWCHs?E*BpZZFY zF{jOAzvf5&Ka>RCU%6skM>cgD*KqF0x(>^|#mrdlbN3^n^f{YE+C4kyHAF0>*XBww zd=v-~EEI+1UbF}^m6V5@&qL!FUT+&Vi-Hoa1C{vrw`JJU(Lz5GSnbTC0tZLh4~78M zKcp>m#3J_KhtMNu_~8mbnx4Vk5Qj9pNQ@%pZk_s7O7A5+a*Z;?Q|TjCI-50|LV3Hq zHW#?N8b)2wAk96a99gYlj@(Ut;37Z-uQc@45YC_OPLs?8Q>nwaDp865Sm24Hy4^Ow zn^W3b^tSXS$WF_-9%#RTMXfT(ddkU8cri%opUwgxAlz!6ik}>r*`IS-?6cXp@7sYu zr~B;IPYGp;0P--my8P4PniONnsTsY+tWXs_LM!lV1LN9!_KX(O%eI?H%AqlGQibkQ z_B)CmI~KL7ycw}{$_kZv0GQwkO4)2k{Puu%1o3xN3BLJF2x^<};#d^^C14KG`S=2n zSa*FQ)4w1?`6MAK`#snI;H(U}&v+Fx@RL5^_11By>r4*E`_n^~uhVk>vyOWGX8--_ zaP>h_bm&@8JANOW4-yESL=;nndC#q{FZQ1AJ>KzHJk@G}i|q?lcSx;WzyEVEWaTNx zG1BYmMA+vy;>Q&14k3N~R^YyZlLh206D+bkw9UVW9}Y@t4-Fgl^j%0hI?~Eq^6lK5H9#?TU#iW=oeSBn<@3ltk#96JyFn2!z1gi_CPUw78-|m zcAVAc3f!b6MA?+gr^JpJfwLx=?WF=k_+#(m!67brG(#Q`ZShY6KYVU(yyQQ(v2gdQ zkBl45ijDI+fI^ZkdRhvb-`=XJo*oDJ1Hn-n)=o0*O)_@z%4GA02W=&LY3YKk@s^kK z7biN+c7S1E6THtum!1v&1STL@Tvt-cZWs9#1HK9406K)z75=tO180gB$ts%JHn$ts zxXEqSRlq_vo&(p5v44Ll(ZUvegR4WAb(IvT#Eg~NfWLQDJK{iMRS`5tWZjNJl439% zKUR*FK`oJ~MRWyYP8LS^M!&?)nXh+JksT3)^jDUu7YXLsLpvGii^ElxAORPN=Itg} zj`xF6JAL3l?lfb3J8CJ*kr1cb^EwU$hw}Y#t!B8HCdRqF^Qd4wt734x-s$|A8xo5W zF|jZmV3LBtN*%_8ZMhYG54ZaD1Lv5nN~Z~WgxmqkMq&r8XgY4Te<)R7eFQ(Tu1qn#>U3OH~dr3&LJrA~CAFPHX{xp*W)8d)}>{St~L zXXR1t{*1#1K1609=JcLALU>*l#r-S-Owfh(z)8~6$2vS$R6#J`Y1p|7cZfZN@DLpP zpY~MI=2>tI9YO@96k;7s#$yYaB}bo>t<- zL^PPG3ty_pNvT6rz%_8?UMBUx4*M9WJp2VN*}qwl-|)5D z{~0OJ9|i7#-PKcN^%;omDjQ2GGU_$JZHMC9;t>a9iG$S)~u41BoCdQNb&J zhp)p*Hy1qWHTz*LC9Nt&BFo@G7TFK)^76WfPW_=HU6Y$zK|m2M%ULe@H|$b%RSkm6 z5?~%m*G`>&i+QK?pLAGDw>wW%zJZYExw0vqrRsu+QZP6DxtQgM?ipb>Xc79KqXfMx z;cDYbIzDe>dk=fR!|9FR6}QFVQhmOF`@P0p!I*r>#9SQB&cS%zID^l288|F+H|zVZ z8@X>S0``l|03?37ySKP5EnvTnTXDbc)NZ`FLlrYj>pl$%(hqKXFPJ@XKB2FzTwYXN z2BpBp54u4s&ZxT!IyKDeqz?hoC=1=j#eW6}o$g*w(NWhOrOGs z9IQcvj*MK`yitbQqYUEJzH6NMdGXg)($gXq`;X=|@Wz+TD&L6E$KSZDhIn#-#yr|o z(;`$`VM`f`*a(Q4m|Jz3k+9Yf9ZazMAGRJoU~3^uHn0N~!Jt>2SgQR<#$0LO52(kH z?4=wl3Dp4Aa zjT1QZ1X^t88n;;q2pe{%st%W2oD(J6n&xk|s`9L3U3J5X>vB?nC`?w3+TQ-Wu8l=i zD5&F`C0Dzc#DjY_6{T30nTeXhtr9%@xjcSh9}FsonSq`5mm#;*dkhZxHj{mzzvQ=r zFKhoy=bvo&o$ET3`a2G+;yzb{ekdhDMIg!VN94^SmCK;=MGVZ%k~x8xwZEu9^`_cj6;g805@8#XhOYJf?6oHVjk66yish#uCsiI%DlPaiT zQKhY{i#5CU@lXULzIAn==7PLkv&Q$8W35G%L07PUgX&%t85tgxbdci`HMDGtNA;gZ zn%R8A`~shQ+d@|TwTZ-?VRP}X$pbxDkay;O2`U(dycu*mg{Gi{{2q-}tdbj58{YYM z3CacTId&@+WyaR-MU2Ivbq|ip#$zP^2m0I3&WY5V2gRN6Rjgfw3%#tgw{Y_Dco_qy zyklAxhEvAj#%;DzL=WKYw!1MhP(#nH>$a{OYI zML&plY_fu4p4%yTQNZY3JP-~=mY>^RBxd3V#j`-i{Rp&Z@B;|wHDE1;S@&&BYmSRD zfjMl+jf$JHv=Jbanbi;eH>U{ZTnKAEI%Gc9o!QG9cvAJ8KXyZ~xl!m{4rH95feFa7 zXOxjCyd_hdnLkXWqvMxqfwL&$OkGO6`r7Jl>=@6{W1S7XuajQr2>kOUZOya_yB61- z(4ESsWxn>px!|a~>RFsCZN?|h*ZtDI(LUssLUq5V*zxB*xcjsK)>_;c3m1c!^3*5h zegIwkF)44lHTa(isA!3mj1N4DLv@zC`8(gx5|7Ox#OQxC9&ibF0dhcy7W3^WR}DZ< z*S70Px)1ZHDiu4m4O94RCkh*(3#)yFFYe8Fmd5{6sa{6{^6YZL7ONU#z>xi#Dj`*6 zNXFg=W%YA1-9TIZQq9J7w!c(K&Ghc+Myu z6gk}wAV0Ze&^jgnruPD(e;3mryGTd{d`D;tJ*}JGbS17V)}v?yC>8cOvfbe;bvXtP zjI>vO2|NuQ8nMcq8kjXK*tC9tD!B-&r=OL{B-lw*n(ju2BDZWRr zZryKp72~TlZq~7BTa`NK5K@OY3$lNLB$~l9uYSPq{t&X5ir{-hp8Q6!ODJ2|my9k! zZP|myjY%EJn&M!dy$in+@ezM(xb;6PHW30|O%M#234?OL}gTa@y}7J zgGL6dZqz=hzQR6}%;>%|h+kH9nU-+(RUXy&MOGc7>aOfZSwq;ZJ}-We)-k1JyCaAA zYaJ!h=eUqKyGN6WsaL5et zyNKLqKmDFfdOKo?SDSr#cAd2XK z=YB!09M_g!ZP$3l??W;CQBp=SYV_t2iU6d~LQx9-+1r~?37DPuIJMOyjyUx}!^3U| zWkPBR_ZklY8Yc6ZJd^7)s!cgyW|hkZ3iD}j&+M}Qag}Mr(9*dxB{7I;z!V9awSQl z`qv#vpY0R~OJ#r?;M|DPHLWf@d${%mJ z Ddn~%*)(s0k?8rr6$L+Nyn3#8;0^o9splwnCI-a)GI8@47J)z;Cli^dPVj?b8 z+qTi@pQvGJ(}6>K6{K>MlHJDLuC*B+F>rvMqd6Hq;~Q- zP_6`dg3GK9tv5tVqc@)C$#EUZtw7q#kW9?Mm1$2?8IaKYBqRZfW?xoxAN@lim)nib zS60riaJnDAUDn+V7P_n(MJ9}&h^(MnkuDSDs?1@)+HCTI)-2rJ@tr60AI){InIaK{ zgNOGbh4X~K#+tuQpeSGHxOO;>Q_h7&R_gGQtoY%R+p?YyZhM1D`q7vZ-KV*7pXPEI z&ps*<=opI?jdB^Ur!8AUl4hm(lxsivsW-wOFBkuIrL!@;ISiE|_zUFQ3mMeFiQOg% z_*7@kw}GI+6~6a0j-W*_z-8*xxxA0TPkLNUTLDUy<`Mjo-^x&H^jFqCeW~&vp)VQE z!seqIy6iVNzw+YlvPUfwx@=m;BH$=Q2IQ!&>lySa0&tp!?)(r>!o zKGzM3s#YI56a_tYz_(xyZ#g%8UQO`+P|y>uRQ z>xgA;2B;3FSFlPbQx_{vf0Z|I0|X)D!>^^miKK`X&~?|r4Nt)wbnWMK0U%mlrd3;J zs@^O;1@jCJey}bb=~2Vpt1EV}#3(lc-!1At#ygugxB*l=Xs9!YuVXh$tGe|Z5aO1W z!7X!C9tZ~hHRJgqTTqfxUXy3W`_)wBQFN<@ddMhsSVE;vAIQ(F zRIqb;E||I7?zoy^AE^6Xu9S1NQz9Jovlokk%ciNw{T#j3*lQ`-Ny#PjjJsp_MeI`U zIg7+`9}(I;KpB68yh@UM>X`X{2uQRugj_Ge2HbB~k-TgJLH?)3oSq1H zS8DYDzf=n#yKt?t-=v5QZMf05C*nUfC#YJY*cw1fkN@^oQEL6bro2#eNB*Gm+UJ67 zTPFRRBzj|4(0rv9I2MyHFL|^_PIyW5pOwDdqGA$ zybZA=m-FnHO0x8jxdjjXnl7kOK=M@90d);$?i`im;yUfTz{I*Oo+xw8cNQJ~Y>3jd zgUZ`|DGqU4kG(#I>dXCDv@*P&%soHH*8j0Rc0bb*(va8xPp>fQ`*icvZ>~GLp!x?A z*9yR;nWnmG6Nsv$xX&Z>y^Lv%a1vpA@X`qv{nsM^H;hTDA> z+ETxYYR~C_a)yCgIFw(|kW^M-vylDRspR3YXhD5D+b>blswI=O8J9|0db5W2QFPap zGpc`qA%h-lu;^-lhHJl&`6PN?m1iFN_!y)RjKIwgnO@rsw2@&%Ek1yF#DbCd3%6KS zdV}yCWn0w+!1!nlY6*@^2H}{UB*7=S_7}|h1p^!;<(NUlt|?K{m82^Y<)Qjrfj%l0 z#k8yBNMO@jHt1x*5K!t9pFiVTRg?x6IbY6fqo;d|yF6YZqj8QwBO^{$xIkT8kCx3JzaU`soKKbZC|#=`Fu5Ps2_7@v=1Rx=eR|n+ z6=Ioo5OIhpYlS))|G)Czc1xm1$Q~4LXigw_%;B;k2cNQVC9;?HD;(&-U6Yx69+}zQ zdm{;@vMYSF5I)s3)!nTa^I)=4lKd$+)K94&pbhg4Tsw|*f+PorO;9jZIo-JJecT8R zPo?M0;Cr^|QIKqA-zEN&463og859JkTk%8jgKd?{(zwO@z9-Xym)a$tnY|tdVkvgI zo{Nh@k{=QTV8+u$bn1m*=U%~gy}q&Qfe36RnDQhcuhtE8EPg&H%xaCy1)lZ$-TjY} zc(+KGPoe5Ffe)C4(jf;VEAqfX?gm1#aD$cAA=6>_u?u93QB!e3_V#?qlX<*a6!kZl{WK zCK6+}*AXPZfiT?ElR^G41~Lt`UF7ZWNO8jv`UhtFsk?%Lg@IL1Skja>_AUz1*v%eK zem|r9t++q4KSg&^#%1(Um{#Em-_)xvO^JTMqjsWBoTNYN-NmyEm1A3&t(9kWL+Var zrn}1WdkC#De@oJXcLmEa7HU&}V#%3;QLEU4<1yk>^sxSWgi_+<8@V{^wbNB~5`peg z)wxrW&%teeH{ih$Wio91yD7Lq@Ram=?Sl|6?rHG+H~8M5KQ0Cznh=-M3Bvs`LEOtEO8nK%f&`^o3B5R0}bjvO*Wdc3jLQF>T^0b*Ijr}vU^b~Cq|t?gYSoTG3cpRR0aEP1~?aD_Gl*=Li8 zv%slrJb&Hj##aWt_JY}r`TWL}Hu2h+lyG7wkP|y(*{Dm^@dwnWZHMv-dy0VzB*o(=|ABs0 zEQ4Sj4XClva!gsV(3bd;59L4T{65YoF|oFzD|0)3{R_+~QP{fC<@kg8(6Ab~%g%i8 z!5mbDnITGioInnF9N12>?KezFSn=;YqRJyosw%}cC1@{(J5!Pa(nH>EdL2S8y?k|- znF(y?ofh%u3^V=fl^%^>7}8tA=KJM(QDDHgZiAaVjc(Xs$(hBt zAEsJEdB19+3txsaI)1PlEezX~lB)6pk@5K{m%%oJ6iljCEIIXoACXjo>d8jf105Q$ z4#6jd?(e^09`=s^{o{u*A3;Kt$V2ps{Z!^AP&yan-|!EJ?u4sxX_{x-y!)cBkdYq{ zbI;Ec;>gTkluz$A$H+2vP)ZqOqP)!u+dwpEde9?>I#y04bY_NvJlCbu`Ivb(`3KXG+*kf=Hhb|;0VxtrE!#CjHhN0}E6q|)X zsU29*!DS6M_>U%aF~a&l))5xjwyLaYL@)h7alC z6G@OfjS6>zB=4GtX5B9{;O6lgw-gx1E<))NEA%f9)H#-fx6|6c*bfkb3+0d;%XI+r z!o@5aT=ugleB%#>HsC|Nn|G-G8|vpTnMV&Djwh*?uc+!maao zZzfKhMgOiS-|?Sf6Xw_*a{FP|#0qi{2X4m|2c%PdY%I&5R0PCFRbLafb1~$_{PDLM zrKy9!jG%2$S>KgvNAAIZxhnUCEadtd$hy8 zRHn%S%7r(JQ#$Q0(D1Va$iK6Nf~0m8*}2iGrk8sSn}BIn=id9PtfI73tVmv?0&x1L~lDrLn8Ae?d<>4L=R@=`1S4D(Oq!j;$jH?25$L?<9od z27Rj=`pYrQ2p3`NA-+?uE8mh!-FMc#$DCh^#h;^3pxqdi~@<7|thFU*WtqZ`6oj1j! zL~K6>7g|(g;b=CumE*vr0ll7BRsJDTeFwRCT>Y6c=HjGx zMz{@K`eEf!07J18S*hFy?^a?kd8KTlG*A)Y1mxnM-{^6o_SR5%Pa4mx||9UkqF#BwIqWS79BOUO)teZ`ClVok z5%KfH!PTP2$9e@F^33CJJgB0Y9$Y~Rxw*PjffRaY44$@e?N}ooTE%6b^0o+6sJ zPJ?Gz=x>hB>yrJftkRG%&^(r{yq6zK1HK0W z#|G5}`UcQKLh3v6JrdB(|4Y8NAp$*}EZX-NJ`4yPb#LXf)O=Z>;tw`|A&sL`QA+U; z>UZIYcj*;6;0SU=0E^#bcvQu$7e8r*m17RxA@KbgCR}lnTGrU<4oe~-Z)yVkSxj6r zfB$rPKPGaH#FnA-)R(OL+^M(0(F6(#X-OYo-*9OAv1bD(cu=wXxE%Qbt!*z+Tb}V2 zG-w~qYftPJo(`2CA8s@W1=>~ma+ghpqL41+Z(wfML#7Z}s{L{o$=k9n#s6VA*Q#ha z*}OqzwJs;ylS>nx+eN4j_-5(Ct_T?8vbfm0(O$g%C0PB}(Q?;?T^lCw74VuU6(WP{ zPX><9$1Ncb0y+BAUfBkRP&;>19$8dg>j_Y8b)tAB^H#U8w1mA@R6DlflRzrLs3MAU zU_+@06#@lwFY<)No_Xe7&TC`?2+GeZk|UCw?S? z?6-_TUk_tsN5!hNr00ZQ19)1u5#Oj<6dmrg%BNuN>niyz>^v_9od*LRp6l9xC9<$2 ziRcqVh#**6U}!_tQfQ-F2U?@&MN7Re$5$XQxOpFzx^F|ApoB7YpTl6ANsX;bQco9= zeI}`??Ll|%@qAO@*fI8mGJVSZjHvTYYV1}^{3___b4sj#4@6le4n@gpIQh_)Xy)z ztgBSzb<2(O9fAWCOdD-p=wWm9{Ny!;P# z(0S-vmLD=@|D5lN3+hytJ2X0;%B>_88H0y&zHyZoKX~USoHhWI8iS1EEw=$;C0Zfg zk8A1V52LNeS`fIyIsfL>4eOi*mytRTI6r$$oW*70*1c930W`FuICPADpX2PM62Wt_ z{@Hs3Q zk7tUY$+%hfhRG4T2@=9-E#yQJY+lCQ5#zDNOl%j}o;pxSYNQc!3XP_sPhCbmzK~&W<;o!vf*U=6T$<9=^4`Sbu?RwSrOQo5b zL1tL}hY6*eHX3_9^J=ftT{Bm*L_&B7t;f)G!vW_uKV4;2^FsRm>9~73@3DisiijIX zixTAMsLRO{{pV?mQ2nf+#0pR=T%)PF>J~RM&#Y-r@_%s81}A03@Px7z9FhcE$+Y|( zpY*_{{)-}R=05|dyr(|Pj-WHR-!rWtMz_!5>fx(1KrG6MB)iMHJq9UNCQs02Y^-F0 z%=vQJqNma;bI-wH#7CdDg}!Nu7`+P33XCJ+-b|O22*@y)5PVT&CzR5uh?ZZV5A}kv6Z!T7dj84fQ0j${OXn z_7N>x25KsU$tr6yGvGP&EB#xkfzsNn41N`Ai3Ea=+Y%_@zT;yYv4rrCf4$<)dap3F!Z8# zg77Tk0t=kNcBF7oFa2>3bDuKQj|EDtz8|Xiq-0Kz=(6fYq6ouR5^0z6LLY?>QGav) z=vH`3o=ZW^J!E{VOJ(;R9kSRXWwnW?*fk~1_3JP+qUk-%f z>an`5!fdeAZNI#P;{8%)v6!e+YqgQ7rPD6E%8Q|$`WN$|(!tXzUP6J!`L(6X<$Pd? zWORPox5D>b+D@Wsqs(9y5)e_X(TL;}d}S`wx<=uxATLyTaV5O>YN%EXiwD(!9s&jK zLt73x{c-c`j@k&p$)%cY7H=AXzsYeyEHe9Ubk97jlSv0esLX<{t{5<1Ky? z!T-&26>`UutZ6;bV8rr$+)JNd`e4+w2r$!vu1@2?EgWq;fW^VLW!`AE+8%UdOzbRS7kV3zbE|~b zN+zK>*#&3P_n{1v*yRvx@g!;44TH0=^rH|msk$^F08y}W;a%}CLl{;fjv340+c5V> zWa5T)H=i$=;#X^Ig5)G^(EcO~B*Or08<2tD>2c!c?UQjQ)V9S+epbzoGUto0)_qD= zVO7k;qc=hgULph}@WDf8A;{G#dKviDdbks^wy2hv^##nEY7DhO-Q=rbC03U|r64c=spvmR7D7PNzr3ce^-+A7Fpe;83(?cplE-E^4p zJWUh9V-5X*e!!;Oeyt4|<<<4Xf(ogA|K`;J4Y7vLp$lx4xGse`c<0b^NSfbesz}6A zqNXuS+k#6*as1`&PGB&KBqlIIC&Q8FD`a(Z^H(%Z?Ec}=>nbDw28!f2Zm7)R!0YgU zUN-u|wW$bnt&;~eI>uDJRHY$3N3b=UfD)zbplNDSA6i<(%$A{&+C`_vJ|160lEm0v zj=!2pYL#=}YhQi^E-8=eHDWBMJ5Y_UtB6o@^T7QtL$^hbZg<*vpr=1r-(1hSGA6U+ z?Wd1+bb))tA{!Dh*Byb6iZ>7C%XE@(zf}XBgsqwf9+lBWW|*&K)f1sA$aBuj+UyC4 zE5KTCtK%o=aq?qa2*$vXg>1RrbL%owE1hyQ+0m8vm$AJ=LWjJ^@h$&glZ z%L>*}&n321AR9QnsMqFkZ9L06Z~=PaBSnyo+^6wY-{$&z$WX4aA?GfB4mn7fKdyDU zK(ad=q-yT8N+(}MRH*lwqW0_|g;9bUCqICY{abtpbUTFsg4S!DTH`I5+Ibf~VqxA; z#&XqoA~XsHA~W|%IwW7e5E z6%U>K8-IWA+=EC5`@qr&hRvok%MM(9)~`AB6Q?Nif+z(IHHWI0zP*{~^PmY}O(6bR z`)0I`O-KYpA8Q%&Ka`%y%qV#si+Y>VvgzxYj1vh<__V&MU)|@dprRrk>34q3LzZ!4 zkE;J?Sbip>SMCcl*pz2wnLrT1VJ@b%i{z@+tcG$tDwv`6B6v@t862Q!$-j)Z1j46lx5M4Aa zp;OiBO`LU(O3O!W5^;{|s&6lLYB(a(m#zet5fYQ!&LhZ%4ZKaUP&gvj74FUn8+ic! z(n|FfjzlPoZ2M58>4|FKqr%3n<5WNL^9Fl3%cj93};CKa9Yn& zIZ>Z71Z6u!N%5rYIzCec16Rm=L#pK02E71DtY7si7FMjs3>IqicfSilW)&9{GJO)` zmXF1=dk2J?fQ-D#m3b&aPtcoQkGIlO=M=rbSxvbo_o+{VXTmLxE=|NIWC82Z>lyQo zuJcj?evt0F%ZieXxalxu{(*Tk(lmRB?kz(lQppD3QdTLB9|B;r$L(w3L<39v8~jI$ zcxziPio_x|ZF*74qP*R&Zt$4&Tw;wp>!tj}_?DH@@9prvPLIr3$W%n1$V|L-AtbKcrNP;WZYRGL;f*c(rks%}OCYW-mkU+;_oLzhHiyFNe&?V{c z+uN6mMoCA^#L^gJ=Ul16GYM@vOfppzDWQ{#R~-MHDoK4)E_8O0wG&|2Kn6a-Pjrex z#(CgIA(3K`=-UB)NZ@zUAdwHE92fbge8>-BsLXyZ(`8hZr*J$o50xXK4h&^Gq_Ld@lF z#xq1W=sc=sW9YU&Y%)Vil@>?qbKpplJFebt~o5uMZL>oWxOcvu}u(0d&(=o zX4xi{kXj@{TbET!(otP%SfKPY!*_aR$?j7U0!x!Cg$_@} zPmZ(Z%NG!rGTc0mw~*@oVh3b_$ndV0A{G;?5^g^9&Z_GsqfD&Tv(SVKSm zUo23S#kRHsg?O)z^}43lUwhQ)dHxR2`TMc#_Ci{o_>@T^Cq=qyw}~ppLilqhv4_&e zv8w4vJ^eZMd!|G>nV;94N-{BhiSK7me*}F#dNMxDOuQ`xD&K(KYi}34z_iv(ZmaX( z?_~o3D%a!t&J5-e;>!xp9_2oJV_a?x_V@AEjx={XMoJr5AKIxq#(QSnJxe*!?!EfXLHQqxG-c7%TI#Gn0^g3SI zPwh7*6DKn9AHi|f$6fxI!M${mn2PqS*b>-U7~frjB783ku~c0ax@Mdkw+se>+*h4T z8o>Hq$-Y_s(z~USc4MM|Tx%7juxC#i37V)D*1~}&p>a0-ms|cseB=E+O2-zFHkk-i9>O9o6Fg0)p%^pF_v{6@uWkG+OvdC^bNn5EHR{# z6H(mIueCek1_Mv~qP2UK!wh>;*&UWa`26LZKpEs5XZgy1L(KGRMZ&DP+1vy}CqQw* zEN3rRcnCXub9D-u5_9DG+{XCfLmk(rxxO;2Ua5Z!4VVgE4`Q_&y`PRUHP2(m#OCyl zDH>Gfq^)?wxPID!hyJeDMb)`Ath5m(uIO~<_KQ;S2sZ5Cb%xfYCrN4UOCbTeKEL>3 zQtR2@&|Z{Us&lW!JkIZZ-M=R%3z&s`=4Uu8l=9EQU+gcuKgfMkd-{tiPY)pF1LIN> zFm;S;1^aisq{&!2q^sLIc#AIpuWEopBd8T$lE10FP;fd^=A@n1n`xbMM1utxBsQ9*Gd7XwW0lWG-=sBzn zl=$o?>;-j;+CC4<6@nSIwk$jw;I@S(v?F>R8i97r7i_YQ< zY<>DLsq4?osj%8^iZ))q^g;Z3zefwwzqT(H#e|5`yqEH^zDe)t)_xG$M{;a{&jcz+ z{W7;hxeQm!m?R1?ywS3f%^a=+wa};_pLZsz7hRgD-5s4FljN9>0AM%)qilc-~fa*YGIAh}Q3qC`3; z>GM|`LG#8>U^|TEx*N7^0h6cLZsKJ=m}mhQauLt3R7=BNWp>9!&LkT&WbuSK6ytR3{CG;cB8FzUODJ?&zg zJ@fw0 z_Htlj&ATqQFP|!{Wb*OQwh4e`Htxz<%^N-JtVoV-W zO>;?ZY7T+t`4;-g!@PR07*slL zI#svm%P*WI@#{AiZ0PKbMtZa{VPuB>3c(3k7HV8OK3%0a%Z=HUx|%-{r_cq z5Gk{M!0o=FqaSE4qGzn21Dx0uq;0uESjr@Yo1E+>w~J>>m*=*Ue-7;4Eytb>#`YfC z)%~rPNEPMV8ajryIZ2VL-CUBTw?7PZP6g^F7;lDda8{3!FPCAP4}iTeXJ#iS2^sf0(0_4?rM za7)WOmu!n?knniJk1>AHQSW#gi>g<9Dh!J4n0IcnG@YPi+}C596l7MUom{-8ZDZn% z*HS6JB0n1#Ju91G17r2!oL*GlIzjYlWloZ;2ws4i`-zuwl&u-=oB-!-oJCIXy-RNp z4v&kdyGp&H8lPG$j@?_vhK9HQv12fiHJ>BqPk(?Hk1auS`*zp-N zsy*ym`)o9$mT5amJNR7IaYp*DXplbuDVoji*l4%I{xT73ip^P9AY&{5hL z^?vj%?X3m=P0l1E2MEC?zwoh$%A6wr=v>hdSCRs!{kxUjO%a6%x=xMt_j^efVEZG& zk4cOYUP8_xeis^RURCJwR8}^Lo8&%NP7EhPF zLgIK_|1N1E%idNhX>5Bp!HG$J0vtH^YD7K9(Y3SvhC*y}ZU|G>uV2`)7b6Zpt!MZ{ zX*cj%^b{w_P4{0}gw`df(?y3ccSN91nGi^-NCf7R&sT;NlQY)AH_3?4+|(HgXz zk6kseMYJiv;q{;Ve?a#vGGD@i>V!0MekmJ%)|`P$s@M(6#FUgPPghEAsGP;;>F%oZ zGs&tn%!!j;ZFqMuxmS9oE!!Lrwh-V)Mu*w5y5L81c2mxTI{S0HS!dwHjn&OU+g^-Gus*PQyI1ka-PV$WpK**TlB3c_d?>fQ z4iMC_nVv8u-GWYG=VS=><6OBUljsd3d_0zu2d+~_#r%8yzWngRW#|td?KTCstJ&6H z(%&>yK8+Xn(gH+o#~V2A`LZT!(Npz~Eb6+ZM8|7i`RN>GY&Ur-EKz(p$Xr6i8LmSu z!^fnry7uL4=^bmr-k8>|dT`eegum#67G=su6B*4T#gsDni&$0voinJN&QhF&;xX%p zZ#COCoEI^5$ft<-rLJT6e?N1mGxD(W$vmBrJXSG1M|S9-@%cUr6lQ0BdC=_T_BanVpWR{X?`(Mwsr z5&^vK>g2O1XNCVvzZ|UVbMa>Xs~#VF(%PU@1064dy=L~&zKIogtm@o>=I;3?g&7wH? zc*WjlWsUVN!l9*yCvxFvTi6m7FecCFb7P>zY31B#`TfSJfLPO(3^)|k_Wd+jx+u+e z4K}p^MXHXQtx!B9%f5Dc8-0g}dk!=Fb-zTtZv-eI{Fo9%9>lr1(unEgH#xy*yxh`D6_% zQn2~1-{AsEyLZudA}WS1ZRy*83t7XB9DAEh8XdQo(ZbIVB(e1rq%;n<1+q-@*xOqb zYRwwDjs?f3A^^aBs5ka&(HX*v;983QM~THvC{0%;T~XJQ;$FgLM4Q8NW*boY)!zf{ zYF9{(9q?1Sq>dBGXP|l?xqDYO`Pj#ZtLYHeE48(EA?eZCqw>23(EUj;ZV`2hB2_SLv5d98}?LqN3+sLSyW?aczP(oWz{Xs2H$QmvB z=sz<8aY4fSa^nJJCSF*v{&6IIJhi^7x9@kb29MTKb~-Y1OLuz`qkN+OkE833hx-5H zDUy|vm01aOMs~L3OT`iKamk&LaoO{XtfC_tiY|LJ9CybFS!eHkgtPZLd(W)jr{8}( z9z1+J?)7=UU$5tSfjpnLK}^*hk*V~4$zY_E8q$tS9XXpqDmwFmZ^*!*dIEjrX0;4zgk_I+Qhyn z$+!_NUEhPcS={JjiL}p}wnYJO_r7yWCmNE%eSY~0k6(!k4T%6>agJa2W@h^vx>H+~ zH(9t7#m^pYvopt7@`j&A&+}9@C!V?6`^a4jbITdR0HcW0clwwVHtsLu@xxQs5J~gf z>~Z2k{%YjIkU>NS+`!C>@76QKAqe2)m-vwVpG6pldIfT@C zVZN_E4g?!qw{;&dh%xG3ysYzQYeJz^Po+_#MfIgcNc+?!vo+s$!;ZMfk{o18dJZ;1 zq1wBjlhs^*&vh3>GTOUzo^o?mwY91hZCGW3^V$}#b?|0zDuJ_c6@74UD4Zi#>@Apr zurAo>v|)JZAYBjs(m?x5?!@87q)b=yFJny2bZa~Ozg$8MhFxP2+k0=|@^V*}3kqr{ z;Jc>fYqrj!a_<}N$Laf}(v5MANSD5AF=gE1WQCPB>9%X{G4|1Es*xWEGTP^Jklv#- z(o>(lqL^xjr$C9_d()!^*0%hdWM_ivs5;1>xEIk9a8em8e*~ymKcNl65AJlEF~mnP zk;6=Vnxs&`YE6RE{?Cg@Zl!jkO#g(vABH9!v|0=PJd@^mco^vO4Pm1CMXoSW& z21~R7k8O`Gkh91=s+c`Vk3m*peH3>8K|NG3uQY0C(MA!maa|R*FQ$muvk?K)T93T! zjVp);v}BW1bpLkTBq}D3Bdr>Dlvb1QJ+0cDbec{iSp^Dk>K}pdmzi8nm`6^X=`>{A zi)K`IjP0yVin;9y-HdagRAAbS_`67-6N`J21$9fR&hmdMQ(A!d!AO*p%E2q}VhO5Y z^70KBXs!GufOT>5FUlVbz4|gs#md$C!vw;(e9NqO4c(G}5-6%=COdD<6MqdSK3%U6 zywu|~PIp{y8t*e~K}vgEQoyExoK2nEc=$q)^_v4PE8Wt6eBMy>hO^!EG*M1iLQ7l1 zVNv8z>*&*=UBg>{BJR8ND7?5jD6$CAv%E0>Oe+Cyw>Zo?L>z?@pZG3^FE&bn?P?5x z#l{CiQi&mVJ(uRt8RXaRt5tWVOeZ+=w*}v8N&|KkLuK=yk|3fY+p-*wYg5o*DRNYW3YIB}z|NMzJ zz`urzoJ}EgvnIdV%}Wb)A-(%aFRoSMVa;zkVb1Q_VR8tD4H4p7n-2tZsd z07Hz7m{PEQ?9o#2^YUYvc-?xigQaaQo=D9y8N`Ak5RU`wHfh7=vI0jOG$jPVah_^p z0n6+vp3KEbF}@^6kDE;%e7`Yrx6$gK{n@7g1ppGCKbgfXTZ1e2R4pHYX@VcZnQeIB zMmLF|S_Tf7aIKbPM#bYt%DEiNrffkpdOj*bcgZ61AcP1;#=tS=Tr7Qmqy({^CAxz} zaon<+T_%{D#lNKq#Ah8Lkt6iBriSFq8t9*A3an0-O|`H2)5&-X9(kpp!WB5VI4)E`lUVZ#uAo)&`1@OoX2MN9j<0OzZL*NEXlERJv~XPaCx;N z1NUI`!~qV?BBfMCrnY^Mc(V@I?nHDD!!!fldfBIUwWDe(UdgJYfHc8S(Y?c)9$nCM z7_yKhoEuIFOW{a0vM9pT!G^1q1@zlF491#RK9ZwU$*2`x*oawaQx^y0;x58aqa@p&3s1A^1H}{lmS*DcKO*xM9dq#GPSL~7)jk~|xTl>wX3n z*Nb$8qpOaNLsmQ0{_@Rxrxf5FKfX~dh{FYzM4iBEDhk-7F+|Z&b%py_aD~$ndqx zm2J8&bSB!{&q+N9l(QSZ8T5F4-aeHe^-j<7{IK{z$Q4&=_A(8WnD~@A^z*_8DY+{B z%~@<*-{;~QUra$+;>Fh+=rd2tgSepWF1Fyp#q%$nzX=q1?nAhhGk5DQ_>0f@m`cR{ z5g>X-S4zAk>#Xq%o|!8`b#+YOv9Be(QiMY8t=!@BJ8Bn^ zx5cl&mlgN9Ux>FB zX|yb+prBh@DhcFFBlmMu!il-=bN5M%0XW55&d`ltUjkbHnAWp66FqZ)Uk_Rc(a2R6 zcGsH2&_96Rt_UKIHp6v`=M5BnTd1W=R1=jM2m@@88KTkO`bj682PFmixQ`$4TT=e3 z$!{t*p2w%=^;n{UL~#VytIgB>sgNni$%zK?>$v(Vzn1ZAg8P`I%n#f}WwivCw{f%h z?~SxmIJsNSD!N|!m}MBO0X@c{IMDU9a1If4&IP7p7D1{4Z z>t`%Ry%M(xbvCx%jBMzwU_(&OkZ}($$zwvO*?idU&v2N?6Jw9kXR#&Ejjb734j1?@ zoh+Yvl|n8$D%)uO;hVFD1W{d;HU0x9ye+Zsfrs@+b2Af4=wH%226d zj!yY2<_Fp0w}+|49?EJOmr@V#(Qk8uFWiAuGUfK4u#rtpo_!^xl6`l8v7*{?!yReW z*qtkWxFbYU1%TGD@x|<3@%y$ZBm%Re1jP;l+hbP7*9K6Uo4aR=T+tcd%B+Gf?M;IT zS~XD@&BdM*a?S?O_&y{t%4#gfZ{6+7|KNXTVt<}PM6gZt&29*tew6( zbme5WEIV+Gu6`o0YNK>VO4IobHFYj-l~V&LFL-ki^1!!{^E}eGy8i6&QIz`O#Z++0 z87{hFiS8NX43qsPC0AJEi?plrGFAD{1)aA|7uL#i=Bw*CvG$gPa|#FfqDj&6%wVfp zc!U*+5V{Kwgof9_Mx$}-^iZ9@BG4@*jms^XsuEXrEUitP@IN|>& zqVj8UYZJ-zPs)FlFp)ZmAQ^<)JOA2Y6FFOnmk7))knqa)miAV&v@*Dss%NqL1@`ub ziQ4JC0I|buTIOM9E1rGH5kq07cn~k28jE=DbmO@EOA%I+4habd&!upM$i&D7lZ5d9 zO1^1K$Z^bJQwOk!VA$*lyjfbO3`)7*PTW!Dnrj2RFFrt?jm4StnzRUDAva6E>HSE1 z5CYCTvl1JIVTW74^8$^fNl`wgi!Y2|lcSGDwg8B>gd(q$sVNNYMaN{$8c+f$o;;%# zTk-^EUFFmEspLD65rJ-@tnMYBX4;IOQd1WtH!HHObF&EE{MOr4l}hjpbB6xhd;W_A zc`SGkVCkDX$11cGdbcL6^5nFJ$*u}iV~LKEO%GbV8cu2Md^vjW>xMD0$UZq^k$pT; z2iym%FYD;6#jRtG@~6AJ_OKMm1K(6!z4MONag&r8*Ue5-TZBq~$?H*|&k&qvmM5OY zZ(9>KiVRZ;$wiBszrjryWYQ-e4twi;i}-~>=67Lx(xr|sy@f_BrUJd`p-}p_<970S zpvmN;ER1&{wYDKIz}nT|Wia|sK*O6tt0v0vkBWA{Kpum*>WJd^5BeWOS*k0hbU7vd~KSn{k>0lr0spJoc+T zudyn8tu5mb2SaK%%hHEPOyXK+!5rhtwcnl{zXlp?A<$CPom)dffnZu#Wok~r6A97I zlC+@*-lu6vI4ODledPCeP+Q^fHgt22I~BJM)w8Iuu^cZP@@tkB{)~FYqpxYhn3C4y z2$8%?`FB6lb&mgv$Cs;JCPLUINFogzvb#g!$WqUcN@J3Y~4fUh+(+2?#Wv z<(Z!Rx*!FA^0V0&6Ni%;Ku#Smfi9a-^(yFWx#-g?*DFsSOH`b83Z=Acqw?Z)#|zU= z-cRjSj9GLDn(hjGK!^ODe?P-tBkDC~2TDzbi-TDn$0egPJwb}I|L-oPr*v%-Dm({i zZyDK}c&~6SRZLCqWI1=jZc64hOikh!yUDq9V(?!0_TW}!rZr%RVOR)s^=<%6+g47Siwdnmtg*CgiR~w}g(4xhJAr^@% zm$wb9TMjsStib^OZuzT>A8am5z1Z@|q}(JY4z${e$pLkjHuRS+W=T1Rkv?A1G{^A{ zC=(j3pNqBmh`@0FSh``0t{rs1&mtF%EM>OzB6$YJ?TbzhLq4ylKmOmw-Ra1UVv`q)ROq<4YO8a)3aac2bX?2y>SM+IO;PK zp(!xX10O}(`2*g=f1~n|jSNPJ-T|U4cy?=o)yi)~_q{xGicMN<;e6UdUtlJ$6xx@y zfO>GPYDaNKK@goZWHNUgG8RokX32h`e@PA#I&c=L!d|ql)-Y?TwqfcO1}2}dbDUrm6$V=RT@I#qbVQCP%SqKt7*pr3VhX94dG$bIqsc{0{N zNI0l#ps~v@{>VW?UJT~6oHd(;xM(;Et=#fnLVnABLmEhD*DVQv`Ti5U6q{=#S2}9?j}`XW+CmiV$%2fMV`KR+NMx-R^^`n zVfoxr%@{;g)P0QfT5*}i!<;2x$nm?2Xe>dh=<}KQ#KHO*e56M(t6h?)PICEUtKbH3 z@4N?+XisfE3_R3>7V)God6S~_(t>!Qchn~+E-rSSz^RE;iuNCn3K|mG{WNYaG>^|4 z{4lfPY?lvAKfNjUzVUuf$?x3XUq688O%ZL6%EK;G?yU*QEE%^j{NGD21UyUeUaFT& zOpD06)`L10tYAwv-r|KZWUqhbr@>MY0;`A{YkTK=l6ZcPF|7bUtlh`sOziev3%hY8 zL?ivvKkVo58%aK@#RQ-FBL8FL&y<*4VyoKz))Q%v@pD%*VTR*GsvuY9pUG(@-CDR6 z{A8hAT8UUIPg|K1Ww1+ZwFyTbzWkbvmib`ILU{O{x`^%%jhIYS#*om31W(p6jka!J zwAb45zrOc5O)oqXKi0AY;j;+k`m+gjhCTc2%)?)#)Lg<&BAum}kAyl+&>vddGZa3& zY{l5PYip1BYLFnS($%hY;AZia$od-tGy)ly!FAM8HwJTwjA`c(8PocAa z%pyw|k#}AuwGIREV!9wUnLPb@*fVr4P=7HB3OssZrGHjCqRw=Y_~K!|aH|Z5IZ_)= z;iBtzyrQk&fX*q{l*1&_rg6Q1NX9wFz`z==DQnnTGPQ?1V7sQrziJK9S`(NGoIDNz z#}=++!gV|Rb1%gW*Vg}oksZgp0o}0(1E~R3{59z$c4_CV@3ev~wop z%o=aV`K=vZyHdyB9`xcYBXn0rosl^@Nj`p{e1lTOVE?w0R)yema>NMx6+jZiHV=O- z;QHiaDzsNqJA$xELZm*pJ_%Va;^eAq-}=*As}r9BrlvT|LJ3_suq zgjt8%7gslrm{QyRDe{g^&Wo6%3|2kI(uS3<(p2p7gKHcU#@c2ef&4B%hSM=Wt;H`U zivF;=R}HwFd(4p!O8NBZxaIU;qwwOIuVT z6R7q42tx|nf%@8!{y4Xf=p@JdR9vKRWajx+1z{}*bDl3nTVYFuQ*$Qv#@6}zj|{n*|V7xTaCBJ6>V4H-PosRZqXd0FM$|w(WQZB{Tc8&d1d-R*oT663h zCD-hvJ}1Y)H4@td-n*h<<)iqI>{8pO{M!a2Zx#}6FN(KyIpq61MmyCj-rbG>wZ}2v z4te6wrwLi63D(X-B@TjZZZ1{YK!Xt0#t`;iQBc__+neju9S=pfIH^PT-nK5{o4wAA z`qbTn4jo-fCa7PlGYN!EHW`jgI6zb%qw1V=(D68_t2&#z!!aP-*e`ec)2QFb0=_+b z8U%_Kx*KzBg?kLriZVY0V=rshsP60#h=J#(1W<$Uh}4DE}L3}GpSW6a{tQ&yz& z;V9$Sd#PLx)ZiG3JNKqI0|;|U!CI)>-*4EViMr`EW*~lO@4IU z7P2*AL85*=4BkJqFweD@|F#h@=@z^pm)COmu>jEZfvExOl}R{N7qmaNev%N!QI&yJ z)*cbE0|`Gh))r?%I%>M>c&6CVfs(O`PRCz zEYupOIRyCVoe^gl>nNbi+&hy;5xE*bQ#Hjr=GHLE4_!O9Th0~{4b5^BS+0+<=`QGZ zsTaJjkZ2Zo28)FwiJUrX=+cA31h~9(72SDkam~z#&LfyaO^TFqm06eRl>(>q5Ff6M z!HTvNih>AiM}N(S#MmQym04o?(Av4t%VJ`l&tK5RJl>fiC-4YC$>-}al;a*g=U>^a z@C#*{`1RT^=2iCJ9C6P!kFum(==e8$g~A9X`oq-&Vrq4vdXMJImPnN_cD}Ps>ak4#0e$T)1rDOooy!Ef z#OO`c*;KJsxda48Y`?@a;Ea4w2q;Gt4DC>-t-I1;wRoy@P*SO*28^7broxde{geQy z7rAdr8!m%kny#I7Q!5VCDqsCzvU6LK?S~IoQifir`F3`Pkq%4=>Iq;NDTrkR$LL+8 zx`95r)cVG$tNH{CHoJ^$Zkkxd^Dh2(%Xv0Qw;lLhfVaC#0XY2CpGGU`H_YDu5JJRz z>%EqL{fwev%2P@!V z9_8Kljjk=utq^Jh{EDL1Adk)eoZz>wC?*^;`H8G?f$aQ$eF5sAaxYU?vQCyGZqoMT zfjfTL<`GN{_Fp!#J>9`Y|CP3E8G&=LzXrbd^0E2Be74B&InZY^@HWT3!dV_Udgfi2 z6Rlc9G4Lt7;#I8cC>!~{B_BsIW&f8St9+F=D^%ajXUNg>$-n6-_}+-q-TNoY>&|bt zEvgS(ZV)|ft?YTZi&xJdYFN)_>KC~u*Wd!bDCXUC(p7bUp&p?pIA zS5e{z6;De{A|<1~$=)Ec2~GZ`N9v4sH)s|~3v9N}tOXdKWxo`i9`e*nzr|6ksf}tL zJNdOnKJ9)l(1xwmFz!y&4G~yzI!zP1Ek`8lju;Q39=U&u^3x4@ORSUP!W-NDciKC%n$|uDs&-dh|Ec zwoH5bhq|LsetXWp&3h@sGl#u5q)7W1o}v$=o3m8zm5KTom%@R2N1j@- z?e-9W$JXqzB3Om+!c%PRm)}^;R1g0(L1};McdEwLt`tEqBZ@YS*xDtkMOwJkX;RwJ zbiHhn+m^?43UB+;Vhz6YjRRB>^nN*;(Z|gS0~BJ{9=zO;1@4yuag6eaN(3-`MXx>i z1}Fg3Ikx`0|F;L29Id9dc-<^ppk?vtK3P5WVjV+%+zYT>m^KB6+HmDWBt*MST^VWr zPk)-5ShiZlWuSU+w_di&+LPkzIcDR@5tpf3`Kqa4Ji-__@_%)|=p}yrioLO#x&Kvz zrOnCTm7nJ5f@o9`J~Re%pNe4{44uGZYS4r?pwlxg^`}(Z6e-`wx9Closvecz99KI!L~&)th!KsjcNZjzbo2vzoJv)~S}AEqExdaMw4wM=92e=9iR5RXPDYb;Ax0 z0{;8(+xt*Ys?=Gmtch83;r*pMA3C$I`=9x1Uu5jWQ0i#!AOXE}=h2{}vyTMxz#rIa zXbP~mtq!74zxBhlI(ros@!uA#=94x-8Oh+;^w)m>HJftVX-U1vxo8QRB}hfrUU09k zK%kKx^rI@7OQWp9I|1p2#Y}Q5XMO34BSMR8xMFi!^#{yWkomyp+suw-gK#u5DN6hg zw5awc;d}abp~#z`Z!3y^f1gc3$F{c>CMuc{TjfMFEo>NLaV6=#d?{btj6EJT6_~Bu zhW<0pK}q3NJ}t7DmsEsnH~@$ne|V{#614C2{jJuY#si+*t}l#j!4e&xUtb+&-xTv; z3(Fkw$`b*6Ks~*as8c}CDa!|~aWwXI+f2X%p}apgc0S+H0zIVm-y*WlMeC`br|Y1f zD4&vo8-la!pft!Ek$Zc7KH+*hMmK`dEqDJ!y$w}p$qAp{-dfHj@Ku=K@ONc1HWF-= z<=|4S0%`RTv6qOD|Ef(c!mQVkG$%g5etDVw4OgjT_jYB=*Mt|yjQ3uNy2Dh`A?zdg z9U#_g=I;XxOh$sYurQ7cMg)_xAEFW&y^Q?bL6?b-smMm!&Oh}*YPad8LZX@qAqoF9 zcP--o6jDbv!@!y7ilf|h??3cxNCLSAd<<=PLosEm)mzc*^Tkd_#!1{F^Av$~vNRvu z;ie26+%8Xlg!G|I52h*W&*o!s^=;1i z)S=ZLpoGeb#JwA2+&f=1^xdky@+xWNFkV?K2lWG7mGUAn>>E+-63=1SAlWPd-D$R= zOu+J|FI|p5HZ104^j6WN)e<&|KXI+f7sK#-Yb~Uu!!Db$ zi^f|LZQ&#qCOz5S|Ek`F@Ey{0My{R8^1bThm^pR{jGx=WYXz5q3+_z7A+Wad_#p9I zD5&knNc5RWgEjCvP&^K(RpTHK^4sYbRCTYzW)oxQlUY)6&*0cvTLpn1Ctxz8d80{5 zmeT6qK$HBSk>{Xney||F@#!Ky39`8Zdgi1S!r2WsmBr$4>*~(QhtxLUE^|clp8jXD zZoNry^IrA#UmK9wn}Eh(NQ}rXu<{Weu-S)fBTq_K86@R&y4ODQtK$qIfBUAv z*~l!FV89uC%^FgflX^?_f&T1eKwUM}mopV|^p=Vj&7TDwyX6z02XVE?Q#dYu<*aJL z-t7a59ifrT{&cyDw{ci29xiWQb(Qnw+Qu)6^Y}TbKR4|E$vFy*dV%=JlWR|3jNL=X zI|-XER7HRad!eM7aH6$4rT$V#aGHycTKoGg7dzgq6^J9@;NGv{H=ts}&Ren>RBTLm zUpP=Z8LheU9htq4B$Av}zPWg6NGENlRudPFzk@K7blyAV9JeUzxxe!|S!)-z9mEz1 zMJ|S>50Yg;8kv7BE1x+ZW!lh|f|;){WU>B~J4h$rp`tn1s^D8ea^T8(+xZj@*pJd< zaz29$xwp2~$JZ_z*F=nYJC-5sC_85GCwA>p7%*y~y{Ga-3sqP*RlN;`gaD@S9GX+1QAO0&m)$ z}OkUzoogRdGgO2;E{CI3q76tl+-H{^Rm z2&YeR@@v=L@n|j**l08H`^rGY#1;CJ>BMhzHod!{hAG2InSBtQNL22)0}HYUy5Rau z;B}|d$DX|=LE}CaJ{M>q?d>B5fxAGfNA}NgmQLlxTB*D;Tbg zGEMjkQdLSbAU#A!eQ_ZH|MNB{(ScPaM9oIDc?bYdjXhL+F;0r>Ern1Pd!zu+ZH!Xo zA6%>ZE2Sn>5<_IvN7o$Ip#1s+J1v@J>bIc(^zui(EgySd>@QiSzV3udkHrxwjf>KVj%JwX2S$v;36X zU-c^Eq|B-^ga!ILf5-HSM9n`UdpkD*$2qC=`iI0(>8tWF{2lJOq`o_AbR&(+kl_iD zm(jg5-sx)sjeUII!= zsvspBSal~co(4I)GR5X7uN;00c+Mmj{or0_uK`Fz@S9d#(NuRqJ6s)S>dWI!D|%uc z=xfTYMK#^@trf^}89mn!zGAibSrG{cw)dHRrecbG@APD=H3e=5eaakX!e6xX>i3oQ zHB~%}E-Yx34c9`6CK2F=G=p%UFY(^Ul}=kw3G-#s8Ko6_LAYG$Rpm>`J+khQ30Y%$ z)T}gzzx8c~%=?RaDWdi@vL_{D<#r8&6G!s#cVLJfzAwqSk|kW9ZW1QX*d`d$^?w_% zLuA(kM{V_L8NjU7b8S^%voaKEYLllnrt$ab+H)5k|HJ)(BPFvowR6~-kcgsh_v5ih z+^Yp~%(ez-iQD-H}IFQ=@jy&8#ik;%kg#4f-KpOx}Clnxh2IhwsOrItGl>#khpsW#nN`7 z@gTF~E{90LByC0PuqAAg4@`2K+iI;71KstuPB*S;aY($t1F)RAD)U-FwKJ#gyZX=5 zyw?4S1_mM4uplv5dM;aYY)0IKZB5g9AVnCY9Y60Sq~qQ=qn??cc?_dUmbGHWp9Y^} z3feOQm1o QMq308P$6lRI?BC3Io#Oe&#~_kIw#kij%av)A-TM_D`qoseo#6*zah zde7qC>qDF(@1TgPi@dr(>xkBePWtLD=eM14N#-Q_#?1Z=XEbQIWbi2tz^|)v_E=OW zbadGl*|}0h47&9nyWEH6SEQP!zb?9Rp@61!9jQH9Y4B>D_V87~ zsrYE!-oT`C4-Et1yH>xp-H=P!%-ty*TrR9+>2cP=QE9``%PdNN-Cwc-xP)?zbJhaH zC&eqFi~j)4Kb5SyIhSSZpZ+HUQZMS~qmrf)Trl4vg`Hk17+cG*Y~&-KPB?p-8kg?D zD|b&fm@^IB6Y;;KStKdg7Q_NH}}pZI%lxmcAs&izjO0e8xA z=5i1lPk0Djka2RMtID&i;jQ*Q&t>}ZGYjG8+$(o)*(!W4?zy>)7dyY{!JDBh<^ewF z5^J{#)}!KGz~)Rm*nQbS9(DkG^EmuP6%cG^YVf%ALJfp;N}|uHaL54w^2UnxOgtna zui(D%WT|Yj(e>@pYIvVOM0ulJ6#_H<<$M~%pt@=H0SHhk?VWQ}MWCsLGbit9!^YDB zS5C`t`rm!nK!g--muQLA?H8^?^@JI~Mx`{E&9J@Ts0?@Id9rYn^so3rbSt-K@6>%e z-Kv_jbURW>ev(%L;ZFrd-o(l$K#8@1W$VhSIpX1KGnS#EjFsyP__di!u!VZWtSdqE zT`nj#9R@O6)^khZtGh7DSxcs|k?2{DyOB`$RFVDT~ml<>{*Wkt` zDa3|Ufu7-Mo8hmcp7a}Uyxr`08Q9WxiXW;6{~pXIV0G@wcK+l}V|`;iRrcCpe2XT+ zK9mkL1pkVtzHq?Z1$gQ0)$K1UgUBRQNm)#?WBPNK4byBVJZ+F6C^qS;b0OVg(e3qX{i~BJE@P_hXLL^6-j>ujE+5Q^ygSsBo9AxiPbZ0kRp$?Sx{zKrP7T zPCynxbvhoMnuAg#)c@v!9$V)t6IA&Fkbv#SpL_Sg^H6t}+$vue+5v#(C;t@S>umQWTrZC0x|9=(!G>EMC1UWWzd6uAO>4=JYXrIeC>64nq;=(r2i( z9;+Q1#+aDo9M$vvyp`vgvc%N5aO~wRoqId22!*cy=(#_VHgRB44wI>9drjC6UfK z%bNd(D3tT$YKOjCTQe^|wu?_@@EmF-E5<(eSTNvD8NOgsuXEfpZ2kJEc%W@+@U}F} zS_j#usj<=Nvd{Lu9W7JJxYoERBH&pJ9M=21MBX8{u9t}VLEhsEo;*_sXz%MOj0mme zqaB@2QbQ8=+(N@EFNv6Al8RoIw5oA@O))g(V*FZ@lkUb8`nQtbxqxP8cu<)zc5L`! zXw4e(Exlm#!=&M03@wmzdt1_~rF3a@a@zv*zAyURH11HZ`~F*r(-Z2^PHZK<3p?w? zRzP6PiF9xKbgQ7?d78gbezI8M#&;~l@%nCe#%Gi-<0Bq;u2veK=y}EYVdGvCNf?5{ z7Yg0FY)1T^f~hSgFjl}Z*6J6)+L+8=jenb2k3bPNH1l;f^8^j6O+J=(Ke$#vrkEl6 z1=5$4Dl_+qB-fW0h?mm*%32Rs=Kfp_u79Q`>X1uu5<7Dk$cp(|_pGPaWWRH}_KZhc ze-LrnEm81i(2o(Y>DqZDe89ILh-O-x4lY@IBkQN5-^!K-L?uP7(q*e%r0Zw`{gz!o zJX0clg1+z!1V?7nM?Fe7zrezJa1;pdPJUG@a&UO6F08I&jBwkBbPR3^iOKvEGsUcV zf#PtDG!2lBDbLmXMOgg!BRc8Mzn;>hYVWj^nlB(oWe2~quFMkI{T+x2=FcWM%AXql zU((YOa!6fgr3RnRG`UNMm|b$l_*R;^_jCZnWRtHo#a`sPSZ!*`9$lKaGF1k{YW|I2 z@O9kN3zM1SDyK%B1V@6^Yfq(eIZzZst*k7Nt7Z)MUwYYp6{L(oWi^)muHm`7LB^cl z^AkbnAmoWhY!>% zR!s%Z$B(Q`LXf`lm$lnxm3=8H6>%+qOI=b;Zz<+(8GNvW!^BiIvv4q{V5nZ9>bsp7 z_eSNd%jVW5D`k)4si_pDyF*dO|Xj)-})9NryP=>&+4(mzzS1t3*IPSM#Q#i&= zV8BQJMe#JIb}sPc0R3jsV!@Il2$X?VDwX8{XtG_J398EetR6hUYW6*Q+{j8=iZdwuJgY-oNpFwRtUOB+L~1B_Uin&A3$^9 zMMD>mQF<@_s=3};!gK$FmID?8*oQw#i;7E+_gz>z-S!qBt`-v$-j}8=szE1^HK{Rd z0a5uwmUn*azBi{a((dA=3NM)TAR}q+-Xb2m`k_mXyWN(c+oJ%o+D5;Z!=Lx4-|D&& zvGZ3EnSlfsbnTtv0fj>NB9*V)^JfY%zEM2Zd^lLrST8Ha7zxYmBR``^Uur0 zxWftvVC<49jN@*T)>ml*Y|cyvqA86bZeI$JmNp?>XCWJFWpokG?s?jMmS^fTvH)er z+L&l^Yn#d7%>gQ$A`nx^>6IMN6yS|UK26Ug6W(S*qCf2%*Yz61B`;ed{-jvRV9E$m z11&9JF$5A78L3}bb^R7EkMSgWarj&Eg&@oa2VFy?|twXWSwzc>YMtg zuknjf2hk4d;(JvD&lFMUkFQhkS+&P0!uy-(jCVhTT*B@X*D_zJkKjzEKl9@oGrRX{c5=~%*zG6MeEX;9G= zchLLNK)8?JKU6sE0+mp8uu@gC)ta;p?Ew6AKi7f#v1Smv4v@V-Liwdi#232p){3)_ zVaP{Ai^HW{HxX!uW#}}xSFf)W=mJ1u*_ueDNh{)6VGeBwp9KwtotXFJR)x~bBG_{` z0|*(j(2I18!xv7E<`EV}wPqnp+&S!Le1^}@ksWOny6Q~N^?)lczmEG)j#f<N;PpjD_?DM{1BvHoJY%m6hAxyW;b@OB$k>S!rhP-b9&?xKo#HjQ7ogSJn2H{RV z`UDh%dxi+7Bwr?8PS=@@3RAp z)LkR3%Nlmv7rPQ>)4pbY`dPyzPd|}3dBMy{&{t&C^L_T6j}Mc;eEs6O#g9FSHRq$vq+^V6Q;YrWoa) z1YROO_tgs4FU~K8)QS03nOMk{;bhvICa0sWxDRe~ub8XDR7(P}t$U@AwTY3nP)-M9 zM9*d8&(WQuCUAAUqGrd~#!j!vi%kq3L;XvX9?G!k;ngX?aV3Yng$tK)2WZiJw z3#4|Xg6ljV*0bGM1G2O=v7GH!Ky!d?&6`M$qCdbs^PzCz>8}^Jguo{E&|ak6%Wmq; z0VjuBsK7^`r$F6L;Awrp^h_dS$cdK`>aA+!qwd2~{6*cwsJ4b76VOGzd$5YFP3~7^ zKKSqtpA$6bf_a1-a35_^PG2ES4wjLG{5#S~iyN)?6>*f>M=7pKj{Bz8=L1zvA*!&X z4ll|T;k(-K*?hoZX`BHRdl&IIaTQS>_9&zgYu}@2pTJn|u6&-w|GB*B6L$j2TlC5= zi4CGV^#|?mUNIkCQR3>NTHJ#zd$B%TUf3FADjBT zP%KK0jr2C@r!z&JnvWMV}?!Q?t(sgJsV*bTRy6PP*$bS%J5UuXP3w zS#mW*J$M3MnWILARs-}0%FnZiY8ELR!%AYzWOHO8fI7TvZ$2qd9#g~~4Jz&K`5@Rv z44djOi%(0QaGdLR{C>TkonEQlxf$PlaZ8oD`VDk@V5k?S z#}tT2fTA_tX_z0sjbIAa>#I76Z!J7sPS4U>7Z~frurh%kED~q}FT-Rc@@<*NShFa{ zvKl6UOo$Z9cEG!!(^!mGvaEqW?7AZ#UWB2`QSI&&Tb9 zrs&6zBQHwMU#)eISt0k*lO^{*`%UgfLAKi9xMLn2vzGgjyqJGK5KH<3YPLc zB3E7e-ho3$C)do9z5xt9?v)q23#tkWqO|^BT(-N(inJlSJ$ENJHoeCS&gd1yBX;hT zF1TVh+hcX<0)_UJ1BI5(s{UvX&m_o9e5r)j0vFAX`!*%Tw?~Cu5YUwY*4YwY)*$(F zb{-sRZj?ffT>t_!Xt zE;ncL-f>mWJ11-BU7FM!Da5W+yjl79LH_jClow4!k8+-%a?`nQE`g%I4Z`b6-V*+1 z7T@2qO$VK%%r37D5rX%Tr;keUl`gV!EP7>8dO+R9TMDaZ?FxS9I_6vlXKMDvx@01l z4;DZ>v#@(V&ziM&Z{=(d^`hbLJd~;Mj`cRtf)h5oC^Vo#_^a4lEVAJ&{FM+zd+UYL z!@e#0iSVySzAkL=Y=c)!n0UXEhn}U7k4M3(wmes^h3$*?+_8iBG8BG4G zOs*cDe!P$vMZ(X~9#p0k{R4|@M65!%RX1A;)^i8B-mIOM)XUsD9YA1iFGBWIjm)*7 zap%S%&95@q(J@6YYo5}m@vDI7MZ$_X)0K`?Y7Vyj^~~w0M4jn%t0m@L7rdsVpEeEke6jLn0QGB>s z>X)D#;t<>}d)pE)1NE&@;h=PXuB=sUmSytOkBec8I_08@N4{fbquu$#x>*HmZ4yCj zGx7rIMb8;{E_C|%{cMrl-x~K8n!5%E1TV?a>rYFQTzy$z>bBk;)6u;v7{=6Emk&n= zIJqW9%Ort5^g=i8kNYE_r@2$?C-Uh`4BSuv9o_mi^EYdq{8s;qb$B!%SX;jrv&6v& zDS^&9la8hd*-a9;Pj$w>vRP%WXHs1<2uf4^3V8d$yH2Iy z6n^v1p!RjCc~6A0!I2P!-Jq@5ib9>FnW*O|Hvc|l4XM-?^t}wTmZS*4{{=%#cy$iR zyRVy{(w@3co@0d_JMC(N+s!vRp z_j1PbhrA*=dcO(k8y^UidLPrTW;=c%NOoA*(#JbE3G~{hM}*t+9bS4c=POm}=xi^M zvPX3#V5OVPZo9!y!+YQp{cx-g`0f*$N5A%I2vp{7Yi)qpZ>sXGHWTjT+i$lD%KPE4-%S&B-9NV5o8{a3`J~G>AI&n9So{B1L?GXe zlwW!*wQ{<3(dYb&cg5@>8T0bFZvs zm2VlLPg5v%YGcNMUwopFVh4h`CNE%_es5J%MZpN#?|*5_EjMl@-#xw^`2FC@(7C@$ z;F09{+RL=wBn^m_uc+Cxd7HwqD!9`GR0(61E%!3r$?H`Uvgoza#V0K<0$=zmq_>&C zn)eczNDmV9(Fec(DzX>mCoD2G7?oHZ*?_LHDhV?j;Un0bF`pW3Pqab{lf3|k)WcKn zNA7j)MW>x={fh!`_`ITi5*T@6C$^q}D%91QgI#c&*}r54jrG6FJX&06VgL&`dONUZHMahBGa7N=BUz?becx3sA9btMYx07@Uaeq$_xMF)uO+MJbHO6!g@ZTL;OH6^ zZ{DUKs`k&`cdDOp5i%cy+YLey4H-q!>?SN=qS+3V_En|u+ZF(`GYsC8d%)!l%=bS9 zRe09{@(kXyO>zqRP{iC0U)wVNm_ben)!i7=V`i6i>ZMF@Hojp?$pj-uDUYE421bC< z7`Ag-;5+VNWZ`hSum4z~h}}jXDwl{CX&mD{8~UokX=oQ2Qbj!s+8xv{-jigE3Z)D9 zrW>))E>*`|;ad|mnk8))(!T~rmPg#)Q`=Ljvkz)L+VFSr`B7^)a@avt?!O$W5n(3} zv^fi=Wii`85_vNxs~UW%GRMriMf#zuce*fv73pM)M5kW2FSf5QF!F z1fMFxeaL=!T@Ns*EY{1SvR>(rx*F2}WG-BMm)A~=5}6w%Y-M2C*uFN5n+@*8H*LN}>hV))@(OIF zF?C9Wh!hS2?ndGCb<(v@B*rU5M+6d0RJP~S-}6hy#pp)VXiocK4>YJ&d*H^mf!fdY z4eH;qwS01i_u-LLV$=--4LCdP=kpp5Zy}2@UkFoTjelhGy-#wjuN@E4=l+kS?~bSX zf8Q@cMzl_n5fySsWbdNhm5g%EaXQ(=DVyWiqih-q$B08J8&_(mctBXj!o%GVFzN$jKxbfT(@6{ z3$CoHv890Gdx0_Hz^3HlU(A#B%(9**IBG;YlLqkf-r{|l^kes7c<-bD z@K+_vv;FdFF1|g>_FgY+sHHo(r5n}Z7p(OKY~IWIw8@p!_@dNc5RrYYZWJCBL&^zV zK=Nc~t(3O#yO^#zMr_DTu8PVySSatQ+!dWAj7W4Qo2|RqtL~v%5C(-$V#y&|5V{Wb zw<`+Fq@*t~Y2my=Ep!L!Lb7;^9kKgQytbATv&Xt~sm_3H{`rO>P5v~Kd)sk+m5v^Z z*rmy-%nsA)5ng??$3r_guR@42`Xg1WJb~M9{^Z%Z;poO1ql5TiM?4*01d?iVo(Hn5 z5G}4;Oe}OA+gbhPy)P-viR*?>yAGhLn+z+pTKv5Ic%~Xk6ThwP#uVMlZ(X|NE)ODePa;i z_1b&lsl>*GGm%=o`nL0=ru4db=ng4Y@S578*WisbWqT$8G1^9>F4J@F>76>O)~C`i z_L|khax(~npA)%rv-rXxS0K#lQ@f@sA#z_u$g3_wQoJUkTv*xkELYk0UNh0|fw7r> ze2(k&-Is$$cwy{fW3!}s>L6bD?c3`YSR&RxkKPkX&sk6-#(!}8o~4?kV`{tRC4*bU zUe%DL-%bHhny)|4a(&JQZ_9e&MM8jmj~v399DQT!R|Ql(OIIXFE0h@Em{q&bvE8{; z)LjbAirh1Mr*+o4RqRI#Vr?Q-qrL$?*B>)_bK`t?jLR#c>vdbzp{YMuoYHXdgUuMt z7t2A1JX=>f+%*5j>_}}DsdG|@f!T5oktIb4mOYiKvzj!CEV5BoP|GCL*X8dv3rsPtehPf|nRqAX-F4$Nsz1_|YiSj~~GgT=svX@iybp$t8tt{$S9D=qR<6QS6 z63ra3W5e@n29}K$yUP0*lquc6>P*+rC83gaO^vuI&!C11%~G8y`+`mFL=iZ>0!pP|CBb54PV_1&o^;z!*c{mqZ}5fo)jCUc=NGJF`&ycP zlnq)`>2T(}g>Mn`0TP0geV?WkC2x?iYIJ^ZYBY*n#*aRcls1vy%83LE{n%CFl^`4Q zeU73V`H@u7i%Xx}K9Or_+ZjyHVI5@g>qoeg0W@}wX?`iNg0;3v-#;@?`h*$uGHz^} zuyiTR`%A7e8y+9GY%K{P70Lr z9eiwlK{Gm&q`zLGYb%E{MX%@7-qa84gXQxET6sXG|I<+_Hg8el+?v1@{#}hRgz@g* zbi~e2w>q1x!&X=SPQ=h!dgu63h|U)C!1+_E7Q8jXQJ1F0#bEIO{Kv`=!-MBz-QXyX z1_+!e9az$?YbQSpq-dE|NLF0_JH5~SFetZ-l-rV`dW#;$85?R$oNU!{g3sl7Wy6C}PA{`;i za(T?-=m=SBei&QnQ>~*q>{IRLS})JK0mfP4-K7>E)C)|d?uSRY{;)iaL59^}9&fE; z4ONLDeKw}k`?a_~5<#a7QTkyjMwS{y^}i7rIWoH!han48c*N_t$PBRobz2PXXQFzm z?{x5ImcXu8jI^=O-^Hub9D~?k>{hd+!2qd^oS&sh_A$}^ZLgTj^bzCsv94iz2OJW} zMf$s#Y|Y~vDT7M~4*F>9_ZLaJGvd#oyNvd@ZLKz;71c}azbzBpIb`G08vzHOem_Y- zAKQ83H21WD9Was`X+@O>D#FGX%R1XHrL$^7iQ@08eyal)k38md=yPUaayb^fpj5rS zwZmn7LdKqsU5POb(}LB?xy9`G(D_{s$})cs1k`w~>n8avoZstnOh`YfcOUDDQ!}}C zAJ%8Oo;Yq_>^`Os#6bq$k1w$DFMlO<&W<4K^-_@UOX_5PF=3XG0_d&i zl%-q0H(l=a6TW@NlZc^b)8;uc_067|g$W|3=xN^zp_N@{+OQfTho*)oBx=t0=26)= zH5mK-f^zootOI$1y*2Nu39xo=;(`k(1mB1~lp`Kt|2(MatB@lF7jQa?VsPQFP)^|5 z>jc7SnhPMU`dO_dF+p}F?3<|krEfqZf(~$V?w=%6IX20w=OqfC%BRZ2jL(-etr|Nn zU)}WUe)aQKyfarQ`n2J!SoN5{#oU#1hJEN5Bgez^A2~AFy5c(V-E}@UhpsB?sTZV_ z57m9zk0<`KG^aLM5zZm4F41jn>qB(X*y_%n5r!&NH^8-BHJ5t+kT$-G)f{bwKZ12o z2{MuDI=imzhkaECpOu4<&k7)nlyHp|G~A_pdnr|#nYFt2dgTkBXQV;XN63JzuHs_d7UOh>Yl=uK zsTrmc)AiOV^w`1FTTq&Oo81bR7%_{ZyZqO6OXvD+XHnG&X6NvZg{3v$c)!_3+)*oj zyXx(wR=vG6bXXa*7Zg)da8dO^|J+WU*~`Oki+O(l3C_Q%c5`UaT+xI+_=g42vm2eB zU%I6(Kl~Jf%b0}7&?}FIM>~Hn{0{eu!{Q2xd{2CL7zu8xHGk;aQIXr#V2wvuBu;j1 z9(7vuQ#7&iII%xU+IDKXI{QGKZY@>rl~h8BRYBXP|MtY=%C4N_4&Dlm8I9b~iIn9z zcBjD4MD%g5n&ch9;S=ib`VjdnI>I@Q$`qo3Nz<-{YIGlhed_aA()&EhiuY3K=+_oE zS9ve4p@MQXjMVKpvD)QJLCTNDlZK*~2g#~>X;q)~ltSF6 z?9RqU)gOx!)tLH)lK7$~dCq1WRU8Vnehf*^aWsp$jTS8=GEq_<%hsN^rrf)2a8f|t zj{(gG&-|}NJ9(Vt@dPmVjJzYXT&VhMLsce&BWRvd9s!Duw1`3BWAxFE!L%d}3R3P? zH)3n`NdC6g?kMf7x-2~^c=<;*h=bII1ipLN;fw6hSiBP=++PQN;dah{nkzF#;5kV@ zE#Lj8>HuPQ_wK;!b-xOsgLn(6IVjpBfGk^^&M_}w3bEK#l16s;R1=3rcXG*X4JkXNKE(Z<}Ecb^W%svm2+JuuHaE+ZQUe9Q}?u;psd>qx~8Ssr@jM{krx% zr-NneePrJTYH(KH3uC(f-saq2svme3=UhBk9?)A|7oF93O>o`Vr|yWUOzN65p>x{& zqm(~Hmp^lc38Skj3s@!TMV5qDOD{hC;2By%`sjm*c12>-o9r*Dk~3ec%=3VN{e zGkH0okKf3iGB{`OLT1G@@T)6SK-v@3#uUHRdJOf!t-A8xU44V?Qhz4{>nu zYSPmz>LaTiJ~j)((~kllJc+11ztDQZ^V{)7QsqrN`d$%oASjH6?zrWTHinHL)NY6m=!NyA zYn}MCmMe#QSNF5SRVv7uXomgnI(|9m-1^UyLpPrV**_}Q$6g=qI6RJjcRWbuLD?LQ zD)%C6y<6RbUX-a?9F%i85#SPrp1?BKV0p7M5u_fwyPfKvJ2>HHGE_bU*0gsS^ORP{ z^nkU%TAGauglRU79AcY4d`=s(G{^NHG>Ys#Nyk*^d@?jT`)qqt^2TC-aE3CKH3Xmn&e7%t}Avv)^ z(=uo_>=pE}bwul-BKNp%V~v$MZ>A9Q80t#>!(EJ6&GPA>53UW~VutKBBb2)hz%tNK zxkloN$&q2xKl5i;tz&2|O!J#0=F&p<&Vah;)4V{AMOkk%EGem1SLLP80Zp^RC(hDh z<7wot-7|(Paw!~?#NNr{jr$L{CDyb33YS+;+j3Yc;y`N2j_)MlUft8)1O-Up7sKTy z_%%GPJjb=Du5$1s@2lf@x(H_8F$}PbN?$0iQ?smRNsg;QkTX$yd$%pv?Cxf{5Y58S zwU;noHsRlZ%!)oE2Vv|eM{cUMCJ{0z7ihL%`IbEzDl#DF|HO&ly|O%#c_P?`B`_Cs z0e26$=H4hB)~#wUDOvq;IXn(4WL)wz((R9CkX+qC-uZKx8L3e@*F$r^(unctHwJoS z`^r7SmQXa?^*SCU)nY1B?2OMj)Uo6f;c1tA2e&tgC=+34GVy3Ifsww(B};{k5xe(pdu360fVKw_dIp9?p>SZam(7gHS)J| zmr58H{M8juJxMrAr9v~FU8SJko)52`t?h8_QWoI053jxjp}sh&lgy@LBtbn=m?YV~ zBJ!mN^hkHtQ}H#Fj=Ykw~GvBo&J7zs?L@mlX-EWEBxlu1F1-v z_A7n6>m_o2oD3XNgSWx8!V@5RR7Yj3UwsZsog zD&O8~m5;pfZNcayO=R_HFPS^MJttQVGW|?syHZIljS?-%&wT2MMHX52-dS05y;*ND zn4sdBfeTsDrS|C(=ig2m+T)0x68=^e!&25ix>H)_p`iNoOgE#`!<58#>;6;)9{tTD z@N#5k@)2_Xmdi`6bMT_#7OF8}M|6<#qKAyadu(QJxNc5A_)adxmJrw8YS|Ota+6C3 z_CB>Pd@LLE`(@sFhhcYg@wdn3iPBd?aR9-nk%wOpQe1$Q=<9d6`a~Bz7lK=#E zU7?BWU6-33dbPz@u7u-^i*MqED+P`xQ@b}Wi_MAmS&4p7R+apTF?Pq}Fa{sO-yLcd zP@AJzmhP(9UAVvWQuV74Q)ByO5nTl??q?Bo?AG~7!DH`?WKVZG+ z9gq+5%2J!*Nfd<5=y9Ksw^vctiE6aWO#GgULnE%r+eHA$*JVFM4f2|AgZ2THujgS|D zp((G$!Zm zSyag8vDRd0KF8+acJzl9PbxH|0WqFci%+#GeZDpi@#{XnvOoWiliAyBe-JPnEE2S( zl;rkDS?V6V_Ts9&nPWkoJ8uz@Jg{!)6$qGJGp`_vzt@pzVY~IxorQD9v`ii5Es1Jg z=60SCs;GJ8$eZD~hH-+V0p*3F$tm8U?VQgO3iZ!w4k9Wm+s^B{JK zz&W|zZMJyDNiw#44*8Lg!`y{;;e1oCEk*9+tr{PPip-58Ym9!=?IdBgykf{?2VZT* zb`i)!ll_#p;ulhKfPKhY@$Y@}JS-sDG?N@~v9m?fBPsn=>+TV2_hB{!&L$#L%8$Pb z%bcV}Z0i@P(nUjZ`N2x=nUDFdhc_L!Z%3rI6*2gRtHHF9^I!F&-_LsE zWSK7AxEuTW#n5b>h|&E66`SH`+0OTr zt03y_mDd{V+{wT0Gt|UqLT%s7?5t}a*4smO`LxZEV`fOSZa|WL!H6u(dhOCk(5oBFjPrxqUf zJm@l-(CukFK*_r4&2WrWIY~|)&j(H=+bcnK9mf*M_UWFN7UWvCAO5ioZrZHqlB@D4 ze3z#tPd9(1VA5%dKI)?fnxu|YX#ud6DpT-om2r~3?F`}g;#1$Hmug_dHem1rFb`j` zu*tXGBS(w(=`LLNudwzcHfa7__&=ifV16>c@nVF*QY8=bxd7IQ1ajCcn?cP?>7}ip zSJ2V^%rsN7uPdL|1NG;a_C>bqH6adygZ*>;*k$kr+MlgA?iuJa#jao2l@gxrtU!(p zZdOEvOm32c4l#EVf%Gu5RLP+fxUeA4*^4iswB*el$10V+%r8G zKJOzmKt2v?+Pi@1*>4XPlXJPBME-uw2smlGcG;8D!~4G3^5keP?^gP@UaBjD!-EcNQw%TW1JN1JSyX1GJLOZP@pH|;fr4=&- zD-7_xGN7zV6s*5wr9yE6WZTq98(TJSM=)i=w>PF2RgkTkU}zq5;{}lY)onbkfN!yd z3Hh7KCrz$(r2TaXBkn!_RyOo`-36CJqP);t3v@%n8gMZ|#TOq9!wd2AIP29Hr&og} zmuNEYmy%s4xU$WE{SUpQCn1Ra)nVa{#irPTz5>J2JC5s^RWP%@v+S<6wcVI)8{jd2 z3%xbFvkI=7m)eao4)l?{p@5hDgypyM>gj{#H)l*s_nGA7y*^fLOt&k#?x$@@jbgLq zN1n4mcvbrx5qfP;OgBG$C4O)z3L|h{mn$KRTO(!Q>!GPF&H&3oGtoyEVIF*&tf#Nz z{dBq!Q$^wBpZbTbhLC1R{qY@*N30iB zH|y-7TpP@6Z!`xB`*Y9V)qvpSk{R0^2>nw9@z=Jy7uwv1_QhwwVn5Hs7SQy9`Mdji zDQd~S_DgkgaH(5t#2}>BN>VeKF8>UI>|!P zMmXrl9wY(K@`IwgI*3Sm=yZHYi4m0}Q?@=ifqt)rE`X`9c+R0!l60HG&$=OHX_a7$ zkN}Tc=9xjpLEH^oJ5Mr~A2gD)FemtqKIGPS1<6SN>weDAw(u_D6%i9jXN8ZTUF<|NDKH^~5D_d-=Yo=wxaW3cnIxEdViMhVDxfd;BJ?MD0#jm)*K8`o=00wGjo}a394HSJJ zh~U5V4i<~7C6MbKBNL9q;FgUxJg)Ey|0I6t1mP1h}X5!5rjir zbpE?_@v1{YGE01~g-F7c)q#&1O7Fxf{EyV944+!ZmE`bTg$`S}BYbE5>J>whO#kUP zU*KIdi$=ZOjhH(=ZERKX}yGG6*puD6(uwNamfGj}?(R3F{oQ$*`Q6mX+ZuAN~R(y5)}OM2W1l-!@5a3BSq zPEe?+fxqu(Ut2n2j&w5g8ZMC@Mpz*i8GbB5cCLi_|GUmh0K}!hVnLHwqys}^z^p|6>X;8yWFvb_T^izO_1z4Uk^{n z%WH@LcY*EtqJXJrJ-mZmdT0T#gL6L%>u-_0P*E(KdS}f7<5+2GQ$1KLrRtL$2>s(@ zsi^Tj2)NfA^lJE;=oFzgEA1U@1kC8nhE3A!1)fnL>xi&|s!qD-cxWa5@({i?#{DIZ44P$9D2M5wc4NA_?>+wHLb?B_0o?Mc?=u?N%K@~8v z+CkO5cqD^xq!*n$YYolct^#1LBMfF0@I+>z1#d`^)(<>PkIxCEa-fwP^a>s9k;lI4?p#v&Jsb%~;`d*>k6R*SjScJCg-H+l~{df(Q!e@4Un%7Nk zn4qC;A`gTGD3A5ArQT8+5l#OX_Xbt#4aWnTtegmZZ2o0}^xS4f&nPz;8QA8z+}v z3FW#1^o9n6E%2noKF|QL9~y`U+oJ;*8u!|lm=peUGqH8|FwO~EQYqGr{4}RCC%Mr4 z3lUzb=`nNc6*0CsJ;&Mup~r{-vc91^{i<@Z+S%9#V%lP|5AE7z#E_zi?rD_qKO}?c z_nSGEQWT>12GVlFp|Nw<9c707@{8>fMO-FXx5*hdnCGRNk497eN}EOay=Xo>M_v~7 ztfi>Doa75&Er<`;_@Hem?h`m83&FF%S*tVrH`CmKre*qogc4qq*z+=xW3o)KS6z>P zH&lXYk|UuD`!l${EOF-L6iQ~-o@1%Xexgb|+3S+r;zX#(%IQ*YfSIBXCriO0O0IHc zRrn?`gZ~z@k6$fCjdk~ZE~-Wdd@s-URH*3$&w#=TsNi;SF%=TOF2kJeaRv)!g?-bs zIajCm*-vYs^H}xl>Gv8Cjvz5WfFz;g@&dZ4E%t=ENk6NA9r*|vr)quym`X%sVT0~G z3*S4?Dw@_ypIqKc-|zX`-F75WVnU9-9Lz4$nYVg5$aw81zf12*V%3kW$&E!t*Mb9f z6jI@w##Fb;T3fdcjQzRu*`?wyo&JmWx5jF0+Ny+R))#!suQTa4 zm;j06M(c2fhVeF{k%Ig=hn%gbmLlsGuARc-P9hc~egw5Z12~OVdKv6ln<&%{7#hyj z3mNQh(GPd0SQ3+b{13`oTg(EhJWt5hN{0ZRp65rkj|p~(U`cxbZu|7( z{EI^w)Coe}Ig3d7zl+V)3+)@3n@-NUD`EJ4OW&VgMStH3QJeGz4V^>y#YEtd5vI9Q z(^O5BSqi_foNUy?{EZJ#j78f5yG`nYRhx~o!|h=+C~eA2jdW_2F8fNavA2>GZEu9z zx@3J;F4Ey#wOE5xuhWNSC#ZtoT&n!b6%)AW3yH%QRMoQo(JN}*WoO!EWWYhFK=^&tPH)cw$%sk5ck-N|Zr%b82hDkzdc##ODJl({^ zs%xEDq{8D!J+J=}Usj~(lV0>uL;fKz;|&!%0S-6Fgp-P+0Lvpn#>rfM4tCMHCs-=< ziCTOgB75a-EqfYOS1X)hgvQd3YPcDR?5Yqa?!<{`OHN-w!r1#h+bxiyO@cRrT4;yc zI!XOJidkEoWtc)@u+WAP^^_9CF5Omj;bEkQu`>_>GEclZ1n}nlaPR++(oJf`<(elL{x--Z2;S>#5x}N>O)x>{O zm;9aJmC$Z#4-P*rxMccJAPr%wN*wBY`Ax*8^lQ!^xpFt5ZD03);e#zDl<207h}@Rv zASlSOCzh6;JOnq9Yo2+iL<1y4X;<=Ez;YJ=0?;7UO(1{m4i-9SCzU}(tbQhU$w`?( zs3&v-%)76Ysn|4FLI=%GWu2T+@EuePUKSfbmfFQwZhM7bY-!yt+3R0QMPzm zp7ZMDUV-OBKL%e6`Y3<%QeI_09|wP_b|9S-h~i}4be1262G7NxmG%oo6D%wlB(ABU zfBba$n%LD9KkWwFc~i@}H`I3~Jt00pVfnLyk4*S3j6}f4L8Z7p2i0#TwozV0WmSSU z&i&`s(bO9!!sEhuZX$MHnwW@AuA|*?pFCw!^SSH_5gr?^Y$km(j~UM*jd()#>z|-k z!fT=gHZaC$sXAfuTF=0V^Eu;S5`FXNs)w;3oQlW&$ayk-6dZzeqk!aENJW1Xca>P_ z5!(1}P1f0qy|>j*I}6ji>K|?NrJk#vf^rRiZk-3MROYsOGT`BKXAOe_s}v+}|Abuw zUKb904Uhp$erKu?znYF;SYV43T>!OT$3F5d`Fk36#mj-P&vNUVwCFMIH=F|C(fXR? zG*9vdwSZz@x@BG=qc7}ucJGgv0}SY*Dln9qq=R_jol~_=|0;gh5i!`}!?>O=sS}n^ zk(3+t{!KFxt~j1lsg2L8U(2(smq>ffGe0jDK1V+YG$=&VUPcPgzW4vPH z=a`Trl?jd1LyBRs=CQYvfY((vyTR^1v*tZXi}(iuf(o55SdRWVkP=Wxkn}g|R@FM_ zWu+puZketBZpa>`Dr}T!>X}Xa{-tLMHy=62*cU$ZqnY^|1AD})qJAB09Yu)7G=0jD zZo0&6n^<y!Sa2CVn-H4>}e(J-HCeNQ7ab}%&fEp!lTYnEXbdix~IZ*PpS?Z7I z9AF9wULv9~kUStnzxU-7$T~gNMp#`yyZBxlei_$XgmU)+)~}mq>5t zBJP#8s5GuNR=-TmKlxtaH22(pw@hUZ_zqJs#@QTqYnIhFsB`bExKg2@vE!b89r4*m z)4%Y0`$jVmjF3t%hj&~5tr8xWSfgGTJe4oo5R-PR*U1ALk14c$k4AyfLdU|E54E;{ zRuS(-b3Ii=gvuW87B>uQZ%O{9uMq-ppkgK)5SSi12@5oFdi;gU5543)lG3zm(SSalJmOS z05ox=6VfnbJ(;4R2(e4CzkqM|KtuObO%qi>;6TRDuy0}|*sM?JsHROeMppa{$Sb1f zTvnaPD>!UU`sfElci1&X$+j;)|R$yTffK)^RCc{z(Z9eT?2TrQTQ2V6D1WJm;=rau{0iJM01=YRIo$&V4InxXnS0 zO%OfNG$xJ`|1u4Dw-%a$I75@NwDp^V>a7@=FOMg;aoiZVWgy$78=sfhgzIiAZ@sM8vD&k38&BW>m2b`E zr?Giu3wIQexq3S@ZA^@&walz&Mg8%#Lkdli-W9Q$FrL*<6kyiy)jDiSKT)y#lb^P- z_S@-W)_;RgqfOR{%5{@=$1GXsSIAPF^$+?~YfK4X(ag0TT&mF^6!835vWJL#>^As!hppk zxq=c+<c6P7qf&Jn(30hwO1ghxolkpR&k5e)%H;TjE^7EL8aIL%=y+Np zVhZB)lEYFs@7%1@;LbEad{MDJPuApNtJNs9~ z|8knG(W|y6C2sVcwb{v%BpN)J=sDZm*!-;G0jJmRiOSN&o$c>g?h7P!Fez_b20!>F zd+mtlpBa#pL;>ln+KW_FeiFx~3RyRW&4laX@6kb&gJ}Um7S9OwQl!@e3qOv#VKxZ& zB-fI3Py075g%{-fw)*VJF7@CUK1XJt>-Xs6M=xFx|1Jpso|zo$xjd{<{Ts0;YO(3i zIo+#Qa1AZ%*l|5r(Egx|n0n?pw@6T);R+yq4t9^7$vWpnPrh+6X*?2RfAGvPxci-!qoOc*Dg=`zw&CqzHz>2?>L8XwvwGE$Vf zCH<7n_451#+dK0WvWZFN*-DUxj%bf~_fY;FJ=Xz4i`wY*gp<~NiB9ncuCpIhIEK*iqZZo_xgz& zm>?stkij=1fsK5r?>dmnmJ8QxTm z-74?|fb{deGz}i@g1zwGR6ZsL+$&4U!I{T-C~fqACKDh{g$tNG!wA`rgEp$ipdJUO zR`!4PBXV^=i~%4adD>(N+GboZqk-GsWM|}`!qB5bF4jyKs&6!lEW`2nFgN^-wh19^LgulW9G_C z6?1f{h&&%6Wb8+V)-ytb8SbfP6=q0N{C{g?jfi(|>eZZ7{=&~BVXJeH11Ov&8!Y|( zpltnxxFjb?f<%odO3mJ^~XCvfmaIT>wVJl(lD1g-^{x)v!i``g4_m_TV9vG!J7~u^A+ppG&QIz{F4Sm#^mS zT2VFpcO5MrMafh($xUEE5J4@Z;)=69<6<^H#PfZ-UvymY>$&Q4bOC1=$VHu^PAWnQ z^t<&QC#s|Xt>9rlD$F&-p2x=md4(4Krqs~V>B0!;?HXD9$Pb-lbPN?v7^?xwz<$Ma zDJMt9B+`X@0BfwC1$j9|6i(Z}`pvd05zmShgi) z`F`Ha*yx{!w(kw|O<085#bMS~7Vy&OopHPsl#(mc+z>MQdO6^ilJW*J95j!g%eCT& zMh{qT+Be9EnT(a>6nEykW_e2qbaF@7{1kbIkaQ+}iH#A?f1OLwmAc5@cIwM$kderQT9~bO-E%xZQ2XbLzrUNUqx9p)Z%wR((USc3B`;y-8 zZK_u0vA<9}cX8eZ{(If;s?DoZX!IUFU*3w_vFYHoe|c}<^eAJ72j~x&@>cuiksW{>Zvo^u zozDBJp~8(Z?8KZnpElWF#7LEFkGW+F^DB0Lvq*w0wvaW%?TMYGGh@4cF=cx@uX+MO zno2ZgvHEcz-&~%D<#$|WC-&UKd$t&_rrbZrdKe}%Oq@i}^S2|+L=N38z)44sD^(lK zsPaC3Ji-!vhw=UN(5c76uZjs;1rRZbL$fBSb4z4+gF5Afi(0YnJ?)yCkqYa~0iV%o zJ%%$}fSVM1qI7IL$|+Pp;Y~0zbUfD|X(8Cd1E3kVeXkeufBbiUS3pSr6dc+DA;eCr zm$-@cgbd#;rRk-yuj(Y7zNH5tqrD(@m#N-v-so)Uq+X{BiNrz)fDjUCh%HY~^s1L} z3T!Z)!ttB!H##57CuikH)&7tRFq^blzp)XSqdl38UoP7%*?zOm@g94;JU#36^KUnN z5<;>=9Un?RQ?Y26CFrBNg(5SFwfKnEIJ+YCIO4guB8{HQ$T0U*O8=)TV)xQqOe)CUQ1QO_$Fr%#i3%&sy2GqPW> z!$>LS!gVdSsS}H%b0-Q%OzudDPec1n=mlYFUV=_Yv(2+eG@|P-M?L~MUcsxL23P{; zDM{B^Pqt#$ifeEMFS|lqB_SJ3iS6_&-7;B$f~sNNeATCQ8v43WXsI`Vziq}>t(dT7 zbp0WPk@wYy=LS^sGh)i3H0kN?SA|F#nylIW+@$@&@-# z>trmk7npg~nG7IrtqKueeB~*`OO(dAnImB7ITadk3G6uq>+vW=nUvrDCE#K}?xhuM zt4gXL)(@b@%rpn_IJOy*=PXIBWAR!6P5li+(gb&JFcXhnjSnzRgQOpgzkyR&wbXY% z4uW$Bb)&ZPH#_!NuxSUmW z&@F~ob1$^xD7AX_PzhwNuEmkDk~GljLY=rt&DQFx(+mgM`=!Juaq2qm2QEaI;uk;n z4M$ZHBES&?u?q;_O;`B_26;3vHv}kpFJgXH?lq+!{om<2AFPQh@|sojvpT2w#e(CV zNX`)-YuOb1SY9b;S|u^!r63{rjn7D@1lBr~jV56{N5o|Pxvd4Z${G$SFMlcBb&SmPA+KO|3E zU~KNs;u_!JPuuRlW6qhE3#iza``*J)$@9iytiJrHlkX)D+KMI7s#1nmSi1wHcJwNZ z^N%a$OsYwuVeBZp)DUXSnJHE2tQ@X@@`Py~(h26RG#Xuc+A}Q-uVrz(R7hR{2i=`1 z>tTE;>q)Xar}5JO){%OjVFWuWMat>;LYLxu8Xky7qqLLiSo(hrQjb6E$ofO-zNJ5! zb~v>p9VuVJ$m>ly#bvVo$`&w$TfW|UVVKxn!#>csXem9*&G{o`X?JALb`em-+cW_E zw`XP=cn5A`vx_tls z#im`axPWutz&>O68DvH-2Mrq$JeT6`jPobNR|d5~oA%{Fc-)!yNP1-d|@J*E|* z)&)Bh#nZ#%C8~Tu{t&>)&8t&8ulrUK+*=3~xe`6m&`b)DcI+ZN#rFA1R{5ZtC_RdL z1_Y0Yo)=;tbjZJCn>H}x)=kxILGU-pl{`S-NuwiAdW{BhNWcm_jBk)*{f2ndi2A5{ zI3H)R-W@d}g$s|1%Q4QThC}$$Yo9DGS-zR}`Ub^THfGh5Xh|%Oe8|SVNs1@BC3#yv zL<2^A6eSx7Tl_@}bveyjdtv2?@zX%o6#29u=_gc_3YBR*fN7pGEeq~5s_1wjX2H}V zLAkX7o}|zcBLW{$1uug7ty)gAG@$AQ0Ya}mFODSTd2y_wM$6Pc+F?X>x+X-?b=J-# zC0BR8zXlIxSNIf87?xpizf8=^mh0;*XquefQwDxlo#(&=u0+W%W-0ph2c?7;R-iOD zhXGnY;7y-#pKad#(r5-JX`Z>Iw&&v*>#%KuCTEiU?B!Xgp54^$JL_4_JBh=S{TA<& zM!=+GQe277*gdL@GU4Je!V@L6o_WpC;^13)WL>fVw|M*Ke(3#5-S1~d@Dw4xgj-`pIWrHNm zW1e%`#ij+!o9rJzBCy~fXCxzz($(2(x#M4X#|7K?eTxtDY<7?DEu9^g1@D7_T7$iAemJWpz*EjLH+Te|)ZX{NQYR~Amz1g(<|Td2@G$9vZj+MR zss=Cy7&pHyJ6hzRZHet?Dq0PaPH#NhO(obKETt6tbiuVNqp)%*&3gsP%%3<(S+#zX z#-g;RX@{6Uq|<$R1tNI=1A2ONDMyH()e{@2x}R$ACjIWg;LID~`}FNAPj<;#8sBal z)mAy=lk|uk1&v?7=imK+* zZNO#Pm^eBT){fli;9pChG7T#`7%b7f_g@X*YwA4j%7_t*6M?FKU)n!r`>my3dHn%L zzQAwpPzuiGnQP!uv6akMdr*Ms5z7w_{jaK zjGS5)`3AKu3{eUtA*Eleb1YNf&T7Oj$)^809f@%~j*?@1s_2@2>Vvc~%}hWaCNZ8* z$O8ZW%HLE-MUbS#`9dQ46(3q3v||MzcdSb(wZFDK{O$%WmDnvYQ>U4XpD$}}wD)OYx(|DV z6s2Vc8T!l-43XS{lQb}{0`6?eN8$PXQuY5z-PUEdX75&_sy~#93xLDQc`ojAo&JX3 z`zJv#E*DBI5H0lOAP+jXE)d51H@Ja|#$2?J;LSpQAGG9tS7t&=Sgh=a1veGZ;e3+&Ii)z5cTxhUfDV%ZF zYP>F*_2k2{$(A(Ezm1;my+C+V+VBk}(uwLzwrAcpy{>P*U=09RvXZ1r$TCN=pKvgx-6T-g}48Ll2$j@_)bU z{iKVv{D9}$=ggixGrPHSZ&XW~%>w#LAnAslnpcxGxRYY4wW$nHv=3?VKrI@ zphRi*QcvOrac&wz8Pqkd$QIX8!Yt5!&T6PkkE|3$*|G@?IoDE!q2VnmK_#py?*IQu zXC+&a!C+pv1`$Kw`1KLPYKtkwIUB5Ih$mX$fRJMB0N4VpsJ|nUObIg$XdIdpL-&U z)mO)L-g1JGkNyKVvGDzyw=*BmweC(%tjUW3169iKbI^VwjKU7tT+S@;FEsefS_=EU zeYf)Jh~{7hqv;2y*QH7dyihk7SSu-Ck8f!sUGyt|tO zh+VhiYn9{a{-SCFVDWOjUUwG8Sd5gBqR@V=l}S5#hPUxl&kK12yl%m$-!EZA+Xsxz z9sX{~8T`ZdKGA1t&dt0geG!VPipZ<<_lw4138H((=I_^4%%{p_sc9G08AL%_={k8) z;-F>S-SZA>jQxVs1Hod#W8djLfc>}-m2?iBfeksU%ezn6mHG6PEB92CDdi85{WuK* zxG^J_e=&K3S3?2$O9{;2m>O{3e+ZLO7%0B4n^Ze}A1rBc6+{jJ99tD@HL2X2+}eDR9^l3@6R!YLBOr=`Jo0i& zAqkYmcB7U0sl>j{yZ9e~D(d=c;Kbz^Y3-fh##VBpDXos(R^Tt|Sq@`X3RE*6>jV@i zzgYQ~>je@D^Vc1Y@SVa&VOCN(Zzw-!G*P)_^;(?Y)fKafslybNPnPT!;om21cy)JF z|GNW=yU9x2*681=j}a!c(T?yfLv|Nl)+C=XDMNtm(*{!6qRlZrv{b{6w8?(5EN> zHRq@#0A@g!JJy#Fmz!tLUwK`!W6?I!Bf@$l#70Ll#ov$#Z52gQu4xK-*>MPo4VKv@ z$o%6x3}ftS=3IxG!y@{m6FRI@OfMiXQT5P@(C+J@`|udP${BzLsR(OQI+#jLJv1-z z%)v+lYv%)8^Ms&++P4XWPr;O?9pN&S zSF;)pzZsU|sbDu8T;anPAwaN$Fo;<=vvIe~=!lP&Sf8{o`>cRhIktHdxOU0&#jN>i zv6>e3Y75u+0O*<36HM&BYiJpW-vLxhIhwqg(j0Co&Eq;irBfSn@fNyw$Ql;?#=mEh z3)@sddB}P()_(O+YD2u02wRTB0{+y_y%X^rY8Dyu6n@iVmmFy%x>pAxG9;FJnrxLD zrC6hU`k-WOOq%Bg^hYUP<(TWJN7&}{5=g8t!TSy4*4B^Q3p4M2TlsiH)`67S*X>hYVMxbcKd zvePbyq#-Tc29cWE=5y;g4g2+pgq$NldeU-xH0|eB&NicMm=#5i+M^zcCXK)J$iB*e zVQz+w_Z?~Y{_`+to(ks3E+~&CA(HU-IA7^NcUPt&5*U5ggd}wV59`yeYoouGDwuDp zekHB)sh(>Ax)i&wc4Ah|MC{MMYqxff2f6_5gE{x!to5!KAc(|?1LG63Smc#5T*7au)3u7!W zB}sqG&Sk5N48;EgG&?yD4Gk+Dk?rwTrJpFi-8$^PbYJMYY*}31EvM>&>XStDY6h+X zO!XDi!EQ-|_d0`Jk+U^+x1wbG&yX&K(PQiwLtZT&vh%OFAiDvKy6F5Ct4j6t z%xzX^;>TS9DI{j~22xqhp#Ze3we|WolJSaU!$oL?D@X1I*;7OY>{ig|?>V4(dd5uC z_tg5*QC==Q`Fkk$Jy)330j0!8mUn&qg-;{kpu!{lT*QbiFhjEIsG>S#)>ACyqrPr zqXnXvlsezeGwFdT8@=2S6Hr8cW)kfjMT6SWb0|8tQmpeBr zhMCgO@EYkTcxG3fV20oX!>D4|3)H%Se1TD`8E)gcJBl?<-~8G7S}$yjt1^>6Tj_nb z-jK)wjvA=kU;d@6K(UJvAOeHZE(o+c%PEh;Nl1lK+s#J#H((}tTTntHFs2>?vSQwK z%+a#;-1+<8DE0yQYt=`mJWd;=>s$y`01Ebbu>+<>^O7OB30JwaB`NNcoWVmI1VyAu zAkAAJz;wdiAad1SfX?-1SS9!+f$Rn^G)^V(CIVo(Ja2twbAtC*Ufmh9POzW=xGamk zfey1>nP@>eF)Ic^W=qwl?rbo?-_P8Za+$Z01LstC+!+*uxJQSlC=d!ZAb~pP0w1UV zADmudF@E0D_9ZeLdNeqHI#o{`QnK?R6k_jGA*^mK=;O5d-un38G5Yn=o(iBSWQ z4@TG{03HK$q&LU0UeW#&-J-pap-~k8fh{n2+JJA#;(cA=9>kPH>~DjE#WG-aN0F zX$$NLkR63IwG_0?9NESBtIFX8!GU3B$!T$rbSz*M{v<)tK#oR0ElS7VB9&lim;5vkHrF~_G< z);0I&#gonmDju)AlN>&~UEY%ms|5B22F&awaV4QFICB0bcF9r4D#^0F!e)tK2=xf0 zJ?>*jSQe1w@`8W+-`s%Sm5guJ$6L2Ie9>KdjRmDw^G$cQPx$!NPvV9Y)>(%-8=KucW)@cV6Qz%8|Am60toY()A;6ZDhHNCEs?lN=zPEfMPH$b@-zxyX8$?~^jJw)bsPgMNKN`x zm|2^i`%l2yz0bEOQgt&h=4-Cf*j8af6Ty3B81{0WI=FWafkpwr8s7qdl$I{a(o^;i z!5K{CufIK>i~QFsKaX$Nz$lc{bAZMD#^4kEOVT_Xp0_yi73k-UcwEPTIluIGN8^O> zGrR+ZO=m2{x~9Les^;w+CCV>DAy8xImsgGn-1&z#S8O!D)SZZ|*BT}Xpe(v{s&s{8 zpJXr9a@}a`XnI(Y^-&e$tlk9hWVqlw>7YZ&@wg?UDf zxei{A>+GDdogJ(X0pm_4Iw@=hn+u$$pP?5I<-yA`9Q?wgZIWOO02aJCx0y4HVTdBk zaqe$imU06fFD8$k0h;ADkAX3|4O_DDs>UkM$YRl7yrRk?E3tPAg`8yzCS`UDE@CGD zF2#fQ6jJYx9=4Wy%67&QZGFL7^X3GS^Ul)(%<(s>*_G@!x@3jnPHl**^vfEVQ%ReS zkNU`BUQ60feO?i&iUcNlhCX5MEtNph79aHN?QStI;*yzHS!WOo^^U2E^)k2^wF2fT zVf1pQ2fF|JB-|8C+Pve(pfADJ$xim5%nCHCUe)fe^xR$(UZCWMAapd}y^uMfRujN8 z1D!r&de9*~;7i=VoGFz6-$ZD`$iwHgbc-pTu;G7lmyo3CpT#K5Z#uJ>T8a})GT=t- zv;#2Y8;8CtZ=QSH(Ch?$qDH9dSp=&%9X|Xj_WiTMxN)S8aAz)7ZB5Q>#_$Iu(Xw{B z{bxHMRbYEGNI&-g=B!9q<} za-49+#GL3zlC2;l=8;Uy#X;v?I$-^EC14yWqN(Yb$?%~7I&A{5$&FYL1`z@+Po#71 zA9$Jo%19%__$mMn`bJ!S1FCmsUUp|x>%m!BSezB}vD8^YQ&r;MGrfj+c==jb(@ew2 zTQ4N$zwfb&6>^GguZFyiq>f7q^Ood#>?=CbVhpbNDxX1k2hI#DqB4qc?@`6qU($qU zzGo%Uu^R6D!)V{dZH)*ugw(<<9X^DpnC$XASVhNMy3AwYW{CH?4c_l16K)n4<^n|X z*kd8T3|5v+c)q3OQ0sB}W>#anMd=axt3Xhkxv{H2k}pG{(uqHASF{v|$pj|HZGZ=5 z;OPDbtOvbtb#sXwPJ^0FDAeqX1 z^YtwS4uFaeumnVj^>Js$Kp=fw{Rgtsq)NA7yL5M|jn4S%o>~hWnN3~Y&g7@v2XD@= zf90cG1ooN>S6XF>Q8pY1$LbezJdc&}&9Agl1*c$#d6w&59eDBS?zq6$wWwFixszuC zTw%7`srdJ(trtktYz_YX49}8LM2Biabo8w0x1!K^Fj^Yj?7rBxXoyGfwpI-Kp z`_ps2^@wfTiv0^YZs@xkPx*esO~gRSU2iXAWlnu544+>9C|jdrE4KjidJLf2pG%y9Hr6dRrJ9J;Y)yf+zzmsG?0@{ zhZS9Q^xPQvrhw1ZfydyUGw7A!II6}Mu-Y9ccjCY{YqTwyrP;ZIFuMTE;sG2`tiJno z5a{OU+Y7IKzK)sP^L~i`4XmdV*f|cEO}Biw^1#NqMZ&KfFO|)zqR)99c?6_Z{PR-2 z1IRE?22;xhraFGdK3gEt4BVA$BRBd(mhF%^heR5$Tr<1SmavLzD`2+2hR3>~zc%ms zHg|(jdHDBTmRR#9kPPm9k{GiXl7CrR_<(;c$DW-f4=ZMhTqgrS()I0`^hmAh%Y=(SuUnU7HSK4v+R-}`@Nz3r!AC9) z-MAAW7mktjV}I?K5v?OhZOlcj7{WVghhf)y&;#*Y-Qda{_hI+CnOtT-JGSr-P+v;9 zudRw1@mkS|5~SRNp`DVo&gVtvfe`V91l}Spq}bsZ)8jlx&7Rx5L~~ zIK1CsAId3kZ$!Ezu>kDq`#N742|JT=2DS8V)0%;5U)&l}@B%t*o>=}ufI!jOW_xna zi<0}8*Z~O84}l5q+r}$zFibSB3xnmA(5G8qj*$aCo_5yHnf14=3EeE{hcq!5=b}s3g3D<9NNK2si0Q&N$c)Kh?3Rz1$wofS@c6%ipk4)BCe|ML2Y;Vr@ zhsoPNKgw_f!l}XKkQ_Pf0Yu%G@Nr?V410I)<09wiyvKc7_9VU!7R9AMd>C#cJ!e5y zh|RC5BO`(YI|6uw*+!V>Qf73rEV3OA6BFB;Wfhw=tdqjOA8A__PZQ>uq$vaS%-c}Q zPvu_$_u-$!WN6wJ$F^(rExwHVZfenNjQI~S_v>kAj@aXg`J|>o4#K11KTTh6II@a!l7PNI?ug77; zWbyM`d8vY+I2}gE>j_j@9TCZM3e>pi(@M(fQbiS7j#I~1CHi$tmqHp7)FEh-AL|HO zPYcl^$LjHd+hF%@txw5}j*F=zU+!YGl~)^V>t`9-d zs`QhH4zCP(QH5k9cO;zm?m2rP$SJn`TliP>mZbM?kE+SMu*o2LU!yIC_}^;Y#AZ^{ z`5inU>BIGoi@Y6vVt;yp;%?DQ1=L85o=`S+hSt_T60E$|<4^$>yx}qZg>{-RCr@y+ zKN?jYEE#8wQ`!VOhzn$3+d4ZSN#n4}ZP`@*;t6Sed&JaxI$d^!;_tu?fTZ>3qoWOC z%3$&Hg{~ZXq(O%1omDK4BVSgbRz(~r7j17p!iGh+by7iiaMb)ylAM{WPh=&Gg|Yj2 zm7VcE7J-$wMN43o-f1EQB=~>yQ>}pGZ*5yhL&pKC0t#zUlEY(Ie|B6snLbz61iHtN zS}s}WoYo`L`EJ@dwsuZoo-;g-DlNH4cKiJ80yoy)fM&A6ai*K_lLyIk@o*c86~ zUa`S64^E^f9jw>h9 z$lX`4a^@wl9)kEzMQCEFl(%r=`C7}0KAf=PdeyVGjIpAoN_+_J?OI=lKzrZkt@N9N zw!sKoEvzORUbmUt53fPU7FLk(TsnG0^RDIJKSpvbwmja<3ck&e`tp2+o3Cs79~+7m z4G^#S3}0LqN%Z>B0ZTbl3q02!=&uB)1)s?iZ;cMIRF}G{5B#-%7JzjjXS9HO3mYMi zU{(lQ8kJzktx7*@7U8iIo(&setmt&9k>g9^%#4Xeu~h!;;h-@Kxbrl5e$9_uF0#vG z52B2L`cN6e=a&2{PKQex^xRM0iSQb`fC^CNf>CG_bUwd{5J*k3Fr^#CwGwx4##(E$ z$6O3%EChs#n-B1%DFQ`6>XU=Ix(FxbS_2DQ)Qve z$JMcJ%dnf5K2c-b!Dy4du^``WtJQIaS7&3-fipaA?fmlkf`;$%BB(4kJf$|gGhS$H zEzIsBX#~~;C-_{uB>KL#Js{M2(bb&RuAB^;u1b8O{{&Lo+ew&HqR@3tV(K!*Ow3!p zE|GFSezhX&PBy@25N{;X}5W!bQ??^6?QK;7iRV)uf*TZj{DZ6+FYrO8R z6ncDcpiW#viIFI*zcaK!3nsfiY5gCLD%!6bO1b3Ig4}!~GAYbcp~F0_{|yqHN6W{R z7d*^hr5yecG53rnOj8B6rAKAuDVvA32RGb(R*WoxNg+_~@P>*uhj~n~s`86QBXFXS zZ-L+5TZF245BYcHYeIkW$JBmj2~W}IJffWw1JNd%(u}~C!Z}xFsyQ1^3@{CW8tY5q zAXzB<&adqXrO#Cm7ATso=kxllJx9Cziv;i za|PT_|5cWuCW>leZ60(|P}rpUbgj? zPRCSGKTtk$vPx0hYcCkY6}n6(^&ij5N#9XnT}UNh%@B%emlTg;*fJepE0fm+4&;(e zcoKWYxj0-odvM#nS;@fif#^P1!G@g&72}G#M6c2ure!~A{dJI;@4BPCUxSvJ#Za&f zD4DGk#w#6f@VX_QLbr;){*-m#uGC0Mn#<4){Q+adU+Y2K_~M@#@+KYIlzI_7rnt6S z48L2YxYc4@04q-Fk~z3IUQ~l-M(lJ4)2IS{`F3Xq;1kwdWB5GWVvA0@BZcpe7w*c@ z)Q2&Ydvu4kYB|?~((%l$lQ2=G`5(-TE>|80a62#lWc$Q{>o=&jF1ZCMwc2o3snLkl z(L>oJP+fxed8s9~A?>im>D%EtylE;z1OE87R2 zm3|{y5+IJ7gKmLcIq(}X4UPQMlJh;bV`foZaxT+TzP3NHCM74AKq%&1KMAcD=y*1% z-q-rgA5R!N8LmA#Kd_%)*ZpZTBx6tQb)3aKFpeRf`EGlF1-)ZF1|}=-44DnhT`oCfP?_uQJQk-tZ@|y)6KRr|rFC=hTx?JcOPb9?Q^n{zo^G^ z`IDRm5iPVQ7oh>0XO(^-$LaLUOR%FdB5ah=i%s^!iy*14P4Hd_*WADsQYaoAJvGPh z?~ksn7)?FYFPu)ks06E6xna;$*FYrxfz$|OUl>dBu&7_IQvsmThh%cyN5D^VyY`H{ zKd?pRTCq3+;ZTh$U?JtZLcWFlUY$bwIbSMw?x!KgI8%%B(hIdrIw0j5b2{xCU=$G7 zfzAx=$@xYtsS0B-xT(}A)LTIvB?G*XusY8ea0~!Wo_6JY=n0(LBEnYOYp;L<9z8`w zj7bXo{Ghqa@S;4Xvhh(A+P(;FH$Bqz80k->lxKg?_V*fB^jc59flIHYXU-cl7u-7M z-I+3kFQ+u}LxxHzK%PIlY z5J~HHW2eK?>X)y7V%yxY^rdwuIfn_%-XaYn1Qpx1BRIQW8|A~WeKcBx3nh}XRa2{Z zJ5oC(RWo`#(^qu4>bbSx1Pb?_y|a7Sx>e!e)JMGb-lG7UtYVGT&TFn8zIj`cbVWi< zE!_cixLuG><+1t{(8c5q_$mt`SFtRA12nL+3W^d_mK; z-bpj?n`0~18r3` zlJW~GSYPjBM4l#gmLhoy5P;x57M)N-uEz^Kr1R(@-<`l6=p}@T15$syO{S zp4Dz7rLVxv`@^;PP$v6ZuP0bg=$z_BCYZDw(8+rZT_B&2{XOL;0vu-cKEc01Gtmsp za#lm<+6|RjOrCvDbm$!o%T@tx>MeF%tJEBe*hTj`BMda3KS)>RME0026bfL z>CyTJ28-=Lr-J7>y0$?rM>Y)Y0hU@*x^He5psSKYmwF2r+I612*ELVn0YVcfbuw8c zGakoxeeYun84}ybS0pm zCv7IruEcR4MxgUkNsy}8Nd{#W^Y>J+t6sqysTo19rt<-NzxfJd&7|@OK3N1WMC%Ny zMc?hw$)#P`Q&N7*@BUQ183`}(%BID~fujdU;w@f*bjYdpz`e)jE5`=pOU9hpEN2i9 z;Ha-ZcVqID(#;Tum5bAjWnO=B^72JyL*E=k$(Jn(tEBJ#iLNcTkN6@RyFG2@9i&!m zjdw0`hR)AWuzo#~I2;E~1`H4N*a zPoS{MXnDrC%D&3beZ}}yBwVzn*?#7i;Ny#&XjQSXv%RJ}RpE{n2TSaBe!>iSb528X zcwhnvHo@lE838RR|LewfqNY9w*oZ;ScP4vWHB@@(3}LA}qqagMootCY7@#+I&zoKz z`7SuZNP)VkVGS^eiv?GO0mhS>gUlY{3zzw6;NZ&%9QN$z&m}yFnMCr%F>;o8g{dfG z-xcosp6kz*)vUc9Wt%ZAZ4q93Gpnveu zjA>&%(-G7y)zevq4YKf@n8>e}OGxy6PfWZ@6se{qItx4DgaKom6y5}agsmF^Pz_mV z^+1|;&3n(-J4hJHtQ-9TWi6OZL;a%9PiCp}`?Pmh)vs75;7~|n0KPfbw}21L$@GrJ z2*zQgs;IQ0S$16sMaiL?Lvzo*Sy}+zriQ*Thg7~!JFr*sD`UQg$x7ckBYSKxO^(Ju z=%n^uq-DNsQL00Gs?3u+z&;~m^7AbKcCRGJ#S3VL3jP_Kl#I#sBEFB2f*In zJ?znnm_|j7B?BcX`Cl#jQ@&n(QemmGFNxr|f`_Y+rutJqRQ+5s{^dmx|C7w|(W-mr z(!YT0gwd(KBAkcn{?S*tKmWUlf!*Pc55B>8V|>J!WNY^q?jgJn4xU*c=J-OR>1$02 zVKc{ukLx7B@5zw9- zz(j$Bhq&h*nD_6I-nI_3sqkx-ul>O>%*vCTtaNSnRR6euwzdGQjLV_!R2+__hDD2~ zbstjXkh=V*Ht~}B#n?^f|Etk!c6H${Cvih94;?iBUIV%uTixpixN@6wkQm2aR=qIv zh}esrRF*dlJyd!2{cmb#La>ci;=Qxlfp{wkfSF*{0NoS9zgJm8cNo#GUKy!SPAz=* zIazL%pcR7CT!@2x>C)PXLs@cXWm!FH6AFT*9<&3!D3s~Ho)Nx_I9SDq{+)Y2NMccF zt6ooT@ukl#JY2x3nLN9_0k#>5*RX)1bFuQPzi4*+?x!!$8<$hbH9C%w^;}dt)U)vb@ zGuI?;n!5C)I#(*y$bg zAxlZKN%!(J<{oZs{@)Ev+P^L_d3;^_bk%04SMalkMX{U+_jFik-j0q#I5-I_Yn`@{ zCvhy}HF+W8)qiRAN_UQB#fRKQR4u@jxggh|TLw=h^O^{jJLj97{%FQ?$vlX|xOP8s z?S5)uI`Amlxtbg{tfOJ>L$=16*O>WmSBqdXI{TZb$Ka3x%LNz*kTu~XGrC!0JvpXN zlUX?{**x_0@^*{$q1NR0M2YcZf`=5Sqp71W*W&@Kt)Q|EluA&l?XKiSa% zI0slDwfsjuzry^d?OGBJmH%xs^01J{#bk)1uIb2c!qa1^vUqb8<^If#DIt}o|1^>| zJ5YEm z(m&E_e>X_7e`LQ5yW=bSk6*etb~s;oCtxoNl&wj(UJV=0E6N6oXBh3)o^$fOpnh;< z!CRDc#)-m)Cs%(Sfl1_Mef->0TM<&W)^SgH;)W(SsE zb2x;|AZTp&EB%5!pK?tld2X*L=Sv?wc>uJf9nKbaS=QWtjzB}knBAj0U=q4A&=A{_ zqpU{w<=<_~%c3IO_{ctsm&z)J&J$TD{R4rvEglw3va~2>B1O{`fDrj_hbfj7P^PlK z7?&fpbO@1geamgS`B-a%P^_4nA<|*Ux1W})Zzgdm=FuT8e6ms90- zdr3cmN0_CUJ_Sm@d?&7)Qlwtb-tI~ z7IDx|l}hWpUxw~{gwB2Jj&bDrc7)dv8#CMMNuZcech?VeTq%%7txROFm{C=Y&7p4pqn0;p!{rq;d^QPiiZDyGACj9_W$n=ybttmsuyiuQk!wk_KUsHT^mlFAFPL zn~(a}n3)(9^o<0y9`nE??#rW{uYORWmLC#e|MmKQWHkij5Y=6CO=$|73f6kF$%=9& z$78iDfZPVXa)dPBs7;1Qeoqdj*U@}z$Pvyop`;PJn<~Sryw06Sbx&WON=p4s6neg- zaFNmx~=VC%VYW+*wa$)Vh8sKj#noEX8hLnyQ< zY+p_h9|BaPf3Wrd`^9##oyC3|alYd_x8?MY95E%l0!T)ip;yM(Zm3+(3OKQ($1d=5 zm|Q^ezc)YaPibZu6_?wI0VPZI<7U`Jjjk}zXqQ~<08k(t+V(JMA?=i^6uU8{SLuh& zY}iTi{Nj|}YI9(Dqfo>1WNc_|I2ZutFU&MUu_o?$$C7TfJLsb^9)%uLBZ+n*TAL{x zLQQn7`p*_?I~@bf!Qara#uH$pY;HGcX>V1mO><%Q7&0ma{$-T@5nlaYDKWO&I<3h_i8itQkKc&rhXT`^Y z@1u1_J2AUf9cOp5x6@s43(53M04z8IKRf96;a7b7gQi5;1rrT$ssC^&UE*dZ@m>|jzJ%` zNR3QPTg2*Aw*%~#LyhVtz#xvwg}I&H(Uhuw9v1g4)keE>G16fMgY~B8#l7#|00;W% z%jZIdx!NS~LVOt>c^!#Z`N>FXrK|@KVQ?gU6QK0!t57tn4R6-kp{4GK1NmHT^CdNe zBu6kSzp%M`(*ZW$8H#rN^G@Zrz-)@~)wW*3tdw#ygIDc_y#?ILx*GGZDe+=fa$P(WRCr{ z)~#75klH!}DWH-hZvS*H9NRKbn+bquMH0;?Pyy_;@wNoYibt7XhX#HRqKXTQH^oWi zvx05J({iwv@wEr1?0<-PUuEjo!HEj31}|$osAyeOGlf9ipW%xIf1J)i><86U(#%=N z>5=t#nuO}ShDy}|V_$*_7*S0R(9?eeV7%5-tI{LE7N+*JHXjWB+r%g_llY7(R#fbS z%c)44z^byzC^FEuBsvEUVICph->xw8GD?vWmgT%Z0);&}BEw5E!q{sXI*89rk#rd^ zs$OS?-*6o%_*WywAUqHw54ZBXdVK1=fp&Y8;g5uaJ#U`qCiGX>?**I)W;xddN#mbGj_kR6t*ZIu6)8If3|)g zy`+!y(J3+A6*gmQsV_R(=p&wZv{r(x^ecT=8M<+e&0C-uCb9g7zJ3zrwcHVM>-9RO zt{m9wdU{h$cW!Jb_|Cqw8qF3t+ee?T<1qGOGvFNANmZ1UkNE4krkqMl*7EGt&CC9h zMEj5P@$NS_J|@tyAMP+)CtSh+X3NHCLoctmuO~-Lj6aBp^wJ73bR*^kO5FQ$vUf1h zv5oKHM5oowCJv{vn+h~J(B+N4~>lx%p=Y*4qTtR&HcjC>K z{Ik>X1|b=SwjWg6mu!6W6goG{7}`=2IsgULm^dUWGWR}7ShH$+H3zg>)pb_jkb(zh zE63V4zo;BQan29EY+i$ZNq>k(%g-^5zk7iMJGA@_BEU4CLf_)zl}5D5G%N3)=M?+v z!xlL`%0MIQ9M|@7BcP)60MA*h`y}0iYISx+|k!@PVXv?n0UJI7~O~CP1 z(|wNWhaE!I8@Q5s-c48q6WvFLWXMX~0j{Bj!A-xI>rE|nS>BTQ=)}R(;@n|(WW!-N z`4eV;$Fy!)`jR80eT5a4l<_S&)SPZr&o^ouW<7~cTKD1>?=g? zPA&4WLxMIEj%t(YJEpJ3=1k0v?3o&TPPo1S)i|qP3k~JkQqGe1X%{-ce&q!h#z$7dZq!G=ka~U=NGAp~-m5 zKLgh@H zN0V;b`+Z|z5qsn-#9Ud#G}$JyRepf6L|>lh{t?makiN-5slRE093vNTF-1Tct$7C8 zk#q8U3$wDKclPz^8Mg|5r|4{k$lM^3YF_wzc9xzReraqi^LEZ=uTI9rte*0mO(N6E z{E1&e%fW)yGWf`X$kUerxRX>*sf`a_-^bxO03EkAHi&!A{GJl4pq#A_ThO`XoQ49r z;hj7`Dw0x394gt?BJh+A)39IdmyY=T+1rA10Dvl>E&B9x*|zZC#eN(6+(~!A%ABt( z85DHnI{9Lf`$}z=B6P zJ^#+%C8T!*(X9VxAN4o^Js?XQNZh$=1!gJGk>o{KPOgx^vE!!?MPq>B>{%kHxiho} zHkvKe+RLWs0aQBPd9mAKS{T;+7Ktf)BubN{Q&4GDA0PMl;tchVKwKv$f?iAE{v2xY zZgTlhsJ8kv50}br3j>?x$HDGg+v{=>L4OP3{`OMCQgDgilZ*UmpS6T?Ih}k-b6w@M9ZUpuW%%i!GmpBkT#2WrHLS6L3YH76o?Zd?ov? zm`c5x{qK9n$S=@~;eW>UlNuLvqTd)^r-~43){=M>Wsmql8=?X5JCop-J(uJ6CT1Pg zUJ}fg?(84ft`hO{!l1Y5Oy@rB!R9=ZbSWS1ND86EwA41iar!q=E3T?v(dlr;X93O{ zIa$u2hzO{KT|j2PTWFh1Xb*r>2DVjT`+axImMhpJj`k4$d$;2BiH6FXXl)9=UaF&CkH|r6z zta67#saV+$X|;dXg$jaM5lESEav1HN&nFNu z4s%W}Z9lIl!hv1+fK;z7!#t{Gp)n;}i%MODt+CwY6Km}b8T?Oi%2gNkHOwQ8iMGme`@&V##ci`++^RH?M0G^DVQ2sVYo@ z1;M?^xq>vjTm7fQ-zWH7$_md{gPzLmZO?iImZ4XnLCD7%>tEJ=B2c%od^ zqZMb)2z(JVh|e7yIj#RKJoBq$W0juo(f>CVt^F8kJ|a-L){*kjuO_VYA@$VNF0$Hm zhoL1oJvuVP$EDICM0?4aq%&C*_N11D>^qY9eS)gB&sjY2hBsB2^z@qQ@!pTnS z9^2<1a4Z&d;vCqjxfb}0`Zq8{!F<*%M^yQZ@->l5J|mOESIJKa(T87B$UP|#)$AUL z<1k{WdLYTufKUXA$vYHMkfS;yyXh2tZ}g$Vnw_G9+xj2)a`Oj?+e{2EwC4F z33rL^b}sSs=g9>gATL9HAWFRCqkM6QErWm+Pl>FPSDt-&sb4!RV@oD`dr5dgX`$`= z`?WT3zw)aC7Tfe#9YxK@oUV0+P(E_;iQ;52OS|9HlL{Yz;QOeeh90KYjEb-HZ{h^tX{KvcJPEq z27eb1;6)xTk_*jW__ECWwG8Dh8{oR*KKKSoL5s*re$CBj(ki&ee9vDMlyZZ4SF>B| zEg%QubiUSNk>XLZ=TcCWZ`JWt&hdZnVZ7XXgEY67_eyvIvvj0tzmXuFO8Q&S>v1Nx z>TxxAKQ{{xv*FsFFZ~mDGW@Bk+Vx2}RqM1PUE)#n1RUVi2XPISA1c`sQ`Cdh6S(A$ z&d#fFR+V1t4%*B5b=tJWs$a-#d+Lz65%0#e4A{>tOF0 zGYN-%MJrtZg$w3lgHEVU!-rv>2?qY&Q~T#2>4a5%*m}IG9x7IJE@>z*M+#ZK^V(_iPl| zsByWs?Xy5XE7$6a*hT`Hs^HV)pa_r5X4?aw5s^`l2W<{lx%a_~1v6mwzwb!A=0Hxm z@$sOR;>O8}O|huJ_i>n~P-1~nXUQSC1|crS1lu%t%%rNzFC;{CcYG2c;eZ~5Q&MTCr86$5a+F6D6oyoVZjVq>0 zCk;d2<{|ivFLatx+WUmvHYCes9xB2$H7bMllXaK;YfCzE{dQB|M565%)yyLD^QHYo zWkFvzQ4bxXsayb=CFee3yIjdkGXrSX3Se$_-e=WCp#O+yhrT2<(;B!xz~tV$1SJnM z&a<<_ls&3905hOQ91kAazvB#lb2!n$tYT-O?^buYY8t|>*;NHegFj`lJP;JqP^M$iQoE8RQ%J7r)&Ky&&c!&5Mu zc{)gQKsW!XK*|Pd=B6GgzZ}!h;G&*Cd{kP^RR)e!-pT^{GJ*UQU(E+!I&-2QJN`$c zo*^O7Sd6y{)0#L41&?eZ+fM$mNoAfh)-5BTR z&JqHZY&VIsJ=h`S{9_V*)$ZpV3F5K#72Ov?TVR$+#c<-@5*|i8HqvjMl#Z z#0G7V9Cb>OZ1OPt#sqtY%aG?>J5Yy`y{F)+1<(6TC%`dvIG9j*^`FW#>cjbg@q82s zRVF7ENT_3Kwazd7K7lwY-n2=4VT%=|-RgGUx(F>b@-`DJ&UI>W*BB`SCp)wX^*&e* z=oX=~(%UoE)h)!Y=>Zxo<^+ZpxvqB_A@ywn)8;BA{qJJ{BvJ3CZg2jOPUqWZGIz0P zu#BO3p_X~sb*+*|w+*M(p%urhq9Rr)R3dCG=XlC3e&tx5cd?;Qa{eDl*BuY_|Hnh9 zvl2&Eq^u)C_D)hF!a3v4%8qQZR}zVca`uRDX7=9Mdv7w%JbSO-yYKJcdOUjcxcBG% zdcR)J^&(1-_A-OtZIr^h&DsB1jv?FdHv~69wFvwCVL~I_8|uD1;wz2}Ps~Tir|7e_ z!50t67viHC#ni3fBo1H1wS&D~Kj7}I$u9q?xw&B=f`b)>v}=~XO&j}pKcg|iZC#d$ zlVPT-L#=V}7cVh9^ZO_~TTN>9C8ZT?*OkUws4YRMAtU54S<|lr?LPC)!Yo>aVaNRc zXQ!3NECnIr1^3KK%0(j*V>j_N_q69y5m4|8A^>%8DlniU=}ww$A1Rx0_Rs}0(dkye zpKk%BkfWka{J#=DRH(oOQ7Jm|GO4a{b0dqFK8la9yoR$HFG|H9`*saHraL#+=tX&r zDA$pU+3j081X2IUwLARd{;)@~+xrLn*bUUcEpMjM50P7w)3?zin22B(A;$wmUvEw+ z*j!tBcmf`(ks(K|RrM`{>%$Gu7o|$d&W3Cj4@n|QW#gvR`{Qe|Od2sLtqmhC4g{cM6 z5XIHV2ybF54b+$BdVwN!|HgX(w*wfZTrq<(in~v(wQe{-$!BsGM4+eMIV#UILWqT!PaTu?ys4tTo#niS|le^qd0GH$~uYtbauTA@)^( zf?c<&_v634+W)$~tLn#NJ{=p`xIvMhV1!-TzjLSDiR!3&ZQp_&h)++qt|PXlhw`k% z?HP8d0K~>K<7a=1vHV;4+RBn%%0XkzP#z?KjyOy({MQ%+Tl78Xo~Q6hS9IFZT`L6H zG@)|W+%TGne=qM);6q>>cOr7{Fbr7HgSqw>U^HrU1n&mjPM z7&n-oN}3!I2%i!x84gkr3MhxnMwH}x(15?IF!<#Hms0d0-0JGschNr|Wbbn)onPv-@+GB3cM86vP1+GNM@sbW>>7c2EkBSc^#QmEUlw- z#BA`hN6F#c>rYwRGucCBG*83C9m+=Skm>v1BWs@VYGg4HZm%oaGVhpU{;Qm3Pk+Ci z+hqnjCFfn!=Er`N*@NC<@s6my*s#`*+N!%@J}t9l(vL4|C+|7oTimE*QsMnOY&{!&98$#SCBnc>|&kPe6D2n&l-~$y4|pSK&q9j$-OXvNpZbz~myH z53nQSOoxZ(aWhmo1HC}gmE|R-83?&!uGNms$=P@^zK+?*N^6Ps3tS7Pf)^ zoxd*p*!ufGgcY~vp@K2@!oDVtu?N>x0=!yKxU%S#c%8U+EhkL{F+;IZflY|z(XIRG zZJMU`8uOe@>vDf@N%Lu(amy~uuOmlUI<3T1pk>ht5`dEb_BiV-zd18Q7|z2=btauY zlJ94%C&bAh@-0eRi7*a!>0vUrlK<(skyWXN6i}1X&F9QGJ@h;<*F}6`UlqMzjt8B) zv=GrNhp}ubFVfE#cV1SG1ZGw1Kyw*Q&?sbits`$Hd0a!*xXLB}u%Yeib1?v=_0B1W zU*VZtLya%7N7Ade7>i#mCIyV2d-BLj`?m1u!(>R9os`pmLsw10t3%^=1sEm2kHgRO zR(rMQt@mr64d<3Mh%l6X_}Zeof-J%8sfKbII&4Kiy$8fmQfJc%^%A(ei~S^JCZd z@+L=I=+7$Ewlf2U{L0= zR)aUL);aGnYf+%;G=YslXqrnj_PA#5^!%p2-ngn1UeF}-$3yOgHYQ!bl~MsF9`qGX zh+bz0{5#~+Y>vh5|uNc)ujZPt$LR}bzdEJ=3iK=UNGT&#{+hn7ah zJOy}3LycQbUPw<4r0*<^Mau3rhCMg^W5yVZwHX^&#b|R&sZplUx27pA zdu~Ryn5U03cbwW`aUT7dG%lKb{b1KJ|KnDoAxf5n?K|WZnBQtJa!a(}Zk8*x-e>3&Y|Md^0uJnOKn{$#Os|dBA5Ig$H@wS-Z(?257S_V`uXJNceDF(wf#E-=(%A$nUiNVH-pok<#Qb#OFOT%V6pg!6Ns)Qq z!>(g4Hnf(Lzp(pD@l8sd@}se~Jl$9^xG{tb+`0KZ(_p}$&~P`s74+^cq!!K$!orAm z6YBKKF@3$#AUAVdvs_V~aw-N`r0{FrX=gN2qBiq6Nj}X*pcfR+#bBUdwzKn(>PtXK z!;*I0Vc$D_7|DQ0zuf|}U8pxdRVH#9;T0gAcl9?v2083xtULuT9INvAY~A9hXt$LB zq9>+2Wju#ODOs`VHp3keAGLtTAU9p1Yl7@eeDQ3<9@JRd6-V=jyN8CgseGw;L=Rl*+-sf7RqtSiqI6KTp|v~QZ)=FaQVL3fd+Ta8 z1{%qETau*pa%*S0fWul5a!5u@;kH!X4k;FlzLT zHmN4|y9vhi4(|8F#uAQD`G@YP-ith?u0MZ}0KMkKG=yyz2iCK$ zfE79Gf^1DgCr5o#?TM*%wMc}Ald}eo!lQ_s)hzOq-e!X&(v*yl^pzs~G1-cxaEiW>!Zp2(49I;8xKV=$d1N965>Y5Re z!AjWo5`Y)JLzBF%b~Ms>&kGa{ShLl9&Z52}gyyN1EZP=Yf+-GT%q0B`cx{jSN(Ace zdV$ck8`db&^4YK!c%`qnyIDvB+@UITf3UDz$>>K~c)xmFNIVu|A-fc%9tV4;AivwC zWTx??Q2(ZbEp)5MqVNT`g&A8ZWc>r@JX&X7`XlSUyUB5ApBl$lcDsJkEj=jNLZV@C z5&ln{m0T%jTS54b9!=5X%ZJg5WDY^}Pggw5`J=P#2`U0CfrB8-%7OXE*R8k>x!5=6 z-&T~Ao0g!-!SAt z;T!zm}#WEpShT<}z-AVH_c9(Ytm+}n@sp*=H) zbS5sQlIR)4SzO{TnKw)5*b%tBLB+2oiFu5xju1GTrQ{?Xo3O4x=P#cHCtx&FdU?WK z9DC_DbjXq{x4SuH4}ZGAvjBSg)!B?qB+n#Pr~OW^PB6pncn?X%&*Yn#G1l-@KI254 zU={pIy!O^UG)$V|EvJzHG;9QeAFW5o_Dn2_CC-A?$!9hkOaBDPw(re3#ZkYcQK%AU z&#qx&wx0WGmTKc!k_gb-glMLiuPNQC81-X~s>nC8(Bu@jqE~xAFw50~g)s)F;Wzi_ zn*G;;%fbpAQ6`uVw~yFwRUt@Rpybj`ilcbiWP}<2fZWA(OH}lwIbR{CIx?`gwm$}< zNHcZKA^ee^WfSy~<>ex!kJf)hE2Vp|_u|&6G`0-hTVe3J3Zw_?B_B=kf#<{79>hpU zejU;Jj`NsbiI(^Vz``*XJe7o_R#e~{QE|F3C*|ksFg-pT;ZN6LzqT}>U^|OV3{ago zIl>>DrtFIDJ=OR1+8kUcZ5&_oq9iXS^P%0oz#$BQLXpnq;9V=@*eB0}ckk&-Ff+j> zplRlZkBp;Lh8a~#-ck;I+G zZ@T-|bzgqgYqwZ~4tl^T&s+dbDPR`-R;sOO9Ss_%uRYF%H4u<(*T&%bBvF4Xo_EF| z<(EBl7gHe)STW-*cD3X6k4xFcUJiW8V;Rq8rom95?GyNQc26XGIrLai9W>P6$lmHF zoX8I>0Gsscz?Gq24_tSGl`!u^*e?6fm{~*V4O48TIZ+8_jj;%rnm+gZ zzG3whW1K~f4fyl>`q0O+l%61|61#%B#sK87QXNUA=|;X<+z+)X2!rw)gBBC+zzW}X zt=m$7sS1qFrTx0mb2CQg#lwx#NL?}9&7Q{$g4BD}E==e%YGF>fjm)RL1?$gE66w_l zEfeLxY5b%eF?cVy>+dzJD#X(H9j*IK7kOryRNSbz|C3AB)0h(yXxw>bm<8wULWQi zY}&sn#&A#P``LX^wGM#pTO3_s>t*3j@TOr%jQq4NqYQ35>wcP0f0m5>oS92h`=nId z11voYEB?>E+{tB)30|z$TH~F&P_FW2e*7w|3Lr{pd`*dS-wb6E%xDXeKpw;vEx9wC z2PnSho9P^wM~e+LtFt;VZ;JO&)4fEa(x1{aRlNe2=h&`Ho(`bb z#2?yTx0cTeS6@OHJ$tPu5+3ePAq_LH=~y^MW*Kvpnk7yHeI<{=p9VA>{JY~{c&Y<{ zvcK;MNM-vcB_gVn2no)LXIKD-&=+-?$Qw(&T_Js>CS|hG*&l2jw-k2ixrjM$}pK{f4?)s3cQnb4D`*-yVQ&{|P3foT+|6Z*^i`>rS#u93!&6h@~L5Ip7 z=T1-1nguz?V!KjY;AjzwjthmMJXmYO`a8-uA}o5?%AvMp7^A~wa05JDjtuP3i%@q+ zym6%87i-mLXRIbFv@))V*HXS9(P)#^{Ar`{G>as#C#O%4`yjqU-^CgGmV1#wr|M2> z#K|Ztffk8FbX&8R>Z6%6?%zXp08%)24+O_CrW?_(Y31-IQy7=kOs#uD8atyY%67OG zny}8Q2o)I40ErINF+r|>ls0mfH;}DIcJ2Op?^Octx0XJUVMqaR`rkx3jGaaVO7{LV z9rwdieGWcPhvuZ9|GKhEdM-@O$0@yNfuhrM+AcwE^CQ$PNf|t4rX#s41lmU7bVT(+ zI1Q63<#!~vJ}%KP+v)PB!x2BJ&|M%mSK88xI-Y~b1}f&tJf6Q0>T}6?&8)h4Xixa@(wt4x($Y;>euHX!Kq^_XA_T*3lM3WEaMGQ3t|AJ9vt=d+e zYi_>M*=%!jbF>l1<*gp zTMG^Q3-LBHb&l>r5q21o6=6(X?Uy`>uI`O>P-S!DjSdu{0(Y(AR;|SIKH#XaGYj0h zS;{d9nH7Zp)$M!>s+Bw2J6w-Fh-OeXeyH*m2G1ng?RJjOXlxhUc1CPhg^Y##azq(p z6E#|>+=4b5$Xd17*vYU=aI`Yi5uRw2i5c_8xh=bM7UVH}$JqGXe$GO{aZg`CXw<5dY&!k23u0;=r(fS#lB3hWRu23bso?D|a?V=- zt3tm3jcQrsl$a9u3BRb4#Xgpzvq~Zl359V!w&*MJK<(x<#d~AY$$)DN z9{B7X;)N94ggpxM%#nS<`yLG?6o9z*OjuXvNYuzxwavz~4^r6D7K~}qi$r$?GQRA| z?+3gI{h0sEFI~Aj*zeTY-ukMqZ*^sO5dHgzMNjQ(qe$1yPcj7m0Wjx6f>uLEhG#Qx zzafWRT|hKetm-s*${vN_IFNJI0`d9b<=H*EbLl^|2WJ2?OWR7q51LH#qWKecHg-B9 zKUL-1?%~&4AA#eD*}BnF43O*caNDA!9ys%XYLLx59gxSB)%;n_K0aT|&fh-4Tu9m0 zf0qRd8(okpUp7@hpB*(09(5%fRN`WG3fB>Bz(5qiZqt~~%j8fa+OL3F{fsu#f(ZUA zR0SbG-gPg$9ZsLmD5lU3lnVOwQVpwSS`qtP72-uOvS`1t9RKPj2LZjvppgu(yL`9j zVDR@3SBpTu)_iXRj3GiNZd6B)7uP%Udi;P&=yO{Y`J$h*zjdI*^}uo^Xf~UxIyC0w z=(3y@tej{l=>qDbxuoDC$#zYU1ONk>a^S7O?8~2VuP8&;kv~XRk+c%rDPsU#5jCEr z`Fb{b!zDVz(~BuHqUdv%GtgwR@y!@C^uhhlQF9ZJ$P6zQ$R<%?P%iPKrO@c2yKa)x zXqfY%GW;L2&KJjgKIc(zH7KX&wR6^Qx8GsYRl3VqC4$S2$qn0yFI%g8FY#EvJgHqP z14rCW3f#_zGiMFo8{j*6^}shT>cuSDqnzq8JfGJZk)YpUfuWc%@Fh^ucy9jjtAxMh z?LpBz8JBRLQ^667u_@bFilf$#Tl z1dvPlrYa%&9ICAMQC)*Ue5y{c?`+7z2Id> z=v1~gr6m5EQ=4qk%mbUXuif$BFmr-?^4+Rv9Xh);*tI6R{*4Y`%9d9zw~f{X?Fz2O z>y-Fd5F=n91cDJDgd@Jdj?OJy?&rCeMSzR7j~LVMUCGuSxlZHTQ+;jZco5_P4400B z3$ypof6b7$iFfWcxE^g^-aq^Kfa{I9NM?@z-&if#s$~z>y+=7BL=n(3jL4e!F z5YK`MnBLWOv?WHzaW}QZzj8Ez$CV5KEy1swjj{#Q+#((-!#FL}Dbjv%VO5WzS4%AftgT@)gJe1IWMZti(<7BN;N{$-602gh0m# z6sA(DzVj>8fWrRu5Ad4#{=?8faFeN_x50xcU%kpIz=Pf%=#`&L-e0u=!k&a$+v)Z? zP`T2-pQzEb5k`AU54|4%0c0~`Bxp;zK+N|D3zfZpZ$r1AfDeBOhB{-a98;cZA1rIu z#xbHEqvhX&{w$prli~>Ur%(Qj8KnHCmDAB~ap~!3bG_2AisBVp!KW8S=rkuEE+pP0 zqrNNmao}zHyC1NwS+dr1NgRe4o&T!7OQ}=3C?tpI=8{xH>@yQCM>gt-k+1KzSzE=; z5THE@bS9tyifp7sRsbv3%s5+HYjyoP_?mf!{Q+O@U?aOV>|&-7QI*qm;Ez%`<+d(S zZQM;GD;}kx1&nsxiM1#*u||E=YJs`{+B7d~?{f+^VmGdg2IPO`?Ad@m_Er)_4OcQs_+3q5Pk3LcX%6 zR-Kb_4U`(gw+!|$_bzaq#^WfF~Ide9MQHt=Zb3{?ey($DK z%l=}K9ERR1u%hEZ7hGu(5q$rGRDL-(z;kfzfoe;ntqz|jZC^7E=4K(4Bajz>-zxl7 z(FIs5#)*rEAp-D1N2bN90@WGlMz-huD$H&dLvWUz!$ZBGC77ih_o-_hdqB#%9OL-6 z5jaM`!^{usXa(BMV5I3_WTvZ$}IQ%)Z=R(oE z4}*$2^L@k6PyC?*?53(D0khEFBy9iW!ca^)xLxZkE-A3ahOfy(MRjl!zf?wkGdsM} zz#p|KXoSF8Yj1hdNw2!y137UnL3dp7P=o)vE&5&_?Jab~Vs=gLVBdO-Jm5FcFX~9{ zAg>Mk#h2$A_iNM0XPMr$ws~;~k7h&pwET|Bu|YzXUVXfT2nJx(Qkk$$d5x3|5V2m! zJg;Pyj(;`$dg^^b7E8`+f$7(VdRQ|<+cIs~jN)|)De1IU7HN?;rr@LYZvDV z+rY)D{B9Q^m?5i+`J1IpekenHHUWZfM9BVybcnaE7u+`zvHQFQ!XR^x`jQHPLujv> z8quP@rb}+s?o6*xC%#IZ2+&EpYjT6vSsaqKv2tr>U%A zeip42G>g1spK`5C*a<7l%jRx`-L8-)VH*)}Kt#cQ6G_DtZmzZyynRmmcyhz|;a=+; zb!=x03Mv)QJY(?sC-Vjp5x6t;Yi+F}Ub)5@sP0biB}UV0g;9z^x61{j& z`ycsi|78vhFTS7n*W64#!~WgpIEZ<4aBV(oy5n>m-32ZuT^R01=;hVRYYdBL1TuaF ziP6=w{JKOj3PJeFl|MRr$0rB02wHMWi89n2RH{9P*^-`Pp4I>#9 z)uj_dq7);Q=8b14LBpb;f4QC|=D?2)%dt%da87gsQjLLDHhSGAv$VGzpf%akBq{9i ziZV6J~v&d{#Cn}MHus9RNg*-F@(&4Q>5eLqbmDybeUk^kye1D<=C=0smAjwW5 zn1%un(vV~7jK_&PHl*PHof=}V{sVJB+Lv0#nyb#jIT@+29<3i~rEArXi0JtqB^FxI zCjrtFh*IU}tg~|^TkU60L2se+N?M_^pUURo)wY}HP`6Z>Lp++4*;VT0W;TTc7)29o z*~cNoN3T5l(Bf66Z#VJDyTxa%$LPJ8TuQqE5%+T|UwgFt22AoL;0C@6j0&jH|9Il{ zo+~<6>0eafj|v29Q~wd7O{GGueGV2}3&i(q?w}>Nd-{w}V=I0DaZ^b~ua!xfyV>}b zf`!oYDQm3xgC6>Upq_nx9KG6ylcY{D*ADAwd>6cz=o!I?B60_^k~Yr9!(oW>MvZS1 zS|>OjlT!bi=E1yc*1r$BR{vOxTRs*IH}NVC&$BlO$$Cyd3&eKQHSl;B=Nu06&ST|h zTYVCROQ{#Yz1|!8QLw17=EJHo+%PLBwf^oajh0>=x{;gzxi#625Q{n^uj8x=>Wp&> zq-8aPrW~%uD1E~It8^!d9Uoqd`c^rTUho?BqUcc2$(xeyVwF@Yn^%C3$*CEGt2$1s zH7&oG6TdVJ$=y$&0AM1~uLmG-<`Q9qSX4MJ2%OY9Yx)LA11~<{88d%-Z1qdQA47fs z6s_;N3P@rc4m)Hh)@q#cCho{4)wuy}Y4INrg?GHskwhYHi>JijM%D>3NT^44%9YHG zt2&j8kU-@YVtCU6#Rj?z_Xo*)m@HKKVWu1vCy_soT>jR6#DRjvM}-lSE&Ed%1=M z0hJhiFxCI`hi4~!Taj%5Bh^Jbj9(!ymxaWZaxt4#Z%xYN_LXj1kmUqWHQMXJW6l#Db3v~sM`E^Or9OUVM3CH25%$pXd z=d7mb)7#-4vBZ!j^-Qw#N-LFH7do>LD+HH{&*UW}IB_#RdW;45BIl)KXb>-~H>60} zXoNq{g~^zHvboeW;WZal5BAlUt?&^Ni)*pMI3=t@_D{CaXnYe+>#URppZwnQDdus! z7V^_7zd$DfrRw+W#duHWkDiM>$#W|LshEp&LHtDm6o+y&Vp{h<1F=K4w!@dkGj2#1 z0Kqzhaswm#JS@TOz+KJGc-6JLp^orq+n-0|Dt_nTD$FTY3tMCGlkg z4P;4KQc#P8Ep-VzW6=0r)u1u|G=e<>!?;o z`M8=DJ|>z-X6q079X%6V6g@KY(e*~Sqn577%nRL7j=>6jW=R$0@8c#(HLpTB5|g~GyzK}bt&r~Sgey&2;*Ora zW4dPZK5Sg`F~mGW-ajZ;v}$=m$w-Eza#2?YB)7Z|3(v1>ymg1D!Xso{bM-Q$U#dcB zDG6Vt-08?*{1QUq;nNcQLP&D|Bp8&4NpS_$La``e<{C&xZbxiOD_^i zL8i;$@CO_>*?ssr?&)$|Uh1b4&KjhY&SQ~8Tb8?mWN9|(&IgfLquXbXVj^1}mI(ei z=CQbVvx4=Oe~(WpDLz`^CF?rh)$2h2mV~R^7`ra13nE) z|8Fb@Jn{)|+*R|`-8nv?**jvDe)mHRPL@XxFLeI<#ibv*T{QogAK6lx>~O@|s^$G% z*4nzb<#}~1Z-yZBQHbeZukwjLbONY~` z-_hC$Y+LIfOdWX7VO_uU&0K~%HUl0dN&{>=h;gPWm4 zl5MtTrvJWL$Xna6Uu#rYSt}+YFmh&QSy+t5^9po!!qwMrO=y1XyWTcc#8UWbM*uo% zV6+6rt{dUR#I%5&9~MJz9j( zM`QNIxD#xzT^{b#%^sOk-+S`m#!2zghn3FlLm6lpe8uZfPz#NmbiY2LE<@aF>s@b+ zd24%-oP)8**}t3{3a__kaQ(CP=S+sf#XUVIcVx!vCXKPG!x4qS$()-RB6rG@{5$S< zMaVh{Df8d+BKIGKw0(%5wA-8Kp*9I0E}uKg>5)B1?=zFYlb>HW>d|%^-@1{pYKM4K zl|6m`??#g`<}PjqNmr~8+hF+G&t3z9N*TCV|Kf792vcdSYeBMtMh(+H{<=ljZ$N4F zk>;t7g2!)SU19#uF+S`u)hV7;12PcenkmJ~V;YjpfQ4 zro1@QmBjT75s`#2PMTL%NPB@=5*I!Eo2`BU{SwT7tg}gSc4^J}6jYU@5zWq8{IaX` zf?VABdef~ltfE@p?)lp5M^~ph+LP}1Q+38g(2_f!F#;8bxHog>-Mz0%b*J64b1(wv zaH*yP!c-T$H++IsAv2E7!mn>m_*rbd1zf&H1rODae*x73)%~FD67o&u zbF9v4?#HtU1EXD+CoheGjtgyJy~&9XdPqgtgo36x;4=x0;k>@UWOW*x|Ct9&Y zO!WA%yZ8yh*_{u$inD%SKtTmsr*c%o#t@=|Tw)EL#=$1t-ZdQ|)IJ9@?In*_;;Fly zT-K?lBz()sixf96%IJ7%f}Z+@*)Jq~^sxu(G@Mc!>*d1^Ud>NmRXw7}3<9gJ&gT6~ zA)ec=E9l|jNg1#PnY@QePfX_A`=s`OVucR#ORcoh>5Ojd9QrpDzHi=@m#Q=6PWk;^ zZRi*w&kTt+CjoBMXwmE;X-jr;uiJI4S?)rTW1QTb&VPD%xI683cO)n%e5`&hXZCkU z3uY-LsdFFjV%}^KnoJRPHJczzQ6++#L)tV#!T1vwt72NVn&eD!&?1cP6l4gcMYeJY zp~|jHT4*7< zR_2*yL$&tBm?+*vR~@mBYKa2RI6mq9k)=Ztp*#sUvzI>*F_rZ1`pO^h?lHv!@pez>MvckAtsn+I7mN7r8vXa{2#KK}p zM3SzZoh@Ot;#__F9fpk;?PEf!Z!owfnmG)gN&uZUny2P~HMC{MH+Y*{IZs!K5;6U7 znxtH?DRER3RN=6n;|TAM~@>#2Kk=0Kuz4Mq|Z7xu;I=^SBE|5HWC`d zSHdjOD7bAjtMntA+^@!T+0OoJ@X8YLJEsRw zG{v?|3)x>JRBzcben200+FdRSTD$5@yVD32(UUOywwJxSHCPQnc*DJ2gcxM%H?q-s zigVV#VXayL{V>tZj3UhWbbVo8XII`|7raetLGIYg^6L`>5DSvba)}J0)O6JFk}*hy zHPc#j{9TzXm>Te1%}YnmbU=1$aL$IXJL4{?7L(J5mkgL0|LV?;oa(v@=qsd;!prl= zG3V1=8Glc?bB-?|`{%);%3GTY_GZ~*qjZE13xm4^u0eJ^ZIyW=%y&$A)jM^HF~xpd zeU2C8W2kx~eL;)^7yw#1`P-F8z$e@;v#q>|YuRi7i6wtE3(w}N3k!?FY@^~Sey8xIj}sBg)k z`YEp7Xd#96IsYvMQ z^pVjXLKRvt93E2H(b!j(C{m1 z3Xc$XQtpocJYbb)vSH-=t0NU)lyQCcz{c^v@}5_3t-Lfps&fVApHb2->^6PQYoH}DuGi?D97)Z zo2kT0A93<&;UiT%yr_`>*Q85#T8dpbzrUKrjdvW)%%+-aF^Kp?Ex=+swh8G2%v!^{>L5Xung`)EwxtMS%#q)j5*9g>9V}%v(39Is~bVSK8x{op@gr;oR z_^+7ulX5G&QQo;8QjYADR=4Zlag2XUNJQP%spHAv{Gf%2sHMm@SJd^gG$4a+LpPx& z&Tv~Kxs5kSFQjLJL}8rFY)0T!@>_FD@y_zZWbdTxzf-O~6hQg}LS1{5f^hj3vK86) z`p8s*@uG4I1To9akM4Zk8anr78tMVo3Qk^ zp`*MkTR{C&)8mXX42{FHq@oRpvy!;YP=}I*y7i1GVox^lb&2I(ba6QHJ&J=-1v~p6 zbphF+LV^vWX5m3(=~wq3!SXxc?bOY2tO?B$_}5Dc9>quVN)kHfwfq}P;Da}cDj&<651Y0nZ)MCla+!U36FKbT#e??;_JhqSV z&YKFaL-jN2%x^8dG)rS04YR@!z6+^@UMbb+_yw1Z4m51qpil(SUM|&EoE2I~hg<&* zzV>AULixy~EQ@TuqXxv)pwHNmIoW?zNd84<{b+?$eO#T_oxfMRUQ-wKu7h6df!5AT zHNT7&v}$wnZ023?9x_W2a@*ELz2T0{+TJrfQ<<-+Pd{F$cEtlmfg^fkdDRh0)}7Cm z3(+61GAx_F&e=8N$@J&1EsF~t$t)$3=gV@3KWJ+1=lBs}Zk+lLuR3b|H}{uYy{_{8 zs4~Ty++YUQ+p!Z-Yz{N{FF%#JgWOCWx1MwFWvKqr7j4nKo^N3n_jTGA^po6qbx*MM z6|iZtv0w+dR{=A9Y7-}7RZ40yfi^99ha9kL#e)8c5d*E?fA=~`r0uE%+$;Q41b47J zlcel{JAek#VNs0R%jsj>LR&QnXd}@&I<0OMO7n@$n^%MuqtmzT8`+0$a~P^b2M@Jh z#YcBlP8&qTFI5urm)_cHfXC-DN=S@i+p%$`0>iBX1`*nXHY_#7TwHy>dKQ&9e%BeF zZ7~W>mtD@+ZJY^y1Xbn3`Mo7SVrk-hi{ z$2_Q&FTt<-%*cdpSZzJ9XmTVZgYy*AQb-h~nqL*>4YXn_-r45>IS1byQb)BvkHB5} z#oY(JU3!R$83O6NNUCtUNKCago9k~U0$zI$lifbH9?i$?G zzzg&7=zXZ&WH^K+{!a^|E%g8ZX3GrZFle)e5lABjX^2M9JOf) z73Ee=aik3EkX$rqgjV^Mqv3Ii>LYN8BLWq2vd2|R%6Zwd&C{lEgGFA9|B;?TTr$@f zcr-s=<9}wIoSEzL>)z9i1qm|xw-TAcda`dU@dB#IbXl1QYld&X^INu)=+SxyYWl=L zr~};5^HylBG${Rf9$sE#pn#u#lru{6UhC~iaq16b+1Ie6;sVf5m+a+K`VX9ZOB&CTSteZp5ng;laF zvF!Q=UUWKBR5Nl&!bvs1VHB^sP}(?I8t`T>r8?kW=I>gB9xj}6^Rxhw7A}$BiKrNN zPi^82^(x+F!)9_jY9||63DF7`_T{N_}vh38g<=255VDMZL zF$90i?MmLLyf|)+m~)^mBN3(ZtOdAC&&O4%M!qKGzF0g4+2Vmml0NJLIlXPg`;eT{ z$xUgC@bH*>Z0pA1h%8?duOa)hqQ|YmU+xmbd;3N+XL;sQcL#975H$bW(iGZ%Rk+^&g&Ow%xjOE}y(d?*C_)Ldk>KA``tK&r)Mg zZ?cSso4Qp~_gsGCXLvWQ(+#OB|C#=xc!l1a0p@@+ambPA1bnL3q&2BXpgB0Lw6|%6 zb#Tg4iINAGrA&SAZ;bZI-G8u#pA*r(y;GjXx>9^|RXc-%ib9$aa=}c|6PbR4*YU`r z5TvNY5$GJ#XO?axe|qQ7imbfKUzCmyXqDFAl^hZumEEYTyr|qJNdgSS+nbB8xjDFeWog`?Dzm8R8{Fu#oYfU&2cPEv3T{(+QRC?%I3ASh3Z5Hl3>RnPm6_9TWd>eeWUq8{#N17v0!W4b;N;CFrPmCG1Y)W!9m1?Lo4&N9*Y&NfEMxpi zX)L}+-EwxsJe#T~VdVZ)trp=L+Vf8G?qKhr@ls!YS4Mf6wn$2}VY`}U+Lx#KU7v$7x z!YkJ_&z&yoxE|)3c8Td?5I*8{2S4wWN_d*l*st_8k*guhZ`VwHGp$0u2bC|>hEgts zQ)kUeHH|$|(OX^u4)`lKhhN>;9nr3B&j@8AkQ?bb^Ac!slv{c-wY;`=dy;}lFLcBze3liIK6F&W}8 z?jZwW;9G#oio;Mh|CwUbQv~2 zNqZyOU$;#JMQWpMxrri0&aoWkZiUj zLy;!h?#qb+jXN|sZl`LtaChnODELg#nYb3s0e>1wONJHghuPmlNb_}7 zH2_ijVuE6QvJ&u$cjAoivCoW9kIpfPVvw?*!{h94ln1jmaQBUAKB-vC;(2Ti`Z9&! zZ5ExC#-LO29dhNmW1xbst)yFoD*3U|#5*Jw59G^l_SUxROlJp%LD4a!c6^an54=T| zYrouoBakM?Q+Zt3ud<||%&(N0MBU5HrUABE)%Wc+3a{^Fz6PxZ3eMPSD^+RE!y5H< z`bWx)@D?wg^kSjWM62 zixi5T8nOyS;%fvq9l&)_t)<%4qx{w2P=kM)&w18)=pdP1zzP*RNY^KdI$F>W;*dLs zx;wUHz~^2iY9Ni_?`?b2oOR$`(`t{}`h^18R`v01nwxp1Qj|-I7j>lE+CMX}H2grGv6Ahcb`#NXp zhf;tea6Xe#DSn!EI5nw7l(urICta&8GjphO?fOm<0X53*{kn#$zKbBox9nx4r^e=a zeao!NJK8%E-vd=in?cMjLSYLs_FU9Pdi~|vWxw{y@^j)lBs$kZQ>*XX+;2%=TU}v& zW!m;g<;Ff@F=X=%2CJB07-_tm_by+ZK)Rhd)c;U+fzUGSxKHSh7iI*~WN0-3ci|71 z;38*!G-CeLv(OS<_pXINs`WDCS)T8kCjAp}!-t90LzM>(_}{48CbWSUn?{QPu_r~t zN2oU@zJ_=(f9Y_)w+8*t_?e|Ht;2%oGdl*uCY;7S0g1*q$aVP?>=^1riHlkL2dc-X`3OIC)jSJ{U>(ukE@&&l*0AV@TctuV%bTCh{J zmU1j1ep1h5}piPLywrArvmTgEK7585Cz${{WpZpRH?}fK^}>*^PSF zIzE?X3OYeq9a>3|qe-%3>Ps1m#EUTV^>D%9Q$8Tm{0sR*l_{f112i26MR!T2O06U3 z{!PGh{2WwBiAnOsArJ38m*L8BTCeB8h@iuuWJ2@L9irK-jC$H}1bmN@2R ziCvm-w{o#FZ7*#Lc>-&*huO{Fhn zUYBpAun|KgeO~Ta%_58kzX#wU$$J zCdxN#25wL}?DjIw_dMgTAmLJ-4aUBcHqX|WOubx$T4;pz75qXEJitXrRixNKSKmwF z1Jnuz#}C1vLP9MxBq|xTU{>ep%duFfd9$&*wMNDzo~xwvU|KE%T2Us;2X%wGGWYp} zXk)@8Paz8j1;fp@NX?b864?#X@%&opD(v3WSv>(q{&#~~yY=reRS)e=fLhplufgug z);{N4>#73EN^_xuDh^08KEsyOC_q<-l#rc{ZVE%iQ;Df`ooVP)5647jE(qC@W*6166Hh0cklxiF*e5B)+TKmem`((fIkE-RZ#j#wZ zTMLptj?_1kKSr;0Qv>K)4xy2>_sie?#wo=fLkH_5{AwKur;wird00vcvS-uWEL5e3 z(!Z{eUH z6INboZVgJ{&}AXb2WID-F2NB&F%53A3FXa7M)3aE+&fnQcqQJ#&=Pwk4O1f8<@^rb0tcfrmmPcWu8}AHy+lN&W$cu)*iL9k8(;) zM%~<(tSGc+nx^P$9myK5I~QF;vB(tV6bn9aoxFl#J!XBS)XHrV^0_Q2BR46nbi=|m zmj-c;Vq@B~Bv&&j-N@)**qqZFr&MeOae)f(-W@zT1Vo=Me5PQ4@t8>SFP7z|U&Z2| z&D;+W?10^Moy8e`C(rD0hjGtyTB7hwn^dNaM>3nQlaBM)fMsAjn8g79JrnUrFSp65v7(ykdQk*gK^;2QLz*nU}n7ZT2-(b{jjnu68xVH$*70?BQful4CEBbrX z`J+r_Skk-Y1LS}a@HpoAVIIHfpt=u#zAS$={d}rZob~oPMxyp-{%d8Ji;C_;kzM&L$C;;0BxCIm{Pr1ImlLM@cw{U>%3S|iap7DkL z8e(pdI_f~=RnW(OLZB&UD7VBB2s849=+R#Ki`I+11 z7*syZ=I9qV{0#JdZbpOK$;?3)B<}ZA4+X7UNJMexmNfa1z}>618%gv^P2mVX0whJ9 zU11C<__XX3O2nZuJ*=}hSBOb*owOa9&BJfy1B-ci&ovo*bdlv%iS<*d037W5H-vn| zm60e{F9~pHN)FS~Hva$;Q;w&1#Q0?El*&-Nb9cz5E%t(O?v#yek{X$?v6Dwwr@mOb z{M`|?=2hg2Q6nL8T$XcQ#f@V=wmgD0bky9UBfT6jUJC3f3jV5BGdQPHm1@3X z8p>hi6xNs0=6~N@4Ps8=uN3tr#+c%+1u*voTmzQUN4NI+L=}@2N*BW&Rgciyit%l( zVO$Kh#eW5tGKe)B1BYUs>YgRzC46TBzRDul5)D&LfJovDi**`4OM3xN_N3ezI4qGcVnNS)iZ0QF5U=_sKtbZC%?snxd{O~hSh=o zSNUHz)7sWa$F;VmDfkn)OE`ceaWDO?qMI_!6qw!t6pDNBY#$P}6^>_gIRt0LIS-g*15L7l$#n&_U=*ns$0NUoC zB~_bY#ib632*Ug26jZE>vkH~t#OW!DDE^#=d5yEnNU1YQd!XEkqcyHmVHD~hOI+J# z%NtO+KaXhXJCqijRI^)rBCAm~o(329Q-?|yNe<^SgB^h4<{zAwLr8_-Q_*dPW2ylmJcMNl3f9eZ71En&;vHHRSqf={`^)=aMb zD#b+SPa$Y&C3tsL4Sh-80A~IB5hg5BmoVUgS1oS?s|Q)KY?^}({v<%<>27~v0mj-l3MIB@c=$JDj0rm3HKp7 zzoo2s0#=qn%Ve=nq>@r)>L3HPI27?-wiemm?9+~1UA=em(>&M-k6-?`l03;HTES## zg!`mbzFX)Ibj)&Am7&e<5$3erFt5PGu+TB+3_~4*@G5MhXD42-NtL^LQ2ru zz1>I@5H7EkMEGQqewc#Vdk?=)N6~SP8AhGy%ivP`_{hs~3eBRhNi0p}lF?f~9JBY} z=HU4IKC~`3I$|*N(gt*#qyvR*sr}Nezt$Sleci*HccoCXm3TEvbK9E=OQhoU-|#N% z{@H+?q4>;Ob^yPfbWn@U83?(u`Ys#PmV=a0Z|1a!qI~VdXyXy7SGmNZLJ>9G>S3*V z#?vrrV5i!HBdWd!Q=E*V4k) zV9>b;?HD5_uUErP)5~pn{i}fa&z*r4H|JMhjq1t4>vFQCg&jVt>$Sat@d%zj> znRl=CFyJsnHAJcrQenJ5n(^6?{unV@2&}QqBx%``St1qq`jD+DSM3eWyoj?N^>yC+ zB}jJ!rF(0#-5(t4;jJx-0`{utK9$4X@PdQWV8mb0v~C`<^?T$=@Y;D`_c1+*ECa$! z@UhUyNHwuH;VH2p0#Mj^C&1)MGRjgc=eP;^Llfio5SKD*T4}<`U_ZqNp%k zK9;zKu)Lh=)iSiO)W=#+jj5=hKb*nXSWK1rQFqCJw@`_q?^iv0mE6)b*I zrW3@D2nE@al3ae+6;Q zf8e__vSAng&8k&7o6laa|G2SL;p(?J*TlljJ-F$dY&o)Y;Q;$dnO&=V1{-HfDm7V$jJiKdhi+HaK z_5*ZTpthOqy_E90o?PRuc~foI*DC6i&L@ZD6?I69AXG(x$Q8U4WrXmha+H?pTGowE zy`_*x5yck+l*GY#84q2F;_@LufTfRsB`jabk zjb<6zak^PzNK)%|>C<%5u32Uvt$ybt?i)jfm;2H0{C?RL)%1D;xUOGHtMgn?C{Ufl z_$9054YhA111V%SNPtusZz_ZUTNBvbbu+Nf9#dg;ek{rg=LO+I9_$P!rnk0Sp2l_6 zC~B=E7VFH00h%hLe|54XyH1LRh{IgInGEWu>P!9-(f@so>H_>9QcqyPvOt(rYe?O^NEPgJ3l-}OiMKhx-qts(=^FQ>P z*oX|nH*NZ<5ATPALdcDQChCMpMSEl?f|GewB$}3Oe->L7Z*sAUtmV(RJZ>EvjFtC(&*@49O5xMV85bxh z-6Prb*jXI^84&Pa|F@#>#+`_gmWl&mZaCuXmyx00ns_3r_mED$V24Gsz|5{{Xsi!J z^mtLlOKl2vg)6>|g=wgOv>HT{t%i*PeCi{jGwVmW6?0!S=EkU(QcobTm9dg;WQktQ z68|*sJT#*N{2j96Q0wPrht1sRyw&R%ytPb0vW>)Z~0Q>9%vYlWp0-@db zL4Uru9@uJP#uPZrmNmVdORveDb%a(B2vdLS^o0Y_&>cLMCIOu(GUk}CiT}OX(-6$^ zV!riOMuHH7rRUJwW1B=&z?1{%G0_T}O#Qs|u?->45Srkp*0PSw5OUYngbx^`KfWPm z*tx7Z*z}}^A;8LGA0c1xJS9IWnE9=H{vgvTd3xJ_u>zpT1V?v{>i43GivTAUW3Gvp z>()NCOSG=KB=l+6BPWW%*Dqh*@!G9v))#f(Ip3N@VbZ>4?Zt)(zpvtmL5XE>ZiYZX z5&KNmE^q6N-7z1H+PIS(oydXAtKuIzPN~mW(eptWGV|zn%MD(F%EeX`1opK7Kr8$2 zCTx_vt$FYBy+EQSHR3sDo>xb#a{6k$Gi-jw*R`X?pcj`$DK2(MazSPi(a%fpU=2v?sr7A+hoV@QEN5SGqu;0&iO2#FP7* z$AMM33S@$$*NThAJGZqXce;fmWMfQXc9(&|FuK5QWN zeV_Fn`)%R!ZMLs~P*J`GRMv*I>LJc&KDz>0td-QGrq;|~ew`r6#NxDs>Q*|clf0Aq z%>p>yS5w;q`5#)GejCnP6zNM6Q`Z$DfrI7caNG9t2tMO3qf{3>@>>>r=)$OD$3fN^ zd+DunoP4^?b3ffnS2EkM}_G;&M46HM(K6U*7Pe=K0vG$31JG zrZsjFt!RtJ{85f*8!s>6rdU?zHi@8FkFe0W{6q3`)NZzC)|*G7m@fKE3h$?vZTNVF zFEJxNY?o_gNfKD9vH zqD7FzFH1e-65!UhQ9S0e4*JapR)+c)$bkGdk8bVvdurHn^SrVmq4zXf_+j2WU5(Zp zn@Nl~kyPVWsIOEpohNgEo@GGuiP6^dtt8Zfdi_R5k<~$}DrzQR7Fjve4#|1|Io$v8 zhHxBM@xOIj>^47@*+uYAHOnOjTv$Ywt~fpAhJCCY($OWC-OT;sQGK}XIO=(B5h>8o zF9UavLS=QDl31D4HcByukWuP_MnL=V1W8wG-z0PD*jZblG4DRe521C^VUV150!cJ_ z6MJaWP$K>QzvXQl!tr&pvdu`#ah}Cw%~P=L6k< zhwUP$?jJQ==#WqQZ_5W3xxqTF|89o+WMsr_^5DSsFFxA-*~5Hx$hl%jG>dB7E9k?7 zk!4$fD<=aEp^QszkVd>?Ys>`baA>rr0vdU$49qdPFMshFM~?V1jF`_d<=Pr>^Q7~7 zhc{b158(MKkad2Hnx$ofRD!#AX*9Z>iS1^i<9yw?ZyjAn4)IJgcIpHI}KoVIj)`|C$JlC=^5gptZ-6}6Iq!3ry|U1V z<)QxPzV~hXMY#5SDHYI=j=a6guZK{7Xk8EXms@_sNym`2bFZh0nn3t#U-pJPvNNPC zj?){HM%S&YKE;H61W@rbKg|=8tjuhG$Jm~?^y;D72I=LP_GyZ)tB?9v$EuPFqK-W8 zcGP9d`F$9J?ZsONJ$R6Uuz9WhOh72SEU85{t}Lmw3k)-GDd?4q@c^k%uL;;ZzT$ix z{nq#LaB>!iNJ8h^4zzpl*dZ~xO-7@TVI;fD=K|8S4R@?B>Gr31@jDtrjyF%&q9;A% zlOj@tm=+9uD58FIHK~GWepQ-UYT;*JTSWp@5Rj78Txu zOFC2sIMa!u_?+|A>t=*2{qXphe<;T82A$mDIeSVh*~e>gALo%M!hN!sYPuX#@pWmP zKHw2()Dv3AVdqyhXXrOM_)OvvO$diF*w@t23oN^O@F4(EewdKSUf2hy=FRU6RMig_ z=f%zajVMS87}HEbJ$cF01MW5=@T9bFM;ofa$0Az{@GZA>D21!-t#U43k~_eJ*O``w zGyLhp<9}g+cqHVCch0ur$KbgZH|Z!=dk5Ukm0p@ zI|CTSZ$4=HM;*qC%;GQ~TO08mA6Q;-J?b+v-`Ds*^>eUrozd$XU19)j-_Bez9tXQmx}s@mHa=qT7zBW_#MS=^;De_4WzT}IS2a@OB|o+ypm5(0(e}34%k$y{@dZb+KT+`n@CDgA7-7$ zeX!J(VoG~2!YGB45B8W(zw!0nICG7M?H< z@(*)%3d{E+%96%qpOry2lvRNXxmWmO^n*y~9YWGmag4*l=|#iHqRr^0X4bZDtau@>2x1O``1-|4^D_d&dGH5V8QrJu!qGm{@i zG-)y|ZPrV>iZ?!fYf`5`_{o{MNc-@goId&Jx_) zdQI-%t3H>eN+6APre3*1R~N&j!Zwe2F7fUaF1WR74ig6bEh!7{EEnA9*ue*KaO3)6 zW+$FOl{l>vdSy&>XlNU)PJYpW)ZQy2=nC6y4n9YurdI9Y)OY>Gs%<>QF1?=QhP_^% zFUdil`Rw;hIIM=hRloBcu6nne7oBx{6}_)mC!S*@zt>axR^b>1dFU zGM!^OckbMO;Kg}PMBSBPo0a@r7{!%y7r~SN{|O`c^PjDUg^P{3wS||3fa_C#9SsV~ RKTk=(uMGGra+Mss{~yd&{Zs$| diff --git a/tests/test_graphical_units/control_data/threed/Y_Direction.npz b/tests/test_graphical_units/control_data/threed/Y_Direction.npz index 540e7062ed7e3420333c6f8416847c04b886fcd6..5d72dad8dcaa363030c22155614c9dc541ab1c9c 100644 GIT binary patch literal 88891 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

    q%GBIQ15HAJcM!k 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 literal 152701 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 diff --git a/tests/test_graphical_units/test_threed.py b/tests/test_graphical_units/test_threed.py index 64778e4044..022201f4c8 100644 --- a/tests/test_graphical_units/test_threed.py +++ b/tests/test_graphical_units/test_threed.py @@ -30,7 +30,7 @@ def test_Dot3D(scene): @frames_comparison(base_scene=ThreeDScene) def test_Cone(scene): - scene.add(Cone()) + scene.add(Cone(resolution=16)) @frames_comparison(base_scene=ThreeDScene) @@ -40,15 +40,16 @@ def test_Cylinder(scene): @frames_comparison(base_scene=ThreeDScene) def test_Line3D(scene): - line1, line2 = Line3D().shift(LEFT * 2), Line3D().shift(RIGHT * 2) - perp_line = Line3D.perpendicular_to(line1, UP + OUT) - parallel_line = Line3D.parallel_to(line2, DOWN + IN) + line1 = Line3D(resolution=16).shift(LEFT * 2) + line2 = Line3D(resolution=16).shift(RIGHT * 2) + perp_line = Line3D.perpendicular_to(line1, UP + OUT, resolution=16) + parallel_line = Line3D.parallel_to(line2, DOWN + IN, resolution=16) scene.add(line1, line2, perp_line, parallel_line) @frames_comparison(base_scene=ThreeDScene) def test_Arrow3D(scene): - scene.add(Arrow3D()) + scene.add(Arrow3D(resolution=16)) @frames_comparison(base_scene=ThreeDScene) @@ -103,7 +104,7 @@ def test_MovingVertices(scene): @frames_comparison(base_scene=ThreeDScene) def test_SurfaceColorscale(scene): - resolution_fa = 50 + resolution_fa = 16 scene.set_camera_orientation(phi=75 * DEGREES, theta=-30 * DEGREES) axes = ThreeDAxes(x_range=(-3, 3, 1), y_range=(-3, 3, 1), z_range=(-4, 4, 1)) @@ -127,7 +128,7 @@ def param_trig(u, v): @frames_comparison(base_scene=ThreeDScene) def test_Y_Direction(scene): - resolution_fa = 42 + resolution_fa = 16 scene.set_camera_orientation(phi=75 * DEGREES, theta=-120 * DEGREES) axes = ThreeDAxes(x_range=(0, 5, 1), y_range=(0, 5, 1), z_range=(-1, 1, 0.5)) From 22ae67e47f9c0b4cb31b5053066bd37843e6d6b8 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 22 Jul 2022 18:21:46 +0200 Subject: [PATCH 107/555] Fixed bug with propagation of ``tex_template`` value when using ``tempconfig`` (#2888) * added tex_template to keys of config dict * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * added missing argument to tempconfig call * decouple config.tex_template and config.tex_template_file, simple tex_template default * changed template => changed file hashes * added dedicated tempconfig reset test * black Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Naveen M K --- manim/_config/utils.py | 7 ++++--- manim/cli/render/commands.py | 4 ++-- manim/utils/tex.py | 8 ++++++++ tests/module/mobject/text/test_texmobject.py | 20 +++++++++++++++----- tests/opengl/test_texmobject_opengl.py | 6 +++--- 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 9b85e5723c..3b0dab6283 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -286,6 +286,7 @@ class MyScene(Scene): "scene_names", "show_in_file_browser", "tex_dir", + "tex_template", "tex_template_file", "text_dir", "upto_animation_number", @@ -361,6 +362,8 @@ def update(self, obj: ManimConfig | dict) -> None: if isinstance(obj, ManimConfig): self._d.update(obj._d) + if obj.tex_template: + self.tex_template = obj.tex_template elif isinstance(obj, dict): # First update the underlying _d, then update other properties @@ -1540,7 +1543,7 @@ def tex_template(self): if fn: self._tex_template = TexTemplateFromFile(filename=fn) else: - self._tex_template = TexTemplateLibrary.default.copy() + self._tex_template = TexTemplate() return self._tex_template @tex_template.setter @@ -1562,10 +1565,8 @@ def tex_template_file(self, val: str) -> None: ) else: self._d["tex_template_file"] = Path(val) - self._tex_template = TexTemplateFromFile(filename=val) else: self._d["tex_template_file"] = val # actually set the falsy value - self._tex_template = TexTemplate() # but don't use it @property def plugins(self): diff --git a/manim/cli/render/commands.py b/manim/cli/render/commands.py index 97ba883ffa..f105676592 100644 --- a/manim/cli/render/commands.py +++ b/manim/cli/render/commands.py @@ -98,7 +98,7 @@ def __repr__(self): keep_running = True while keep_running: for SceneClass in scene_classes_from_file(file): - with tempconfig(config): + with tempconfig({}): scene = SceneClass(renderer) rerun = scene.render() if rerun or config["write_all"]: @@ -116,7 +116,7 @@ def __repr__(self): else: for SceneClass in scene_classes_from_file(file): try: - with tempconfig(config): + with tempconfig({}): scene = SceneClass() scene.render() except Exception: diff --git a/manim/utils/tex.py b/manim/utils/tex.py index 2ace7f230c..a30533123c 100644 --- a/manim/utils/tex.py +++ b/manim/utils/tex.py @@ -96,6 +96,14 @@ def __init__( ) self._rebuild() + def __eq__(self, other: TexTemplate) -> bool: + return ( + self.body == other.body + and self.tex_compiler == other.tex_compiler + and self.output_format == other.output_format + and self.post_doc_commands == other.post_doc_commands + ) + def _rebuild(self): """Rebuilds the entire TeX template text from ``\\documentclass`` to ``\\end{document}`` according to all settings and choices.""" self.body = ( diff --git a/tests/module/mobject/text/test_texmobject.py b/tests/module/mobject/text/test_texmobject.py index 8e0420a230..4585a82fee 100644 --- a/tests/module/mobject/text/test_texmobject.py +++ b/tests/module/mobject/text/test_texmobject.py @@ -4,19 +4,19 @@ import pytest -from manim import MathTex, SingleStringMathTex, Tex, TexTemplate, config +from manim import MathTex, SingleStringMathTex, Tex, TexTemplate, config, tempconfig from manim.mobject.types.vectorized_mobject import VMobject from manim.utils.color import RED def test_MathTex(): MathTex("a^2 + b^2 = c^2") - assert Path(config.media_dir, "Tex", "3879f6b03bc495cd.svg").exists() + assert Path(config.media_dir, "Tex", "eb38bdba08f46c80.svg").exists() def test_SingleStringMathTex(): SingleStringMathTex("test") - assert Path(config.media_dir, "Tex", "79822967f1fa1935.svg").exists() + assert Path(config.media_dir, "Tex", "5b2faa68ebf42d1e.svg").exists() @pytest.mark.parametrize( # : PT006 @@ -30,12 +30,12 @@ def test_double_braces_testing(text_input, length_sub): def test_tex(): Tex("The horse does not eat cucumber salad.") - assert Path(config.media_dir, "Tex", "983949cac5bdd272.svg").exists() + assert Path(config.media_dir, "Tex", "f2e45e6e82d750e6.svg").exists() def test_percent_char_rendering(): Tex(r"\%") - assert Path(config.media_dir, "Tex", "ce6e53f2d9c537bb.tex").exists() + assert Path(config.media_dir, "Tex", "3f48edf8ebaf82c8.tex").exists() def test_tex_whitespace_arg(): @@ -171,3 +171,13 @@ def test_error_in_nested_context(capsys): stdout = str(capsys.readouterr().out) # validate useless context is not included assert r"\begin{frame}" not in stdout + + +def test_tempconfig_resetting_tex_template(): + my_template = TexTemplate() + my_template.preamble = "Custom preamble!" + tex_template_config_value = config.tex_template + with tempconfig({"tex_template": my_template}): + assert config.tex_template.preamble == "Custom preamble!" + + assert config.tex_template.preamble != "Custom preamble!" diff --git a/tests/opengl/test_texmobject_opengl.py b/tests/opengl/test_texmobject_opengl.py index 7c2b0c5f2d..392513ccbe 100644 --- a/tests/opengl/test_texmobject_opengl.py +++ b/tests/opengl/test_texmobject_opengl.py @@ -9,12 +9,12 @@ def test_MathTex(using_opengl_renderer): MathTex("a^2 + b^2 = c^2") - assert Path(config.media_dir, "Tex", "3879f6b03bc495cd.svg").exists() + assert Path(config.media_dir, "Tex", "eb38bdba08f46c80.svg").exists() def test_SingleStringMathTex(using_opengl_renderer): SingleStringMathTex("test") - assert Path(config.media_dir, "Tex", "79822967f1fa1935.svg").exists() + assert Path(config.media_dir, "Tex", "5b2faa68ebf42d1e.svg").exists() @pytest.mark.parametrize( # : PT006 @@ -28,7 +28,7 @@ def test_double_braces_testing(using_opengl_renderer, text_input, length_sub): def test_tex(using_opengl_renderer): Tex("The horse does not eat cucumber salad.") - assert Path(config.media_dir, "Tex", "983949cac5bdd272.svg").exists() + assert Path(config.media_dir, "Tex", "f2e45e6e82d750e6.svg").exists() def test_tex_whitespace_arg(using_opengl_renderer): From 32f4c8f524128f3c371d366d8c308643ded0d785 Mon Sep 17 00:00:00 2001 From: mostly documentation Date: Wed, 27 Jul 2022 04:37:49 -0700 Subject: [PATCH 108/555] Fixed minor grammar issues in :doc:`/faq/general` (#2903) * Fix a few minor grammar mistakes * Fix missing period and strange start of sentence * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/source/faq/general.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/faq/general.md b/docs/source/faq/general.md index 7696f976a0..10feeb4bda 100644 --- a/docs/source/faq/general.md +++ b/docs/source/faq/general.md @@ -7,11 +7,11 @@ the file containing your `Scene` class and forgot to save it, or if you have accidentally passed the name of a wrong file to `manim`, this is a likely outcome. Check that you have spelled everything correctly. -Otherwise you are likely mixing up Manim versions. See {ref}`this FAQ answer ` -for an explanation regarding why there are different versions. Under the assumption -that you are trying to use the `manim` executable from the terminal to run +Otherwise, you are likely mixing up Manim versions. See {ref}`this FAQ answer ` +for an explanation regarding why there are different versions. This is under the +assumption that you are trying to use the `manim` executable from the terminal to run a scene that has been written for the community version (i.e., there is -`from manim import *`, or more specifically `from manim import Scene`) +`from manim import *`, or more specifically `from manim import Scene`). --- @@ -42,7 +42,7 @@ upper left corner of the scene has coordinates `[-7-1/9, 4, 0]`. ## How do I find out which keyword arguments I can pass when creating a `Mobject`? -Let us consider some specific example, like the {class}`.Circle` class. When looking +Let us consider a specific example, like the {class}`.Circle` class. When looking at its documentation page, only two specific keyword arguments are listed (`radius`, and `color`). Besides these concrete arguments, there is also a catchall `**kwargs` argument which captures all other arguments that are passed @@ -93,7 +93,7 @@ for more information. ## I want to translate some code from `manimgl` to `manim`, what do I do with `CONFIG` dictionaries? -The community maintained version has dropped the use of `CONFIG` dictionaries very +The community-maintained version has dropped the use of `CONFIG` dictionaries very early, with {doc}`version v0.2.0 ` released in January 2021. @@ -229,7 +229,7 @@ If you are unable to solve your problem, check out the ## Where can I find more resources for learning Manim? -In our [Discord server](https://manim.community/discord), we have the community maintained +In our [Discord server](https://manim.community/discord), we have the community-maintained `#beginner-resources` channel in which links to helpful learning resources are collected. You are welcome to join our Discord and take a look yourself! If you have found some guides or tutorials yourself that are not on our list yet, feel free to add them! From aeeb6da3572e89fac605872288988823c93ea146 Mon Sep 17 00:00:00 2001 From: Owen Samuel <45167001+OwenSamuel@users.noreply.github.com> Date: Sat, 6 Aug 2022 01:42:41 +0100 Subject: [PATCH 109/555] fix: SoundExample video autoplaying with sound (#2911) --- manim/scene/scene.py | 1 + manim/utils/docbuild/manim_directive.py | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 5b4cae0eed..ebb0a42cf4 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -1497,6 +1497,7 @@ def add_sound(self, sound_file, time_offset=0, gain=None, **kwargs): Examples -------- .. manim:: SoundExample + :no_autoplay: class SoundExample(Scene): # Source of sound under Creative Commons 0 License. https://freesound.org/people/Druminfected/sounds/250551/ diff --git a/manim/utils/docbuild/manim_directive.py b/manim/utils/docbuild/manim_directive.py index 816cac7994..d7fa8a6eb0 100644 --- a/manim/utils/docbuild/manim_directive.py +++ b/manim/utils/docbuild/manim_directive.py @@ -47,6 +47,10 @@ def construct(self): If this flag is present without argument, the source code is not displayed above the rendered video. + no_autoplay + If this flag is present without argument, + the video will not autoplay. + quality : {'low', 'medium', 'high', 'fourk'} Controls render quality of the video, in analogy to the corresponding command line flags. @@ -142,6 +146,7 @@ class ManimDirective(Directive): optional_arguments = 0 option_spec = { "hide_source": bool, + "no_autoplay": bool, "quality": lambda arg: directives.choice( arg, ("low", "medium", "high", "fourk"), @@ -190,6 +195,7 @@ def run(self): classnamedict[clsname] += 1 hide_source = "hide_source" in self.options + no_autoplay = "no_autoplay" in self.options save_as_gif = "save_as_gif" in self.options save_last_frame = "save_last_frame" in self.options assert not (save_as_gif and save_last_frame) @@ -242,6 +248,7 @@ def run(self): example_config = { "frame_rate": frame_rate, + "no_autoplay": no_autoplay, "pixel_height": pixel_height, "pixel_width": pixel_width, "save_last_frame": save_last_frame, @@ -295,6 +302,7 @@ def run(self): clsname_lowercase=clsname.lower(), hide_source=hide_source, filesrc_rel=Path(filesrc).relative_to(setup.confdir).as_posix(), + no_autoplay=no_autoplay, output_file=output_file, save_last_frame=save_last_frame, save_as_gif=save_as_gif, @@ -382,7 +390,13 @@ def setup(app): {% if not (save_as_gif or save_last_frame) %} .. raw:: html - + {% elif save_as_gif %} .. image:: /{{ filesrc_rel }} From d9db1f79b9c2758b22cc95d112ba4e41214f2a23 Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Sat, 27 Aug 2022 16:37:29 +0200 Subject: [PATCH 110/555] Update mapbox-earcut (#2931) * Update mapbox-earcut * Update poetry.lock --- poetry.lock | 1138 +++++++++++++++++++++++++++++++++--------------- pyproject.toml | 2 +- 2 files changed, 795 insertions(+), 345 deletions(-) diff --git a/poetry.lock b/poetry.lock index ab3c64e8d1..d5f4775190 100644 --- a/poetry.lock +++ b/poetry.lock @@ -96,17 +96,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "attrs" -version = "21.4.0" +version = "22.1.0" description = "Classes Without Boilerplate" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.5" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "babel" @@ -187,7 +187,7 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["build (0.8.0)", "flake8 (4.0.1)", "hashin (0.17.0)", "pip-tools (6.6.2)", "pytest (7.1.2)", "Sphinx (4.3.2)", "tox (3.25.0)", "twine (4.0.1)", "wheel (0.37.1)", "black (22.3.0)", "mypy (0.961)"] +dev = ["build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "Sphinx (==4.3.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)", "black (==22.3.0)", "mypy (==0.961)"] [[package]] name = "certifi" @@ -218,7 +218,7 @@ python-versions = ">=3.6.1" [[package]] name = "charset-normalizer" -version = "2.1.0" +version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -290,11 +290,11 @@ optional = false python-versions = "*" [package.extras] -test = ["flake8 (3.7.8)", "hypothesis (3.55.3)"] +test = ["hypothesis (==3.55.3)", "flake8 (==3.7.8)"] [[package]] name = "coverage" -version = "6.4.2" +version = "6.4.4" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -316,7 +316,7 @@ python-versions = ">=3.6" [[package]] name = "cython" -version = "0.29.30" +version = "0.29.32" description = "The Cython compiler for writing C extensions for the Python language." category = "main" optional = false @@ -331,7 +331,7 @@ optional = false python-versions = ">=3.6" [package.extras] -dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (0.770)", "numpy", "pandas", "pytest"] +dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", "pandas", "pytest"] [[package]] name = "dearpygui" @@ -343,7 +343,7 @@ python-versions = ">=3.7" [[package]] name = "debugpy" -version = "1.6.2" +version = "1.6.3" description = "An implementation of the Debug Adapter Protocol for Python" category = "main" optional = true @@ -427,7 +427,7 @@ testing = ["pre-commit"] [[package]] name = "fastjsonschema" -version = "2.15.3" +version = "2.16.1" description = "Fastest Python implementation of JSON schema" category = "main" optional = true @@ -438,15 +438,15 @@ devel = ["colorama", "jsonschema", "json-spec", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.7.1" +version = "3.8.0" description = "A platform independent file lock." category = "dev" optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] -testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] +docs = ["furo (>=2022.6.21)", "sphinx (>=5.1.1)", "sphinx-autodoc-typehints (>=1.19.1)"] +testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "pytest-timeout (>=2.1)"] [[package]] name = "flake8" @@ -536,7 +536,7 @@ flake8-plugin-utils = ">=1.3.2,<2.0.0" [[package]] name = "flake8-rst-docstrings" -version = "0.2.6" +version = "0.2.7" description = "Python docstring reStructuredText (RST) validator" category = "dev" optional = false @@ -562,7 +562,7 @@ importlib-metadata = {version = ">=0.9", markers = "python_version < \"3.8\""} [[package]] name = "fonttools" -version = "4.34.4" +version = "4.37.0" description = "Tools to manipulate font files" category = "dev" optional = false @@ -629,7 +629,7 @@ python-versions = "*" [[package]] name = "identify" -version = "2.5.1" +version = "2.5.3" description = "File identification library for Python" category = "dev" optional = false @@ -673,7 +673,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [[package]] name = "importlib-resources" -version = "5.8.0" +version = "5.9.0" description = "Read resources from Python packages" category = "main" optional = true @@ -683,8 +683,8 @@ python-versions = ">=3.7" zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [[package]] name = "iniconfig" @@ -795,7 +795,7 @@ python-versions = ">=3.6" parso = ">=0.8.0,<0.9.0" [package.extras] -qa = ["flake8 (3.8.3)", "mypy (0.782)"] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] @@ -814,7 +814,7 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.9.8" +version = "0.9.10" description = "A Python implementation of the JSON5 data format." category = "main" optional = true @@ -825,7 +825,7 @@ dev = ["hypothesis"] [[package]] name = "jsonschema" -version = "4.7.2" +version = "4.14.0" description = "An implementation of JSON Schema validation for Python" category = "main" optional = true @@ -835,6 +835,7 @@ python-versions = ">=3.7" attrs = ">=17.4.0" importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} @@ -909,7 +910,7 @@ test = ["coverage", "ipykernel", "pre-commit", "pytest-console-scripts", "pytest [[package]] name = "jupyterlab" -version = "3.4.3" +version = "3.4.5" description = "JupyterLab computational environment" category = "main" optional = true @@ -921,12 +922,13 @@ jinja2 = ">=2.1" jupyter-core = "*" jupyter-server = ">=1.16,<2.0" jupyterlab-server = ">=2.10,<3.0" -nbclassic = ">=0.2,<1.0" +nbclassic = "*" +notebook = "<7" packaging = "*" tornado = ">=6.1.0" [package.extras] -test = ["check-manifest", "coverage", "jupyterlab-server", "pytest (>=6.0)", "pytest-cov", "pytest-console-scripts", "pytest-check-links (>=0.5)", "requests", "requests-cache", "virtualenv", "pre-commit"] +test = ["check-manifest", "coverage", "jupyterlab-server", "pre-commit", "pytest (>=6.0)", "pytest-cov", "pytest-console-scripts", "pytest-check-links (>=0.5)", "requests", "requests-cache", "virtualenv"] ui-tests = ["build"] [[package]] @@ -939,7 +941,7 @@ python-versions = ">=3.7" [[package]] name = "jupyterlab-server" -version = "2.15.0" +version = "2.15.1" description = "A set of server components for JupyterLab and JupyterLab like applications." category = "main" optional = true @@ -961,7 +963,7 @@ test = ["codecov", "ipykernel", "jupyter-server", "openapi-core (>=0.14.2)", "op [[package]] name = "kiwisolver" -version = "1.4.3" +version = "1.4.4" description = "A fast implementation of the Cassowary constraint solver" category = "dev" optional = false @@ -978,6 +980,20 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "lxml" +version = "4.9.1" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["beautifulsoup4"] +source = ["Cython (>=0.29.7)"] + [[package]] name = "manimpango" version = "0.4.1" @@ -988,7 +1004,7 @@ python-versions = ">=3.7" [[package]] name = "mapbox-earcut" -version = "0.12.11" +version = "1.0.0" description = "Python bindings for the mapbox earcut C++ polygon triangulation library." category = "main" optional = false @@ -1013,14 +1029,14 @@ mdurl = ">=0.1,<1.0" typing_extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] -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"] +testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] +rtd = ["sphinx-book-theme", "sphinx-design", "sphinx-copybutton", "sphinx", "pyyaml", "myst-parser", "attrs"] profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx-book-theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] +plugins = ["mdit-py-plugins"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +compare = ["panflute (>=2.1.3,<2.2.0)", "mistune (>=2.0.2,<2.1.0)", "mistletoe (>=0.8.1,<0.9.0)", "markdown (>=3.3.6,<3.4.0)", "commonmark (>=0.9.1,<0.10.0)"] +code_style = ["pre-commit (==2.6)"] +benchmarking = ["pytest-benchmark (>=3.2,<4.0)", "pytest", "psutil"] [[package]] name = "markupsafe" @@ -1032,7 +1048,7 @@ python-versions = ">=3.7" [[package]] name = "matplotlib" -version = "3.5.2" +version = "3.5.3" description = "Python plotting package" category = "dev" optional = false @@ -1047,11 +1063,11 @@ packaging = ">=20.0" pillow = ">=6.2.0" pyparsing = ">=2.2.1" python-dateutil = ">=2.7" -setuptools_scm = ">=4" +setuptools_scm = ">=4,<7" [[package]] name = "matplotlib-inline" -version = "0.1.3" +version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" category = "main" optional = true @@ -1080,13 +1096,13 @@ python-versions = "~=3.6" markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -code_style = ["pre-commit (2.6)"] -rtd = ["myst-parser (>=0.14.0,<0.15.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] -testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] +testing = ["pytest-regressions", "pytest-cov", "pytest (>=3.6,<4)", "coverage"] +rtd = ["sphinx-book-theme (>=0.1.0,<0.2.0)", "myst-parser (>=0.14.0,<0.15.0)"] +code_style = ["pre-commit (==2.6)"] [[package]] name = "mdurl" -version = "0.1.1" +version = "0.1.2" description = "Markdown URL utilities" category = "dev" optional = false @@ -1094,8 +1110,8 @@ python-versions = ">=3.7" [[package]] name = "mistune" -version = "0.8.4" -description = "The fastest markdown parser in pure Python" +version = "2.0.4" +description = "A sane Markdown parser with useful plugins and renderers" category = "main" optional = true python-versions = "*" @@ -1224,13 +1240,13 @@ tornado = ">=6.1" traitlets = ">=4.2.1" [package.extras] -docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] +test = ["requests-unixsocket", "pytest-tornasync", "pytest-cov", "selenium (==4.1.5)", "nbval", "testpath", "requests", "coverage", "pytest"] json-logging = ["json-logging"] -test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium (4.1.5)", "pytest-cov", "pytest-tornasync", "requests-unixsocket"] +docs = ["myst-parser", "sphinx-rtd-theme", "sphinxcontrib-github-alt", "nbsphinx", "sphinx"] [[package]] name = "nbclient" -version = "0.6.6" +version = "0.6.7" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "main" optional = true @@ -1244,11 +1260,11 @@ traitlets = ">=5.2.2" [package.extras] sphinx = ["autodoc-traits", "mock", "moto", "myst-parser", "Sphinx (>=1.7)", "sphinx-book-theme"] -test = ["black", "check-manifest", "flake8", "ipykernel", "ipython (<8.0.0)", "ipywidgets (<8.0.0)", "mypy", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"] +test = ["black", "check-manifest", "flake8", "ipykernel", "ipython", "ipywidgets", "mypy", "nbconvert", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"] [[package]] name = "nbconvert" -version = "6.5.0" +version = "7.0.0" description = "Converting Jupyter Notebooks" category = "main" optional = true @@ -1258,12 +1274,13 @@ python-versions = ">=3.7" beautifulsoup4 = "*" bleach = "*" defusedxml = "*" -entrypoints = ">=0.2.2" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" -MarkupSafe = ">=2.0" -mistune = ">=0.8.1,<2" +lxml = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<3" nbclient = ">=0.5.0" nbformat = ">=5.1" packaging = "*" @@ -1273,10 +1290,12 @@ tinycss2 = "*" traitlets = ">=5.0" [package.extras] -all = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)", "tornado (>=6.1)", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] -docs = ["sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] +all = ["ipykernel", "ipython", "ipywidgets (>=7)", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pyqtwebengine (>=5.15)", "pytest", "pytest-cov", "pytest-dependency", "sphinx-rtd-theme", "sphinx (==5.0.2)", "tornado (>=6.1)"] +docs = ["ipython", "nbsphinx (>=0.2.12)", "sphinx-rtd-theme", "sphinx (==5.0.2)"] +qtpdf = ["pyqtwebengine (>=5.15)"] +qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)"] +test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)", "pytest", "pytest-cov", "pytest-dependency"] webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] @@ -1313,8 +1332,8 @@ optional = false python-versions = ">=3.7" [package.extras] -default = ["numpy (>=1.19)", "scipy (>=1.5,<1.6.1 || >1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] -developer = ["black (21.5b1)", "pre-commit (>=2.12)"] +default = ["numpy (>=1.19)", "scipy (>=1.5,!=1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] +developer = ["black (==21.5b1)", "pre-commit (>=2.12)"] doc = ["sphinx (>=4.0,<5.0)", "pydata-sphinx-theme (>=0.6,<1.0)", "sphinx-gallery (>=0.9,<1.0)", "numpydoc (>=1.1)", "pillow (>=8.2)", "nb2plots (>=0.6)", "texext (>=0.6.6)"] extra = ["lxml (>=4.5)", "pygraphviz (>=1.7)", "pydot (>=1.4.1)"] test = ["pytest (>=6.2)", "pytest-cov (>=2.12)", "codecov (>=2.1)"] @@ -1369,7 +1388,7 @@ python-versions = ">=3.7" jupyter-server = ">=1.8,<2.0" [package.extras] -test = ["pytest", "pytest-tornasync", "pytest-console-scripts"] +test = ["pytest-console-scripts", "pytest-tornasync", "pytest"] [[package]] name = "numpy" @@ -1407,7 +1426,7 @@ optional = true python-versions = ">=3.6" [package.extras] -qa = ["flake8 (3.8.3)", "mypy (0.782)"] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["docopt", "pytest (<6.0.0)"] [[package]] @@ -1449,6 +1468,14 @@ python-versions = ">=3.7" 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" +version = "1.3.10" +description = "Resolve a name to an object." +category = "main" +optional = true +python-versions = ">=3.6" + [[package]] name = "platformdirs" version = "2.5.2" @@ -1459,7 +1486,7 @@ python-versions = ">=3.7" [package.extras] docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pluggy" @@ -1473,8 +1500,8 @@ python-versions = ">=3.6" importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} [package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +testing = ["pytest-benchmark", "pytest"] +dev = ["tox", "pre-commit"] [[package]] name = "pre-commit" @@ -1634,12 +1661,15 @@ python-versions = "*" [[package]] name = "pygments" -version = "2.12.0" +version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.6" +[package.extras] +plugins = ["importlib-metadata"] + [[package]] name = "pyjwt" version = "2.4.0" @@ -1650,9 +1680,9 @@ python-versions = ">=3.6" [package.extras] crypto = ["cryptography (>=3.3.1)"] -dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (5.0.4)", "mypy", "pre-commit"] +dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"] docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (5.0.4)"] +tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] [[package]] name = "pylint" @@ -1688,7 +1718,7 @@ cffi = ">=1.4.1" [package.extras] docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] -tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)", "hypothesis (>=3.27.0)"] +tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] [[package]] name = "pyobjc-core" @@ -1775,7 +1805,7 @@ coverage = {version = ">=5.2.1", extras = ["toml"]} pytest = ">=4.6" [package.extras] -testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] +testing = ["virtualenv", "pytest-xdist", "six", "process-tests", "hunter", "fields"] [[package]] name = "pytest-forked" @@ -1820,7 +1850,7 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2022.1" +version = "2022.2.1" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -1836,7 +1866,7 @@ python-versions = "*" [[package]] name = "pywinpty" -version = "2.0.6" +version = "2.0.7" description = "Pseudo terminal support for Windows from Python." category = "main" optional = true @@ -1852,7 +1882,7 @@ python-versions = ">=3.6" [[package]] name = "pyzmq" -version = "23.2.0" +version = "23.2.1" description = "Python bindings for 0MQ" category = "main" optional = true @@ -1890,7 +1920,7 @@ idna = ">=2.5,<4" urllib3 = ">=1.21.1,<1.27" [package.extras] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)"] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] [[package]] @@ -1958,17 +1988,15 @@ win32 = ["pywin32"] [[package]] name = "setuptools-scm" -version = "7.0.5" +version = "6.4.2" description = "the blessed package to manage your versions by scm tags" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.6" [package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} packaging = ">=20.0" tomli = ">=1.0.0" -typing-extensions = "*" [package.extras] test = ["pytest (>=6.2)", "virtualenv (>20)"] @@ -1991,7 +2019,7 @@ optional = false python-versions = ">=3.7" [package.extras] -testing = ["pytest", "coverage", "pytest-xdist", "pytest-randomly"] +testing = ["pytest-randomly", "pytest-xdist", "coverage", "pytest"] [[package]] name = "smmap" @@ -2083,8 +2111,8 @@ python-versions = ">=3.6" sphinx = ">=1.8" [package.extras] -code_style = ["pre-commit (2.12.1)"] -rtd = ["sphinx", "ipython", "sphinx-book-theme"] +rtd = ["sphinx-book-theme", "ipython", "sphinx"] +code_style = ["pre-commit (==2.12.1)"] [[package]] name = "sphinxcontrib-applehelp" @@ -2095,8 +2123,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-devhelp" @@ -2107,8 +2135,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-htmlhelp" @@ -2119,8 +2147,8 @@ optional = false python-versions = ">=3.6" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest", "html5lib"] +test = ["html5lib", "pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-jsmath" @@ -2131,7 +2159,7 @@ optional = false python-versions = ">=3.5" [package.extras] -test = ["pytest", "flake8", "mypy"] +test = ["mypy", "flake8", "pytest"] [[package]] name = "sphinxcontrib-programoutput" @@ -2153,8 +2181,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-serializinghtml" @@ -2165,8 +2193,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxext-opengraph" @@ -2215,8 +2243,8 @@ python-versions = ">=3.6" webencodings = ">=0.4" [package.extras] -doc = ["sphinx", "sphinx-rtd-theme"] -test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"] +test = ["coverage", "pytest-isort", "pytest-flake8", "pytest-cov", "pytest"] +doc = ["sphinx-rtd-theme", "sphinx"] [[package]] name = "toml" @@ -2312,7 +2340,7 @@ python-versions = "*" [[package]] name = "types-pygments" -version = "2.12.1" +version = "2.13.0" description = "Typing stubs for Pygments" category = "dev" optional = false @@ -2324,7 +2352,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.28.1" +version = "2.28.9" description = "Typing stubs for requests" category = "dev" optional = false @@ -2343,7 +2371,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.16" +version = "1.26.23" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -2359,7 +2387,7 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.10" +version = "1.26.12" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false @@ -2367,27 +2395,26 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, [package.extras] brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.15.1" +version = "20.16.3" description = "Virtual Python Environment builder" category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" [package.dependencies] -distlib = ">=0.3.1,<1" -filelock = ">=3.2,<4" -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -platformdirs = ">=2,<3" -six = ">=1.9.0,<2" +distlib = ">=0.3.5,<1" +filelock = ">=3.4.1,<4" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.8\""} +platformdirs = ">=2.4,<3" [package.extras] -docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] -testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] +docs = ["proselint (>=0.13)", "sphinx (>=5.1.1)", "sphinx-argparse (>=0.3.1)", "sphinx-rtd-theme (>=1)", "towncrier (>=21.9)"] +testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] [[package]] name = "watchdog" @@ -2456,7 +2483,7 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "c2a44c7802a88f2d2d5cd0a5dd422c54947c05d11a841ec5cdcb43abde425604" +content-hash = "2bce6a5e827ba1255861116bf9c6a0ac5fa5be3134175484a83e49c188a6c129" [metadata.files] alabaster = [ @@ -2502,11 +2529,16 @@ 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 = [] -atomicwrites = [] +astroid = [ + {file = "astroid-2.11.7-py3-none-any.whl", hash = "sha256:86b0a340a512c65abf4368b80252754cda17c02cdbbd3f587dddf98112233e7b"}, + {file = "astroid-2.11.7.tar.gz", hash = "sha256:bb24615c77f4837c707669d16907331374ae8a964650a66999da3f5ca68dc946"}, +] +atomicwrites = [ + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, +] attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, + {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.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, @@ -2516,7 +2548,10 @@ backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] -"backports.cached-property" = [] +"backports.cached-property" = [ + {file = "backports.cached-property-1.0.2.tar.gz", hash = "sha256:9306f9eed6ec55fd156ace6bc1094e2c86fae5fb2bf07b6a9c00745c656e75dd"}, + {file = "backports.cached_property-1.0.2-py3-none-any.whl", hash = "sha256:baeb28e1cd619a3c9ab8941431fe34e8490861fb998c6c4590693d50171db0cc"}, +] beautifulsoup4 = [ {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, @@ -2554,16 +2589,84 @@ certifi = [ {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, ] -cffi = [] +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.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, - {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, + {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 = [] click-default-group = [ {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, ] @@ -2583,52 +2686,103 @@ commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] -coverage = [] +coverage = [ + {file = "coverage-6.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7b4da9bafad21ea45a714d3ea6f3e1679099e420c8741c74905b92ee9bfa7cc"}, + {file = "coverage-6.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fde17bc42e0716c94bf19d92e4c9f5a00c5feb401f5bc01101fdf2a8b7cacf60"}, + {file = "coverage-6.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdbb0d89923c80dbd435b9cf8bba0ff55585a3cdb28cbec65f376c041472c60d"}, + {file = "coverage-6.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67f9346aeebea54e845d29b487eb38ec95f2ecf3558a3cffb26ee3f0dcc3e760"}, + {file = "coverage-6.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42c499c14efd858b98c4e03595bf914089b98400d30789511577aa44607a1b74"}, + {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c35cca192ba700979d20ac43024a82b9b32a60da2f983bec6c0f5b84aead635c"}, + {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9cc4f107009bca5a81caef2fca843dbec4215c05e917a59dec0c8db5cff1d2aa"}, + {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f444627b3664b80d078c05fe6a850dd711beeb90d26731f11d492dcbadb6973"}, + {file = "coverage-6.4.4-cp310-cp310-win32.whl", hash = "sha256:66e6df3ac4659a435677d8cd40e8eb1ac7219345d27c41145991ee9bf4b806a0"}, + {file = "coverage-6.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:35ef1f8d8a7a275aa7410d2f2c60fa6443f4a64fae9be671ec0696a68525b875"}, + {file = "coverage-6.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c1328d0c2f194ffda30a45f11058c02410e679456276bfa0bbe0b0ee87225fac"}, + {file = "coverage-6.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61b993f3998ee384935ee423c3d40894e93277f12482f6e777642a0141f55782"}, + {file = "coverage-6.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5dd4b8e9cd0deb60e6fcc7b0647cbc1da6c33b9e786f9c79721fd303994832f"}, + {file = "coverage-6.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7026f5afe0d1a933685d8f2169d7c2d2e624f6255fb584ca99ccca8c0e966fd7"}, + {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9c7b9b498eb0c0d48b4c2abc0e10c2d78912203f972e0e63e3c9dc21f15abdaa"}, + {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ee2b2fb6eb4ace35805f434e0f6409444e1466a47f620d1d5763a22600f0f892"}, + {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ab066f5ab67059d1f1000b5e1aa8bbd75b6ed1fc0014559aea41a9eb66fc2ce0"}, + {file = "coverage-6.4.4-cp311-cp311-win32.whl", hash = "sha256:9d6e1f3185cbfd3d91ac77ea065d85d5215d3dfa45b191d14ddfcd952fa53796"}, + {file = "coverage-6.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e3d3c4cc38b2882f9a15bafd30aec079582b819bec1b8afdbde8f7797008108a"}, + {file = "coverage-6.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a095aa0a996ea08b10580908e88fbaf81ecf798e923bbe64fb98d1807db3d68a"}, + {file = "coverage-6.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef6f44409ab02e202b31a05dd6666797f9de2aa2b4b3534e9d450e42dea5e817"}, + {file = "coverage-6.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b7101938584d67e6f45f0015b60e24a95bf8dea19836b1709a80342e01b472f"}, + {file = "coverage-6.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a32ec68d721c3d714d9b105c7acf8e0f8a4f4734c811eda75ff3718570b5e3"}, + {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6a864733b22d3081749450466ac80698fe39c91cb6849b2ef8752fd7482011f3"}, + {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:08002f9251f51afdcc5e3adf5d5d66bb490ae893d9e21359b085f0e03390a820"}, + {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a3b2752de32c455f2521a51bd3ffb53c5b3ae92736afde67ce83477f5c1dd928"}, + {file = "coverage-6.4.4-cp37-cp37m-win32.whl", hash = "sha256:f855b39e4f75abd0dfbcf74a82e84ae3fc260d523fcb3532786bcbbcb158322c"}, + {file = "coverage-6.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ee6ae6bbcac0786807295e9687169fba80cb0617852b2fa118a99667e8e6815d"}, + {file = "coverage-6.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:564cd0f5b5470094df06fab676c6d77547abfdcb09b6c29c8a97c41ad03b103c"}, + {file = "coverage-6.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cbbb0e4cd8ddcd5ef47641cfac97d8473ab6b132dd9a46bacb18872828031685"}, + {file = "coverage-6.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6113e4df2fa73b80f77663445be6d567913fb3b82a86ceb64e44ae0e4b695de1"}, + {file = "coverage-6.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d032bfc562a52318ae05047a6eb801ff31ccee172dc0d2504614e911d8fa83e"}, + {file = "coverage-6.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e431e305a1f3126477abe9a184624a85308da8edf8486a863601d58419d26ffa"}, + {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cf2afe83a53f77aec067033199797832617890e15bed42f4a1a93ea24794ae3e"}, + {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:783bc7c4ee524039ca13b6d9b4186a67f8e63d91342c713e88c1865a38d0892a"}, + {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ff934ced84054b9018665ca3967fc48e1ac99e811f6cc99ea65978e1d384454b"}, + {file = "coverage-6.4.4-cp38-cp38-win32.whl", hash = "sha256:e1fabd473566fce2cf18ea41171d92814e4ef1495e04471786cbc943b89a3781"}, + {file = "coverage-6.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:4179502f210ebed3ccfe2f78bf8e2d59e50b297b598b100d6c6e3341053066a2"}, + {file = "coverage-6.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:98c0b9e9b572893cdb0a00e66cf961a238f8d870d4e1dc8e679eb8bdc2eb1b86"}, + {file = "coverage-6.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc600f6ec19b273da1d85817eda339fb46ce9eef3e89f220055d8696e0a06908"}, + {file = "coverage-6.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a98d6bf6d4ca5c07a600c7b4e0c5350cd483c85c736c522b786be90ea5bac4f"}, + {file = "coverage-6.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01778769097dbd705a24e221f42be885c544bb91251747a8a3efdec6eb4788f2"}, + {file = "coverage-6.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfa0b97eb904255e2ab24166071b27408f1f69c8fbda58e9c0972804851e0558"}, + {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:fcbe3d9a53e013f8ab88734d7e517eb2cd06b7e689bedf22c0eb68db5e4a0a19"}, + {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:15e38d853ee224e92ccc9a851457fb1e1f12d7a5df5ae44544ce7863691c7a0d"}, + {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6913dddee2deff8ab2512639c5168c3e80b3ebb0f818fed22048ee46f735351a"}, + {file = "coverage-6.4.4-cp39-cp39-win32.whl", hash = "sha256:354df19fefd03b9a13132fa6643527ef7905712109d9c1c1903f2133d3a4e145"}, + {file = "coverage-6.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:1238b08f3576201ebf41f7c20bf59baa0d05da941b123c6656e42cdb668e9827"}, + {file = "coverage-6.4.4-pp36.pp37.pp38-none-any.whl", hash = "sha256:f67cf9f406cf0d2f08a3515ce2db5b82625a7257f88aad87904674def6ddaec1"}, + {file = "coverage-6.4.4.tar.gz", hash = "sha256:e16c45b726acb780e1e6f88b286d3c10b3914ab03438f32117c4aa52d7f30d58"}, +] 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.30-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5cb144728a335d7a7fd0a61dff6abb7a9aeff9acd46d50b886b7d9a95bb7311"}, - {file = "Cython-0.29.30-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d52d5733dcb144deca8985f0a197c19cf71e6bd6bd9d8034f3f67b2dea68d12b"}, - {file = "Cython-0.29.30-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0cd6c932e945af15ae4ddcf8fdc0532bda48784c92ed0a53cf4fae897067ccd1"}, - {file = "Cython-0.29.30-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a30092c6e2d24255fbfe0525f9a750554f96a263ed986d12ac3c9f7d9a85a424"}, - {file = "Cython-0.29.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:abcaf99f90cddc0f53600613eaafc81d27c4ac0671f0df8bce5466d4e86d54a1"}, - {file = "Cython-0.29.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9826981308802c61a76f967875b31b7c683b7fc369eabaa6cbc22efeb12c90e8"}, - {file = "Cython-0.29.30-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:d166d9f853db436f5e10733a9bd615699ddb4238feadcbdf5ae50dc0b18b18f5"}, - {file = "Cython-0.29.30-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0b83a342a071c4f14e7410568e0c0bd95e2f20c0b32944e3a721649a1357fda4"}, - {file = "Cython-0.29.30-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:ffa8c09617833ff0824aa7926fa4fa9d2ec3929c67168e89105f276b7f36a63e"}, - {file = "Cython-0.29.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6b389a94b42909ff56d3491fde7c44802053a103701a7d210dcdd449a5b4f7b4"}, - {file = "Cython-0.29.30-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:7eff71c39b98078deaad1d1bdbf10864d234e2ab5d5257e980a6926a8523f697"}, - {file = "Cython-0.29.30-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8e08f18d249b9b65e272a5a60f3360a8922c4c149036b98fc821fe1afad5bdae"}, - {file = "Cython-0.29.30-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3993aafd68a7311ef94e00e44a137f6a50a69af0575ebcc8a0a074ad4152a2b2"}, - {file = "Cython-0.29.30-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5c7cfd908efc77306ddd41ef07f5a7a352c9205ced5c1e00a0e5ece4391707c4"}, - {file = "Cython-0.29.30-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e605635a92ae862cb46d84d1d6883324518f9aaff4a71cede6d61df20b6a410c"}, - {file = "Cython-0.29.30-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:786ee7b0cdb508b6de64c0f1f9c74f207186dfafad1ef938f25b7494cc481a80"}, - {file = "Cython-0.29.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:1e078943bbde703ca08d43e719480eb8b187d9023cbd91798619f5b5e18d0d71"}, - {file = "Cython-0.29.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5183356c756b56c2df12d96300d602e47ffb89943c5a0bded66faca5d3da7be0"}, - {file = "Cython-0.29.30-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e36755e71fd20eceb410cc441b7f2586654c2edb013f4663842fdaf60b96c1ca"}, - {file = "Cython-0.29.30-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e29d3487f357108b711f2f29319811d92166643d29aec1b8e063aad46a346775"}, - {file = "Cython-0.29.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5a8a3709ad9343a1dc02b8ec9cf6bb284be248d2c64af85464d9c3525eec74a5"}, - {file = "Cython-0.29.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b17639b6a155abaa61a89f6f1323fb57b138d0529911ca03978d594945d062ba"}, - {file = "Cython-0.29.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:9462e9cf284d9b1d2c5b53d62188e3c09cc5c7a0018ba349d99b73cf930238de"}, - {file = "Cython-0.29.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:58d2b734250c1093bc69c1c3a6f5736493b9f8b34eb765f0a28a4a09468c0b00"}, - {file = "Cython-0.29.30-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:28db751e2d8365b39664d9cb62dc1668688b8fcc5b954e9ca9d20e0b8e03d8b0"}, - {file = "Cython-0.29.30-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5f2dae7dd56860018d5fd5032a71f11fdc224020932b463d0511a1536f27df85"}, - {file = "Cython-0.29.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d0859a958e0155b6ae4dee04170ccfac2c3d613a7e3bee8749614530b9e3b4a4"}, - {file = "Cython-0.29.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:d0f34b44078e3e0b2f1be2b99044619b37127128e7d55c54bbd2438adcaf31d3"}, - {file = "Cython-0.29.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:80a7255ad84620f53235c0720cdee2bc7431d9e3db7b3742823a606c329eb539"}, - {file = "Cython-0.29.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0239c7a22a0f3fb1deec75cab0078eba4dd17868aa992a54a178851e0c8684"}, - {file = "Cython-0.29.30-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c299c5b250ae9f81c38200441b6f1d023aeee9d8e7f61c04001c7437181ccb06"}, - {file = "Cython-0.29.30-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:019d330ac580b2ca4a457c464ac0b8c35009d820ef5d09f328d6e31a10e1ce89"}, - {file = "Cython-0.29.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:71fd1d910aced510c001936667fc7f2901c49b2ca7a2ad67358979c94a7f42ac"}, - {file = "Cython-0.29.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:60d370c33d56077d30e5f425026e58c2559e93b4784106f61581cf54071f6270"}, - {file = "Cython-0.29.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:20778297c8bcba201ca122a2f792a9899d6e64c68a92363dd7eb24306d54d7ce"}, - {file = "Cython-0.29.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f1fe924c920b699af27aefebd722df4cfbb85206291623cd37d1a7ddfd57792"}, - {file = "Cython-0.29.30-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c79685dd4631a188e2385dc6a232896c7b67ea2e3e5f8b5555b4b743f475d6d7"}, - {file = "Cython-0.29.30-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:88c5e2f92f16cd999ddfc43d572639679e8a057587088e627e98118e46a803e6"}, - {file = "Cython-0.29.30-py2.py3-none-any.whl", hash = "sha256:acb72e0b42079862cf2f894964b41f261e941e75677e902c5f4304b3eb00af33"}, - {file = "Cython-0.29.30.tar.gz", hash = "sha256:2235b62da8fe6fa8b99422c8e583f2fb95e143867d337b5c75e4b9a1a865f9e3"}, + {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"}, @@ -2650,7 +2804,26 @@ dearpygui = [ {file = "dearpygui-1.6.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b0c77bd722eb0168c4ea30bf46e0b493ce398c7398e315996ab27535781dc99a"}, {file = "dearpygui-1.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:7cf534cb7662e9f49ee93cb4ca34d6c245913b6dfb887d8a5e0b630597a34677"}, ] -debugpy = [] +debugpy = [ + {file = "debugpy-1.6.3-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:c4b2bd5c245eeb49824bf7e539f95fb17f9a756186e51c3e513e32999d8846f3"}, + {file = "debugpy-1.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b8deaeb779699350deeed835322730a3efec170b88927debc9ba07a1a38e2585"}, + {file = "debugpy-1.6.3-cp310-cp310-win32.whl", hash = "sha256:fc233a0160f3b117b20216f1169e7211b83235e3cd6749bcdd8dbb72177030c7"}, + {file = "debugpy-1.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:dda8652520eae3945833e061cbe2993ad94a0b545aebd62e4e6b80ee616c76b2"}, + {file = "debugpy-1.6.3-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5c814596a170a0a58fa6fad74947e30bfd7e192a5d2d7bd6a12156c2899e13a"}, + {file = "debugpy-1.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c4cd6f37e3c168080d61d698390dfe2cd9e74ebf80b448069822a15dadcda57d"}, + {file = "debugpy-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:3c9f985944a30cfc9ae4306ac6a27b9c31dba72ca943214dad4a0ab3840f6161"}, + {file = "debugpy-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:5ad571a36cec137ae6ed951d0ff75b5e092e9af6683da084753231150cbc5b25"}, + {file = "debugpy-1.6.3-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:adcfea5ea06d55d505375995e150c06445e2b20cd12885bcae566148c076636b"}, + {file = "debugpy-1.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:daadab4403427abd090eccb38d8901afd8b393e01fd243048fab3f1d7132abb4"}, + {file = "debugpy-1.6.3-cp38-cp38-win32.whl", hash = "sha256:6efc30325b68e451118b795eff6fe8488253ca3958251d5158106d9c87581bc6"}, + {file = "debugpy-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:86d784b72c5411c833af1cd45b83d80c252b77c3bfdb43db17c441d772f4c734"}, + {file = "debugpy-1.6.3-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:4e255982552b0edfe3a6264438dbd62d404baa6556a81a88f9420d3ed79b06ae"}, + {file = "debugpy-1.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cca23cb6161ac89698d629d892520327dd1be9321c0960e610bbcb807232b45d"}, + {file = "debugpy-1.6.3-cp39-cp39-win32.whl", hash = "sha256:7c302095a81be0d5c19f6529b600bac971440db3e226dce85347cc27e6a61908"}, + {file = "debugpy-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:34d2cdd3a7c87302ba5322b86e79c32c2115be396f3f09ca13306d8a04fe0f16"}, + {file = "debugpy-1.6.3-py2.py3-none-any.whl", hash = "sha256:84c39940a0cac410bf6aa4db00ba174f973eef521fbe9dd058e26bcabad89c4f"}, + {file = "debugpy-1.6.3.zip", hash = "sha256:e8922090514a890eec99cfb991bab872dd2e353ebb793164d5f01c362b9a40bf"}, +] decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -2667,7 +2840,10 @@ dill = [ {file = "dill-0.3.5.1-py2.py3-none-any.whl", hash = "sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302"}, {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, ] -distlib = [] +distlib = [ + {file = "distlib-0.3.5-py2.py3-none-any.whl", hash = "sha256:b710088c59f06338ca514800ad795a132da19fda270e3ce4affc74abf955a26c"}, + {file = "distlib-0.3.5.tar.gz", hash = "sha256:a7f75737c70be3b25e2bee06288cec4e4c221de18455b2dd037fe2a795cab2fe"}, +] docutils = [ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, @@ -2681,12 +2857,12 @@ execnet = [ {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, ] fastjsonschema = [ - {file = "fastjsonschema-2.15.3-py3-none-any.whl", hash = "sha256:ddb0b1d8243e6e3abb822bd14e447a89f4ab7439342912d590444831fa00b6a0"}, - {file = "fastjsonschema-2.15.3.tar.gz", hash = "sha256:0a572f0836962d844c1fc435e200b2e4f4677e4e6611a2e3bdd01ba697c275ec"}, + {file = "fastjsonschema-2.16.1-py3-none-any.whl", hash = "sha256:2f7158c4de792555753d6c2277d6a2af2d406dfd97aeca21d17173561ede4fe6"}, + {file = "fastjsonschema-2.16.1.tar.gz", hash = "sha256:d6fa3ffbe719768d70e298b9fb847484e2bdfdb7241ed052b8d57a9294a8c334"}, ] filelock = [ - {file = "filelock-3.7.1-py3-none-any.whl", hash = "sha256:37def7b658813cda163b56fc564cdc75e86d338246458c4c28ae84cabefa2404"}, - {file = "filelock-3.7.1.tar.gz", hash = "sha256:3a0fd85166ad9dbab54c9aec96737b744106dc5f15c0b09a6744a445299fcf04"}, + {file = "filelock-3.8.0-py3-none-any.whl", hash = "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4"}, + {file = "filelock-3.8.0.tar.gz", hash = "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc"}, ] flake8 = [ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, @@ -2716,12 +2892,18 @@ 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 = [] +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 = [] +fonttools = [ + {file = "fonttools-4.37.0-py3-none-any.whl", hash = "sha256:e4467a36e24f918507b5cfdc61d2a479b6c7393a85d1f126f3c84f76e8df2151"}, + {file = "fonttools-4.37.0.zip", hash = "sha256:2ee4509aeba40542a6c6d00895a0c66f3cb8b9edda2fa58438dd9f769e3ce76e"}, +] furo = [ {file = "furo-2022.6.21-py3-none-any.whl", hash = "sha256:061b68e323345e27fcba024cf33a1e77f3dfd8d9987410be822749a706e2add6"}, {file = "furo-2022.6.21.tar.gz", hash = "sha256:9aa983b7488a4601d13113884bfb7254502c8729942e073a0acb87a5512af223"}, @@ -2734,10 +2916,49 @@ gitpython = [ {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, ] -glcontext = [] +glcontext = [ + {file = "glcontext-2.3.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2eb3c2d7879076a33e801283ab2403788b78e1a45dc89e664a3100b967d471a1"}, + {file = "glcontext-2.3.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:86441e63363dcbb97ee813c9978c1d8998563e76b3726776da04b7be49813be3"}, + {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e613a52a32b9fd5a528981c94b39078064a96380cad91ade4c312340d5404af"}, + {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ba701c46e7b774857b756ac6af15487b917a29dce195e40d834638edaad6f4"}, + {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:861304731c2fa5413e24abc32ac8335e93cf9f8dc7ab767ea69d380d8d503b1b"}, + {file = "glcontext-2.3.6-cp310-cp310-win32.whl", hash = "sha256:cb5b67ffc75ff4a358e8f739d3c65e1bbcc9e75c651dd5945c787d7b9c3ad03f"}, + {file = "glcontext-2.3.6-cp310-cp310-win_amd64.whl", hash = "sha256:032d10008de005b51a2401820356e9f7d51bc9c2a28f8194cc1c345bf1a8a3f9"}, + {file = "glcontext-2.3.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:16bde9cf3bae7129f5308be4a1143db58e68b49b10c77e4e34f9a51cf98fd557"}, + {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25a94ddd93eef639fd0a377b7ebc1ac972978796a2ada74fd5b03b88719d88a"}, + {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a800ba7fd1912f6424bd5979ba596f08308a9e949da73aba942b0a535860170"}, + {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bcb5b2ddd21d37f8a1b2aaa62e3952e54a09bc31d29b861a4dcc57a536514f0"}, + {file = "glcontext-2.3.6-cp37-cp37m-win32.whl", hash = "sha256:e646d9c5af3b583f74a586fd151b787314352116e7c06c4902da93e15082bdb4"}, + {file = "glcontext-2.3.6-cp37-cp37m-win_amd64.whl", hash = "sha256:2ac6f80440510473621d287603ef69a08b985c06619f62f42cb485e5ca6e872c"}, + {file = "glcontext-2.3.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b6030d9deedba125d95d39abd72c36fbf6f0a7f866e600f22b210e368afbf522"}, + {file = "glcontext-2.3.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8ca64b73e16712537a95d2e848a13391f83d72f5c19bde5f05562b62b2a1fee6"}, + {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:226453bb7ff5a79e88c59ae38b60d1ce002fa2196b19aa8fada147221816e78c"}, + {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48f299b77612b9c80f026204ee3a3062b56cb0776c1d25a6b5ce05fb7e18b261"}, + {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81addba70acbc3fa84ace2b53509c89ff3c7bfe068d1ba2d7d3478140aed2838"}, + {file = "glcontext-2.3.6-cp38-cp38-win32.whl", hash = "sha256:233a9a977d545acf7d2ea1065c986fe6b711948f31499ce5e49e5366eefafa08"}, + {file = "glcontext-2.3.6-cp38-cp38-win_amd64.whl", hash = "sha256:7f114582574c8013fdec09154767b2c3f87875b74ff9938b20d3265971d08971"}, + {file = "glcontext-2.3.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c8adc530ecbb0c01c0abcc56ee71c7bcf8799209bff9e5c32f1a1d77f7035468"}, + {file = "glcontext-2.3.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:01106836f02d0098cbcacbc6d0c911f27fa728177d5a651ff44325dfafba7077"}, + {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3f573bde2183943f6161aeb81cad14a2978f143c686dd52253a38cdae7e7667"}, + {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:60a982fc78b4400d3b5075f9790977c4d2bdf99824af3cd0428ae5a54437635f"}, + {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64c0425155174fd2faaff7f631d41792365e357484c7f44a6b38efc1ea38468c"}, + {file = "glcontext-2.3.6-cp39-cp39-win32.whl", hash = "sha256:8789947abf3594a11655f23be88481dae0a660bbf8f42e2a5fa95a8fce59ba2c"}, + {file = "glcontext-2.3.6-cp39-cp39-win_amd64.whl", hash = "sha256:22699f81696756ec98fcf8b9a2ebd1dd73a42f81501d7748855e66b63d963c36"}, + {file = "glcontext-2.3.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:970a2769c6aed12e29bd1edbb30a04fa17871a6cf7bb95190e65302c693ce928"}, + {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a30c62c6168b42a32083dc8c967e421f8c346e4452a00809c056ce6c6bea0c4"}, + {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e531662f37d171c08fcdc4ca442468266bef77da14c72c183bcaa2cd80111386"}, + {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98d5dfc4629ed85e51176fc1d8563944e0439b77bc6fe2365cb42207838ea32f"}, + {file = "glcontext-2.3.6-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:41a69166c20b1a67b2652a5074a78078df7e19f36c65d92f6552535a1182d4cc"}, + {file = "glcontext-2.3.6-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8b118f0361e61e21279e414a1fa759288421ac311e44ce08e718de38f788183"}, + {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4f862f2b4426f1786743448c899d225e8383538602a04c3ffc9622956d08140"}, + {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e59f5afe61c5bc18dc7766c36a0ac912794a53605b30469c6c6be20483f4b42f"}, + {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d399cba251b301d94eb7a41017ba68e001673f642606229fba7a0d4183b3273"}, + {file = "glcontext-2.3.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:bd50f826bb70df2415c7166d5e0aebdda3e47df8af385f562d8d5ba6018f87e9"}, + {file = "glcontext-2.3.6.tar.gz", hash = "sha256:cdb540eec587deddca037fb4dfdaa0921dcab0fd4d7ea5f1079e44fcb1b81e67"}, +] identify = [ - {file = "identify-2.5.1-py2.py3-none-any.whl", hash = "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa"}, - {file = "identify-2.5.1.tar.gz", hash = "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82"}, + {file = "identify-2.5.3-py2.py3-none-any.whl", hash = "sha256:25851c8c1370effb22aaa3c987b30449e9ff0cece408f810ae6ce408fdd20893"}, + {file = "identify-2.5.3.tar.gz", hash = "sha256:887e7b91a1be152b0d46bbf072130235a8117392b9f1828446079a816a05ef44"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, @@ -2747,16 +2968,22 @@ 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 = [] +importlib-metadata = [ + {file = "importlib_metadata-4.12.0-py3-none-any.whl", hash = "sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23"}, + {file = "importlib_metadata-4.12.0.tar.gz", hash = "sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670"}, +] importlib-resources = [ - {file = "importlib_resources-5.8.0-py3-none-any.whl", hash = "sha256:7952325ffd516c05a8ad0858c74dff2c3343f136fe66a6002b2623dd1d43f223"}, - {file = "importlib_resources-5.8.0.tar.gz", hash = "sha256:568c9f16cb204f9decc8d6d24a572eeea27dacbb4cee9e6b03a8025736769751"}, + {file = "importlib_resources-5.9.0-py3-none-any.whl", hash = "sha256:f78a8df21a79bcc30cfd400bdc38f314333de7c0fb619763f6b9dabab8268bb7"}, + {file = "importlib_resources-5.9.0.tar.gz", hash = "sha256:5481e97fb45af8dcf2f798952625591c58fe599d0735d86b10f54de086a61681"}, ] 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 = [] +ipykernel = [ + {file = "ipykernel-6.15.1-py3-none-any.whl", hash = "sha256:d8969c5b23b0e453a23166da5a669c954db399789293fcb03fec5cb25367e43c"}, + {file = "ipykernel-6.15.1.tar.gz", hash = "sha256:37acc3254caa8a0dafcddddc8dc863a60ad1b46487b68aee361d9a15bda98112"}, +] ipython = [ {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, @@ -2782,74 +3009,106 @@ jinja2 = [ {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] json5 = [ - {file = "json5-0.9.8.tar.gz", hash = "sha256:0fa6e4d3ef062f93ba9cf2a9103fe8e68c7917dfa33519ae3ac8c7e48e3c84ff"}, + {file = "json5-0.9.10-py2.py3-none-any.whl", hash = "sha256:993189671e7412e9cdd8be8dc61cf402e8e579b35f1d1bb20ae6b09baa78bbce"}, + {file = "json5-0.9.10.tar.gz", hash = "sha256:ad9f048c5b5a4c3802524474ce40a622fae789860a86f10cc4f7e5f9cf9b46ab"}, +] +jsonschema = [ + {file = "jsonschema-4.14.0-py3-none-any.whl", hash = "sha256:9892b8d630a82990521a9ca630d3446bd316b5ad54dbe981338802787f3e0d2d"}, + {file = "jsonschema-4.14.0.tar.gz", hash = "sha256:15062f4cc6f591400cd528d2c355f2cfa6a57e44c820dc783aee5e23d36a831f"}, ] -jsonschema = [] jupyter-client = [ {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"}, {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"}, ] -jupyter-core = [] +jupyter-core = [ + {file = "jupyter_core-4.11.1-py3-none-any.whl", hash = "sha256:715e22bb6cc7db3718fddfac1f69f1c7e899ca00e42bdfd4bf3705452b9fd84a"}, + {file = "jupyter_core-4.11.1.tar.gz", hash = "sha256:2e5f244d44894c4154d06aeae3419dd7f1b0ef4494dc5584929b398c61cfd314"}, +] jupyter-server = [ {file = "jupyter_server-1.18.1-py3-none-any.whl", hash = "sha256:022759b09c96a4e2feb95de59ce4283e04e17782efe197b91d23a47521609b77"}, {file = "jupyter_server-1.18.1.tar.gz", hash = "sha256:2b72fc595bccae292260aad8157a0ead8da2c703ec6ae1bb7b36dbad0e267ea7"}, ] jupyterlab = [ - {file = "jupyterlab-3.4.3-py3-none-any.whl", hash = "sha256:f028f4c6a4171785c4a1d592ca9bf36812047703e4aa981482cd3872eb0fc169"}, - {file = "jupyterlab-3.4.3.tar.gz", hash = "sha256:e2dcc40e94366dde5de4b19e8c43ee133cf041b852d01a3625a7cf29532da49d"}, + {file = "jupyterlab-3.4.5-py3-none-any.whl", hash = "sha256:3181d60518e6101b9e43f6da231aa4be812a59d81ddcc8fe680dd33066fddae6"}, + {file = "jupyterlab-3.4.5.tar.gz", hash = "sha256:472f6b7996c75f6991592483c26d9fe205a59a71ccbce15842400155dc64f59b"}, ] 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.15.0-py3-none-any.whl", hash = "sha256:0e327d7a346874fd8e94c1bcbd69906d18a8558df8f13115c5afd183c3107756"}, - {file = "jupyterlab_server-2.15.0.tar.gz", hash = "sha256:a91c515e0e7971a8f7c3c9834b748857f7dac502f93604bf283987991fd987ef"}, + {file = "jupyterlab_server-2.15.1-py3-none-any.whl", hash = "sha256:5e04008a98bfb510471b8b8a7059f7cdbb1797e1f255657f39ea3d838ba00bf6"}, + {file = "jupyterlab_server-2.15.1.tar.gz", hash = "sha256:305313970e131c590cf77bb6b8ca7e98591bc304111e8d103bc91d212e94796f"}, ] kiwisolver = [ - {file = "kiwisolver-1.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fd2842a0faed9ab9aba0922c951906132d9384be89690570f0ed18cd4f20e658"}, - {file = "kiwisolver-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:caa59e2cae0e23b1e225447d7a9ddb0f982f42a6a22d497a484dfe62a06f7c0e"}, - {file = "kiwisolver-1.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1d2c744aeedce22c122bb42d176b4aa6d063202a05a4abdacb3e413c214b3694"}, - {file = "kiwisolver-1.4.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:afe173ac2646c2636305ab820cc0380b22a00a7bca4290452e7166b4f4fa49d0"}, - {file = "kiwisolver-1.4.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40240da438c0ebfe2aa76dd04b844effac6679423df61adbe3437d32f23468d9"}, - {file = "kiwisolver-1.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21a3a98f0a21fc602663ca9bce2b12a4114891bdeba2dea1e9ad84db59892fca"}, - {file = "kiwisolver-1.4.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51078855a16b7a4984ed2067b54e35803d18bca9861cb60c60f6234b50869a56"}, - {file = "kiwisolver-1.4.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c16635f8dddbeb1b827977d0b00d07b644b040aeb9ff8607a9fc0997afa3e567"}, - {file = "kiwisolver-1.4.3-cp310-cp310-win32.whl", hash = "sha256:2d76780d9c65c7529cedd49fa4802d713e60798d8dc3b0d5b12a0a8f38cca51c"}, - {file = "kiwisolver-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:3a297d77b3d6979693f5948df02b89431ae3645ec95865e351fb45578031bdae"}, - {file = "kiwisolver-1.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ca3eefb02ef17257fae8b8555c85e7c1efdfd777f671384b0e4ef27409b02720"}, - {file = "kiwisolver-1.4.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d248c46c0aa406695bda2abf99632db991f8b3a6d46018721a2892312a99f069"}, - {file = "kiwisolver-1.4.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb55258931448d61e2d50187de4ee66fc9d9f34908b524949b8b2b93d0c57136"}, - {file = "kiwisolver-1.4.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86bcf0009f2012847a688f2f4f9b16203ca4c835979a02549aa0595d9f457cc8"}, - {file = "kiwisolver-1.4.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e7cf940af5fee00a92e281eb157abe8770227a5255207818ea9a34e54a29f5b2"}, - {file = "kiwisolver-1.4.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dd22085446f3eca990d12a0878eeb5199dc9553b2e71716bfe7bed9915a472ab"}, - {file = "kiwisolver-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:d2578e5149ff49878934debfacf5c743fab49eca5ecdb983d0b218e1e554c498"}, - {file = "kiwisolver-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:5fb73cc8a34baba1dfa546ae83b9c248ef6150c238b06fc53d2773685b67ec67"}, - {file = "kiwisolver-1.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f70f3d028794e31cf9d1a822914efc935aadb2438ec4e8d4871d95eb1ce032d6"}, - {file = "kiwisolver-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:71af5b43e4fa286a35110fc5bb740fdeae2b36ca79fbcf0a54237485baeee8be"}, - {file = "kiwisolver-1.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26b5a70bdab09e6a2f40babc4f8f992e3771751e144bda1938084c70d3001c09"}, - {file = "kiwisolver-1.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1858ad3cb686eccc7c6b7c5eac846a1cfd45aacb5811b2cf575e80b208f5622a"}, - {file = "kiwisolver-1.4.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dc350cb65fe4e3f737d50f0465fa6ea0dcae0e5722b7edf5d5b0a0e3cd2c3c7"}, - {file = "kiwisolver-1.4.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:007799c7fa934646318fc128b033bb6e6baabe7fbad521bfb2279aac26225cd7"}, - {file = "kiwisolver-1.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:46fb56fde006b7ef5f8eaa3698299b0ea47444238b869ff3ced1426aa9fedcb5"}, - {file = "kiwisolver-1.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b9eb88593159a53a5ee0b0159daee531ff7dd9c87fa78f5d807ca059c7eb1b2b"}, - {file = "kiwisolver-1.4.3-cp38-cp38-win32.whl", hash = "sha256:3b1dcbc49923ac3c973184a82832e1f018dec643b1e054867d04a3a22255ec6a"}, - {file = "kiwisolver-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:7118ca592d25b2957ff7b662bc0fe4f4c2b5d5b27814b9b1bc9f2fb249a970e7"}, - {file = "kiwisolver-1.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:747190fcdadc377263223f8f72b038381b3b549a8a3df5baf4d067da4749b046"}, - {file = "kiwisolver-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fd628e63ffdba0112e3ddf1b1e9f3db29dd8262345138e08f4938acbc6d0805a"}, - {file = "kiwisolver-1.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:22ccba48abae827a0f952a78a7b1a7ff01866131e5bbe1f826ce9bda406bf051"}, - {file = "kiwisolver-1.4.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:af24b21c2283ca69c416a8a42cde9764dc36c63d3389645d28c69b0e93db3cd7"}, - {file = "kiwisolver-1.4.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:547111ef7cf13d73546c2de97ce434935626c897bdec96a578ca100b5fcd694b"}, - {file = "kiwisolver-1.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f85adfebd7d3c3db649efdf73659e1677a2cf3fa6e2556a3f373578af14bf7"}, - {file = "kiwisolver-1.4.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffd7cf165ff71afb202b3f36daafbf298932bee325aac9f58e1c9cd55838bef0"}, - {file = "kiwisolver-1.4.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b3136eecf7e1b4a4d23e4b19d6c4e7a8e0b42d55f30444e3c529700cdacaa0d"}, - {file = "kiwisolver-1.4.3-cp39-cp39-win32.whl", hash = "sha256:46c6e5018ba31d5ee7582f323d8661498a154dea1117486a571db4c244531f24"}, - {file = "kiwisolver-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:8395064d63b26947fa2c9faeea9c3eee35e52148c5339c37987e1d96fbf009b3"}, - {file = "kiwisolver-1.4.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:325fa1b15098e44fe4590a6c5c09a212ca10c6ebb5d96f7447d675f6c8340e4e"}, - {file = "kiwisolver-1.4.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:654280c5f41831ddcc5a331c0e3ce2e480bbc3d7c93c18ecf6236313aae2d61a"}, - {file = "kiwisolver-1.4.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae7aa0784aeadfbd693c27993727792fbe1455b84d49970bad5886b42976b18"}, - {file = "kiwisolver-1.4.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:130c6c35eded399d3967cf8a542c20b671f5ba85bd6f210f8b939f868360e9eb"}, - {file = "kiwisolver-1.4.3.tar.gz", hash = "sha256:ab8a15c2750ae8d53e31f77a94f846d0a00772240f1c12817411fa2344351f86"}, + {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.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, @@ -2890,6 +3149,78 @@ lazy-object-proxy = [ {file = "lazy_object_proxy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61"}, {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, ] +lxml = [ + {file = "lxml-4.9.1-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed"}, + {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c62e8dd9754b7debda0c5ba59d34509c4688f853588d75b53c3791983faa96fc"}, + {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21fb3d24ab430fc538a96e9fbb9b150029914805d551deeac7d7822f64631dfc"}, + {file = "lxml-4.9.1-cp27-cp27m-win32.whl", hash = "sha256:86e92728ef3fc842c50a5cb1d5ba2bc66db7da08a7af53fb3da79e202d1b2cd3"}, + {file = "lxml-4.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4cfbe42c686f33944e12f45a27d25a492cc0e43e1dc1da5d6a87cbcaf2e95627"}, + {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dad7b164905d3e534883281c050180afcf1e230c3d4a54e8038aa5cfcf312b84"}, + {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a614e4afed58c14254e67862456d212c4dcceebab2eaa44d627c2ca04bf86837"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f9ced82717c7ec65a67667bb05865ffe38af0e835cdd78728f1209c8fffe0cad"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d9fc0bf3ff86c17348dfc5d322f627d78273eba545db865c3cd14b3f19e57fa5"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e5f66bdf0976ec667fc4594d2812a00b07ed14d1b44259d19a41ae3fff99f2b8"}, + {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8"}, + {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8caf4d16b31961e964c62194ea3e26a0e9561cdf72eecb1781458b67ec83423d"}, + {file = "lxml-4.9.1-cp310-cp310-win32.whl", hash = "sha256:4780677767dd52b99f0af1f123bc2c22873d30b474aa0e2fc3fe5e02217687c7"}, + {file = "lxml-4.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:b122a188cd292c4d2fcd78d04f863b789ef43aa129b233d7c9004de08693728b"}, + {file = "lxml-4.9.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:be9eb06489bc975c38706902cbc6888f39e946b81383abc2838d186f0e8b6a9d"}, + {file = "lxml-4.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3"}, + {file = "lxml-4.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:927a9dd016d6033bc12e0bf5dee1dde140235fc8d0d51099353c76081c03dc29"}, + {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9232b09f5efee6a495a99ae6824881940d6447debe272ea400c02e3b68aad85d"}, + {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:04da965dfebb5dac2619cb90fcf93efdb35b3c6994fea58a157a834f2f94b318"}, + {file = "lxml-4.9.1-cp35-cp35m-win32.whl", hash = "sha256:4d5bae0a37af799207140652a700f21a85946f107a199bcb06720b13a4f1f0b7"}, + {file = "lxml-4.9.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4878e667ebabe9b65e785ac8da4d48886fe81193a84bbe49f12acff8f7a383a4"}, + {file = "lxml-4.9.1-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:1355755b62c28950f9ce123c7a41460ed9743c699905cbe664a5bcc5c9c7c7fb"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:bcaa1c495ce623966d9fc8a187da80082334236a2a1c7e141763ffaf7a405067"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6eafc048ea3f1b3c136c71a86db393be36b5b3d9c87b1c25204e7d397cee9536"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:13c90064b224e10c14dcdf8086688d3f0e612db53766e7478d7754703295c7c8"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206a51077773c6c5d2ce1991327cda719063a47adc02bd703c56a662cdb6c58b"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e8f0c9d65da595cfe91713bc1222af9ecabd37971762cb830dea2fc3b3bb2acf"}, + {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8f0a4d179c9a941eb80c3a63cdb495e539e064f8054230844dcf2fcb812b71d3"}, + {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:830c88747dce8a3e7525defa68afd742b4580df6aa2fdd6f0855481e3994d391"}, + {file = "lxml-4.9.1-cp36-cp36m-win32.whl", hash = "sha256:1e1cf47774373777936c5aabad489fef7b1c087dcd1f426b621fda9dcc12994e"}, + {file = "lxml-4.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:5974895115737a74a00b321e339b9c3f45c20275d226398ae79ac008d908bff7"}, + {file = "lxml-4.9.1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1423631e3d51008871299525b541413c9b6c6423593e89f9c4cfbe8460afc0a2"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:2aaf6a0a6465d39b5ca69688fce82d20088c1838534982996ec46633dc7ad6cc"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:9f36de4cd0c262dd9927886cc2305aa3f2210db437aa4fed3fb4940b8bf4592c"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae06c1e4bc60ee076292e582a7512f304abdf6c70db59b56745cca1684f875a4"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:57e4d637258703d14171b54203fd6822fda218c6c2658a7d30816b10995f29f3"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6d279033bf614953c3fc4a0aa9ac33a21e8044ca72d4fa8b9273fe75359d5cca"}, + {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a60f90bba4c37962cbf210f0188ecca87daafdf60271f4c6948606e4dabf8785"}, + {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6ca2264f341dd81e41f3fffecec6e446aa2121e0b8d026fb5130e02de1402785"}, + {file = "lxml-4.9.1-cp37-cp37m-win32.whl", hash = "sha256:27e590352c76156f50f538dbcebd1925317a0f70540f7dc8c97d2931c595783a"}, + {file = "lxml-4.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:eea5d6443b093e1545ad0210e6cf27f920482bfcf5c77cdc8596aec73523bb7e"}, + {file = "lxml-4.9.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f05251bbc2145349b8d0b77c0d4e5f3b228418807b1ee27cefb11f69ed3d233b"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:487c8e61d7acc50b8be82bda8c8d21d20e133c3cbf41bd8ad7eb1aaeb3f07c97"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d1a92d8e90b286d491e5626af53afef2ba04da33e82e30744795c71880eaa21"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b570da8cd0012f4af9fa76a5635cd31f707473e65a5a335b186069d5c7121ff2"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ef87fca280fb15342726bd5f980f6faf8b84a5287fcc2d4962ea8af88b35130"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:93e414e3206779ef41e5ff2448067213febf260ba747fc65389a3ddaa3fb8715"}, + {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6653071f4f9bac46fbc30f3c7838b0e9063ee335908c5d61fb7a4a86c8fd2036"}, + {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:32a73c53783becdb7eaf75a2a1525ea8e49379fb7248c3eeefb9412123536387"}, + {file = "lxml-4.9.1-cp38-cp38-win32.whl", hash = "sha256:1a7c59c6ffd6ef5db362b798f350e24ab2cfa5700d53ac6681918f314a4d3b94"}, + {file = "lxml-4.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:1436cf0063bba7888e43f1ba8d58824f085410ea2025befe81150aceb123e345"}, + {file = "lxml-4.9.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:4beea0f31491bc086991b97517b9683e5cfb369205dac0148ef685ac12a20a67"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:41fb58868b816c202e8881fd0f179a4644ce6e7cbbb248ef0283a34b73ec73bb"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bd34f6d1810d9354dc7e35158aa6cc33456be7706df4420819af6ed966e85448"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:edffbe3c510d8f4bf8640e02ca019e48a9b72357318383ca60e3330c23aaffc7"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d949f53ad4fc7cf02c44d6678e7ff05ec5f5552b235b9e136bd52e9bf730b91"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:079b68f197c796e42aa80b1f739f058dcee796dc725cc9a1be0cdb08fc45b000"}, + {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9c3a88d20e4fe4a2a4a84bf439a5ac9c9aba400b85244c63a1ab7088f85d9d25"}, + {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4e285b5f2bf321fc0857b491b5028c5f276ec0c873b985d58d7748ece1d770dd"}, + {file = "lxml-4.9.1-cp39-cp39-win32.whl", hash = "sha256:ef72013e20dd5ba86a8ae1aed7f56f31d3374189aa8b433e7b12ad182c0d2dfb"}, + {file = "lxml-4.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:10d2017f9150248563bb579cd0d07c61c58da85c922b780060dcc9a3aa9f432d"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538747a9d7827ce3e16a8fdd201a99e661c7dee3c96c885d8ecba3c35d1032c"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0645e934e940107e2fdbe7c5b6fb8ec6232444260752598bc4d09511bd056c0b"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6daa662aba22ef3258934105be2dd9afa5bb45748f4f702a3b39a5bf53a1f4dc"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:603a464c2e67d8a546ddaa206d98e3246e5db05594b97db844c2f0a1af37cf5b"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c4b2e0559b68455c085fb0f6178e9752c4be3bba104d6e881eb5573b399d1eb2"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0f3f0059891d3254c7b5fb935330d6db38d6519ecd238ca4fce93c234b4a0f73"}, + {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c852b1530083a620cb0de5f3cd6826f19862bafeaf77586f1aef326e49d95f0c"}, + {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9"}, + {file = "lxml-4.9.1.tar.gz", hash = "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"}, +] manimpango = [ {file = "ManimPango-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc70c1ae3bb853b7244ea2c9b50c908e9d7a93062ec68315872e38771cc66969"}, {file = "ManimPango-0.4.1-cp310-cp310-win32.whl", hash = "sha256:5228e5326dc52753f4e6855ac4bf9667d78c0005315cddaf74fac5c2a6f87bc3"}, @@ -2906,36 +3237,36 @@ manimpango = [ {file = "ManimPango-0.4.1.tar.gz", hash = "sha256:f2da037ccdfe174040d3315001cc59bfc7405cd1b1191078bd4db0938005d649"}, ] mapbox-earcut = [ - {file = "mapbox_earcut-0.12.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:421dbfc321871e66afe9264165848c0d13a37b27156f8a42a642bf5820bafdda"}, - {file = "mapbox_earcut-0.12.11-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3285f55acc7628cec1a61c551a7225b9c78c4f849c39417c768019b4408f8536"}, - {file = "mapbox_earcut-0.12.11-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1fdbca4b14564e636e5ffb4c83f49c739bacf49ec590db9ca2c25e9642feb490"}, - {file = "mapbox_earcut-0.12.11-cp310-cp310-win32.whl", hash = "sha256:d26621f4ca8eff937d4539d5d0e59142fd6466ea161791640ea17547394ffc18"}, - {file = "mapbox_earcut-0.12.11-cp310-cp310-win_amd64.whl", hash = "sha256:cbcd8c2831a8ce848842b3e710e57db00cfdd3d7753cc67b1cc61d0c7dd91ca8"}, - {file = "mapbox_earcut-0.12.11-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4c4c55711d7877ea4d2f11d1422c46004121a2b1f4aab6c0b587eab2d87b3a6b"}, - {file = "mapbox_earcut-0.12.11-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4ebf5f1b3cc7ec0f90eb4f9479b8013da46ece2cf69c887fdfdee6bec1169eb6"}, - {file = "mapbox_earcut-0.12.11-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d438ef905fb3ec6cb1378c5b169888e0f36a7786354a9a2ae8b8d5e75fe5beee"}, - {file = "mapbox_earcut-0.12.11-cp36-cp36m-win32.whl", hash = "sha256:c9d8d4e61ad67ce5aeac7a948b4bb68bd2126d5fceccaaaf33a625b43225ba45"}, - {file = "mapbox_earcut-0.12.11-cp36-cp36m-win_amd64.whl", hash = "sha256:2357cc3402173b9ba601fe1d2abf55a2fc80a969680981e51fce3bd7524aab6f"}, - {file = "mapbox_earcut-0.12.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:83d6a8fc39ef55ddb1f47bd49523b11e7cf9f07292356b93ad18c58473282fd4"}, - {file = "mapbox_earcut-0.12.11-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2eb7b64ee5b003a71fd1108894fd7a579c87919e7cf5da9f865d5e9694934cd5"}, - {file = "mapbox_earcut-0.12.11-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64ca3752284345416834e591d9029d50dfa06661208f45d8b7e91f58e2610864"}, - {file = "mapbox_earcut-0.12.11-cp37-cp37m-win32.whl", hash = "sha256:8a90b6773db060474bbc1062c972a18f9dc4ea6940a47fb39090e60f821a9239"}, - {file = "mapbox_earcut-0.12.11-cp37-cp37m-win_amd64.whl", hash = "sha256:d90adb110d45198dcfc2b546648bd23b98737a38c6f0dea0e5949aeae3fca3dd"}, - {file = "mapbox_earcut-0.12.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cc3e8b1961f53f7bae3c6818ee7114ba0512aa3c0a8fb61818240ecd02fd22e4"}, - {file = "mapbox_earcut-0.12.11-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a31f96bc080e2f12fd39172baf891c5050bd56e2f60608d45139fd0ce489f08"}, - {file = "mapbox_earcut-0.12.11-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dc4c69b2953b1267804f34044c483420f902514ab3cdf02fe454b4fd7192e6a2"}, - {file = "mapbox_earcut-0.12.11-cp38-cp38-win32.whl", hash = "sha256:30c2d30a00ad28d03026dba76de870b2e66fe01a7b340f3cb459b65a4c902ee5"}, - {file = "mapbox_earcut-0.12.11-cp38-cp38-win_amd64.whl", hash = "sha256:6e01b9a9bc15d85e7dcbec52148e9851760a67e097eb63e4bc354e551ab4ae6d"}, - {file = "mapbox_earcut-0.12.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f69ac829ce208bcf85d47e0bf6409b79fc81ae7ca390de3ce2c4e971693328d8"}, - {file = "mapbox_earcut-0.12.11-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4eff01f3dc0f62ad4ea38da0ef16a242d613aa4efa38eb924677d8427de2e20c"}, - {file = "mapbox_earcut-0.12.11-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:69da117d3716b5e1f052d7ffc93411a8651bb7c8a7cc41c4ed362e07a45eaae6"}, - {file = "mapbox_earcut-0.12.11-cp39-cp39-win32.whl", hash = "sha256:8faaa8239a6c6db67220a1908b232e0d673c4ba5d06e0943fce0e4d9908ca796"}, - {file = "mapbox_earcut-0.12.11-cp39-cp39-win_amd64.whl", hash = "sha256:4c7c297063c2cd3608d42b174303dfb32f3b9252cf115bed06eb3c64875d3458"}, - {file = "mapbox_earcut-0.12.11-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:96783c3f818f0844d9153a45312142b4e1bda9c284eb4828bba1a9e1fbeb268e"}, - {file = "mapbox_earcut-0.12.11-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a39a27a205189476e6404a855652c834a1cef087207131d3515aff7ac06b1a1f"}, - {file = "mapbox_earcut-0.12.11-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:18cd01be27ec85357e2f9ea0bbe7ce2f71d593966568e5cf12a9b7e19bf0e8d1"}, - {file = "mapbox_earcut-0.12.11-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6542cc54b330c876e62dad15e98dd4df18e2fd75ffb5b9c84d0629bd085ea123"}, - {file = "mapbox_earcut-0.12.11.tar.gz", hash = "sha256:2808757f8a95eb816d3ce225528c9cb15355afe175f3bcb6837eb7700972e0b9"}, + {file = "mapbox_earcut-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1ced70e48725bbba7da442e36a013df447ebd1b1cc2cfac02222a4b78f03615c"}, + {file = "mapbox_earcut-1.0.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b106999b3880188891e1e87f2c5abbf739bc09ec89f8044e196fd4607d24ccf0"}, + {file = "mapbox_earcut-1.0.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:653e03417a308febcd2cb74812d7077dbd52c47da492c9b2e5f9c42adb2d659a"}, + {file = "mapbox_earcut-1.0.0-cp310-cp310-win32.whl", hash = "sha256:b5a74951b9cb827f6bf77cf6f6afc9af5dc57b2e6257770d7d256a1aa0787142"}, + {file = "mapbox_earcut-1.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f630f135e20a781f9d7ce7aa0bba89ebd46d46344970db9aa8cbcf6eb1cb4b94"}, + {file = "mapbox_earcut-1.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:265d60d64a91af267fe9c747625341a5d042009c5436550037cebed69c701c62"}, + {file = "mapbox_earcut-1.0.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7f9245ea3eeab942020058376be0d2368940ecb0a659d5ba83579cf11699cd8a"}, + {file = "mapbox_earcut-1.0.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:55899708fe29ac8213e040ce836afdfe3cf4d63392c78c0c03ccc1b3350fbd25"}, + {file = "mapbox_earcut-1.0.0-cp36-cp36m-win32.whl", hash = "sha256:b7d3e5956d24d9d987c435dadecca723c5db6e7e46c824a8dbd98adb97057442"}, + {file = "mapbox_earcut-1.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6fe02ca7bb1ec5bd5f288807beb880d5677748957e8ecd797aee91b18a235c10"}, + {file = "mapbox_earcut-1.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1c1f0746b7921dc8e09c34774671c679771e36782cecd21e7ceeeccad70dfc35"}, + {file = "mapbox_earcut-1.0.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:faff85293f3baf6fe53db5958dddcbb4f9b883f344921c378f82ddce55eff5a4"}, + {file = "mapbox_earcut-1.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cf4dd5768bc733e6fe0cc6a907e168c4a9777a1d5e148b5daa1edf45ce7c3e9f"}, + {file = "mapbox_earcut-1.0.0-cp37-cp37m-win32.whl", hash = "sha256:8b8f8fe1b42a134c7a113c123be74dca64632e672d82aa4b4024f8453f590d71"}, + {file = "mapbox_earcut-1.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:991bfea36ba73f1cbd22aa93a2ff4beec13657ac5acd7a602a912eb2f84f4860"}, + {file = "mapbox_earcut-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fa58aabef34ffd76b262efec7bc9c9998c1c6561c192b7e7ac60b68c27c6b145"}, + {file = "mapbox_earcut-1.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f62d8b7cb57559ca9aaf5cde8cebe309eb493d344b24b2934e18945e05e89221"}, + {file = "mapbox_earcut-1.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98a412757740faeede3167c54426917076a863ccc74847f9e58bfcf51f0b7be7"}, + {file = "mapbox_earcut-1.0.0-cp38-cp38-win32.whl", hash = "sha256:7cb4d98af4c1b256483903a909099d7a84664e9a5aec5818c84d44f1104c3144"}, + {file = "mapbox_earcut-1.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:4229ec0fbe1baf88cd9a8f17b76d905323ee7daade0f19f573bd488ca8fdc06f"}, + {file = "mapbox_earcut-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:175200a3a7d1db037592b48c3b470695ff969ed0aaa69a00f7526d8502848756"}, + {file = "mapbox_earcut-1.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cefb0fe3427f2a207753e2eb869de05893f1156199474e998c9427bdb465b50b"}, + {file = "mapbox_earcut-1.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7792378a4a13e472ae5021104dfd423fd6e014a67bdbe27c0c49b1df47f6f050"}, + {file = "mapbox_earcut-1.0.0-cp39-cp39-win32.whl", hash = "sha256:4fd85aee997165acd42ba726ba7f087f72b72f53cc0b37d430987c9bf1acc2c1"}, + {file = "mapbox_earcut-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:8f3c4df83fa5f7c942d18fb0433bf903dc22b447860094444dd960dd5b85c526"}, + {file = "mapbox_earcut-1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e4828e9002384e7d7ad1a213f61029f8e17d6fa9a30408d64f9d755f0c11762b"}, + {file = "mapbox_earcut-1.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:10a91eabe076f474375accfc164e91af8bf2b15675d443b08b938315cc234be9"}, + {file = "mapbox_earcut-1.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c5ee744864f7cc9b0b9dd6031871731e2340cf65f18b0ca64121f2682be0ba4e"}, + {file = "mapbox_earcut-1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:cf35d52e0a0413bcb878706c1a565a2939d49a2e011498d905b7bc8d1ad12543"}, + {file = "mapbox_earcut-1.0.0.tar.gz", hash = "sha256:997ab14b9afbc14b1aede880b8f57efc7f28d6811a08db0adf1804b63bab0d9b"}, ] markdown-it-py = [ {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, @@ -2983,10 +3314,46 @@ markupsafe = [ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] -matplotlib = [] +matplotlib = [ + {file = "matplotlib-3.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a206a1b762b39398efea838f528b3a6d60cdb26fe9d58b48265787e29cd1d693"}, + {file = "matplotlib-3.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd45a6f3e93a780185f70f05cf2a383daed13c3489233faad83e81720f7ede24"}, + {file = "matplotlib-3.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d62880e1f60e5a30a2a8484432bcb3a5056969dc97258d7326ad465feb7ae069"}, + {file = "matplotlib-3.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ab29589cef03bc88acfa3a1490359000c18186fc30374d8aa77d33cc4a51a4a"}, + {file = "matplotlib-3.5.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2886cc009f40e2984c083687251821f305d811d38e3df8ded414265e4583f0c5"}, + {file = "matplotlib-3.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c995f7d9568f18b5db131ab124c64e51b6820a92d10246d4f2b3f3a66698a15b"}, + {file = "matplotlib-3.5.3-cp310-cp310-win32.whl", hash = "sha256:6bb93a0492d68461bd458eba878f52fdc8ac7bdb6c4acdfe43dba684787838c2"}, + {file = "matplotlib-3.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:2e6d184ebe291b9e8f7e78bbab7987d269c38ea3e062eace1fe7d898042ef804"}, + {file = "matplotlib-3.5.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6ea6aef5c4338e58d8d376068e28f80a24f54e69f09479d1c90b7172bad9f25b"}, + {file = "matplotlib-3.5.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:839d47b8ead7ad9669aaacdbc03f29656dc21f0d41a6fea2d473d856c39c8b1c"}, + {file = "matplotlib-3.5.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3b4fa56159dc3c7f9250df88f653f085068bcd32dcd38e479bba58909254af7f"}, + {file = "matplotlib-3.5.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:94ff86af56a3869a4ae26a9637a849effd7643858a1a04dd5ee50e9ab75069a7"}, + {file = "matplotlib-3.5.3-cp37-cp37m-win32.whl", hash = "sha256:35a8ad4dddebd51f94c5d24bec689ec0ec66173bf614374a1244c6241c1595e0"}, + {file = "matplotlib-3.5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:43e9d3fa077bf0cc95ded13d331d2156f9973dce17c6f0c8b49ccd57af94dbd9"}, + {file = "matplotlib-3.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:22227c976ad4dc8c5a5057540421f0d8708c6560744ad2ad638d48e2984e1dbc"}, + {file = "matplotlib-3.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf618a825deb6205f015df6dfe6167a5d9b351203b03fab82043ae1d30f16511"}, + {file = "matplotlib-3.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9befa5954cdbc085e37d974ff6053da269474177921dd61facdad8023c4aeb51"}, + {file = "matplotlib-3.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3840c280ebc87a48488a46f760ea1c0c0c83fcf7abbe2e6baf99d033fd35fd8"}, + {file = "matplotlib-3.5.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dacddf5bfcec60e3f26ec5c0ae3d0274853a258b6c3fc5ef2f06a8eb23e042be"}, + {file = "matplotlib-3.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b428076a55fb1c084c76cb93e68006f27d247169f056412607c5c88828d08f88"}, + {file = "matplotlib-3.5.3-cp38-cp38-win32.whl", hash = "sha256:874df7505ba820e0400e7091199decf3ff1fde0583652120c50cd60d5820ca9a"}, + {file = "matplotlib-3.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:b28de401d928890187c589036857a270a032961411934bdac4cf12dde3d43094"}, + {file = "matplotlib-3.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3211ba82b9f1518d346f6309df137b50c3dc4421b4ed4815d1d7eadc617f45a1"}, + {file = "matplotlib-3.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6fe807e8a22620b4cd95cfbc795ba310dc80151d43b037257250faf0bfcd82bc"}, + {file = "matplotlib-3.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5c096363b206a3caf43773abebdbb5a23ea13faef71d701b21a9c27fdcef72f4"}, + {file = "matplotlib-3.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bcdfcb0f976e1bac6721d7d457c17be23cf7501f977b6a38f9d38a3762841f7"}, + {file = "matplotlib-3.5.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e64ac9be9da6bfff0a732e62116484b93b02a0b4d4b19934fb4f8e7ad26ad6a"}, + {file = "matplotlib-3.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:73dd93dc35c85dece610cca8358003bf0760d7986f70b223e2306b4ea6d1406b"}, + {file = "matplotlib-3.5.3-cp39-cp39-win32.whl", hash = "sha256:879c7e5fce4939c6aa04581dfe08d57eb6102a71f2e202e3314d5fbc072fd5a0"}, + {file = "matplotlib-3.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:ab8d26f07fe64f6f6736d635cce7bfd7f625320490ed5bfc347f2cdb4fae0e56"}, + {file = "matplotlib-3.5.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:99482b83ebf4eb6d5fc6813d7aacdefdd480f0d9c0b52dcf9f1cc3b2c4b3361a"}, + {file = "matplotlib-3.5.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f814504e459c68118bf2246a530ed953ebd18213dc20e3da524174d84ed010b2"}, + {file = "matplotlib-3.5.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57f1b4e69f438a99bb64d7f2c340db1b096b41ebaa515cf61ea72624279220ce"}, + {file = "matplotlib-3.5.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d2484b350bf3d32cae43f85dcfc89b3ed7bd2bcd781ef351f93eb6fb2cc483f9"}, + {file = "matplotlib-3.5.3.tar.gz", hash = "sha256:339cac48b80ddbc8bfd05daae0a3a73414651a8596904c2a881cfd1edb65f26c"}, +] matplotlib-inline = [ - {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, - {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, + {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"}, @@ -2997,14 +3364,23 @@ mdit-py-plugins = [ {file = "mdit_py_plugins-0.3.0-py3-none-any.whl", hash = "sha256:b1279701cee2dbf50e188d3da5f51fee8d78d038cdf99be57c6b9d1aa93b4073"}, ] mdurl = [ - {file = "mdurl-0.1.1-py3-none-any.whl", hash = "sha256:6a8f6804087b7128040b2fb2ebe242bdc2affaeaa034d5fc9feeed30b443651b"}, - {file = "mdurl-0.1.1.tar.gz", hash = "sha256:f79c9709944df218a4cdb0fcc0b0c7ead2f44594e3e84dc566606f04ad749c20"}, + {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-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, - {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, + {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.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:186f8ab2b869c56f677dc87de0577a60790fb9306bd5149cedc433a39e9291e5"}, + {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de252103b24a8dc40c7f6e1755e29bc9263c33b92141787b50c7ab0266c74906"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bcfcec3bc3b9a1ee19e94fa524913fd45c37214ea69301a6911e8e53f966029"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d76b0fb489a5dc6da591b979f8c471bb5b67409afaa9fe4569bc0abf25221f4"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_27_x86_64.whl", hash = "sha256:792ffe1ec233ed5fcfb0c14955a7f944d64c0d49713ff8b9c5fa3176d96f05c3"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:1f9ed0bc0d706124a01be2ad59b5774bb3b023e61dcf39faf7c4c7ef4b9f4f75"}, + {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7c2fce8b7a68f3df9189a19f424478e1d853cfd3e142efd1eb0d4cdf44148d7"}, + {file = "moderngl-5.6.4-cp310-cp310-win32.whl", hash = "sha256:0c6b482f678641e56bd44acecd10eddf74d2cd31e472eff6cca05493cf01e2c9"}, + {file = "moderngl-5.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:28b517fc56c9ab9eb1f5833f7d7b1274d3719b962f95f55ccd8a0f6db884a92b"}, {file = "moderngl-5.6.4-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:bc3764d67f037b67051871345a1d0b7a3d2c19cb5c0c0af0a84c532e802d6642"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:90006d9dfd5333da604a7d26b2a5e70e1a570f291cd745b8bf80e4833d8821b6"}, {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:af44437545380a840dafd09658eb56592831dbd4fb481d320249d0d42c591bae"}, @@ -3013,21 +3389,45 @@ moderngl = [ {file = "moderngl-5.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:331fd4bce60b10a08eed81a3ed4c70b7c297c38f981fdf3968d03a1c892af247"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1bd864b5cc2fc1255785e33575cec98fa5ded698503c4f8f3fa9230abeaa3a04"}, {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b22534529f5bc52c1fe43336787c06d51123ae978fb56e74e47cabd85056c934"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5151ccf38af80ce8600eac089df1c814eb72aa99c8768307348c1a170104b7e"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ef57f65c639d12d534dce70e5c08965f0856ac371c669c7586904b8db6453eb"}, + {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0032c07b31bec50b26bba7ee7999e0f697000b31456bfa84391614bb92dba376"}, {file = "moderngl-5.6.4-cp36-cp36m-win32.whl", hash = "sha256:ee5b1eced39d7f6dc68782c2abf01c1130a40b6d83d333d175ee71adbea7c721"}, {file = "moderngl-5.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:52ee915a559762f0e992344961b35e0d241be32f8aa7464494e958f777e0534c"}, {file = "moderngl-5.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f83f6ab1fafdba2d9c06a7a1c8a4e460689ea1d514146606acc74f14e0831d93"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c350e06affea9fabc636b2350cf6e58d83ee2e7264527eee0f5d142c167f5463"}, {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3eb65afc8ec4a1d4a4c48696fb0f4f6cf7a7ada6bef97818d717dbca73c57b11"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ec09bb3382d36e5ef3e627e85744b719db1175c3a3fdbadf9acde48eb1aca6"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23b6b30c5a16807d9d2b92f343fcdca8713a88801d8afa985decd302bb6ef7e9"}, + {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5eb217b7726511d2382bfdd56b2a8ff5489aa7d1d73bf4f854343b07df286fa9"}, {file = "moderngl-5.6.4-cp37-cp37m-win32.whl", hash = "sha256:4fd721eb83e73d34c3f7b5a11aec656fef461b51bbe7503b07ea27370c593cbd"}, {file = "moderngl-5.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:01c71d94dbd59b5d37ead463991e2998c0924426cffa393b9da2b8334551c998"}, + {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:46e7e03360eafa77159e0d6142904de0d2e9400254414820bbc2d0ca16b14388"}, {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2ec6ecd845f21ba44a08c11521cb71f2a9c2ea2ec189b7ed30d17837d392d70"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:40f74a2246e5302f93f2d46f76c0d2a26cbed1eb29731674c4052476f1e9c9ea"}, {file = "moderngl-5.6.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5e158e6881034c7e1d0c583d7c82ff608439606f2359dc6098e4be4fd93cef9d"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eb8fb5efab2716938308732d16d0caf1a195015d84d73f2b73e3adacd228ba6"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59907d8855dd3ccf1950e8f43f5a1a7cdd93910d8edf538bf52e62098be22360"}, + {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8037b6934843000d5fecd2b1933d3894687123fc9afdb19af52a9a628971163d"}, {file = "moderngl-5.6.4-cp38-cp38-win32.whl", hash = "sha256:a28dc741469eeb69549ee85b4ddbf8e9cfca6a2b19ce0406df9fde20f78082c8"}, {file = "moderngl-5.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:ce87962b91635d857cac4a753c5d5f647d94dc66dcb0f090bb8d758fd226c3e8"}, + {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d4c56e15a5fb29de0295891ec3b153e2bd8aeada0c0825135aa5851fa481ff28"}, {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fb139bcdd25eae2c546e5788e9d8719f6c4b18a2ba68a9df31699b4ac57d62d"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9645afaa1704b2628d8a58be0760243d9954a62902283b176ea00a55b54eafe"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a3aaa15eb4d43b79e06a46945869feb13f325312ad63666ef2b7d3e216e3a09"}, + {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a07531c6b0f3da3058bd8927bc6c75eface98ce1416d8be4072b9b11b314b718"}, {file = "moderngl-5.6.4-cp39-cp39-win32.whl", hash = "sha256:fc5cc1601a3df8f45f1901c6b9960731e0619d1781b0d036e12341fbf2ef55d3"}, {file = "moderngl-5.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:1c74b71c9acee9f0e69807a086d76e92f37c1960c3bb1d6a6e2472fd03f7be5b"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1927a52fd3465c508045a1c4a8ea8c793399830d48458d431936f24f8827f136"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d04747cc9a96f786d04c8a176d5d2cbb51159efd66287d0e676ac674f53e861"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9092c50a2bb293be770f6f0ae5f1cb940848bf03682696c473a6d3f2c7710d2"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571e524fde685e21dbe132f4eb7bb223cfc235dc917a4cf122bc44897be18e89"}, + {file = "moderngl-5.6.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ee02dba4b32d7a165a36c797ce495d71deb085a7e29cfa7f1236fa7ccdfc6160"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0c02fdd386c45ad5d5053a436da64181a7821a042f6665c4ae415edfbdfe244c"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e2b40f1e11ee5f251a0d564e6a5d285ff91adf361e84f6912fc10959b92bd83"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d5f918dda6dc1ec5465d7105b06c5525041fbc368df5d4636145006ce3d303"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a6bd0e342388b931954671ccf8300ab36cc7d8c991547581efa6df5628bda8b"}, + {file = "moderngl-5.6.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:890caba3795a0288259d76a2cee014c6ffc00619bef179a8d0a87fd9c16a3729"}, {file = "moderngl-5.6.4.tar.gz", hash = "sha256:8c6d04559f5e3bf75a18525cd46d213c0f3a8409363718978e6de691bdb551fb"}, ] moderngl-window = [ @@ -3069,14 +3469,17 @@ 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 = [] +nbclassic = [ + {file = "nbclassic-0.4.3-py3-none-any.whl", hash = "sha256:4b01076effdac53e775cd1b6a4e891663568b32621468e205b502a23b2921899"}, + {file = "nbclassic-0.4.3.tar.gz", hash = "sha256:f03111b2cebaa69b88370a7b23b19b2b37c9bb71767f1828cdfd7a047eae8edd"}, +] nbclient = [ - {file = "nbclient-0.6.6-py3-none-any.whl", hash = "sha256:09bae4ea2df79fa6bc50aeb8278d8b79d2036792824337fa6eee834afae17312"}, - {file = "nbclient-0.6.6.tar.gz", hash = "sha256:0df76a7961d99a681b4796c74a1f2553b9f998851acc01896dce064ad19a9027"}, + {file = "nbclient-0.6.7-py3-none-any.whl", hash = "sha256:d4e32459e7e96783285d1daac92dc2c60ee7b8a82b7cf7d2e55be9d89d7ac463"}, + {file = "nbclient-0.6.7.tar.gz", hash = "sha256:3c5a7fc6bb74be7d31edf2817b44501a65caa99e5e56363bc359649b97cd24b9"}, ] nbconvert = [ - {file = "nbconvert-6.5.0-py3-none-any.whl", hash = "sha256:c56dd0b8978a1811a5654f74c727ff16ca87dd5a43abd435a1c49b840fcd8360"}, - {file = "nbconvert-6.5.0.tar.gz", hash = "sha256:223e46e27abe8596b8aed54301fadbba433b7ffea8196a68fd7b1ff509eee99d"}, + {file = "nbconvert-7.0.0-py3-none-any.whl", hash = "sha256:26843ae233167e8aae31c20e3e1d91f431f04c9f34363bbe2dd0d247f772641c"}, + {file = "nbconvert-7.0.0.tar.gz", hash = "sha256:fd1e361da30e30e4c5a5ae89f7cae95ca2a4d4407389672473312249a7ba0060"}, ] nbformat = [ {file = "nbformat-5.4.0-py3-none-any.whl", hash = "sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad"}, @@ -3219,6 +3622,10 @@ pillow = [ {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"}, {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"}, ] +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.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, @@ -3227,12 +3634,18 @@ 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 = [] +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.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, ] -prompt-toolkit = [] +prompt-toolkit = [ + {file = "prompt_toolkit-3.0.30-py3-none-any.whl", hash = "sha256:d8916d3f62a7b67ab353a952ce4ced6a1d2587dfe9ef8ebc30dd7c386751f289"}, + {file = "prompt_toolkit-3.0.30.tar.gz", hash = "sha256:859b283c50bde45f5f97829f77a4674d1c1fcd88539364f1b28a37805cfd89c0"}, +] psutil = [ {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"}, {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"}, @@ -3330,8 +3743,8 @@ pyglet = [ {file = "pyglet-1.5.26.zip", hash = "sha256:ee8c5e0b5b87df84188e20e552982eba8da00944b4c5560f1cfdd5c9714d19b0"}, ] pygments = [ - {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, - {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, + {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.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"}, @@ -3423,8 +3836,8 @@ python-dateutil = [ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] pytz = [ - {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, - {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, + {file = "pytz-2022.2.1-py2.py3-none-any.whl", hash = "sha256:220f481bdafa09c3955dfbdddb7b57780e9a94f5127e35456a48589b9e0c0197"}, + {file = "pytz-2022.2.1.tar.gz", hash = "sha256:cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5"}, ] pywin32 = [ {file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"}, @@ -3443,11 +3856,11 @@ pywin32 = [ {file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"}, ] pywinpty = [ - {file = "pywinpty-2.0.6-cp310-none-win_amd64.whl", hash = "sha256:7fadc5265484c7d7c84554b9f1cfd7acf6383a877c1cfb3ee77d51179145b3ce"}, - {file = "pywinpty-2.0.6-cp37-none-win_amd64.whl", hash = "sha256:906a3048ecfec6ece1b141594ebbbcd5c4751960714c50524e8e907bb77c9207"}, - {file = "pywinpty-2.0.6-cp38-none-win_amd64.whl", hash = "sha256:5e4b2167e813575bf495b46adb2d88be5c470d9daf49d488900350853e95248f"}, - {file = "pywinpty-2.0.6-cp39-none-win_amd64.whl", hash = "sha256:f7ae5d29f1c3d028e06032f8d267b51fd72ea219b9bba3e2a972a7bc26a25a87"}, - {file = "pywinpty-2.0.6.tar.gz", hash = "sha256:a91a77d23f29a58b44f62a9474a31ed67df1277cddb69665275f8d22429046ac"}, + {file = "pywinpty-2.0.7-cp310-none-win_amd64.whl", hash = "sha256:d56361ed2bd3395347882a7a4e6246359e745a233e89c91786ab3d9421323c17"}, + {file = "pywinpty-2.0.7-cp37-none-win_amd64.whl", hash = "sha256:2d62ede3ed10feb0901b3b4667201766a741b6a2c69f27be623ba9fe9348447b"}, + {file = "pywinpty-2.0.7-cp38-none-win_amd64.whl", hash = "sha256:c3b7e6a2f0e5f86e0dc5cb5e4fec7de19adacc6900232e4a48a2ecf04bae447f"}, + {file = "pywinpty-2.0.7-cp39-none-win_amd64.whl", hash = "sha256:80a6713a586401c2a19efd2969ffd019eb85f18442611a3880e3d618887d2f84"}, + {file = "pywinpty-2.0.7.tar.gz", hash = "sha256:f52b2e51c46dac40708ede1d42577f3ddb9d7cf8acaa36c8e27b3d3b975f4c95"}, ] pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, @@ -3485,63 +3898,79 @@ pyyaml = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] pyzmq = [ - {file = "pyzmq-23.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:22ac0243a41798e3eb5d5714b28c2f28e3d10792dffbc8a5fca092f975fdeceb"}, - {file = "pyzmq-23.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f685003d836ad0e5d4f08d1e024ee3ac7816eb2f873b2266306eef858f058133"}, - {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d4651de7316ec8560afe430fb042c0782ed8ac54c0be43a515944d7c78fddac8"}, - {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bcc6953e47bcfc9028ddf9ab2a321a3c51d7cc969db65edec092019bb837959f"}, - {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e08671dc202a1880fa522f921f35ca5925ba30da8bc96228d74a8f0643ead9c"}, - {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de727ea906033b30527b4a99498f19aca3f4d1073230a958679a5b726e2784e0"}, - {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5aa9da520e4bb8cee8189f2f541701405e7690745094ded7a37b425d60527ea"}, - {file = "pyzmq-23.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f3ff6abde52e702397949054cb5b06c1c75b5d6542f6a2ce029e46f71ffbbbf2"}, - {file = "pyzmq-23.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e2e2db5c6ef376e97c912733dfc24406f5949474d03e800d5f07b6aca4d870af"}, - {file = "pyzmq-23.2.0-cp310-cp310-win32.whl", hash = "sha256:e669913cb2179507628419ec4f0e453e48ce6f924de5884d396f18c31836089c"}, - {file = "pyzmq-23.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:a3dc339f7bc185d5fd0fd976242a5baf35de404d467e056484def8a4dd95868b"}, - {file = "pyzmq-23.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:30c365e60c39c53f8eea042b37ea28304ffa6558fb7241cf278745095a5757da"}, - {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c2d8b69a2bf239ae3d987537bf3fbc2b044a405394cf4c258fc684971dd48b2"}, - {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:602835e5672ca9ca1d78e6c148fb28c4f91b748ebc41fbd2f479d8763d58bc9b"}, - {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:831da96ba3f36cc892f0afbb4fb89b28b61b387261676e55d55a682addbd29f7"}, - {file = "pyzmq-23.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c8dec8a2f3f0bb462e6439df436cd8c7ec37968e90b4209ac621e7fbc0ed3b00"}, - {file = "pyzmq-23.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:814e5aaf0c3be9991a59066eafb2d6e117aed6b413e3e7e9be45d4e55f5e2748"}, - {file = "pyzmq-23.2.0-cp36-cp36m-win32.whl", hash = "sha256:8496a2a5efd055c61ac2c6a18116c768a25c644b6747dcfde43e91620ab3453c"}, - {file = "pyzmq-23.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:60746a7e8558655420a69441c0a1d47ed225ed3ac355920b96a96d0554ef7e6b"}, - {file = "pyzmq-23.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5cb642e94337b0c76c9c8cb9bfb0f8a78654575847d080d3e1504f312d691fc3"}, - {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:444f7d615d5f686d0ef508b9edfa8a286e6d89f449a1ba37b60ef69d869220a3"}, - {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c9638e0057e3f1a8b7c5ce33c7575349d9183a033a19b5676ad55096ae36820b"}, - {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:004a431dfa0459123e6f4660d7e3c4ac19217d134ca38bacfffb2e78716fe944"}, - {file = "pyzmq-23.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5592fb4316f895922b1cacb91b04a0fa09d6f6f19bbab4442b4d0a0825177b93"}, - {file = "pyzmq-23.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c0a5f987d73fd9b46c3d180891f829afda714ab6bab30a1218724d4a0a63afd8"}, - {file = "pyzmq-23.2.0-cp37-cp37m-win32.whl", hash = "sha256:d11628212fd731b8986f1561d9bb3f8c38d9c15b330c3d8a88963519fbcd553b"}, - {file = "pyzmq-23.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:558f5f636e3e65f261b64925e8b190e8689e334911595394572cc7523879006d"}, - {file = "pyzmq-23.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61b97f624da42813f74977425a3a6144d604ea21cf065616d36ea3a866d92c1c"}, - {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:693c96ae4d975eb8efa1639670e9b1fac0c3f98b7845b65c0f369141fb4bb21f"}, - {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b054525c9f7e240562185bf21671ca16d56bde92e9bd0f822c07dec7626b704"}, - {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:859059caf564f0c9398c9005278055ed3d37af4d73de6b1597821193b04ca09b"}, - {file = "pyzmq-23.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8355744fdbdeac5cfadfa4f38b82029b5f2b8cab7472a33453a217a7f3a9dce2"}, - {file = "pyzmq-23.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:420b9abd1a7330687a095373b8280a20cdee04342fbc8ccb3b56d9ec8efd4e62"}, - {file = "pyzmq-23.2.0-cp38-cp38-win32.whl", hash = "sha256:59928dfebe93cf1e203e3cb0fd5d5dd384da56b99c8305f2e1b0a933751710f6"}, - {file = "pyzmq-23.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:c882f1d4f96fbd807e92c334251d8ebd159a1ef89059ccd386ddea83fdb91bd8"}, - {file = "pyzmq-23.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:ced12075cdf3c7332ecc1960f77f7439d5ebb8ea20bbd3c34c8299e694f1b0a1"}, - {file = "pyzmq-23.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3a4d87342c2737fbb9eee5c33c792db27b36b04957b4e6b7edd73a5b239a2a13"}, - {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:99cedf38eaddf263cf7e2a50e405f12c02cedf6d9df00a0d9c5d7b9417b57f76"}, - {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1610260cc672975723fcf7705c69a95f3b88802a594c9867781bedd9b13422c"}, - {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c223a13555444707a0a7ebc6f9ee63053147c8c082bd1a31fd1207a03e8b0500"}, - {file = "pyzmq-23.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f5fdb00d65ec44b10cc6b9b6318ef1363b81647a4aa3270ca39565eadb2d1201"}, - {file = "pyzmq-23.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:984b232802eddf9f0be264a4d57a10b3a1fd7319df14ee6fc7b41c6d155a3e6c"}, - {file = "pyzmq-23.2.0-cp39-cp39-win32.whl", hash = "sha256:f146648941cadaaaf01254a75651a23c08159d009d36c5af42a7cc200a5e53ec"}, - {file = "pyzmq-23.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:83005d8928f8a5cebcfb33af3bfb84b1ad65d882b899141a331cc5d07d89f093"}, - {file = "pyzmq-23.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fee86542dc4ee8229e023003e3939b4d58cc2453922cf127778b69505fc9064b"}, - {file = "pyzmq-23.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5d57542429df6acff02ff022067aa75b677603cee70e3abb9742787545eec966"}, - {file = "pyzmq-23.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:057b154471e096e2dda147f7b057041acc303bb7ca4aa24c3b88c6cecdd78717"}, - {file = "pyzmq-23.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5d92e7cbeab7f70b08cc0f27255b0bb2500afc30f31075bca0b1cb87735d186c"}, - {file = "pyzmq-23.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eb4a573a8499685d62545e806d8fd143c84ac8b3439f925cd92c8763f0ed9bd7"}, - {file = "pyzmq-23.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da338e2728410d74ddeb1479ec67cfba73311607037455a40f92b6f5c62bf11d"}, - {file = "pyzmq-23.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1b2a21f595f8cc549abd6c8de1fcd34c83441e35fb24b8a59bf161889c62a486"}, - {file = "pyzmq-23.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8c0f4d6f8c985bab83792be26ff3233940ba42e22237610ac50cbcfc10a5c235"}, - {file = "pyzmq-23.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bbabd1df23bf63ae829e81200034c0e433499275a6ed29ca1a912ea7629426d9"}, - {file = "pyzmq-23.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21552624ce69e69f7924f413b802b1fb554f4c0497f837810e429faa1cd4f163"}, - {file = "pyzmq-23.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c616893a577e9d6773a3836732fd7e2a729157a108b8fccd31c87512fa01671a"}, - {file = "pyzmq-23.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ce4f71e17fa849de41a06109030d3f6815fcc33338bf98dd0dde6d456d33c929"}, - {file = "pyzmq-23.2.0.tar.gz", hash = "sha256:a51f12a8719aad9dcfb55d456022f16b90abc8dde7d3ca93ce3120b40e3fa169"}, + {file = "pyzmq-23.2.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:a3fd44b5046d247e7f0f1660bcafe7b5fb0db55d0934c05dd57dda9e1f823ce7"}, + {file = "pyzmq-23.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2141e6798d5981be04c08996d27962086a1aa3ea536fe9cf7e89817fd4523f86"}, + {file = "pyzmq-23.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a39ddb0431a68954bd318b923230fa5b649c9c62b0e8340388820c5f1b15bd2"}, + {file = "pyzmq-23.2.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e06747014a5ad1b28cebf5bc1ddcdaccfb44e9b441d35e6feb1286c8a72e54be"}, + {file = "pyzmq-23.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e0113d70b095339e99bb522fe7294f5ae6a7f3b2b8f52f659469a74b5cc7661"}, + {file = "pyzmq-23.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:71b32a1e827bdcbf73750e60370d3b07685816ff3d8695f450f0f8c3226503f8"}, + {file = "pyzmq-23.2.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:55568a020ad2cae9ae36da6058e7ca332a56df968f601cbdb7cf6efb2a77579a"}, + {file = "pyzmq-23.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8c02a0cd39dc01659b3d6cb70bb3a41aebd9885fd78239acdd8d9c91351c4568"}, + {file = "pyzmq-23.2.1-cp310-cp310-win32.whl", hash = "sha256:e1fe30bcd5aea5948c42685fad910cd285eacb2518ea4dc6c170d6b535bee95d"}, + {file = "pyzmq-23.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:650389bbfca73955b262b2230423d89992f38ec48033307ae80e700eaa2fbb63"}, + {file = "pyzmq-23.2.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:e753eee6d3b93c5354e8ba0a1d62956ee49355f0a36e00570823ef64e66183f5"}, + {file = "pyzmq-23.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f07016e3cf088dbfc6e7c5a7b3f540db5c23b0190d539e4fd3e2b5e6beffa4b5"}, + {file = "pyzmq-23.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4805af9614b0b41b7e57d17673459facf85604dac502a5a9244f6e8c9a4de658"}, + {file = "pyzmq-23.2.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39dd252b683816935702825e5bf775df16090619ced9bb4ba68c2d0b6f0c9b18"}, + {file = "pyzmq-23.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:84678153432241bcdca2210cf4ff83560b200556867aea913ffbb960f5d5f340"}, + {file = "pyzmq-23.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:90d88f9d9a2ae6cfb1dc4ea2d1710cdf6456bc1b9a06dd1bb485c5d298f2517e"}, + {file = "pyzmq-23.2.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:794871988c34727c7f79bdfe2546e6854ae1fa2e1feb382784f23a9c6c63ecb3"}, + {file = "pyzmq-23.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c56b1a62a1fb87565343c57b6743fd5da6e138b8c6562361d7d9b5ce4acf399a"}, + {file = "pyzmq-23.2.1-cp311-cp311-win32.whl", hash = "sha256:c3ebf1668664d20c8f7d468955f18379b7d1f7bc8946b13243d050fa3888c7ff"}, + {file = "pyzmq-23.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:ec9803aca9491fd6f0d853d2a6147f19f8deaaa23b1b713d05c5d09e56ea7142"}, + {file = "pyzmq-23.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:385609812eafd9970c3752c51f2f6c4f224807e3e441bcfd8c8273877d00c8a8"}, + {file = "pyzmq-23.2.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b861db65f6b8906c8d6db51dde2448f266f0c66bf28db2c37aea50f58a849859"}, + {file = "pyzmq-23.2.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6b1e79bba24f6df1712e3188d5c32c480d8eda03e8ecff44dc8ecb0805fa62f3"}, + {file = "pyzmq-23.2.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8dc66f109a245653b19df0f44a5af7a3f14cb8ad6c780ead506158a057bd36ce"}, + {file = "pyzmq-23.2.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b815991c7d024bf461f358ad871f2be1135576274caed5749c4828859e40354e"}, + {file = "pyzmq-23.2.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:29b74774a0bfd3c4d98ac853f0bdca55bd9ec89d5b0def5486407cca54472ef8"}, + {file = "pyzmq-23.2.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4bb798bef181648827019001f6be43e1c48b34b477763b37a8d27d8c06d197b8"}, + {file = "pyzmq-23.2.1-cp36-cp36m-win32.whl", hash = "sha256:565bd5ab81f6964fc4067ccf2e00877ad0fa917308975694bbb54378389215f8"}, + {file = "pyzmq-23.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:1f368a82b29f80071781b20663c0fc0c8f6b13273f9f5abe1526af939534f90f"}, + {file = "pyzmq-23.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c9cfaf530e6a7ff65f0afe275e99f983f68b54dfb23ea401f0bc297a632766b6"}, + {file = "pyzmq-23.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c558b50402fca1acc94329c5d8f12aa429738904a5cfb32b9ed3c61235221bb"}, + {file = "pyzmq-23.2.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:20bafc4095eab00f41a510579363a3f5e1f5c69d7ee10f1d88895c4df0259183"}, + {file = "pyzmq-23.2.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f619fd38fc2641abfb53cca719c165182500600b82c695cc548a0f05f764be05"}, + {file = "pyzmq-23.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:044447ae4b2016a6b8697571fd633f799f860b19b76c4a2fd9b1140d52ee6745"}, + {file = "pyzmq-23.2.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:49d30ba7074f469e8167917abf9eb854c6503ae10153034a6d4df33618f1db5f"}, + {file = "pyzmq-23.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:48400b96788cdaca647021bf19a9cd668384f46e4d9c55cf045bdd17f65299c8"}, + {file = "pyzmq-23.2.1-cp37-cp37m-win32.whl", hash = "sha256:8a68f57b7a3f7b6b52ada79876be1efb97c8c0952423436e84d70cc139f16f0d"}, + {file = "pyzmq-23.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9e5bf6e7239fc9687239de7a283aa8b801ab85371116045b33ae20132a1325d6"}, + {file = "pyzmq-23.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ffc6b1623d0f9affb351db4ca61f432dca3628a5ee015f9bf2bfbe9c6836881c"}, + {file = "pyzmq-23.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4d6f110c56f7d5b4d64dde3a382ae61b6d48174e30742859d8e971b18b6c9e5c"}, + {file = "pyzmq-23.2.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9269fbfe3a4eb2009199120861c4571ef1655fdf6951c3e7f233567c94e8c602"}, + {file = "pyzmq-23.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12e62ff0d5223ec09b597ab6d73858b9f64a51221399f3cb08aa495e1dff7935"}, + {file = "pyzmq-23.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6fd5d0d50cbcf4bc376861529a907bed026a4cbe8c22a500ff8243231ef02433"}, + {file = "pyzmq-23.2.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9d0ab2936085c85a1fc6f9fd8f89d5235ae99b051e90ec5baa5e73ad44346e1f"}, + {file = "pyzmq-23.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:022cf5ea7bcaa8a06a03c2706e0ae66904b6138b2155577cd34c64bc7cc637ab"}, + {file = "pyzmq-23.2.1-cp38-cp38-win32.whl", hash = "sha256:28dbdb90b2f6b131f8f10e6081012e4e25234213433420e67e0c1162de537113"}, + {file = "pyzmq-23.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:10d1910ec381b851aeb024a042a13db178cb1edf125e76a4e9d2548ad103aadb"}, + {file = "pyzmq-23.2.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:99a5a77a10863493a1ee8dece02578c6b32025fb3afff91b40476bc489e81648"}, + {file = "pyzmq-23.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:aecd6ceaccc4b594e0092d6513ef3f1c0fa678dd89f86bb8ff1a47014b8fca35"}, + {file = "pyzmq-23.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:415ff62ac525d9add1e3550430a09b9928d2d24a20cc4ce809e67caac41219ab"}, + {file = "pyzmq-23.2.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67975a9e1237b9ccc78f457bef17691bbdd2055a9d26e81ee914ba376846d0ce"}, + {file = "pyzmq-23.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38e106b64bad744fe469dc3dd864f2764d66399178c1bf39d45294cc7980f14f"}, + {file = "pyzmq-23.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8c842109d31a9281d678f668629241c405928afbebd913c48a5a8e7aee61f63d"}, + {file = "pyzmq-23.2.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fefdf9b685fda4141b95ebec975946076a5e0723ff70b037032b2085c5317684"}, + {file = "pyzmq-23.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:79a87831b47a9f6161ad23fa5e89d5469dc585abc49f90b9b07fea8905ae1234"}, + {file = "pyzmq-23.2.1-cp39-cp39-win32.whl", hash = "sha256:342ca3077f47ec2ee41b9825142b614e03e026347167cbc72a59b618c4f6106c"}, + {file = "pyzmq-23.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:5e05492be125dce279721d6b54fd1b956546ecc4bcdfcf8e7b4c413bc0874c10"}, + {file = "pyzmq-23.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:07ed8aaf7ffe150af873269690cc654ffeca7491f62aae0f3821baa181f8d5fe"}, + {file = "pyzmq-23.2.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ad28ddb40db8e450d7d4bf8a1d765d3f87b63b10e7e9a825a3c130c6371a8c03"}, + {file = "pyzmq-23.2.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2f67b63f53c6994d601404fd1a329e6d940ac3dd1d92946a93b2b9c70df67b9f"}, + {file = "pyzmq-23.2.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c890309296f53f9aa32ffcfc51d805705e1982bffd27c9692a8f1e1b8de279f4"}, + {file = "pyzmq-23.2.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:624fd38071a817644acdae075b92a23ea0bdd126a58148288e8284d23ec361ce"}, + {file = "pyzmq-23.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a114992a193577cb62233abf8cb2832970f9975805a64740e325d2f895e7f85a"}, + {file = "pyzmq-23.2.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c780acddd2934c6831ff832ecbf78a45a7b62d4eb216480f863854a8b7d54fa7"}, + {file = "pyzmq-23.2.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d904f6595acfaaf99a1a61881fea068500c40374d263e5e073aa4005e5f9c28a"}, + {file = "pyzmq-23.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:929d548b74c0f82f7f95b54e4a43f9e4ce2523cfb8a54d3f7141e45652304b2a"}, + {file = "pyzmq-23.2.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f392cbea531b7142d1958c0d4a0c9c8d760dc451e5848d8dd3387804d3e3e62c"}, + {file = "pyzmq-23.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a0f09d85c45f58aa8e715b42f8b26beba68b3b63a8f7049113478aca26efbc30"}, + {file = "pyzmq-23.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e708fbfdf4ee3107422b69ca65da1b9f056b431fc0888096a8c1d6cd908e8f"}, + {file = "pyzmq-23.2.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35e635343ff367f697d00fa1484262bb68e36bc74c9b80737eac5a1e04c4e1b1"}, + {file = "pyzmq-23.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efb9e38b2a590282704269585de7eb33bf43dc294cad092e1b172e23d4c217e5"}, + {file = "pyzmq-23.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:407f909c4e8fde62fbdad9ebd448319792258cc0550c2815567a4d9d8d9e6d18"}, + {file = "pyzmq-23.2.1.tar.gz", hash = "sha256:2b381aa867ece7d0a82f30a0c7f3d4387b7cf2e0697e33efaa5bed6c5784abcd"}, ] recommonmark = [ {file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f"}, @@ -3554,7 +3983,10 @@ requests = [ restructuredtext-lint = [ {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, ] -rich = [] +rich = [ + {file = "rich-12.5.1-py3-none-any.whl", hash = "sha256:2eb4e6894cde1e017976d2975ac210ef515d7548bc595ba20e195fb9628acdeb"}, + {file = "rich-12.5.1.tar.gz", hash = "sha256:63a5c5ce3673d3d5fbbf23cd87e11ab84b6b451436f1b7f19ec54b6bc36ed7ca"}, +] scipy = [ {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, {file = "scipy-1.7.3-1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b0e0aeb061a1d7dcd2ed59ea57ee56c9b23dd60100825f98238c06ee5cc4467e"}, @@ -3594,7 +4026,10 @@ send2trash = [ {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, ] -setuptools-scm = [] +setuptools-scm = [ + {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, + {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, +] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -3655,7 +4090,10 @@ 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 = [] +sphinx-basic-ng = [ + {file = "sphinx_basic_ng-0.0.1a12-py3-none-any.whl", hash = "sha256:e8b6efd2c5ece014156de76065eda01ddfca0fee465aa020b1e3c12f84570bbe"}, + {file = "sphinx_basic_ng-0.0.1a12.tar.gz", hash = "sha256:cffffb14914ddd26c94b1330df1d72dab5a42e220aaeb5953076a40b9c50e801"}, +] 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"}, @@ -3762,7 +4200,10 @@ 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 = [] +types-docutils = [ + {file = "types-docutils-0.19.0.tar.gz", hash = "sha256:94936b1961aacda61ec6bb0acf1169cd7830b5230b645855c1d4789baf19685e"}, + {file = "types_docutils-0.19.0-py3-none-any.whl", hash = "sha256:198ed1c0ef6c1a79411da9e1745514eda433d37770e24f26b0e13a302904cc97"}, +] 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"}, @@ -3772,26 +4213,32 @@ types-protobuf = [ {file = "types_protobuf-3.19.22-py3-none-any.whl", hash = "sha256:d291388678af91bb045fafa864f142dc4ac22f5d4cdca097c7d8d8a32fa9b3ab"}, ] types-pygments = [ - {file = "types-Pygments-2.12.1.tar.gz", hash = "sha256:a9ea353b5197fd00c19cfa327de4169f8dc63b30d5d506bcbb09064d688cc9b0"}, - {file = "types_Pygments-2.12.1-py3-none-any.whl", hash = "sha256:b171949fc6074793a7fb559d938bb0332e66363d65b2e07b28770badf05768c5"}, + {file = "types-Pygments-2.13.0.tar.gz", hash = "sha256:00cc3e228ffdf6ffcf20af13190ef6e315f3585e5e8d27c12d1b56ff7ecde2f2"}, + {file = "types_Pygments-2.13.0-py3-none-any.whl", hash = "sha256:3985a4105d9b768bee5f311d7682d60c59ddd9f04d0977695f430ab9b218706b"}, +] +types-requests = [ + {file = "types-requests-2.28.9.tar.gz", hash = "sha256:feaf581bd580497a47fe845d506fa3b91b484cf706ff27774e87659837de9962"}, + {file = "types_requests-2.28.9-py3-none-any.whl", hash = "sha256:86cb66d3de2f53eac5c09adc42cf6547eefbd0c7e1210beca1ee751c35d96083"}, ] -types-requests = [] 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.16.tar.gz", hash = "sha256:8bb3832c684c30cbed40b96e28bc04703becb2b97d82ac65ba4b968783453b0e"}, - {file = "types_urllib3-1.26.16-py3-none-any.whl", hash = "sha256:20588c285e5ca336d908d2705994830a83cfb6bda40fc356bbafaf430a262013"}, + {file = "types-urllib3-1.26.23.tar.gz", hash = "sha256:b78e819f0e350221d0689a5666162e467ba3910737bafda14b5c2c85e9bb1e56"}, + {file = "types_urllib3-1.26.23-py3-none-any.whl", hash = "sha256:333e675b188a1c1fd980b4b352f9e40572413a4c1ac689c23cd546e96310070a"}, ] typing-extensions = [ {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, ] -urllib3 = [] +urllib3 = [ + {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, + {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, +] virtualenv = [ - {file = "virtualenv-20.15.1-py2.py3-none-any.whl", hash = "sha256:b30aefac647e86af6d82bfc944c556f8f1a9c90427b2fb4e3bfbf338cb82becf"}, - {file = "virtualenv-20.15.1.tar.gz", hash = "sha256:288171134a2ff3bfb1a2f54f119e77cd1b81c29fc1265a2356f3e8d14c7d58c4"}, + {file = "virtualenv-20.16.3-py2.py3-none-any.whl", hash = "sha256:4193b7bc8a6cd23e4eb251ac64f29b4398ab2c233531e66e40b19a6b7b0d30c1"}, + {file = "virtualenv-20.16.3.tar.gz", hash = "sha256:d86ea0bb50e06252d79e6c241507cb904fcd66090c3271381372d6221a3970f9"}, ] watchdog = [ {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330"}, @@ -3898,4 +4345,7 @@ 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 = [] +zipp = [ + {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, + {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, +] diff --git a/pyproject.toml b/pyproject.toml index 326a9f5c70..8c32dcd03c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,7 @@ jupyterlab = { version = "^3.0", optional = true } notebook = { version = "^6.4", optional = true } moderngl = "^5.6.3" moderngl-window = "^2.3.0" -mapbox-earcut = "^0.12.10" +mapbox-earcut = "^1.0.0" cloup = "^0.13.0" requests = "^2.26.0" dearpygui = { version = "^1.3.1", optional = true } From 56fe6305d3f2a34a13cf53628cacb5963dbeeb90 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 27 Aug 2022 16:59:17 +0200 Subject: [PATCH 111/555] docs: improved answer to 'no scenes in this module' error (#2933) Co-authored-by: Naveen M K --- docs/source/faq/general.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/source/faq/general.md b/docs/source/faq/general.md index 10feeb4bda..8ac092f5f1 100644 --- a/docs/source/faq/general.md +++ b/docs/source/faq/general.md @@ -8,10 +8,23 @@ have accidentally passed the name of a wrong file to `manim`, this is a likely outcome. Check that you have spelled everything correctly. Otherwise, you are likely mixing up Manim versions. See {ref}`this FAQ answer ` -for an explanation regarding why there are different versions. This is under the +for an explanation regarding why there are different versions. Under the assumption that you are trying to use the `manim` executable from the terminal to run a scene that has been written for the community version (i.e., there is -`from manim import *`, or more specifically `from manim import Scene`). +`from manim import *`, or more specifically `from manim import Scene`), +then this error indicates that the `manim` executable has been overwritten +by the one provided by `manimgl` (unfortunately, both `manim` and `manimgl` +provide a `manim` executable). + +You can check whether this is the case by running `manim --version`, the output of +the community maintained version starts with `Manim Community v...`. If this is not +the case, you are running `manimgl`. + +You can resolve this by either of the following steps: +- Un- and reinstalling `manim`, +- using the `manimce` executable in place of the `manim` one, +- or replacing the call to the executable with a direct call to the + Python module via `python -m manim`. --- From cef3565858bcec029bbe8aa553662ade51d924eb Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Sat, 27 Aug 2022 22:08:22 +0200 Subject: [PATCH 112/555] Fix whitespace (#2932) --- manim/utils/space_ops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index e731496093..3932e5bd70 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -657,7 +657,7 @@ def earclip_triangulation(verts: np.ndarray, ring_ends: list) -> list: verts is a numpy array of points. ring_ends ring_ends is a list of indices indicating where - the ends of new paths are. + the ends of new paths are. Returns ------- From 63cc40120d6d6f1c63882c9002ff5e8691fc6e9d Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Wed, 31 Aug 2022 15:11:34 +0200 Subject: [PATCH 113/555] Add conda installation docs (#2914) * Add conda installation docs * MacOS -> macOS * Add Working with Manim section * Small fixes * maybe the refs work now? * why is ci stuck? * Lets see if this works... Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Naveen M K --- docs/source/contributing/development.rst | 2 +- docs/source/index.rst | 2 +- docs/source/installation.rst | 27 +++++++++++++-- docs/source/installation/conda.rst | 44 ++++++++++++++++++++++++ docs/source/installation/linux.rst | 9 +++++ docs/source/installation/macos.rst | 9 ++--- 6 files changed, 85 insertions(+), 8 deletions(-) create mode 100644 docs/source/installation/conda.rst diff --git a/docs/source/contributing/development.rst b/docs/source/contributing/development.rst index 90266e73b1..42cf68033a 100644 --- a/docs/source/contributing/development.rst +++ b/docs/source/contributing/development.rst @@ -230,7 +230,7 @@ sticks to our coding conventions. manually that were detected by ``flake8``. - **Tests**: The pipeline runs manim's test suite on different operating systems - (the latest versions of Ubuntu, MacOS, and Windows) for different versions of Python. + (the latest versions of Ubuntu, macOS, and Windows) for different versions of Python. The test suite consists of two different kinds of tests: integration tests and doctests. You can run them locally by executing ``poetry run pytest`` and ``poetry run pytest --doctest-modules manim``, respectively, from the diff --git a/docs/source/index.rst b/docs/source/index.rst index b01665e41e..8e6d8c2fb6 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -26,7 +26,7 @@ in the right place! to learn more! - The :doc:`Installation ` section has the latest and - up-to-date installation instructions for Windows, MacOS, and Linux. + up-to-date installation instructions for Windows, macOS, and Linux. You can also find information on Manim's docker images and (online) notebook environments there. - Want to try the library before installing it? Take a look at our diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 7515edef0d..9669ca6aaf 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -8,8 +8,8 @@ require no local installation. Head over to https://try.manim.community to give our interactive tutorial a try. Otherwise, if you intend to use Manim to work on an animation project, -we recommend installing the library locally (either to your system's -Python, or via Docker). +we recommend installing the library locally (either to a conda environment, +your system's Python, or via Docker). .. warning:: @@ -19,12 +19,35 @@ Python, or via Docker). versions ` if you are unsure which version you should install. +#. :ref:`Installing Manim to a conda environment ` #. :ref:`Installing Manim to your system's Python ` #. :ref:`Using Manim via Docker ` #. :ref:`Interactive Jupyter notebooks via Binder / Google Colab ` +.. _conda-installation: + +Installing Manim in conda +************************* + +Conda is a package manager for Python that allows creating environments +where all your dependencies are stored. Like this, you don't clutter up your PC with +unwanted libraries and you can just delete the environment when you don't need it anymore. +It is a good way to install manim since all dependencies like +``ffmpeg``, ``pycairo``, etc. come with it. +Also, the installation steps are the same, no matter if you are +on Windows, Linux, Intel Macs or on Apple Silicon. + +The following pages show how to install Manim in a conda environment: + +.. toctree:: + :maxdepth: 2 + + installation/conda + + + .. _local-installation: Installing Manim locally diff --git a/docs/source/installation/conda.rst b/docs/source/installation/conda.rst new file mode 100644 index 0000000000..b946b003a0 --- /dev/null +++ b/docs/source/installation/conda.rst @@ -0,0 +1,44 @@ +Conda +===== + +Required Dependencies +--------------------- + +To create a conda environment, you must first install +`conda `__ +or `mamba `__, +the two most popular conda clients. + +After installing conda, you can create a new environment and install ``manim`` inside by running + +.. code-block:: bash + + conda create -n my-manim-environment + conda activate my-manim-environment + conda install -c conda-forge manim + +Since all dependencies (except LaTeX) are handled by conda, you don't need to worry +about needing to install additional dependencies. + + + +Optional Dependencies +--------------------- + +In order to make use of Manim's interface to LaTeX to, for example, render +equations, LaTeX has to be installed as well. Note that this is an optional +dependency: if you don't intend to use LaTeX, you don't have to install it. + +You can install LaTeX by following the optional dependencies steps +for :ref:`Windows `, +:ref:`Linux ` or +:ref:`macOS `. + + + +Working with Manim +------------------ + +At this point, you should have a working installation of Manim, head +over to our :doc:`Quickstart Tutorial <../tutorials/quickstart>` to learn +how to make your own *Manimations*! diff --git a/docs/source/installation/linux.rst b/docs/source/installation/linux.rst index dba8e16c60..7006efd156 100644 --- a/docs/source/installation/linux.rst +++ b/docs/source/installation/linux.rst @@ -147,3 +147,12 @@ be sufficient for your particular application) is:: dvisvgm everysel fontspec frcursive fundus-calligra gnu-freefont jknapltx latex-bin mathastext microtype ms physics preview ragged2e relsize rsfs setspace standalone tipa wasy wasysym xcolor xetex xkeyval + + + +Working with Manim +------------------ + +At this point, you should have a working installation of Manim, head +over to our :doc:`Quickstart Tutorial <../tutorials/quickstart>` to learn +how to make your own *Manimations*! diff --git a/docs/source/installation/macos.rst b/docs/source/installation/macos.rst index ead8f41f8a..a3a4021ad8 100644 --- a/docs/source/installation/macos.rst +++ b/docs/source/installation/macos.rst @@ -1,4 +1,4 @@ -MacOS +macOS ===== For the sake of simplicity, the following instructions assume that you have @@ -11,7 +11,7 @@ follow `Homebrew's installation instructions .. note:: - For a while after Apple released its new ARM-based processors (the *"M1 chip"*), + For a while after Apple released its new ARM-based processors (the Apple Silicon chips like the *"M1 chip"*), the recommended way of installing Manim relied on *Rosetta*, Apple's compatibility layer between Intel and ARM architectures. This is no longer necessary, Manim can (and is recommended to) be installed natively. @@ -48,7 +48,7 @@ to install Manim. A frequent source for installation problems is if ``pip3`` does not point to the correct Python installation on your system. - To check this, run ``pip3 -V``: for MacOS Intel, the path should + To check this, run ``pip3 -V``: for macOS Intel, the path should start with ``/usr/local``, and for Apple Silicon with ``/opt/homebrew``. If this is not the case, you either forgot to modify your shell profile (``.zprofile``) during the installation @@ -58,6 +58,7 @@ to install Manim. make sure that the Homebrew-related lines in your ``.zprofile`` are at the very end of the file. +.. _macos-optional-dependencies: Optional Dependencies --------------------- @@ -66,7 +67,7 @@ In order to make use of Manim's interface to LaTeX for, e.g., rendering equations, LaTeX has to be installed as well. Note that this is an optional dependency: if you don't intend to use LaTeX, you don't have to install it. -For MacOS, the recommended LaTeX distribution is +For macOS, the recommended LaTeX distribution is `MacTeX `__. You can install it by following the instructions from the link, or alternatively also via Homebrew by running: From 44f78f1dfdd7498542869fc06bb39619f2b2d57b Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sun, 18 Sep 2022 09:33:20 +0200 Subject: [PATCH 114/555] fixed click version string in pyproject.toml (#2954) Co-authored-by: Benjamin Hackl --- poetry.lock | 516 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 263 insertions(+), 255 deletions(-) diff --git a/poetry.lock b/poetry.lock index d5f4775190..dd0b420b1f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -152,7 +152,7 @@ lxml = ["lxml"] [[package]] name = "black" -version = "22.6.0" +version = "22.8.0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -191,7 +191,7 @@ dev = ["build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "pip-tools (= [[package]] name = "certifi" -version = "2022.6.15" +version = "2022.9.14" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -335,7 +335,7 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", [[package]] name = "dearpygui" -version = "1.6.2" +version = "1.7.0" description = "DearPyGui: A simple Python GUI Toolkit" category = "main" optional = true @@ -392,7 +392,7 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "distlib" -version = "0.3.5" +version = "0.3.6" description = "Distribution utilities" category = "dev" optional = false @@ -562,7 +562,7 @@ importlib-metadata = {version = ">=0.9", markers = "python_version < \"3.8\""} [[package]] name = "fonttools" -version = "4.37.0" +version = "4.37.2" description = "Tools to manipulate font files" category = "dev" optional = false @@ -584,7 +584,7 @@ woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] [[package]] name = "furo" -version = "2022.6.21" +version = "2022.9.15" description = "A clean customisable Sphinx documentation theme." category = "dev" optional = false @@ -592,7 +592,7 @@ python-versions = ">=3.7" [package.dependencies] beautifulsoup4 = "*" -pygments = "*" +pygments = ">=2.7" sphinx = ">=4.0,<6.0" sphinx-basic-ng = "*" @@ -629,7 +629,7 @@ python-versions = "*" [[package]] name = "identify" -version = "2.5.3" +version = "2.5.5" description = "File identification library for Python" category = "dev" optional = false @@ -640,7 +640,7 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.3" +version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false @@ -696,7 +696,7 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.15.1" +version = "6.15.3" description = "IPython Kernel for Jupyter" category = "main" optional = true @@ -825,7 +825,7 @@ dev = ["hypothesis"] [[package]] name = "jsonschema" -version = "4.14.0" +version = "4.16.0" description = "An implementation of JSON Schema validation for Python" category = "main" optional = true @@ -845,7 +845,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jupyter-client" -version = "7.3.4" +version = "7.3.5" description = "Jupyter protocol implementation and client libraries" category = "main" optional = true @@ -857,7 +857,7 @@ jupyter-core = ">=4.9.2" nest-asyncio = ">=1.5.4" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" -tornado = ">=6.0" +tornado = ">=6.2" traitlets = "*" [package.extras] @@ -910,7 +910,7 @@ test = ["coverage", "ipykernel", "pre-commit", "pytest-console-scripts", "pytest [[package]] name = "jupyterlab" -version = "3.4.5" +version = "3.4.7" description = "JupyterLab computational environment" category = "main" optional = true @@ -925,6 +925,7 @@ jupyterlab-server = ">=2.10,<3.0" nbclassic = "*" notebook = "<7" packaging = "*" +tomli = "*" tornado = ">=6.1.0" [package.extras] @@ -1129,7 +1130,7 @@ glcontext = ">=2,<3" [[package]] name = "moderngl-window" -version = "2.4.1" +version = "2.4.2" description = "A cross platform helper library for ModernGL making window creation and resource loading simple" category = "main" optional = false @@ -1138,17 +1139,17 @@ python-versions = ">=3.6" [package.dependencies] moderngl = "<6" numpy = ">=1.16,<2" -Pillow = ">=5" -pyglet = ">=1.5.8,<2" +Pillow = ">=9,<10" +pyglet = ">=2.0dev23" pyrr = ">=0.10.3,<1" [package.extras] pysdl2 = ["pysdl2"] pyside2 = ["PySide2 (<6)"] glfw = ["glfw"] -pygame = ["pygame (>=2.0.1)"] +pygame = ["pygame (>=2.1.2)"] pyqt5 = ["pyqt5"] -pywavefront = ["pywavefront (>=1.2.0,<2)"] +pywavefront = ["pywavefront (>=1.3.3,<2)"] tk = ["pyopengltk (>=0.0.3)"] trimesh = ["trimesh (>=3.2.6,<4)", "scipy (>=1.3.2)"] @@ -1246,7 +1247,7 @@ docs = ["myst-parser", "sphinx-rtd-theme", "sphinxcontrib-github-alt", "nbsphinx [[package]] name = "nbclient" -version = "0.6.7" +version = "0.6.8" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "main" optional = true @@ -1300,7 +1301,7 @@ webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.4.0" +version = "5.5.0" description = "The Jupyter Notebook format" category = "main" optional = true @@ -1309,11 +1310,11 @@ python-versions = ">=3.7" [package.dependencies] fastjsonschema = "*" jsonschema = ">=2.6" -jupyter-core = "*" +jupyter_core = "*" traitlets = ">=5.1" [package.extras] -test = ["check-manifest", "testpath", "pytest", "pre-commit"] +test = ["check-manifest", "testpath", "pytest", "pre-commit", "pep440"] [[package]] name = "nest-asyncio" @@ -1431,11 +1432,11 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.9.0" +version = "0.10.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.7" [[package]] name = "pexpect" @@ -1533,7 +1534,7 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.30" +version = "3.0.31" description = "Library for building powerful interactive command lines in Python" category = "main" optional = true @@ -1544,7 +1545,7 @@ wcwidth = "*" [[package]] name = "psutil" -version = "5.9.1" +version = "5.9.2" description = "Cross-platform lib for process and system monitoring in Python." category = "main" optional = false @@ -1653,7 +1654,7 @@ integrations = ["cryptography"] [[package]] name = "pyglet" -version = "1.5.26" +version = "2.0.dev23" description = "Cross-platform windowing and multimedia library" category = "main" optional = false @@ -1672,16 +1673,16 @@ plugins = ["importlib-metadata"] [[package]] name = "pyjwt" -version = "2.4.0" +version = "2.5.0" description = "JSON Web Token implementation in Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] -crypto = ["cryptography (>=3.3.1)"] -dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"] -docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +crypto = ["cryptography (>=3.3.1)", "types-cryptography (>=3.3.21)"] +dev = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "types-cryptography (>=3.3.21)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "pre-commit"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] [[package]] @@ -1866,7 +1867,7 @@ python-versions = "*" [[package]] name = "pywinpty" -version = "2.0.7" +version = "2.0.8" description = "Pseudo terminal support for Windows from Python." category = "main" optional = true @@ -1882,7 +1883,7 @@ python-versions = ">=3.6" [[package]] name = "pyzmq" -version = "23.2.1" +version = "24.0.0" description = "Python bindings for 0MQ" category = "main" optional = true @@ -1963,7 +1964,7 @@ numpy = ">=1.16.5,<1.23.0" [[package]] name = "screeninfo" -version = "0.8" +version = "0.8.1" description = "Fetch location and size of physical screens." category = "main" optional = false @@ -2031,11 +2032,11 @@ python-versions = ">=3.6" [[package]] name = "sniffio" -version = "1.2.0" +version = "1.3.0" description = "Sniff out which async library your code is running under" category = "main" optional = true -python-versions = ">=3.5" +python-versions = ">=3.7" [[package]] name = "snowballstemmer" @@ -2193,8 +2194,8 @@ optional = false python-versions = ">=3.5" [package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxext-opengraph" @@ -2258,7 +2259,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" @@ -2272,7 +2273,7 @@ python-versions = ">= 3.7" [[package]] name = "tqdm" -version = "4.64.0" +version = "4.64.1" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -2289,7 +2290,7 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.3.0" +version = "5.4.0" description = "" category = "main" optional = true @@ -2316,7 +2317,7 @@ python-versions = "*" [[package]] name = "types-docutils" -version = "0.19.0" +version = "0.19.1" description = "Typing stubs for docutils" category = "dev" optional = false @@ -2332,7 +2333,7 @@ python-versions = "*" [[package]] name = "types-protobuf" -version = "3.19.22" +version = "3.20.3" description = "Typing stubs for protobuf" category = "dev" optional = false @@ -2352,7 +2353,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.28.9" +version = "2.28.10" description = "Typing stubs for requests" category = "dev" optional = false @@ -2371,7 +2372,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.23" +version = "1.26.24" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -2400,7 +2401,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.16.3" +version = "20.16.5" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -2445,16 +2446,16 @@ python-versions = "*" [[package]] name = "websocket-client" -version = "1.3.3" +version = "1.4.1" 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"] +optional = ["wsaccel", "python-socks"] +docs = ["sphinx-rtd-theme (>=0.5)", "Sphinx (>=3.4)"] [[package]] name = "wrapt" @@ -2483,7 +2484,7 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "2bce6a5e827ba1255861116bf9c6a0ac5fa5be3134175484a83e49c188a6c129" +content-hash = "6b4a0bf2152203096fff0b2d8a0667e2b19895921065ce81e16a8d53e6b267a8" [metadata.files] alabaster = [ @@ -2557,37 +2558,37 @@ beautifulsoup4 = [ {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, ] black = [ - {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, - {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, - {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, - {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, - {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, - {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, - {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, - {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, - {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, - {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, - {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, - {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, - {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, - {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, - {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, - {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, - {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, - {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, - {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, - {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, - {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, - {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, - {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, + {file = "black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd"}, + {file = "black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27"}, + {file = "black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747"}, + {file = "black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869"}, + {file = "black-22.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90"}, + {file = "black-22.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a05da0430bd5ced89176db098567973be52ce175a55677436a271102d7eaa3fe"}, + {file = "black-22.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a098a69a02596e1f2a58a2a1c8d5a05d5a74461af552b371e82f9fa4ada8342"}, + {file = "black-22.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5594efbdc35426e35a7defa1ea1a1cb97c7dbd34c0e49af7fb593a36bd45edab"}, + {file = "black-22.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983526af1bea1e4cf6768e649990f28ee4f4137266921c2c3cee8116ae42ec3"}, + {file = "black-22.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b2c25f8dea5e8444bdc6788a2f543e1fb01494e144480bc17f806178378005e"}, + {file = "black-22.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:78dd85caaab7c3153054756b9fe8c611efa63d9e7aecfa33e533060cb14b6d16"}, + {file = "black-22.8.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cea1b2542d4e2c02c332e83150e41e3ca80dc0fb8de20df3c5e98e242156222c"}, + {file = "black-22.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b879eb439094751185d1cfdca43023bc6786bd3c60372462b6f051efa6281a5"}, + {file = "black-22.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a12e4e1353819af41df998b02c6742643cfef58282915f781d0e4dd7a200411"}, + {file = "black-22.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3a73f66b6d5ba7288cd5d6dad9b4c9b43f4e8a4b789a94bf5abfb878c663eb3"}, + {file = "black-22.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:e981e20ec152dfb3e77418fb616077937378b322d7b26aa1ff87717fb18b4875"}, + {file = "black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c"}, + {file = "black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497"}, + {file = "black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c"}, + {file = "black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41"}, + {file = "black-22.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec"}, + {file = "black-22.8.0-py3-none-any.whl", hash = "sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4"}, + {file = "black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, ] 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.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, + {file = "certifi-2022.9.14-py3-none-any.whl", hash = "sha256:e232343de1ab72c2aa521b625c80f699e356830fd0e2c620b465b304b17b0516"}, + {file = "certifi-2022.9.14.tar.gz", hash = "sha256:36973885b9542e6bd01dea287b2b4b3b21236307c56324fcc3f1160f2d655ed5"}, ] cffi = [ {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, @@ -2789,20 +2790,20 @@ data-science-types = [ {file = "data_science_types-0.2.23-py3-none-any.whl", hash = "sha256:bca319abc0e53a0316f9fcb887937e942477cb9e5fc63c8581e0b0438903b977"}, ] dearpygui = [ - {file = "dearpygui-1.6.2-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:55f1034d431febc550935c71bad603afcccb6f2ac333a1ecb6d132df2fbfaef1"}, - {file = "dearpygui-1.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:402618f3f523c8c368710b1fd6961c076a0096a6166927d2a3846f8b1b5df8bf"}, - {file = "dearpygui-1.6.2-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:721a1bd6a95bc8c0da486116eeffc475799b39144c941f4af604d19d7d063d88"}, - {file = "dearpygui-1.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:54a3b692c6d20ead2d8c3d0358252803737043a83ebea03129024a6d77816df3"}, - {file = "dearpygui-1.6.2-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:57818d203639d2956ebe209669c371b8055e314971d6cac3ac3095d659f7ea4a"}, - {file = "dearpygui-1.6.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1ac323778cfb860281065a8ca9a1aae53ccb86ea92f55d0612305639eaa59bd5"}, - {file = "dearpygui-1.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6c842f71a930a93a076c549ae4e46ef482c918a350f8cd011a98d0a8774b925d"}, - {file = "dearpygui-1.6.2-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:fd6218f1bfd5e4d8dad65dd8a148dc0526b2c14a552f5b662523632143a71ad9"}, - {file = "dearpygui-1.6.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:398e2ccccab38092faa3d4ebf1c08d9898a516d626fa7b8aa026eef74fa4126f"}, - {file = "dearpygui-1.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:3260ce78879f22f5ca2345a4ee7f940ddd725527cdb3de16ab0fccdd79f88490"}, - {file = "dearpygui-1.6.2-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:b92537106ce321cc1e3a830a6bbdc5ffc48120e2936120af45c87c41bd10a83c"}, - {file = "dearpygui-1.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ea650b8c3fdf2076816d6e3374bb906c92394377c603bc119082a9e14828095"}, - {file = "dearpygui-1.6.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b0c77bd722eb0168c4ea30bf46e0b493ce398c7398e315996ab27535781dc99a"}, - {file = "dearpygui-1.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:7cf534cb7662e9f49ee93cb4ca34d6c245913b6dfb887d8a5e0b630597a34677"}, + {file = "dearpygui-1.7.0-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:24b103b727e63d83779e755241599b3b3f5e9106e6d9fc43ad379ea1e05ac614"}, + {file = "dearpygui-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:200efd08c59e5781e836efb52af5d489b36e7f862ebc528460d8f42e00a4ea9b"}, + {file = "dearpygui-1.7.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:621293153b99d8ee1584cfb28ceb3685e3cd607f8901b3225535f918d7d96ce4"}, + {file = "dearpygui-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:95b845e15c579fec3b422502c86fea4dd37b3fe53cde8e0f58d62381f01d0169"}, + {file = "dearpygui-1.7.0-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:1b493fdd2f9abfdd08af3ab5623961020d13208a5ec27874e6c1a1d3091950b3"}, + {file = "dearpygui-1.7.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:172d6596e62084221d859c473fb62467071e9b7823e8dd9a00343abd852bdbb2"}, + {file = "dearpygui-1.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:10558b8bdcfa044cd65a89001db992f120e6dc1cc508497379e2d873195b6121"}, + {file = "dearpygui-1.7.0-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:98e5fc7100ab52a851c3e7386dcc6a88a8b9baf536a4ed5231967f0991ede852"}, + {file = "dearpygui-1.7.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e32919f39f11fb6b1869d426d98994b2cc76ebbcaf224649c03663478e6f81b0"}, + {file = "dearpygui-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:de50832ad40481eec7ca6e23a8a1324e299b5b38b1341f510468d4a0fd4951c7"}, + {file = "dearpygui-1.7.0-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:8cba8dea7c53f5b41416dbc6dda55d00d0a66e47dde0ae470d59d20d1b6b693f"}, + {file = "dearpygui-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42105b5ecc7afc70e8998012764bd4d571800f0c90d8e9a435b2bae6ab450db4"}, + {file = "dearpygui-1.7.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:69945c1f9e23125dfd354bf895142aef7bdeeecfc1c512f815b35c7c336d020f"}, + {file = "dearpygui-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:dd52c7e1aa780beb316c700adfdfb341f09f7361aea394fb47eb82fae2767cfc"}, ] debugpy = [ {file = "debugpy-1.6.3-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:c4b2bd5c245eeb49824bf7e539f95fb17f9a756186e51c3e513e32999d8846f3"}, @@ -2841,8 +2842,8 @@ dill = [ {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, ] distlib = [ - {file = "distlib-0.3.5-py2.py3-none-any.whl", hash = "sha256:b710088c59f06338ca514800ad795a132da19fda270e3ce4affc74abf955a26c"}, - {file = "distlib-0.3.5.tar.gz", hash = "sha256:a7f75737c70be3b25e2bee06288cec4e4c221de18455b2dd037fe2a795cab2fe"}, + {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"}, @@ -2901,12 +2902,12 @@ flake8-simplify = [ {file = "flake8_simplify-0.14.6.tar.gz", hash = "sha256:c4008db8016707684a1f0502ee69f3c2da37687d3cf7031cc1f326bf5986bf47"}, ] fonttools = [ - {file = "fonttools-4.37.0-py3-none-any.whl", hash = "sha256:e4467a36e24f918507b5cfdc61d2a479b6c7393a85d1f126f3c84f76e8df2151"}, - {file = "fonttools-4.37.0.zip", hash = "sha256:2ee4509aeba40542a6c6d00895a0c66f3cb8b9edda2fa58438dd9f769e3ce76e"}, + {file = "fonttools-4.37.2-py3-none-any.whl", hash = "sha256:88d48ef24486137c864dc56707b4b54ef8a97ab9162c2721ec61434baf1c4d13"}, + {file = "fonttools-4.37.2.zip", hash = "sha256:b6d86ffd0a5f83d3da6a34d5f99a90398638e423cd6a8d93c5808af703432c7f"}, ] furo = [ - {file = "furo-2022.6.21-py3-none-any.whl", hash = "sha256:061b68e323345e27fcba024cf33a1e77f3dfd8d9987410be822749a706e2add6"}, - {file = "furo-2022.6.21.tar.gz", hash = "sha256:9aa983b7488a4601d13113884bfb7254502c8729942e073a0acb87a5512af223"}, + {file = "furo-2022.9.15-py3-none-any.whl", hash = "sha256:9129dead1f75e9fb4fa407612f1d5a0d0320767e6156c925aafe36f362f9b11a"}, + {file = "furo-2022.9.15.tar.gz", hash = "sha256:4a7ef1c8a3b615171592da4d2ad8a53cc4aacfbe111958890f5f9ff7279066ab"}, ] gitdb = [ {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, @@ -2957,12 +2958,12 @@ glcontext = [ {file = "glcontext-2.3.6.tar.gz", hash = "sha256:cdb540eec587deddca037fb4dfdaa0921dcab0fd4d7ea5f1079e44fcb1b81e67"}, ] identify = [ - {file = "identify-2.5.3-py2.py3-none-any.whl", hash = "sha256:25851c8c1370effb22aaa3c987b30449e9ff0cece408f810ae6ce408fdd20893"}, - {file = "identify-2.5.3.tar.gz", hash = "sha256:887e7b91a1be152b0d46bbf072130235a8117392b9f1828446079a816a05ef44"}, + {file = "identify-2.5.5-py2.py3-none-any.whl", hash = "sha256:ef78c0d96098a3b5fe7720be4a97e73f439af7cf088ebf47b620aeaa10fadf97"}, + {file = "identify-2.5.5.tar.gz", hash = "sha256:322a5699daecf7c6fd60e68852f36f2ecbb6a36ff6e6e973e0d2bb6fca203ee6"}, ] idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, + {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"}, @@ -2981,8 +2982,8 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] ipykernel = [ - {file = "ipykernel-6.15.1-py3-none-any.whl", hash = "sha256:d8969c5b23b0e453a23166da5a669c954db399789293fcb03fec5cb25367e43c"}, - {file = "ipykernel-6.15.1.tar.gz", hash = "sha256:37acc3254caa8a0dafcddddc8dc863a60ad1b46487b68aee361d9a15bda98112"}, + {file = "ipykernel-6.15.3-py3-none-any.whl", hash = "sha256:befe3736944b21afec8e832725e9a45f254c8bd9afc40b61d6661c97e45aff5a"}, + {file = "ipykernel-6.15.3.tar.gz", hash = "sha256:b81d57b0e171670844bf29cdc11562b1010d3da87115c4513e0ee660a8368765"}, ] ipython = [ {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, @@ -3013,12 +3014,12 @@ json5 = [ {file = "json5-0.9.10.tar.gz", hash = "sha256:ad9f048c5b5a4c3802524474ce40a622fae789860a86f10cc4f7e5f9cf9b46ab"}, ] jsonschema = [ - {file = "jsonschema-4.14.0-py3-none-any.whl", hash = "sha256:9892b8d630a82990521a9ca630d3446bd316b5ad54dbe981338802787f3e0d2d"}, - {file = "jsonschema-4.14.0.tar.gz", hash = "sha256:15062f4cc6f591400cd528d2c355f2cfa6a57e44c820dc783aee5e23d36a831f"}, + {file = "jsonschema-4.16.0-py3-none-any.whl", hash = "sha256:9e74b8f9738d6a946d70705dc692b74b5429cd0960d58e79ffecfc43b2221eb9"}, + {file = "jsonschema-4.16.0.tar.gz", hash = "sha256:165059f076eff6971bae5b742fc029a7b4ef3f9bcf04c14e4776a7605de14b23"}, ] jupyter-client = [ - {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"}, - {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"}, + {file = "jupyter_client-7.3.5-py3-none-any.whl", hash = "sha256:b33222bdc9dd1714228bd286af006533a0abe2bbc093e8f3d29dc0b91bdc2be4"}, + {file = "jupyter_client-7.3.5.tar.gz", hash = "sha256:3c58466a1b8d55dba0bf3ce0834e4f5b7760baf98d1d73db0add6f19de9ecd1d"}, ] jupyter-core = [ {file = "jupyter_core-4.11.1-py3-none-any.whl", hash = "sha256:715e22bb6cc7db3718fddfac1f69f1c7e899ca00e42bdfd4bf3705452b9fd84a"}, @@ -3029,8 +3030,8 @@ jupyter-server = [ {file = "jupyter_server-1.18.1.tar.gz", hash = "sha256:2b72fc595bccae292260aad8157a0ead8da2c703ec6ae1bb7b36dbad0e267ea7"}, ] jupyterlab = [ - {file = "jupyterlab-3.4.5-py3-none-any.whl", hash = "sha256:3181d60518e6101b9e43f6da231aa4be812a59d81ddcc8fe680dd33066fddae6"}, - {file = "jupyterlab-3.4.5.tar.gz", hash = "sha256:472f6b7996c75f6991592483c26d9fe205a59a71ccbce15842400155dc64f59b"}, + {file = "jupyterlab-3.4.7-py3-none-any.whl", hash = "sha256:30c64bc0aa0ba09959ab6fd5c74f08a6ae64656b46a29e2522142a5fda0dc486"}, + {file = "jupyterlab-3.4.7.tar.gz", hash = "sha256:4dc48ab0980e3af2e921dff26e0013dd03b104b1b67f0d85b67448e16e25311e"}, ] jupyterlab-pygments = [ {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, @@ -3431,8 +3432,7 @@ moderngl = [ {file = "moderngl-5.6.4.tar.gz", hash = "sha256:8c6d04559f5e3bf75a18525cd46d213c0f3a8409363718978e6de691bdb551fb"}, ] moderngl-window = [ - {file = "moderngl-window-2.4.1.tar.gz", hash = "sha256:691de764640b87af3d851257be544e1cafddb9cfa47cb144d0c1f1a0ed0a3936"}, - {file = "moderngl_window-2.4.1-py3-none-any.whl", hash = "sha256:5f2aaa6ae8d8a40fcd877febaf7494229c2bf1ef01d3fa9faa3a342075d4126a"}, + {file = "moderngl_window-2.4.2-py3-none-any.whl", hash = "sha256:19aca4048ca037bd9f2ca8b154ac15d07e90a05ad2d5fce32d746be8ffcc319d"}, ] multipledispatch = [ {file = "multipledispatch-0.6.0-py2-none-any.whl", hash = "sha256:407e6d8c5fa27075968ba07c4db3ef5f02bea4e871e959570eeb69ee39a6565b"}, @@ -3474,16 +3474,16 @@ nbclassic = [ {file = "nbclassic-0.4.3.tar.gz", hash = "sha256:f03111b2cebaa69b88370a7b23b19b2b37c9bb71767f1828cdfd7a047eae8edd"}, ] nbclient = [ - {file = "nbclient-0.6.7-py3-none-any.whl", hash = "sha256:d4e32459e7e96783285d1daac92dc2c60ee7b8a82b7cf7d2e55be9d89d7ac463"}, - {file = "nbclient-0.6.7.tar.gz", hash = "sha256:3c5a7fc6bb74be7d31edf2817b44501a65caa99e5e56363bc359649b97cd24b9"}, + {file = "nbclient-0.6.8-py3-none-any.whl", hash = "sha256:7cce8b415888539180535953f80ea2385cdbb444944cdeb73ffac1556fdbc228"}, + {file = "nbclient-0.6.8.tar.gz", hash = "sha256:268fde3457cafe1539e32eb1c6d796bbedb90b9e92bacd3e43d83413734bb0e8"}, ] nbconvert = [ {file = "nbconvert-7.0.0-py3-none-any.whl", hash = "sha256:26843ae233167e8aae31c20e3e1d91f431f04c9f34363bbe2dd0d247f772641c"}, {file = "nbconvert-7.0.0.tar.gz", hash = "sha256:fd1e361da30e30e4c5a5ae89f7cae95ca2a4d4407389672473312249a7ba0060"}, ] nbformat = [ - {file = "nbformat-5.4.0-py3-none-any.whl", hash = "sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad"}, - {file = "nbformat-5.4.0.tar.gz", hash = "sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"}, + {file = "nbformat-5.5.0-py3-none-any.whl", hash = "sha256:eb21018bbcdb29e7a4b8b29068d4b6794cdad685db8fcd569b97a09a048dc2e4"}, + {file = "nbformat-5.5.0.tar.gz", hash = "sha256:9ebe30e6c3b3e5b47d39ff0a3897a1acf523d2bfafcb4e2d04cdb70f8a66c507"}, ] nest-asyncio = [ {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, @@ -3551,8 +3551,8 @@ parso = [ {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, + {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"}, + {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, ] pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, @@ -3573,8 +3573,8 @@ pillow = [ {file = "Pillow-9.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37ff6b522a26d0538b753f0b4e8e164fdada12db6c6f00f62145d732d8a3152e"}, {file = "Pillow-9.2.0-cp310-cp310-win32.whl", hash = "sha256:c79698d4cd9318d9481d89a77e2d3fcaeff5486be641e60a4b49f3d2ecca4e28"}, {file = "Pillow-9.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d"}, - {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:408673ed75594933714482501fe97e055a42996087eeca7e5d06e33218d05aa8"}, - {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:727dd1389bc5cb9827cbd1f9d40d2c2a1a0c9b32dd2261db522d22a604a6eec9"}, + {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:adabc0bce035467fb537ef3e5e74f2847c8af217ee0be0455d4fec8adc0462fc"}, + {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:336b9036127eab855beec9662ac3ea13a4544a523ae273cbf108b228ecac8437"}, {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50dff9cc21826d2977ef2d2a205504034e3a4563ca6f5db739b0d1026658e004"}, {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6259196a589123d755380b65127ddc60f4c64b21fc3bb46ce3a6ea663659b0"}, {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0554af24df2bf96618dac71ddada02420f946be943b181108cac55a7a2dcd4"}, @@ -3643,42 +3643,42 @@ prometheus-client = [ {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.30-py3-none-any.whl", hash = "sha256:d8916d3f62a7b67ab353a952ce4ced6a1d2587dfe9ef8ebc30dd7c386751f289"}, - {file = "prompt_toolkit-3.0.30.tar.gz", hash = "sha256:859b283c50bde45f5f97829f77a4674d1c1fcd88539364f1b28a37805cfd89c0"}, + {file = "prompt_toolkit-3.0.31-py3-none-any.whl", hash = "sha256:9696f386133df0fc8ca5af4895afe5d78f5fcfe5258111c2a79a1c3e41ffa96d"}, + {file = "prompt_toolkit-3.0.31.tar.gz", hash = "sha256:9ada952c9d1787f52ff6d5f3484d0b4df8952787c087edf6a1f7c2cb1ea88148"}, ] psutil = [ - {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"}, - {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"}, - {file = "psutil-5.9.1-cp27-cp27m-win32.whl", hash = "sha256:0904727e0b0a038830b019551cf3204dd48ef5c6868adc776e06e93d615fc5fc"}, - {file = "psutil-5.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e7e10454cb1ab62cc6ce776e1c135a64045a11ec4c6d254d3f7689c16eb3efd2"}, - {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:56960b9e8edcca1456f8c86a196f0c3d8e3e361320071c93378d41445ffd28b0"}, - {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:44d1826150d49ffd62035785a9e2c56afcea66e55b43b8b630d7706276e87f22"}, - {file = "psutil-5.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7be9d7f5b0d206f0bbc3794b8e16fb7dbc53ec9e40bbe8787c6f2d38efcf6c9"}, - {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd9246e4cdd5b554a2ddd97c157e292ac11ef3e7af25ac56b08b455c829dca8"}, - {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29a442e25fab1f4d05e2655bb1b8ab6887981838d22effa2396d584b740194de"}, - {file = "psutil-5.9.1-cp310-cp310-win32.whl", hash = "sha256:20b27771b077dcaa0de1de3ad52d22538fe101f9946d6dc7869e6f694f079329"}, - {file = "psutil-5.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:58678bbadae12e0db55186dc58f2888839228ac9f41cc7848853539b70490021"}, - {file = "psutil-5.9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3a76ad658641172d9c6e593de6fe248ddde825b5866464c3b2ee26c35da9d237"}, - {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6a11e48cb93a5fa606306493f439b4aa7c56cb03fc9ace7f6bfa21aaf07c453"}, - {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:068935df39055bf27a29824b95c801c7a5130f118b806eee663cad28dca97685"}, - {file = "psutil-5.9.1-cp36-cp36m-win32.whl", hash = "sha256:0f15a19a05f39a09327345bc279c1ba4a8cfb0172cc0d3c7f7d16c813b2e7d36"}, - {file = "psutil-5.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:db417f0865f90bdc07fa30e1aadc69b6f4cad7f86324b02aa842034efe8d8c4d"}, - {file = "psutil-5.9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:91c7ff2a40c373d0cc9121d54bc5f31c4fa09c346528e6a08d1845bce5771ffc"}, - {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fea896b54f3a4ae6f790ac1d017101252c93f6fe075d0e7571543510f11d2676"}, - {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3054e923204b8e9c23a55b23b6df73a8089ae1d075cb0bf711d3e9da1724ded4"}, - {file = "psutil-5.9.1-cp37-cp37m-win32.whl", hash = "sha256:d2d006286fbcb60f0b391741f520862e9b69f4019b4d738a2a45728c7e952f1b"}, - {file = "psutil-5.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b14ee12da9338f5e5b3a3ef7ca58b3cba30f5b66f7662159762932e6d0b8f680"}, - {file = "psutil-5.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:19f36c16012ba9cfc742604df189f2f28d2720e23ff7d1e81602dbe066be9fd1"}, - {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:944c4b4b82dc4a1b805329c980f270f170fdc9945464223f2ec8e57563139cf4"}, - {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b6750a73a9c4a4e689490ccb862d53c7b976a2a35c4e1846d049dcc3f17d83b"}, - {file = "psutil-5.9.1-cp38-cp38-win32.whl", hash = "sha256:a8746bfe4e8f659528c5c7e9af5090c5a7d252f32b2e859c584ef7d8efb1e689"}, - {file = "psutil-5.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:79c9108d9aa7fa6fba6e668b61b82facc067a6b81517cab34d07a84aa89f3df0"}, - {file = "psutil-5.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28976df6c64ddd6320d281128817f32c29b539a52bdae5e192537bc338a9ec81"}, - {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b88f75005586131276634027f4219d06e0561292be8bd6bc7f2f00bdabd63c4e"}, - {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:645bd4f7bb5b8633803e0b6746ff1628724668681a434482546887d22c7a9537"}, - {file = "psutil-5.9.1-cp39-cp39-win32.whl", hash = "sha256:32c52611756096ae91f5d1499fe6c53b86f4a9ada147ee42db4991ba1520e574"}, - {file = "psutil-5.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:f65f9a46d984b8cd9b3750c2bdb419b2996895b005aefa6cbaba9a143b1ce2c5"}, - {file = "psutil-5.9.1.tar.gz", hash = "sha256:57f1819b5d9e95cdfb0c881a8a5b7d542ed0b7c522d575706a80bedc848c8954"}, + {file = "psutil-5.9.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:8f024fbb26c8daf5d70287bb3edfafa22283c255287cf523c5d81721e8e5d82c"}, + {file = "psutil-5.9.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:b2f248ffc346f4f4f0d747ee1947963613216b06688be0be2e393986fe20dbbb"}, + {file = "psutil-5.9.2-cp27-cp27m-win32.whl", hash = "sha256:b1928b9bf478d31fdffdb57101d18f9b70ed4e9b0e41af751851813547b2a9ab"}, + {file = "psutil-5.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:404f4816c16a2fcc4eaa36d7eb49a66df2d083e829d3e39ee8759a411dbc9ecf"}, + {file = "psutil-5.9.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:94e621c6a4ddb2573d4d30cba074f6d1aa0186645917df42c811c473dd22b339"}, + {file = "psutil-5.9.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:256098b4f6ffea6441eb54ab3eb64db9ecef18f6a80d7ba91549195d55420f84"}, + {file = "psutil-5.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:614337922702e9be37a39954d67fdb9e855981624d8011a9927b8f2d3c9625d9"}, + {file = "psutil-5.9.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39ec06dc6c934fb53df10c1672e299145ce609ff0611b569e75a88f313634969"}, + {file = "psutil-5.9.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3ac2c0375ef498e74b9b4ec56df3c88be43fe56cac465627572dbfb21c4be34"}, + {file = "psutil-5.9.2-cp310-cp310-win32.whl", hash = "sha256:e4c4a7636ffc47b7141864f1c5e7d649f42c54e49da2dd3cceb1c5f5d29bfc85"}, + {file = "psutil-5.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:f4cb67215c10d4657e320037109939b1c1d2fd70ca3d76301992f89fe2edb1f1"}, + {file = "psutil-5.9.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dc9bda7d5ced744622f157cc8d8bdd51735dafcecff807e928ff26bdb0ff097d"}, + {file = "psutil-5.9.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75291912b945a7351d45df682f9644540d564d62115d4a20d45fa17dc2d48f8"}, + {file = "psutil-5.9.2-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4018d5f9b6651f9896c7a7c2c9f4652e4eea53f10751c4e7d08a9093ab587ec"}, + {file = "psutil-5.9.2-cp36-cp36m-win32.whl", hash = "sha256:f40ba362fefc11d6bea4403f070078d60053ed422255bd838cd86a40674364c9"}, + {file = "psutil-5.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9770c1d25aee91417eba7869139d629d6328a9422ce1cdd112bd56377ca98444"}, + {file = "psutil-5.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:42638876b7f5ef43cef8dcf640d3401b27a51ee3fa137cb2aa2e72e188414c32"}, + {file = "psutil-5.9.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91aa0dac0c64688667b4285fa29354acfb3e834e1fd98b535b9986c883c2ce1d"}, + {file = "psutil-5.9.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fb54941aac044a61db9d8eb56fc5bee207db3bc58645d657249030e15ba3727"}, + {file = "psutil-5.9.2-cp37-cp37m-win32.whl", hash = "sha256:7cbb795dcd8ed8fd238bc9e9f64ab188f3f4096d2e811b5a82da53d164b84c3f"}, + {file = "psutil-5.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:5d39e3a2d5c40efa977c9a8dd4f679763c43c6c255b1340a56489955dbca767c"}, + {file = "psutil-5.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd331866628d18223a4265371fd255774affd86244fc307ef66eaf00de0633d5"}, + {file = "psutil-5.9.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b315febaebae813326296872fdb4be92ad3ce10d1d742a6b0c49fb619481ed0b"}, + {file = "psutil-5.9.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7929a516125f62399d6e8e026129c8835f6c5a3aab88c3fff1a05ee8feb840d"}, + {file = "psutil-5.9.2-cp38-cp38-win32.whl", hash = "sha256:561dec454853846d1dd0247b44c2e66a0a0c490f937086930ec4b8f83bf44f06"}, + {file = "psutil-5.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:67b33f27fc0427483b61563a16c90d9f3b547eeb7af0ef1b9fe024cdc9b3a6ea"}, + {file = "psutil-5.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3591616fa07b15050b2f87e1cdefd06a554382e72866fcc0ab2be9d116486c8"}, + {file = "psutil-5.9.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b29f581b5edab1f133563272a6011925401804d52d603c5c606936b49c8b97"}, + {file = "psutil-5.9.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4642fd93785a29353d6917a23e2ac6177308ef5e8be5cc17008d885cb9f70f12"}, + {file = "psutil-5.9.2-cp39-cp39-win32.whl", hash = "sha256:ed29ea0b9a372c5188cdb2ad39f937900a10fb5478dc077283bf86eeac678ef1"}, + {file = "psutil-5.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:68b35cbff92d1f7103d8f1db77c977e72f49fcefae3d3d2b91c76b0e7aef48b8"}, + {file = "psutil-5.9.2.tar.gz", hash = "sha256:feb861a10b6c3bb00701063b37e4afc754f8217f0f09c42280586bd6ac712b5c"}, ] psutil-wheels = [ {file = "psutil-wheels-5.8.0.tar.gz", hash = "sha256:9fb80725195402a66e5db947f239d032500cde75ca5d8625326d797a65341d6f"}, @@ -3739,16 +3739,16 @@ pygithub = [ {file = "PyGithub-1.55.tar.gz", hash = "sha256:1bbfff9372047ff3f21d5cd8e07720f3dbfdaf6462fcaed9d815f528f1ba7283"}, ] pyglet = [ - {file = "pyglet-1.5.26-py3-none-any.whl", hash = "sha256:529b7b1198df3a8399b9621a99ca5e29cd32bb98428bd0e8ba699afa4ba96d2b"}, - {file = "pyglet-1.5.26.zip", hash = "sha256:ee8c5e0b5b87df84188e20e552982eba8da00944b4c5560f1cfdd5c9714d19b0"}, + {file = "pyglet-2.0.dev23-py3-none-any.whl", hash = "sha256:3f425b45376892f6866e9b10f215004f22f720a2ff02df5d4b96405d04cb546d"}, + {file = "pyglet-2.0.dev23.zip", hash = "sha256:0e8fab3cb085b9ae28ad782bf636e75b9493816baee9c1c57cb9d0769b1b894d"}, ] 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.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"}, - {file = "PyJWT-2.4.0.tar.gz", hash = "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba"}, + {file = "PyJWT-2.5.0-py3-none-any.whl", hash = "sha256:8d82e7087868e94dd8d7d418e5088ce64f7daab4b36db654cbaedb46f9d1ca80"}, + {file = "PyJWT-2.5.0.tar.gz", hash = "sha256:e77ab89480905d86998442ac5788f35333fa85f65047a534adc38edf3c88fc3b"}, ] pylint = [ {file = "pylint-2.13.9-py3-none-any.whl", hash = "sha256:705c620d388035bdd9ff8b44c5bcdd235bfb49d276d488dd2c8ff1736aa42526"}, @@ -3856,11 +3856,11 @@ pywin32 = [ {file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"}, ] pywinpty = [ - {file = "pywinpty-2.0.7-cp310-none-win_amd64.whl", hash = "sha256:d56361ed2bd3395347882a7a4e6246359e745a233e89c91786ab3d9421323c17"}, - {file = "pywinpty-2.0.7-cp37-none-win_amd64.whl", hash = "sha256:2d62ede3ed10feb0901b3b4667201766a741b6a2c69f27be623ba9fe9348447b"}, - {file = "pywinpty-2.0.7-cp38-none-win_amd64.whl", hash = "sha256:c3b7e6a2f0e5f86e0dc5cb5e4fec7de19adacc6900232e4a48a2ecf04bae447f"}, - {file = "pywinpty-2.0.7-cp39-none-win_amd64.whl", hash = "sha256:80a6713a586401c2a19efd2969ffd019eb85f18442611a3880e3d618887d2f84"}, - {file = "pywinpty-2.0.7.tar.gz", hash = "sha256:f52b2e51c46dac40708ede1d42577f3ddb9d7cf8acaa36c8e27b3d3b975f4c95"}, + {file = "pywinpty-2.0.8-cp310-none-win_amd64.whl", hash = "sha256:9cbf89834abc8d4d4c5f295f11e15dd93889a8069db876f2bc10cc64aa4060ac"}, + {file = "pywinpty-2.0.8-cp37-none-win_amd64.whl", hash = "sha256:a2f9a95f3b74262ef73f1be5257c295c8caab1f79f081aa3400ca61c724f9bc6"}, + {file = "pywinpty-2.0.8-cp38-none-win_amd64.whl", hash = "sha256:23389d56258d6a1fbc4b41257bd65e5bdabaf6fde7f30a13806e557ea9ee6865"}, + {file = "pywinpty-2.0.8-cp39-none-win_amd64.whl", hash = "sha256:ea7c1da94eed5ef93e75026c67c60d4dca33ea9a1c212fa89221079a7b463c68"}, + {file = "pywinpty-2.0.8.tar.gz", hash = "sha256:a89b9021c63ef78b1e7d8e14f0fac4748c88a0c2e4f529c84f37f6e72b914280"}, ] pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, @@ -3870,6 +3870,13 @@ pyyaml = [ {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"}, @@ -3898,79 +3905,80 @@ pyyaml = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] pyzmq = [ - {file = "pyzmq-23.2.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:a3fd44b5046d247e7f0f1660bcafe7b5fb0db55d0934c05dd57dda9e1f823ce7"}, - {file = "pyzmq-23.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2141e6798d5981be04c08996d27962086a1aa3ea536fe9cf7e89817fd4523f86"}, - {file = "pyzmq-23.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a39ddb0431a68954bd318b923230fa5b649c9c62b0e8340388820c5f1b15bd2"}, - {file = "pyzmq-23.2.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e06747014a5ad1b28cebf5bc1ddcdaccfb44e9b441d35e6feb1286c8a72e54be"}, - {file = "pyzmq-23.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e0113d70b095339e99bb522fe7294f5ae6a7f3b2b8f52f659469a74b5cc7661"}, - {file = "pyzmq-23.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:71b32a1e827bdcbf73750e60370d3b07685816ff3d8695f450f0f8c3226503f8"}, - {file = "pyzmq-23.2.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:55568a020ad2cae9ae36da6058e7ca332a56df968f601cbdb7cf6efb2a77579a"}, - {file = "pyzmq-23.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8c02a0cd39dc01659b3d6cb70bb3a41aebd9885fd78239acdd8d9c91351c4568"}, - {file = "pyzmq-23.2.1-cp310-cp310-win32.whl", hash = "sha256:e1fe30bcd5aea5948c42685fad910cd285eacb2518ea4dc6c170d6b535bee95d"}, - {file = "pyzmq-23.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:650389bbfca73955b262b2230423d89992f38ec48033307ae80e700eaa2fbb63"}, - {file = "pyzmq-23.2.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:e753eee6d3b93c5354e8ba0a1d62956ee49355f0a36e00570823ef64e66183f5"}, - {file = "pyzmq-23.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f07016e3cf088dbfc6e7c5a7b3f540db5c23b0190d539e4fd3e2b5e6beffa4b5"}, - {file = "pyzmq-23.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4805af9614b0b41b7e57d17673459facf85604dac502a5a9244f6e8c9a4de658"}, - {file = "pyzmq-23.2.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39dd252b683816935702825e5bf775df16090619ced9bb4ba68c2d0b6f0c9b18"}, - {file = "pyzmq-23.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:84678153432241bcdca2210cf4ff83560b200556867aea913ffbb960f5d5f340"}, - {file = "pyzmq-23.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:90d88f9d9a2ae6cfb1dc4ea2d1710cdf6456bc1b9a06dd1bb485c5d298f2517e"}, - {file = "pyzmq-23.2.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:794871988c34727c7f79bdfe2546e6854ae1fa2e1feb382784f23a9c6c63ecb3"}, - {file = "pyzmq-23.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c56b1a62a1fb87565343c57b6743fd5da6e138b8c6562361d7d9b5ce4acf399a"}, - {file = "pyzmq-23.2.1-cp311-cp311-win32.whl", hash = "sha256:c3ebf1668664d20c8f7d468955f18379b7d1f7bc8946b13243d050fa3888c7ff"}, - {file = "pyzmq-23.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:ec9803aca9491fd6f0d853d2a6147f19f8deaaa23b1b713d05c5d09e56ea7142"}, - {file = "pyzmq-23.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:385609812eafd9970c3752c51f2f6c4f224807e3e441bcfd8c8273877d00c8a8"}, - {file = "pyzmq-23.2.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b861db65f6b8906c8d6db51dde2448f266f0c66bf28db2c37aea50f58a849859"}, - {file = "pyzmq-23.2.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6b1e79bba24f6df1712e3188d5c32c480d8eda03e8ecff44dc8ecb0805fa62f3"}, - {file = "pyzmq-23.2.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8dc66f109a245653b19df0f44a5af7a3f14cb8ad6c780ead506158a057bd36ce"}, - {file = "pyzmq-23.2.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b815991c7d024bf461f358ad871f2be1135576274caed5749c4828859e40354e"}, - {file = "pyzmq-23.2.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:29b74774a0bfd3c4d98ac853f0bdca55bd9ec89d5b0def5486407cca54472ef8"}, - {file = "pyzmq-23.2.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4bb798bef181648827019001f6be43e1c48b34b477763b37a8d27d8c06d197b8"}, - {file = "pyzmq-23.2.1-cp36-cp36m-win32.whl", hash = "sha256:565bd5ab81f6964fc4067ccf2e00877ad0fa917308975694bbb54378389215f8"}, - {file = "pyzmq-23.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:1f368a82b29f80071781b20663c0fc0c8f6b13273f9f5abe1526af939534f90f"}, - {file = "pyzmq-23.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c9cfaf530e6a7ff65f0afe275e99f983f68b54dfb23ea401f0bc297a632766b6"}, - {file = "pyzmq-23.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c558b50402fca1acc94329c5d8f12aa429738904a5cfb32b9ed3c61235221bb"}, - {file = "pyzmq-23.2.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:20bafc4095eab00f41a510579363a3f5e1f5c69d7ee10f1d88895c4df0259183"}, - {file = "pyzmq-23.2.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f619fd38fc2641abfb53cca719c165182500600b82c695cc548a0f05f764be05"}, - {file = "pyzmq-23.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:044447ae4b2016a6b8697571fd633f799f860b19b76c4a2fd9b1140d52ee6745"}, - {file = "pyzmq-23.2.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:49d30ba7074f469e8167917abf9eb854c6503ae10153034a6d4df33618f1db5f"}, - {file = "pyzmq-23.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:48400b96788cdaca647021bf19a9cd668384f46e4d9c55cf045bdd17f65299c8"}, - {file = "pyzmq-23.2.1-cp37-cp37m-win32.whl", hash = "sha256:8a68f57b7a3f7b6b52ada79876be1efb97c8c0952423436e84d70cc139f16f0d"}, - {file = "pyzmq-23.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9e5bf6e7239fc9687239de7a283aa8b801ab85371116045b33ae20132a1325d6"}, - {file = "pyzmq-23.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ffc6b1623d0f9affb351db4ca61f432dca3628a5ee015f9bf2bfbe9c6836881c"}, - {file = "pyzmq-23.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4d6f110c56f7d5b4d64dde3a382ae61b6d48174e30742859d8e971b18b6c9e5c"}, - {file = "pyzmq-23.2.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9269fbfe3a4eb2009199120861c4571ef1655fdf6951c3e7f233567c94e8c602"}, - {file = "pyzmq-23.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12e62ff0d5223ec09b597ab6d73858b9f64a51221399f3cb08aa495e1dff7935"}, - {file = "pyzmq-23.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6fd5d0d50cbcf4bc376861529a907bed026a4cbe8c22a500ff8243231ef02433"}, - {file = "pyzmq-23.2.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9d0ab2936085c85a1fc6f9fd8f89d5235ae99b051e90ec5baa5e73ad44346e1f"}, - {file = "pyzmq-23.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:022cf5ea7bcaa8a06a03c2706e0ae66904b6138b2155577cd34c64bc7cc637ab"}, - {file = "pyzmq-23.2.1-cp38-cp38-win32.whl", hash = "sha256:28dbdb90b2f6b131f8f10e6081012e4e25234213433420e67e0c1162de537113"}, - {file = "pyzmq-23.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:10d1910ec381b851aeb024a042a13db178cb1edf125e76a4e9d2548ad103aadb"}, - {file = "pyzmq-23.2.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:99a5a77a10863493a1ee8dece02578c6b32025fb3afff91b40476bc489e81648"}, - {file = "pyzmq-23.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:aecd6ceaccc4b594e0092d6513ef3f1c0fa678dd89f86bb8ff1a47014b8fca35"}, - {file = "pyzmq-23.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:415ff62ac525d9add1e3550430a09b9928d2d24a20cc4ce809e67caac41219ab"}, - {file = "pyzmq-23.2.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67975a9e1237b9ccc78f457bef17691bbdd2055a9d26e81ee914ba376846d0ce"}, - {file = "pyzmq-23.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38e106b64bad744fe469dc3dd864f2764d66399178c1bf39d45294cc7980f14f"}, - {file = "pyzmq-23.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8c842109d31a9281d678f668629241c405928afbebd913c48a5a8e7aee61f63d"}, - {file = "pyzmq-23.2.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fefdf9b685fda4141b95ebec975946076a5e0723ff70b037032b2085c5317684"}, - {file = "pyzmq-23.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:79a87831b47a9f6161ad23fa5e89d5469dc585abc49f90b9b07fea8905ae1234"}, - {file = "pyzmq-23.2.1-cp39-cp39-win32.whl", hash = "sha256:342ca3077f47ec2ee41b9825142b614e03e026347167cbc72a59b618c4f6106c"}, - {file = "pyzmq-23.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:5e05492be125dce279721d6b54fd1b956546ecc4bcdfcf8e7b4c413bc0874c10"}, - {file = "pyzmq-23.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:07ed8aaf7ffe150af873269690cc654ffeca7491f62aae0f3821baa181f8d5fe"}, - {file = "pyzmq-23.2.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ad28ddb40db8e450d7d4bf8a1d765d3f87b63b10e7e9a825a3c130c6371a8c03"}, - {file = "pyzmq-23.2.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2f67b63f53c6994d601404fd1a329e6d940ac3dd1d92946a93b2b9c70df67b9f"}, - {file = "pyzmq-23.2.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c890309296f53f9aa32ffcfc51d805705e1982bffd27c9692a8f1e1b8de279f4"}, - {file = "pyzmq-23.2.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:624fd38071a817644acdae075b92a23ea0bdd126a58148288e8284d23ec361ce"}, - {file = "pyzmq-23.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a114992a193577cb62233abf8cb2832970f9975805a64740e325d2f895e7f85a"}, - {file = "pyzmq-23.2.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c780acddd2934c6831ff832ecbf78a45a7b62d4eb216480f863854a8b7d54fa7"}, - {file = "pyzmq-23.2.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d904f6595acfaaf99a1a61881fea068500c40374d263e5e073aa4005e5f9c28a"}, - {file = "pyzmq-23.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:929d548b74c0f82f7f95b54e4a43f9e4ce2523cfb8a54d3f7141e45652304b2a"}, - {file = "pyzmq-23.2.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f392cbea531b7142d1958c0d4a0c9c8d760dc451e5848d8dd3387804d3e3e62c"}, - {file = "pyzmq-23.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a0f09d85c45f58aa8e715b42f8b26beba68b3b63a8f7049113478aca26efbc30"}, - {file = "pyzmq-23.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e708fbfdf4ee3107422b69ca65da1b9f056b431fc0888096a8c1d6cd908e8f"}, - {file = "pyzmq-23.2.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35e635343ff367f697d00fa1484262bb68e36bc74c9b80737eac5a1e04c4e1b1"}, - {file = "pyzmq-23.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efb9e38b2a590282704269585de7eb33bf43dc294cad092e1b172e23d4c217e5"}, - {file = "pyzmq-23.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:407f909c4e8fde62fbdad9ebd448319792258cc0550c2815567a4d9d8d9e6d18"}, - {file = "pyzmq-23.2.1.tar.gz", hash = "sha256:2b381aa867ece7d0a82f30a0c7f3d4387b7cf2e0697e33efaa5bed6c5784abcd"}, + {file = "pyzmq-24.0.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:38e9ff2918d50a588e56aa80dae0373ef9f67512fc5691f95db2f59edabc083e"}, + {file = "pyzmq-24.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5439bef77fd3818c20e1bf5657836e105e4e48e1a7996e24ebb55402a681934e"}, + {file = "pyzmq-24.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8698db54fd49af74333190fb154448dcfc67a382aa2b2d784ffe981b7cf421ec"}, + {file = "pyzmq-24.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e24d7bda7a32ff35d0c914a52dd920a408f73d7e4b93d6755d7c67e819a8cd8c"}, + {file = "pyzmq-24.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00a8a4f83259b91b238244c999a33e0a77c0427d496902fb75fdf1601e4c9d3d"}, + {file = "pyzmq-24.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4985a82958d67eafd3f8c9c215c3da8f633592024f771420477f22f011846235"}, + {file = "pyzmq-24.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0775b65e79cccfca2b017e80ffe6dbd224b035a47245c4140b08e93996425942"}, + {file = "pyzmq-24.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e5a398955b1cfdd85dd699f2390661b7bbe9edcbadd70a444c79c69e6c31c91"}, + {file = "pyzmq-24.0.0-cp310-cp310-win32.whl", hash = "sha256:1bdec8988cad1f9a8453b4d00fd11598a91604cd9b205640e98b2f22e0435921"}, + {file = "pyzmq-24.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:eadf1d3841c2155b68ef49147253fd4ac1447a972d01c08248114edc4d3ba9d5"}, + {file = "pyzmq-24.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:99bb8cff279f7d1f516919d82b35ed0796c53ce7da7dca191fabfa4c53f47740"}, + {file = "pyzmq-24.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:452c3d5bfbaf96f32ef20673e6ba238355891884009f0c87e0f97a985293ef42"}, + {file = "pyzmq-24.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65b532c95a4cde95bb4787b5545321ed5624fa8d7391bce17c4e2a0717b97bb7"}, + {file = "pyzmq-24.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9cd5c7449f297a1b53a4803413db907a8cad1178435e2879c1b92816f2bbe56"}, + {file = "pyzmq-24.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f81f4065ff8ccd207204129463fd587b25c9f593128176a717dbabc03af9b233"}, + {file = "pyzmq-24.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b5107313c7f28b0e074da7a9d8c0132cb8dc32fdd3b5a4c6a224d30e50d6324"}, + {file = "pyzmq-24.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f200cdca2fc842749a3f263ccf9e4b50e732ad14f53b60faf68ef656b75c32a"}, + {file = "pyzmq-24.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ae33cb195304ac16996184b115f9e27eb9f0b14062e97fbd1d446e3e4a594ff0"}, + {file = "pyzmq-24.0.0-cp311-cp311-win32.whl", hash = "sha256:62ee069fe338d0b057b81e752dad2b9b6b206ba8570a878dbbe8b93b7b99ebb1"}, + {file = "pyzmq-24.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:e9e3fa94fa1e58763a7b824b8e0015d93c9fdd8e449d0218d13d01172e3d1539"}, + {file = "pyzmq-24.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b94a3453a18bb914b2cac1ac38c09f980a3c86a8cd0bb744dd6bd03ab8ff958a"}, + {file = "pyzmq-24.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e66d3237a7e8a11cdb8b470c77a6fb43f49fe9407936a2c9ac468ba2ba0982e"}, + {file = "pyzmq-24.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:44c1dc858b76d2ab28f5ea040dd5e816a71624a8cf38d4ca3208006fd2a9375e"}, + {file = "pyzmq-24.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:761016baa6ca720677ce01d453801e41db2d0e53cf052ed00ba8c2e6cae4d2cd"}, + {file = "pyzmq-24.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:ef4bd725c06d6ee9e502419ceeb5dfaccb6bbe36f359fd0366b90a56b6dae647"}, + {file = "pyzmq-24.0.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:40cdb50e82393253d340b6a357474588eb01cfd90b06231d5bfbc14490490b1b"}, + {file = "pyzmq-24.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:eb3b8acb5dc33ec812d79f35b85fddc43d8f75b65c00c635ee3c0b527e11c8ea"}, + {file = "pyzmq-24.0.0-cp36-cp36m-win32.whl", hash = "sha256:8988209d5efae9b5c9297fb48d153e2528384c1afe2c9fd8eeb474cd6e765199"}, + {file = "pyzmq-24.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:52d881c33f8db5ffcb0aabc14cc71098453f4700511195cebca846000b44b080"}, + {file = "pyzmq-24.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:844040d44cc4320cdffb258fe03768ff0b37e710d56a70dd1f6c2902738f1e28"}, + {file = "pyzmq-24.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05524f7cfa4f7398259a428fbb22ec4c3f0665c6a303a0d6afdd98457b19af3"}, + {file = "pyzmq-24.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ff4e510a9509d36359c7af4684e73489cdd53c781dd4bc9b07dc808fab56cc48"}, + {file = "pyzmq-24.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dbb871b22acec52c1b046ef6aa3d16f83618c704772f126a49e7446a0c885278"}, + {file = "pyzmq-24.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f1ddc43cceb500e4a6495250d9d34cac93e6d9e89a46f0e34fcefcc3caf66ef3"}, + {file = "pyzmq-24.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a5cdbede23aae133e50f786adc4a2cacf60bddde649e3dc122c32368daa2c007"}, + {file = "pyzmq-24.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ee24b94b5ae22af9148e597f512fae8383908ca07d3b7f99b349679fede4d7d3"}, + {file = "pyzmq-24.0.0-cp37-cp37m-win32.whl", hash = "sha256:c37c0046d04c0fdd99a9a31d6a9ce7d703cca3b7fdde5738603503dfba58a25f"}, + {file = "pyzmq-24.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b1ef471c62c3d0681cfbaa8bbaf96f22e20cafd391ecad8a43317f6b1598478e"}, + {file = "pyzmq-24.0.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:dfde6624d3d99d9a67235b60ae13be1a6ffce2f1de3cd2be9900f011d5d6a6a6"}, + {file = "pyzmq-24.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fc2c363f68bbb9fea6b8137c432c6df9d7c8c76b01549c4410c506dac9e30663"}, + {file = "pyzmq-24.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6814a6add1b7cb76e3fdfd961ce4c48c1f0a29e82bdb3d060a669b85bc6db454"}, + {file = "pyzmq-24.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1a53c6030c4f45859af9a75cfc0d8b551b8924f9b2503397c69d0fa2f62d2370"}, + {file = "pyzmq-24.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f328d28d0a1ea43d7030e1999ced9db252ba4ef2531af3e9bfc135cca77b8324"}, + {file = "pyzmq-24.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8a43105683a66de78489b30037b97c9ce5f821f57035f6944f633bbd4baadd15"}, + {file = "pyzmq-24.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3823e5e613a61948b2e6b85fd91f872772717d24cd1df871836665d4c56d6b34"}, + {file = "pyzmq-24.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1c23568e1581f637b1a1e1fd15dcd5e9165332c94bf8101c562e7c50640d673e"}, + {file = "pyzmq-24.0.0-cp38-cp38-win32.whl", hash = "sha256:8a93abd67a46c6b91f28a7513b9f8b9a5432fd573c3d6444c083e07209bf96e4"}, + {file = "pyzmq-24.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:8361c90701fc6ff5f16c81c969563c6915402fbecb2ddc9c5063fec0238e5e52"}, + {file = "pyzmq-24.0.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:4ec8847ab93200a94fd3e88e2824a6bba9a46d28161f1bf0be24f2237c40c291"}, + {file = "pyzmq-24.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f969214a9ebf1175a8aba863d6f1220174130188686d4ed475d138a240e60c1c"}, + {file = "pyzmq-24.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a07fb73ae006a5b565d19232e5a6592fd7c93e57e67c2e592bf0b21f1676767"}, + {file = "pyzmq-24.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1b978e1318311eb69523ed60f084b752f52f27ffea4ce2f60deab4d8a4cca6de"}, + {file = "pyzmq-24.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f355d23a420a6b39241bbef2c803839b01d52d680d89aac39460505e57b2cd03"}, + {file = "pyzmq-24.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5c1c2d7ebe991d8e36365ccd6b47297b6b96393ad453cad990901c21924add30"}, + {file = "pyzmq-24.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0128c7b723984e31c1b0df5bc532715defd13bf64d8d9eddd7207d093759ae4"}, + {file = "pyzmq-24.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ed10f5a942a2903a722d63806b7a9d2e0a966c038100dc763483d8fbe8ea074"}, + {file = "pyzmq-24.0.0-cp39-cp39-win32.whl", hash = "sha256:201e4d5733cecfd469d9ceee57500a0f365f85d6f14dd524105e2a0be8cd93c1"}, + {file = "pyzmq-24.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:460f0ff945d4b46c2d568941be33cf08954fca1e3239cf6a6ee03b1371de8f64"}, + {file = "pyzmq-24.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:534d13940b2476e4bacb54558c7b9b62fb275c2839e06267597a3e4b2f291196"}, + {file = "pyzmq-24.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ebdb43e947291c5cb80ef6c7d525f64bc4ed685de43f855ba0cf2b0fd8052e3a"}, + {file = "pyzmq-24.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ce8c61297a751c67062d11e44352e9379da03a90d95aa352395d3b1e53e9f20a"}, + {file = "pyzmq-24.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adbf2bb11a616210735d6a112186d378f7934be3f2935e6d9dd760c110840c3a"}, + {file = "pyzmq-24.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0584420cbd2dac77f81bdc4b9da2635a54300563d4632433b08cb1f505341ef0"}, + {file = "pyzmq-24.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8ea1861512c7f32d0c585119a2caea6665eec6df429abf5810826b0df9587de1"}, + {file = "pyzmq-24.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:be67e7f48fce8dbefd602f779c7382c874a1a1a3d08f375366c4d28baaa0bfd4"}, + {file = "pyzmq-24.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ff6c9fdbcfb285e28fe35eaf5ba39644cbc65343aa41844217c2b5a99abbdd7e"}, + {file = "pyzmq-24.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6736703c7581d18e3959c1d786035c620def2f096e762aefaf08cfa39844d1e"}, + {file = "pyzmq-24.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a5b9471e5e507f51f4c0acabec60a7ae2ea218ac6134a8e5ec5674845347a63a"}, + {file = "pyzmq-24.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dbece43299705eca217808759f4322c7cab41db2ba3ad8d7261ee2b17abe6488"}, + {file = "pyzmq-24.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:025a0815d36ccd54cf002feb9cbe0e37c2253eca305ee4dc72ccdb4a814eefb4"}, + {file = "pyzmq-24.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc21a74f337298840f59f21a12fbf6ec1de798cd69d6b331ef9ed88ac8cb18f0"}, + {file = "pyzmq-24.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf6477a083f8a1b54893ad24bc15f94dd0684b02320c69d2a69dcf36f70e73cb"}, + {file = "pyzmq-24.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aa6d0dfa94ce89d050dca0104389e10c537715bf10e5b0bfe5ece79f17f1719e"}, + {file = "pyzmq-24.0.0.tar.gz", hash = "sha256:13b008bd142c9f6079ad75a30504eef2291502e9eac90e722b16fcf9ce856147"}, ] recommonmark = [ {file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f"}, @@ -4019,8 +4027,8 @@ scipy = [ {file = "scipy-1.7.3.tar.gz", hash = "sha256:ab5875facfdef77e0a47d5fd39ea178b58e60e454a4c85aa1e52fcb80db7babf"}, ] screeninfo = [ - {file = "screeninfo-0.8-py3-none-any.whl", hash = "sha256:dac455fbed79e82c481d59a00962f543e5a9bf3c2cc9f0e48e2714eb8d3cec23"}, - {file = "screeninfo-0.8.tar.gz", hash = "sha256:9501bf8b8458c7d1be4cb0ac9abddddfa80b932fb3f65bfcb54f5586434b1dc5"}, + {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"}, @@ -4075,8 +4083,8 @@ smmap = [ {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, ] sniffio = [ - {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, - {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, + {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"}, @@ -4163,12 +4171,12 @@ tornado = [ {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, ] tqdm = [ - {file = "tqdm-4.64.0-py2.py3-none-any.whl", hash = "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6"}, - {file = "tqdm-4.64.0.tar.gz", hash = "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d"}, + {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.3.0-py3-none-any.whl", hash = "sha256:65fa18961659635933100db8ca120ef6220555286949774b9cfc106f941d1c7a"}, - {file = "traitlets-5.3.0.tar.gz", hash = "sha256:0bb9f1f9f017aa8ec187d8b1b2a7a6626a2a1d877116baba52a129bfa124f8e2"}, + {file = "traitlets-5.4.0-py3-none-any.whl", hash = "sha256:93663cc8236093d48150e2af5e2ed30fc7904a11a6195e21bab0408af4e6d6c8"}, + {file = "traitlets-5.4.0.tar.gz", hash = "sha256:3f2c4e435e271592fe4390f1746ea56836e3a080f84e7833f0f801d9613fec39"}, ] typed-ast = [ {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, @@ -4201,32 +4209,32 @@ types-decorator = [ {file = "types_decorator-0.1.7-py3-none-any.whl", hash = "sha256:b55f4c8c59bdd25bd1ecf835f0bc21d88b99be0f5bb51b1c0d73090be90f62db"}, ] types-docutils = [ - {file = "types-docutils-0.19.0.tar.gz", hash = "sha256:94936b1961aacda61ec6bb0acf1169cd7830b5230b645855c1d4789baf19685e"}, - {file = "types_docutils-0.19.0-py3-none-any.whl", hash = "sha256:198ed1c0ef6c1a79411da9e1745514eda433d37770e24f26b0e13a302904cc97"}, + {file = "types-docutils-0.19.1.tar.gz", hash = "sha256:7df133b87105af410fc6a992030a70ee9f5a2c2636c5afe7e0de285eb9fdb015"}, + {file = "types_docutils-0.19.1-py3-none-any.whl", hash = "sha256:6b110b17ba4bfbde765b69acca6a6da373094d99a5a3bce1d5a8c9d29b293d89"}, ] 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.19.22.tar.gz", hash = "sha256:d2b26861b0cb46a3c8669b0df507b7ef72e487da66d61f9f3576aa76ce028a83"}, - {file = "types_protobuf-3.19.22-py3-none-any.whl", hash = "sha256:d291388678af91bb045fafa864f142dc4ac22f5d4cdca097c7d8d8a32fa9b3ab"}, + {file = "types-protobuf-3.20.3.tar.gz", hash = "sha256:aae6404a9c902970da33977d1bc44cebae4957a5ceeced650b9afafb36051bb2"}, + {file = "types_protobuf-3.20.3-py3-none-any.whl", hash = "sha256:7344c65ff8ff915e5e997e0ac16b1c0ad6ee7fca11df5a64f550aedb264fdb23"}, ] types-pygments = [ {file = "types-Pygments-2.13.0.tar.gz", hash = "sha256:00cc3e228ffdf6ffcf20af13190ef6e315f3585e5e8d27c12d1b56ff7ecde2f2"}, {file = "types_Pygments-2.13.0-py3-none-any.whl", hash = "sha256:3985a4105d9b768bee5f311d7682d60c59ddd9f04d0977695f430ab9b218706b"}, ] types-requests = [ - {file = "types-requests-2.28.9.tar.gz", hash = "sha256:feaf581bd580497a47fe845d506fa3b91b484cf706ff27774e87659837de9962"}, - {file = "types_requests-2.28.9-py3-none-any.whl", hash = "sha256:86cb66d3de2f53eac5c09adc42cf6547eefbd0c7e1210beca1ee751c35d96083"}, + {file = "types-requests-2.28.10.tar.gz", hash = "sha256:97d8f40aa1ffe1e58c3726c77d63c182daea9a72d9f1fa2cafdea756b2a19f2c"}, + {file = "types_requests-2.28.10-py3-none-any.whl", hash = "sha256:45b485725ed58752f2b23461252f1c1ad9205b884a1e35f786bb295525a3e16a"}, ] 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.23.tar.gz", hash = "sha256:b78e819f0e350221d0689a5666162e467ba3910737bafda14b5c2c85e9bb1e56"}, - {file = "types_urllib3-1.26.23-py3-none-any.whl", hash = "sha256:333e675b188a1c1fd980b4b352f9e40572413a4c1ac689c23cd546e96310070a"}, + {file = "types-urllib3-1.26.24.tar.gz", hash = "sha256:a1b3aaea7dda3eb1b51699ee723aadd235488e4dc4648e030f09bc429ecff42f"}, + {file = "types_urllib3-1.26.24-py3-none-any.whl", hash = "sha256:cf7918503d02d3576e503bbfb419b0e047c4617653bba09624756ab7175e15c9"}, ] typing-extensions = [ {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, @@ -4237,8 +4245,8 @@ urllib3 = [ {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, ] virtualenv = [ - {file = "virtualenv-20.16.3-py2.py3-none-any.whl", hash = "sha256:4193b7bc8a6cd23e4eb251ac64f29b4398ab2c233531e66e40b19a6b7b0d30c1"}, - {file = "virtualenv-20.16.3.tar.gz", hash = "sha256:d86ea0bb50e06252d79e6c241507cb904fcd66090c3271381372d6221a3970f9"}, + {file = "virtualenv-20.16.5-py3-none-any.whl", hash = "sha256:d07dfc5df5e4e0dbc92862350ad87a36ed505b978f6c39609dc489eadd5b0d27"}, + {file = "virtualenv-20.16.5.tar.gz", hash = "sha256:227ea1b9994fdc5ea31977ba3383ef296d7472ea85be9d6732e42a91c04e80da"}, ] watchdog = [ {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330"}, @@ -4276,8 +4284,8 @@ webencodings = [ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] websocket-client = [ - {file = "websocket-client-1.3.3.tar.gz", hash = "sha256:d58c5f284d6a9bf8379dab423259fe8f85b70d5fa5d2916d5791a84594b122b1"}, - {file = "websocket_client-1.3.3-py3-none-any.whl", hash = "sha256:5d55652dc1d0b3c734f044337d929aaf83f4f9138816ec680c1aefefb4dc4877"}, + {file = "websocket-client-1.4.1.tar.gz", hash = "sha256:f9611eb65c8241a67fb373bef040b3cf8ad377a9f6546a12b620b6511e8ea9ef"}, + {file = "websocket_client-1.4.1-py3-none-any.whl", hash = "sha256:398909eb7e261f44b8f4bd474785b6ec5f5b499d4953342fe9755e01ef624090"}, ] wrapt = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, diff --git a/pyproject.toml b/pyproject.toml index 8c32dcd03c..4c817cb183 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ packages = [ [tool.poetry.dependencies] python = ">=3.7,<3.11" -click = ">=7.2<=9.0" +click = ">=7.2,<=9.0" click-default-group = "^1.2.2" colour = "^0.1.5" numpy = "^1.19" From b63f13b08671e3024447a76e03573e1d0a5bcfe0 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 24 Sep 2022 15:52:57 +0200 Subject: [PATCH 115/555] fixed currently broken animation, deepcopy -> copy (#2895) --- manim/animation/indication.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/animation/indication.py b/manim/animation/indication.py index 53f8b8ad69..d320ec3a40 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -330,7 +330,7 @@ def __init__(self, vmobject, n_segments=10, time_width=0.1, remover=True, **kwar super().__init__( *( ShowPassingFlash( - vmobject.deepcopy().set_stroke(width=stroke_width), + vmobject.copy().set_stroke(width=stroke_width), time_width=time_width, **kwargs, ) From 7a801707b6dc373fae21af192214620ce0a53380 Mon Sep 17 00:00:00 2001 From: ad-chaos <90276965+ad-chaos@users.noreply.github.com> Date: Sat, 24 Sep 2022 19:24:24 +0530 Subject: [PATCH 116/555] Always expand user when validating file-paths (#2885) The users are expanded when providing a file-path for the following mobjects: - CodeMobjects - ImageMobjects - SVGMobjects --- manim/mobject/svg/svg_mobject.py | 4 ++-- manim/mobject/text/code_mobject.py | 2 +- manim/utils/file_ops.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/manim/mobject/svg/svg_mobject.py b/manim/mobject/svg/svg_mobject.py index ec838a7a10..c87eae7051 100644 --- a/manim/mobject/svg/svg_mobject.py +++ b/manim/mobject/svg/svg_mobject.py @@ -125,8 +125,8 @@ def _ensure_valid_file(self): if self.file_name is None: raise Exception("Must specify file for SVGMobject") - if self.file_name.exists(): - self.file_path = self.file_name + if self.file_name.expanduser().exists(): + self.file_path = self.file_name.expanduser() return relative = Path.cwd() / self.file_name diff --git a/manim/mobject/text/code_mobject.py b/manim/mobject/text/code_mobject.py index e39cecadb2..229274be0a 100644 --- a/manim/mobject/text/code_mobject.py +++ b/manim/mobject/text/code_mobject.py @@ -285,7 +285,7 @@ def _ensure_valid_file(self): raise Exception("Must specify file for Code") possible_paths = [ os.path.join(os.path.join("assets", "codes"), self.file_name), - self.file_name, + os.path.expanduser(self.file_name), ] for path in possible_paths: if os.path.exists(path): diff --git a/manim/utils/file_ops.py b/manim/utils/file_ops.py index 1f41837d61..3cddd15592 100644 --- a/manim/utils/file_ops.py +++ b/manim/utils/file_ops.py @@ -161,7 +161,7 @@ def guarantee_empty_existence(path: Path) -> Path: def seek_full_path_from_defaults( file_name: str, default_dir: Path, extensions: list[str] ) -> Path: - possible_paths = [Path(file_name)] + possible_paths = [Path(file_name).expanduser()] possible_paths += [ Path(default_dir) / f"{file_name}{extension}" for extension in ["", *extensions] ] From 162f912ea76d9f8c47d19f90f24156b0869774ff Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Sat, 24 Sep 2022 06:56:23 -0700 Subject: [PATCH 117/555] CI (test-arm): update python version to `3.10.6` (#2925) --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b81fb69ad5..d1e3ba2c28 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: strategy: fail-fast: false matrix: - python: ['3.7.13', '3.10.4'] + python: ['3.7.13', '3.10.6'] steps: - name: Checkout the repository uses: actions/checkout@v2 From c96b95722b000a010542ea6873d785e9f6a95022 Mon Sep 17 00:00:00 2001 From: Nick Skriloff Date: Sat, 24 Sep 2022 10:15:08 -0400 Subject: [PATCH 118/555] Added installation instructions for Windows via ``winget`` (#2936) * Update windows.rst * added winget installation of MiKTeX from other PR, closes #2937 Co-authored-by: Benjamin Hackl --- docs/source/installation/windows.rst | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/docs/source/installation/windows.rst b/docs/source/installation/windows.rst index 37f6c822af..7c8a3e94c9 100644 --- a/docs/source/installation/windows.rst +++ b/docs/source/installation/windows.rst @@ -54,6 +54,28 @@ Manim should now be installed on your system. Continue reading the :ref:`optional dependencies ` section below. +Winget +***** + +While there is no recipe for installing Manim with Winget directly, +you can install all requirements by running: + +.. code-block:: powershell + + winget install python + winget install ffmpeg + +and then Manim can be installed by running: + +.. code-block:: powershell + + python -m pip install manim + +Manim should now be installed on your system. Continue reading +the :ref:`optional dependencies ` section +below. + + Manual Installation ******************* @@ -115,7 +137,7 @@ For Windows, the recommended LaTeX distribution is `MiKTeX `__. You can install it by using the installer from the linked MiKTeX site, or by using the package manager of your choice (Chocolatey: ``choco install miktex.install``, -Scoop: ``scoop install latex``). +Scoop: ``scoop install latex``, Winget: ``winget install ChristianSchenk.MiKTeX``). If you are concerned about disk space, there are some alternative, smaller distributions of LaTeX. From c4f1d202a9c858da930e4515d44ce0910740f1b2 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Sat, 24 Sep 2022 10:22:42 -0400 Subject: [PATCH 119/555] Prevent TransformMatchingTex from crashing when there is nothing to fade (#2846) * Prevent TransformMatchingTex from crashing when there is nothing to fade Fixes #2845 and adds tests. I originally tried to make FadeTransformPieces not crash if it was given two Mobjects with no submobjects, but I couldn't quite get that to work. This is probably the less invasive of a change. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * use Tex arrows Co-authored-by: Benjamin Hackl * Update expectations after Tex change * Address feedback This makes FadeTransform::ghost_to more robust to receiving an empty target. It is currently unspecified what should happen, so how about just fading in place? * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/animation/transform.py | 10 ++++- .../control_data/transform/FadeTransform.npz | Bin 0 -> 12969 bytes .../transform/FadeTransformPieces.npz | Bin 0 -> 26755 bytes ...ransform_TargetIsEmpty_FadesOutInPlace.npz | Bin 0 -> 4233 bytes .../TransformMatchingTex.npz | Bin 0 -> 8568 bytes ...ormMatchingTex_FadeTransformMismatches.npz | Bin 0 -> 8570 bytes ..._FadeTransformMismatches_NothingToFade.npz | Bin 0 -> 7046 bytes ...ansformMatchingTex_TransformMismatches.npz | Bin 0 -> 8528 bytes tests/test_graphical_units/test_transform.py | 37 ++++++++++++++++++ .../test_transform_matching_parts.py | 37 ++++++++++++++++++ 10 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 tests/test_graphical_units/control_data/transform/FadeTransform.npz create mode 100644 tests/test_graphical_units/control_data/transform/FadeTransformPieces.npz create mode 100644 tests/test_graphical_units/control_data/transform/FadeTransform_TargetIsEmpty_FadesOutInPlace.npz create mode 100644 tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex.npz create mode 100644 tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_FadeTransformMismatches.npz create mode 100644 tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_FadeTransformMismatches_NothingToFade.npz create mode 100644 tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_TransformMismatches.npz diff --git a/manim/animation/transform.py b/manim/animation/transform.py index bff83be965..cdf44f409f 100644 --- a/manim/animation/transform.py +++ b/manim/animation/transform.py @@ -823,8 +823,14 @@ def begin(self): self.ghost_to(m0, m1) def ghost_to(self, source, target): - """Replaces the source by the target and sets the opacity to 0.""" - source.replace(target, stretch=self.stretch, dim_to_match=self.dim_to_match) + """Replaces the source by the target and sets the opacity to 0. + + If the provided target has no points, and thus a location of [0, 0, 0] + the source will simply fade out where it currently is. + """ + # mobject.replace() does not work if the target has no points. + if target.get_num_points() or target.submobjects: + source.replace(target, stretch=self.stretch, dim_to_match=self.dim_to_match) source.set_opacity(0) def get_all_mobjects(self) -> Sequence[Mobject]: diff --git a/tests/test_graphical_units/control_data/transform/FadeTransform.npz b/tests/test_graphical_units/control_data/transform/FadeTransform.npz new file mode 100644 index 0000000000000000000000000000000000000000..674d33fdb374a6d395c290b91cfb241d4be6a741 GIT binary patch literal 12969 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 literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex.npz b/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex.npz new file mode 100644 index 0000000000000000000000000000000000000000..ed183f14cf3fe62ea5c4cb3582e6a55f1779b1dd GIT binary patch literal 8568 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 bUv~O`-!*a3WZSpMGeqE14}KonkNou?j@-mE literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_FadeTransformMismatches.npz b/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_FadeTransformMismatches.npz new file mode 100644 index 0000000000000000000000000000000000000000..dd6aa6ad5ab1d20a133a7b677a8b4a88d0a0a6d4 GIT binary patch literal 8570 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 literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_FadeTransformMismatches_NothingToFade.npz b/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_FadeTransformMismatches_NothingToFade.npz new file mode 100644 index 0000000000000000000000000000000000000000..df36fde0196d67f39b53db317e24188b414b8d6c GIT binary patch literal 7046 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 literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/test_transform.py b/tests/test_graphical_units/test_transform.py index aa5e740470..6b8fa9523c 100644 --- a/tests/test_graphical_units/test_transform.py +++ b/tests/test_graphical_units/test_transform.py @@ -199,3 +199,40 @@ def test_TransformWithConflictingPaths(scene): path_arc_centers=ORIGIN, ) ) + + +@frames_comparison(last_frame=False) +def test_FadeTransformPieces(scene): + src = VGroup(Square(), Circle().shift(LEFT + UP)) + src.shift(3 * LEFT) + + target = VGroup(Circle(), Triangle().shift(RIGHT + DOWN)) + target.shift(3 * RIGHT) + + scene.add(src) + scene.play(FadeTransformPieces(src, target)) + + +@frames_comparison(last_frame=False) +def test_FadeTransform(scene): + src = Square(fill_opacity=1.0) + src.shift(3 * LEFT) + + target = Circle(fill_opacity=1.0, color=ORANGE) + target.shift(3 * RIGHT) + + scene.add(src) + scene.play(FadeTransform(src, target)) + + +@frames_comparison(last_frame=False) +def test_FadeTransform_TargetIsEmpty_FadesOutInPlace(scene): + # https://github.com/ManimCommunity/manim/issues/2845 + src = Square(fill_opacity=1.0) + src.shift(3 * LEFT) + + target = VGroup() + target.shift(3 * RIGHT) + + scene.add(src) + scene.play(FadeTransform(src, target)) diff --git a/tests/test_graphical_units/test_transform_matching_parts.py b/tests/test_graphical_units/test_transform_matching_parts.py index c1f01f9f0f..b5af1fb2a3 100644 --- a/tests/test_graphical_units/test_transform_matching_parts.py +++ b/tests/test_graphical_units/test_transform_matching_parts.py @@ -25,3 +25,40 @@ def test_TransformMatchingDisplaysCorrect(scene): scene.wait(0.5) # Shift to make sure object isn't duplicated if moved scene.play(circle.animate.shift(DOWN)) + + +@frames_comparison(last_frame=False) +def test_TransformMatchingTex(scene): + start = MathTex("A", "+", "B", "=", "C") + end = MathTex("C", "=", "B", "-", "A") + + scene.add(start) + scene.play(TransformMatchingTex(start, end)) + + +@frames_comparison(last_frame=False) +def test_TransformMatchingTex_FadeTransformMismatches(scene): + start = MathTex("A", "+", "B", "=", "C") + end = MathTex("C", "=", "B", "-", "A") + + scene.add(start) + scene.play(TransformMatchingTex(start, end, fade_transform_mismatches=True)) + + +@frames_comparison(last_frame=False) +def test_TransformMatchingTex_TransformMismatches(scene): + start = MathTex("A", "+", "B", "=", "C") + end = MathTex("C", "=", "B", "-", "A") + + scene.add(start) + scene.play(TransformMatchingTex(start, end, transform_mismatches=True)) + + +@frames_comparison(last_frame=False) +def test_TransformMatchingTex_FadeTransformMismatches_NothingToFade(scene): + # https://github.com/ManimCommunity/manim/issues/2845 + start = MathTex("A", r"\to", "B") + end = MathTex("B", r"\to", "A") + + scene.add(start) + scene.play(TransformMatchingTex(start, end, fade_transform_mismatches=True)) From 92e9ceee61637e007dfe5386e88b065f0df853c2 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Sat, 24 Sep 2022 10:23:28 -0400 Subject: [PATCH 120/555] Add extract_frames utility to help visualize test control data (#2872) * Add extract_frames utility to help visualize test control data This will make it easier for devs to make sure their graphical unit tests are drawing what they expect. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix path separators * Fix double python * moved extract_frames script to scripts directory Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- docs/source/contributing/testing.rst | 13 +++++++-- scripts/extract_frames.py | 42 ++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 scripts/extract_frames.py diff --git a/docs/source/contributing/testing.rst b/docs/source/contributing/testing.rst index 7f60a52074..f17bac1d1d 100644 --- a/docs/source/contributing/testing.rst +++ b/docs/source/contributing/testing.rst @@ -36,8 +36,8 @@ At the moment there are three types of tests: #. Graphical unit tests: Because ``manim`` is a graphics library, we test frames. To do so, we create test scenes that render a specific feature. When pytest runs, it compares the result of the test to the control data, either at 6 fps or just the last frame. If it matches, the tests - pass. If the test and control data differ, the tests fail. You can - use ``--show_diff`` flag with ``pytest`` to visually see the differences. + pass. If the test and control data differ, the tests fail. You can use ``--show_diff`` flag with ``pytest`` to visually + see the differences. The ``extract_frames.py`` script lets you see all the frames of a test. #. Videos format tests: @@ -222,6 +222,15 @@ For the example above, it would be (``-s`` is here to see manim logs, so you can see what's going on). +If you want to see all the control data frames (e.g. to make sure your test is doing what you want), use the +``extract_frames.py`` script. The first parameter is the path to a ``.npz`` file and the second parameter is the +directory you want the frames created. The frames will be named ``frame0.png``, ``frame1.png``, etc. + +.. code-block:: bash + + python scripts/extract_frames.py tests/test_graphical_units/control_data/plot/axes.npz output + + Please make sure to add the control data to git as soon as it is produced with ``git add ``. diff --git a/scripts/extract_frames.py b/scripts/extract_frames.py new file mode 100644 index 0000000000..8771bd3917 --- /dev/null +++ b/scripts/extract_frames.py @@ -0,0 +1,42 @@ +import os +import sys + +import numpy as np +from PIL import Image + + +def main(): + if len(sys.argv) != 3: + print_usage() + sys.exit(1) + npz_file = sys.argv[1] + output_folder = sys.argv[2] + if not os.path.exists(output_folder): + os.makedirs(output_folder) + + data = np.load(npz_file) + if "frame_data" not in data: + print("The given file did not have frame_data.") + print("Are you sure this is from a Manim Graphical Unit Test?") + sys.exit(2) + frames = data["frame_data"] + for i, frame in enumerate(frames): + img = Image.fromarray(frame) + img.save(os.path.join(output_folder, f"frame{i}.png")) + print(f"Saved {len(frames)} frames to {output_folder}") + + +def print_usage(): + print("Manim Graphical Test Frame Extractor") + print( + "This tool outputs the frames of a Graphical Unit Test " + "stored within a .npz file, typically found under " + r"//tests/test_graphical_units/control_data" + ) + print() + print("usage:") + print("python3 extract_frames.py npz_file output_directory") + + +if __name__ == "__main__": + main() From dd64894a5edd3f2707d10481b971b9670d786973 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Sat, 24 Sep 2022 20:24:49 +0530 Subject: [PATCH 121/555] CI (test-arm): update configurations --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1e3ba2c28..f260b34d11 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: strategy: fail-fast: false matrix: - python: ['3.7.13', '3.10.6'] + python: ['3.7.14', '3.10.7'] steps: - name: Checkout the repository uses: actions/checkout@v2 @@ -37,7 +37,7 @@ jobs: - name: Activate Python ${{ matrix.python }} run: | - echo "/root/.pyenv/versions/${{ matrix.python }}/bin:/root/.poetry/bin:$PATH" > $GITHUB_PATH + echo "/root/.pyenv/versions/${{ matrix.python }}/bin:/root/.local/bin:$PATH" > $GITHUB_PATH - name: Show Python Version run: | From c33e583fc286af2b0f0ed31e652236f52e070822 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Sat, 24 Sep 2022 08:08:36 -0700 Subject: [PATCH 122/555] CI (test-arm): Always select the correct python version (#2963) for some reason recent version of poetry started using system python instead of one in $PATH. This is a workaround for that. --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f260b34d11..4e9d1da6d8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,6 +45,7 @@ jobs: - name: Install Manim run: | + poetry env use ${{ matrix.python }} poetry install - name: Run tests From 89bed0a9236bf4d740cde39df348448558d135fa Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sun, 25 Sep 2022 02:12:27 +0200 Subject: [PATCH 123/555] disable edit on GitHub button in documentation (#2962) --- docs/source/conf.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 3b5dba7f6b..5e1961b818 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -99,6 +99,10 @@ html_static_path = ["_static"] html_theme_options = { + "source_repository": "https://github.com/ManimCommunity/manim/", + "source_branch": "main", + "source_directory": "docs/source/", + "top_of_page_button": None, "light_logo": "manim-logo-sidebar.svg", "dark_logo": "manim-logo-sidebar-dark.svg", "light_css_variables": { From 3ad15bd58c3ebcdda7012625f5446c489b2c3a11 Mon Sep 17 00:00:00 2001 From: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> Date: Wed, 28 Sep 2022 19:07:11 +0530 Subject: [PATCH 124/555] Add animation RemoveTextLetterByLetter (#2883) * Add animation RemoveTextLetterByLetter * added RemoveTextLetterByLetter to __all__ * fixed static value of 0.06 -> 1/frame_rate * minor language improvement * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/animation/creation.py | 66 ++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/manim/animation/creation.py b/manim/animation/creation.py index 85bb78ccbf..2d0cab6326 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -67,6 +67,7 @@ def construct(self): "ShowIncreasingSubsets", "SpiralIn", "AddTextLetterByLetter", + "RemoveTextLetterByLetter", "ShowSubmobjectsOneByOne", "AddTextWordByWord", ] @@ -84,6 +85,7 @@ def construct(self): from manim.mobject.opengl.opengl_surface import OpenGLSurface from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject +from .. import config from ..animation.animation import Animation from ..animation.composition import Succession from ..constants import TAU @@ -495,6 +497,7 @@ def __init__( group: Mobject, suspend_mobject_updating: bool = False, int_func: Callable[[np.ndarray], np.ndarray] = np.floor, + reverse_rate_function=False, **kwargs, ) -> None: self.all_submobs = list(group.submobjects) @@ -502,17 +505,27 @@ def __init__( for mobj in self.all_submobs: mobj.set_opacity(0) super().__init__( - group, suspend_mobject_updating=suspend_mobject_updating, **kwargs + group, + suspend_mobject_updating=suspend_mobject_updating, + reverse_rate_function=reverse_rate_function, + **kwargs, ) def interpolate_mobject(self, alpha: float) -> None: n_submobs = len(self.all_submobs) - index = int(self.int_func(self.rate_func(alpha) * n_submobs)) + value = ( + 1 - self.rate_func(alpha) + if self.reverse_rate_function + else self.rate_func(alpha) + ) + index = int(self.int_func(value * n_submobs)) self.update_submobject_list(index) def update_submobject_list(self, index: int) -> None: for mobj in self.all_submobs[:index]: mobj.set_opacity(1) + for mobj in self.all_submobs[index:]: + mobj.set_opacity(0) class AddTextLetterByLetter(ShowIncreasingSubsets): @@ -537,19 +550,64 @@ def __init__( rate_func: Callable[[float], float] = linear, time_per_char: float = 0.1, run_time: float | None = None, + reverse_rate_function=False, + introducer=True, **kwargs, ) -> None: - # time_per_char must be above 0.06, or the animation won't finish self.time_per_char = time_per_char if run_time is None: - run_time = np.max((0.06, self.time_per_char)) * len(text) + # minimum time per character is 1/frame_rate, otherwise + # the animation does not finish. + run_time = np.max((1 / config.frame_rate, self.time_per_char)) * len(text) + super().__init__( + text, + suspend_mobject_updating=suspend_mobject_updating, + int_func=int_func, + rate_func=rate_func, + run_time=run_time, + reverse_rate_function=reverse_rate_function, + introducer=introducer, + **kwargs, + ) + +class RemoveTextLetterByLetter(AddTextLetterByLetter): + """Remove a :class:`~.Text` letter by letter from the scene. + + Parameters + ---------- + time_per_char : :class:`float` + Frequency of appearance of the letters. + + .. tip:: + + This is currently only possible for class:`~.Text` and not for class:`~.MathTex` + + """ + + def __init__( + self, + text: Text, + suspend_mobject_updating: bool = False, + int_func: Callable[[np.ndarray], np.ndarray] = np.ceil, + rate_func: Callable[[float], float] = linear, + time_per_char: float = 0.1, + run_time: float | None = None, + reverse_rate_function=True, + introducer=False, + remover=True, + **kwargs, + ) -> None: super().__init__( text, suspend_mobject_updating=suspend_mobject_updating, int_func=int_func, rate_func=rate_func, + time_per_char=time_per_char, run_time=run_time, + reverse_rate_function=reverse_rate_function, + introducer=introducer, + remover=remover, **kwargs, ) From 309c9d41eb734ca85a7aea5533f88a6d4ee7c944 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Wed, 28 Sep 2022 18:02:53 +0200 Subject: [PATCH 125/555] Ported improved implementation of :class:`.SVGMobject` from 3b1b/manim (#2898) * port SVGMobject from 3b1b/manim * added svgelements as dependency * revert change of default values * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * set default stroke_width of svg elements to 0 if not set * fix handling of circles with different rx/ry * turn more methods into staticmethods * removed duplicated method * set/adapt stroke-width of some test SVGs * updated control data * forgot some control data * fixed init_colors in tex_mobject and text_mobject * minor changes, added docstrings * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * module docstring, removed import * vector_to_coords changed again * nail sphinx version to below 5.1 to fix rtd (?) * update test_text control data for science * changed Brace to use VMobjectFromSVGPath * remove unused classes and methods depending on old SVG path implementation * remove style_utils and svg_path modules * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * change test_text to use monospace font * restore geometry.polygram * added get_mobject_type_class auxiliary method; changed polyline implementation to ad-hoc approach * restore test_text to previous version * skip Use tags as svgelements already populates them Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/requirements.txt | 2 +- manim/mobject/mobject.py | 5 + manim/mobject/opengl/opengl_mobject.py | 5 + .../opengl/opengl_point_cloud_mobject.py | 4 + .../opengl/opengl_vectorized_mobject.py | 16 +- manim/mobject/svg/__init__.py | 2 - manim/mobject/svg/brace.py | 16 +- manim/mobject/svg/style_utils.py | 186 ---- manim/mobject/svg/svg_mobject.py | 938 ++++++++---------- manim/mobject/svg/svg_path.py | 483 --------- manim/mobject/text/numbers.py | 4 +- manim/mobject/text/tex_mobject.py | 27 +- manim/mobject/text/text_mobject.py | 9 +- manim/mobject/types/point_cloud_mobject.py | 4 + manim/mobject/types/vectorized_mobject.py | 8 + manim/utils/images.py | 8 + manim/utils/iterables.py | 14 + poetry.lock | 604 +++++------ pyproject.toml | 1 + tests/module/mobject/svg/test_svg_mobject.py | 21 - .../control_data/img_and_svg/Arcs01.npz | Bin 7641 -> 7845 bytes .../control_data/img_and_svg/Arcs02.npz | Bin 32366 -> 26869 bytes .../img_and_svg/ContiguousUSMap.npz | Bin 51969 -> 50524 bytes .../control_data/img_and_svg/DesmosGraph1.npz | Bin 8487 -> 8570 bytes .../control_data/img_and_svg/HalfEllipse.npz | Bin 4606 -> 6412 bytes .../control_data/img_and_svg/Heart.npz | Bin 3761 -> 4327 bytes .../control_data/img_and_svg/Line.npz | Bin 2172 -> 2199 bytes .../control_data/img_and_svg/ManimLogo.npz | Bin 9182 -> 9433 bytes .../img_and_svg/MultipleTransform.npz | Bin 3413 -> 3131 bytes .../control_data/img_and_svg/Penrose.npz | Bin 6556 -> 6903 bytes .../img_and_svg/PixelizedText.npz | Bin 4893 -> 4378 bytes .../control_data/img_and_svg/Rhomboid.npz | Bin 5358 -> 5762 bytes .../img_and_svg/RotateTransform.npz | Bin 2353 -> 4289 bytes .../img_and_svg/SkewXTransform.npz | Bin 2395 -> 3365 bytes .../img_and_svg/SkewYTransform.npz | Bin 2395 -> 2958 bytes .../control_data/img_and_svg/SmoothCurves.npz | Bin 5583 -> 5650 bytes .../control_data/img_and_svg/WeightSVG.npz | Bin 7884 -> 8054 bytes .../vector_scene/vector_to_coords.npz | Bin 235354 -> 235257 bytes .../img_svg_resources/curve.svg | 2 +- .../img_svg_resources/half_ellipse.svg | 2 +- .../img_svg_resources/states_map.svg | 2 +- 41 files changed, 834 insertions(+), 1529 deletions(-) delete mode 100644 manim/mobject/svg/style_utils.py delete mode 100644 manim/mobject/svg/svg_path.py diff --git a/docs/requirements.txt b/docs/requirements.txt index 0ed8128396..74e954fe80 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,5 +1,5 @@ furo myst-parser -sphinx +sphinx<5.1 sphinx-copybutton sphinxext-opengraph diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 196ce56c61..c7e9bfb213 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -2135,6 +2135,11 @@ def __len__(self): def get_group_class(self): return Group + @staticmethod + def get_mobject_type_class(): + """Return the base class of this mobject type.""" + return Mobject + def split(self): result = [self] if len(self.points) > 0 else [] return result + self.submobjects diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index dac322f7a5..0246a27a04 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -2281,6 +2281,11 @@ def align_to( def get_group_class(self): return OpenGLGroup + @staticmethod + def get_mobject_type_class(): + """Return the base class of this mobject type.""" + return OpenGLMobject + # Alignment def align_data_and_family(self, mobject): diff --git a/manim/mobject/opengl/opengl_point_cloud_mobject.py b/manim/mobject/opengl/opengl_point_cloud_mobject.py index 1732b23dc5..531423be58 100644 --- a/manim/mobject/opengl/opengl_point_cloud_mobject.py +++ b/manim/mobject/opengl/opengl_point_cloud_mobject.py @@ -155,6 +155,10 @@ def get_shader_data(self): self.read_data_to_shader(shader_data, "color", "rgbas") return shader_data + @staticmethod + def get_mobject_type_class(): + return OpenGLPMobject + class OpenGLPGroup(OpenGLPMobject): def __init__(self, *pmobs, **kwargs): diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index af09ef3898..858e753505 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -142,6 +142,10 @@ def __init__( def get_group_class(self): return OpenGLVGroup + @staticmethod + def get_mobject_type_class(): + return OpenGLVMobject + def init_data(self): super().init_data() self.data.pop("rgbas") @@ -389,10 +393,18 @@ def get_colors(self): fill_color = property(get_fill_color, set_fill) def has_stroke(self): - return any(self.get_stroke_widths()) and any(self.get_stroke_opacities()) + stroke_widths = self.get_stroke_widths() + stroke_opacities = self.get_stroke_opacities() + return ( + stroke_widths is not None + and stroke_opacities is not None + and any(stroke_widths) + and any(stroke_opacities) + ) def has_fill(self): - return any(self.get_fill_opacities()) + fill_opacities = self.get_fill_opacities() + return fill_opacities is not None and any(fill_opacities) def get_opacity(self): if self.has_fill(): diff --git a/manim/mobject/svg/__init__.py b/manim/mobject/svg/__init__.py index 7aa13c29c3..9bb6807f35 100644 --- a/manim/mobject/svg/__init__.py +++ b/manim/mobject/svg/__init__.py @@ -7,7 +7,5 @@ :toctree: ../reference ~brace - ~style_utils ~svg_mobject - ~svg_path """ diff --git a/manim/mobject/svg/brace.py b/manim/mobject/svg/brace.py index 580df9788d..e39591235a 100644 --- a/manim/mobject/svg/brace.py +++ b/manim/mobject/svg/brace.py @@ -7,6 +7,7 @@ from typing import Sequence import numpy as np +import svgelements as se from manim._config import config from manim.mobject.geometry.arc import Arc @@ -18,12 +19,12 @@ from ...animation.fading import FadeIn from ...animation.growing import GrowFromCenter from ...constants import * -from ...mobject.svg.svg_path import SVGPathMobject from ...mobject.types.vectorized_mobject import VMobject from ...utils.color import BLACK +from ..svg.svg_mobject import VMobjectFromSVGPath -class Brace(SVGPathMobject): +class Brace(VMobjectFromSVGPath): """Takes a mobject and draws a brace adjacent to it. Passing a direction vector determines the direction from which the @@ -99,19 +100,22 @@ def __init__( (target_width * sharpness - default_min_width) / 2, ) - path = path_string_template.format( - linear_section_length, - -linear_section_length, + path = se.Path( + path_string_template.format( + linear_section_length, + -linear_section_length, + ) ) super().__init__( - path_string=path, + path_obj=path, stroke_width=stroke_width, fill_opacity=fill_opacity, background_stroke_width=background_stroke_width, background_stroke_color=background_stroke_color, **kwargs, ) + self.flip(RIGHT) self.stretch_to_fit_width(target_width) self.shift(left - self.get_corner(UP + LEFT) + self.buff * DOWN) diff --git a/manim/mobject/svg/style_utils.py b/manim/mobject/svg/style_utils.py deleted file mode 100644 index bb886805c6..0000000000 --- a/manim/mobject/svg/style_utils.py +++ /dev/null @@ -1,186 +0,0 @@ -"""Utility functions for parsing SVG styles.""" - - -from __future__ import annotations - -__all__ = ["cascade_element_style", "parse_style", "parse_color_string"] - -from xml.dom.minidom import Element as MinidomElement - -from colour import web2hex - -from ...utils.color import rgb_to_hex - -CASCADING_STYLING_ATTRIBUTES: list[str] = [ - "fill", - "stroke", - "fill-opacity", - "stroke-opacity", -] - - -# The default styling specifications for SVG images, -# according to https://www.w3.org/TR/SVG/painting.html -# (ctrl-F for "initial") -SVG_DEFAULT_ATTRIBUTES: dict[str, str] = { - "fill": "black", - "fill-opacity": "1", - "stroke": "none", - "stroke-opacity": "1", -} - - -def cascade_element_style( - element: MinidomElement, - inherited: dict[str, str], -) -> dict[str, str]: - """Collect the element's style attributes based upon both its inheritance and its own attributes. - - SVG uses cascading element styles. A closer ancestor's style takes precedence over a more distant ancestor's - style. In order to correctly calculate the styles, the attributes are passed down through the inheritance tree, - updating where necessary. - - Note that this method only copies the values and does not parse them. See :meth:`parse_color_string` for converting - from SVG attributes to manim keyword arguments. - - Parameters - ---------- - element : :class:`MinidomElement` - Element of the SVG parse tree - - inherited : :class:`dict` - Dictionary of SVG attributes inherited from the parent element. - - Returns - ------- - :class:`dict` - Dictionary mapping svg attributes to values with `element`'s values overriding inherited values. - """ - - style = inherited.copy() - - # cascade the regular elements. - for attr in CASCADING_STYLING_ATTRIBUTES: - entry = element.getAttribute(attr) - if entry: - style[attr] = entry - - # the style attribute should be handled separately in order to - # break it up nicely. furthermore, style takes priority over other - # attributes in the same element. - style_specs = element.getAttribute("style") - if style_specs: - for style_spec in style_specs.split(";"): - try: - key, value = style_spec.split(":") - except ValueError as e: - if not style_spec.strip(): - # there was just a stray semicolon at the end, producing an emptystring - pass - else: - raise e - else: - style[key.strip()] = value.strip() - - return style - - -def parse_color_string(color_spec: str) -> str: - """Handle the SVG-specific color strings and convert them to HTML #rrggbb format. - - Parameters - ---------- - color_spec : :class:`str` - String in any web-compatible format - - Returns - ------- - :class:`str` - Hexadecimal color string in the format `#rrggbb` - """ - - if color_spec[0:3] == "rgb": - # these are only in integer form, but the Colour module wants them in floats. - splits = color_spec[4:-1].split(",") - if splits[0][-1] == "%": - # if the last character of the first number is a percentage, - # then interpret the number as a percentage - parsed_rgbs = [float(i[:-1]) / 100.0 for i in splits] - else: - parsed_rgbs = [int(i) / 255.0 for i in splits] - - hex_color = rgb_to_hex(parsed_rgbs) - - elif color_spec[0] == "#": - # its OK, parse as hex color standard. - hex_color = color_spec - - else: - # attempt to convert color names like "red" to hex color - hex_color = web2hex(color_spec, force_long=True) - - return hex_color - - -def fill_default_values(svg_style: dict) -> None: - """ - Fill in the default values for properties of SVG elements, - if they are not currently set in the style dictionary. - - Parameters - ---------- - svg_style : :class:`dict` - Style dictionary with SVG property names. Some may be missing. - - Returns - ------- - :class:`dict` - Style attributes; none are missing. - """ - for key in SVG_DEFAULT_ATTRIBUTES: - if key not in svg_style: - svg_style[key] = SVG_DEFAULT_ATTRIBUTES[key] - - -def parse_style(svg_style: dict[str, str]) -> dict: - """Convert a dictionary of SVG attributes to Manim VMobject keyword arguments. - - Parameters - ---------- - svg_style : :class:`dict` - Style attributes as a string-to-string dictionary. Keys are valid SVG element attributes (fill, stroke, etc) - - Returns - ------- - :class:`dict` - Style attributes, but in manim kwargs form, e.g., keys are fill_color, stroke_color - """ - - manim_style = {} - fill_default_values(svg_style) - - if "fill-opacity" in svg_style: - manim_style["fill_opacity"] = float(svg_style["fill-opacity"]) - - if "stroke-opacity" in svg_style: - manim_style["stroke_opacity"] = float(svg_style["stroke-opacity"]) - - # nones need to be handled specially - if "fill" in svg_style: - if svg_style["fill"] == "none": - manim_style["fill_opacity"] = 0 - else: - manim_style["fill_color"] = parse_color_string(svg_style["fill"]) - - if "stroke" in svg_style: - if svg_style["stroke"] == "none": - # In order to not break animations.creation.Write, - # we interpret no stroke as stroke-width of zero and - # color the same as the fill color, if it exists. - manim_style["stroke_width"] = 0 - if "fill_color" in manim_style: - manim_style["stroke_color"] = manim_style["fill_color"] - else: - manim_style["stroke_color"] = parse_color_string(svg_style["stroke"]) - - return manim_style diff --git a/manim/mobject/svg/svg_mobject.py b/manim/mobject/svg/svg_mobject.py index c87eae7051..077ccaa48d 100644 --- a/manim/mobject/svg/svg_mobject.py +++ b/manim/mobject/svg/svg_mobject.py @@ -2,621 +2,523 @@ from __future__ import annotations -__all__ = ["SVGMobject"] - -import itertools as it import os -import re -import string -import warnings -from pathlib import Path -from xml.dom.minidom import Element as MinidomElement -from xml.dom.minidom import parse as minidom_parse +from xml.etree import ElementTree as ET import numpy as np -from colour import Color +import svgelements as se -from manim.mobject.geometry.arc import Circle -from manim.mobject.geometry.line import Line -from manim.mobject.geometry.polygram import Rectangle, RoundedRectangle -from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL +from manim import config, logger -from ... import config, logger -from ...constants import * -from ...mobject.types.vectorized_mobject import VMobject -from .style_utils import cascade_element_style, parse_style -from .svg_path import SVGPathMobject +from ...constants import RIGHT +from ...utils.images import get_full_vector_image_path +from ...utils.iterables import hash_obj +from ..geometry.arc import Circle +from ..geometry.line import Line +from ..geometry.polygram import Polygon, Rectangle, RoundedRectangle +from ..opengl.opengl_compatibility import ConvertToOpenGL +from ..types.vectorized_mobject import VMobject +__all__ = ["SVGMobject", "VMobjectFromSVGPath"] -class SVGMobject(VMobject, metaclass=ConvertToOpenGL): - """A SVGMobject is a Vector Mobject constructed from an SVG (or XDV) file. - SVGMobjects are constructed from the XML data within the SVG file - structure. As such, subcomponents from the XML data can be accessed via - the submobjects attribute. There is varying amounts of support for SVG - elements, experiment with SVG files at your own peril. +SVG_HASH_TO_MOB_MAP: dict[int, VMobject] = {} - Examples - -------- - .. code-block:: python +def _convert_point_to_3d(x: float, y: float) -> np.ndarray: + return np.array([x, y, 0.0]) - class Sample(Scene): - def construct(self): - self.play(FadeIn(SVGMobject("manim-logo-sidebar.svg"))) + +class SVGMobject(VMobject, metaclass=ConvertToOpenGL): + """A vectorized mobject created from importing an SVG file. Parameters - -------- - file_name : :class:`str` or :class:`pathlib.Path` - The file's path name. When possible, the full path is preferred but a - relative path may be used as well. Relative paths are relative to the - directory specified by the `--assets_dir` command line argument. - - Other Parameters - -------- - should_center : :class:`bool` - Whether the SVGMobject should be centered to the origin. Defaults to `True`. - height : :class:`float` - Specify the final height of the SVG file. Defaults to 2 units. - width : :class:`float` - Specify the width the SVG file should occupy. Defaults to `None`. - unpack_groups : :class:`bool` - Whether the hierarchies of VGroups generated should be flattened. Defaults to `True`. - stroke_width : :class:`float` - The stroke width of the outer edge of an SVG path element. Defaults to `4`. - fill_opacity : :class:`float` - Specifies the opacity of the image. `1` is opaque, `0` is transparent. Defaults to `1`. + ---------- + file_name + The path to the SVG file. + should_center + Whether or not the mobject should be centered after + being imported. + height + The target height of the mobject, set to 2 Manim units by default. + If the height and width are both set to ``None``, the mobject + is imported without being scaled. + width + The target width of the mobject, set to ``None`` by default. If + the height and the width are both set to ``None``, the mobject + is imported without being scaled. + color + The color (both fill and stroke color) of the mobject. If + ``None`` (the default), the colors set in the SVG file + are used. + opacity + The opacity (both fill and stroke opacity) of the mobject. + If ``None`` (the default), the opacity set in the SVG file + is used. + fill_color + The fill color of the mobject. If ``None`` (the default), + the fill colors set in the SVG file are used. + fill_opacity + The fill opacity of the mobject. If ``None`` (the default), + the fill opacities set in the SVG file are used. + stroke_color + The stroke color of the mobject. If ``None`` (the default), + the stroke colors set in the SVG file are used. + stroke_opacity + The stroke opacity of the mobject. If ``None`` (the default), + the stroke opacities set in the SVG file are used. + stroke_width + The stroke width of the mobject. If ``None`` (the default), + the stroke width values set in the SVG file are used. + svg_default + A dictionary in which fallback values for unspecified + properties of elements in the SVG file are defined. If + ``None`` (the default), ``color``, ``opacity``, ``fill_color`` + ``fill_opacity``, ``stroke_color``, and ``stroke_opacity`` + are set to ``None``, and ``stroke_width`` is set to 0. + path_string_config + A dictionary with keyword arguments passed to + :class:`.VMobjectFromSVGPath` used for importing path elements. + If ``None`` (the default), no additional arguments are passed. + kwargs + Further arguments passed to the parent class. """ def __init__( self, - file_name=None, - should_center=True, - height=2, - width=None, - unpack_groups=True, # if False, creates a hierarchy of VGroups - stroke_width=DEFAULT_STROKE_WIDTH, - fill_opacity=1.0, - should_subdivide_sharp_curves=False, - should_remove_null_curves=False, - color=None, - *, - fill_color=None, - stroke_color=None, - stroke_opacity=1.0, + file_name: str | None = None, + should_center: bool = True, + height: float | None = 2, + width: float | None = None, + color: str | None = None, + opacity: float | None = None, + fill_color: str | None = None, + fill_opacity: float | None = None, + stroke_color: str | None = None, + stroke_opacity: float | None = None, + stroke_width: float | None = None, + svg_default: dict | None = None, + path_string_config: dict | None = None, **kwargs, ): + super().__init__(color=None, stroke_color=None, fill_color=None, **kwargs) + + # process keyword arguments + self.file_name = file_name - self.def_map = {} - self.file_name = Path(file_name) - self._ensure_valid_file() self.should_center = should_center - self.unpack_groups = unpack_groups - self.path_string_config = ( - { - "should_subdivide_sharp_curves": should_subdivide_sharp_curves, - "should_remove_null_curves": should_remove_null_curves, + self.svg_height = height + self.svg_width = width + self.color = color + self.opacity = opacity + self.fill_color = fill_color + self.fill_opacity = fill_opacity + self.stroke_color = stroke_color + self.stroke_opacity = stroke_opacity + self.stroke_width = stroke_width + + if svg_default is None: + svg_default = { + "color": None, + "opacity": None, + "fill_color": None, + "fill_opacity": None, + "stroke_width": 0, + "stroke_color": None, + "stroke_opacity": None, } - if config.renderer == "opengl" - else {} - ) - self._initial_svg_style = self.generate_style( - Color(color) if color else None, - Color(fill_color) if fill_color else None, - Color(stroke_color) if stroke_color else None, - fill_opacity, - stroke_opacity, - ) - super().__init__( - color=color, - fill_opacity=fill_opacity, - stroke_width=stroke_width, + self.svg_default = svg_default + + if path_string_config is None: + path_string_config = {} + self.path_string_config = path_string_config + + self.init_svg_mobject() + + self.set_style( fill_color=fill_color, - stroke_opacity=stroke_opacity, + fill_opacity=fill_opacity, stroke_color=stroke_color, - **kwargs, + stroke_opacity=stroke_opacity, + stroke_width=stroke_width, ) - self._move_into_position(width, height) + self.move_into_position() - def _ensure_valid_file(self): - """Reads self.file_name and determines whether the given input file_name - is valid. - """ - if self.file_name is None: - raise Exception("Must specify file for SVGMobject") + def init_svg_mobject(self) -> None: + """Checks whether the SVG has already been imported and + generates it if not. - if self.file_name.expanduser().exists(): - self.file_path = self.file_name.expanduser() + See also + -------- + :meth:`.SVGMobject.generate_mobject` + """ + hash_val = hash_obj(self.hash_seed) + if hash_val in SVG_HASH_TO_MOB_MAP: + mob = SVG_HASH_TO_MOB_MAP[hash_val].copy() + self.add(*mob) return - relative = Path.cwd() / self.file_name - if relative.exists(): - self.file_path = relative - return + self.generate_mobject() + SVG_HASH_TO_MOB_MAP[hash_val] = self.copy() + + @property + def hash_seed(self) -> tuple: + """A unique hash representing the result of the generated + mobject points. - possible_paths = [ - config.get_dir("assets_dir") / self.file_name, - config.get_dir("assets_dir") / self.file_name.with_suffix(".svg"), - config.get_dir("assets_dir") / self.file_name.with_suffix(".xdv"), - self.file_path, - self.file_path.with_suffix(".svg"), - self.file_path.with_suffix(".xdv"), - ] - for path in possible_paths: - if path.exists(): - self.file_path = path - return - error = f"From: {Path.cwd()}, could not find {self.file_name} at either of these locations: {possible_paths}" - raise OSError(error) - - def generate_points(self): - """Called by the Mobject abstract base class. Responsible for generating - the SVGMobject's points from XML tags, populating self.mobjects, and - any submobjects within self.mobjects. + Used as keys in the ``SVG_HASH_TO_MOB_MAP`` caching dictionary. """ - doc = minidom_parse(str(self.file_path)) - for node in doc.childNodes: - if not isinstance(node, MinidomElement) or node.tagName != "svg": - continue - mobjects = self._get_mobjects_from(node, self._initial_svg_style) - if self.unpack_groups: - self.add(*mobjects) - else: - self.add(*mobjects[0].submobjects) - doc.unlink() + return ( + self.__class__.__name__, + self.svg_default, + self.path_string_config, + self.file_name, + config.renderer, + ) - init_points = generate_points + def generate_mobject(self) -> None: + """Parse the SVG and translate its elements to submobjects.""" + file_path = self.get_file_path() + element_tree = ET.parse(file_path) + new_tree = self.modify_xml_tree(element_tree) + # Create a temporary svg file to dump modified svg to be parsed + root, ext = os.path.splitext(file_path) + modified_file_path = root + "_" + ext + new_tree.write(modified_file_path) + + svg = se.SVG.parse(modified_file_path) + os.remove(modified_file_path) + + mobjects = self.get_mobjects_from(svg) + self.add(*mobjects) + self.flip(RIGHT) # Flip y + + def get_file_path(self) -> str: + """Search for an existing file based on the specified file name.""" + if self.file_name is None: + raise ValueError("Must specify file for SVGMobject") + return get_full_vector_image_path(self.file_name) - def _get_mobjects_from( - self, - element: MinidomElement, - inherited_style: dict[str, str], - within_defs: bool = False, - ) -> list[VMobject]: - """Parses a given SVG element into a Mobject. + def modify_xml_tree(self, element_tree: ET.ElementTree) -> ET.ElementTree: + """Modifies the SVG element tree to include default + style information. Parameters ---------- - element : :class:`Element` - The SVG data in the XML to be parsed. - - inherited_style : :class:`dict` - Dictionary of the SVG attributes for children to inherit. + element_tree + The parsed element tree from the SVG file. + """ + config_style_dict = self.generate_config_style_dict() + style_keys = ( + "fill", + "fill-opacity", + "stroke", + "stroke-opacity", + "stroke-width", + "style", + ) + root = element_tree.getroot() + root_style_dict = {k: v for k, v in root.attrib.items() if k in style_keys} + + new_root = ET.Element("svg", {}) + config_style_node = ET.SubElement(new_root, "g", config_style_dict) + root_style_node = ET.SubElement(config_style_node, "g", root_style_dict) + root_style_node.extend(root) + return ET.ElementTree(new_root) + + def generate_config_style_dict(self) -> dict[str, str]: + """Generate a dictionary holding the default style information.""" + keys_converting_dict = { + "fill": ("color", "fill_color"), + "fill-opacity": ("opacity", "fill_opacity"), + "stroke": ("color", "stroke_color"), + "stroke-opacity": ("opacity", "stroke_opacity"), + "stroke-width": ("stroke_width",), + } + svg_default_dict = self.svg_default + result = {} + for svg_key, style_keys in keys_converting_dict.items(): + for style_key in style_keys: + if svg_default_dict[style_key] is None: + continue + result[svg_key] = str(svg_default_dict[style_key]) + return result - within_defs : :class:`bool` - Whether ``element`` is within a ``defs`` element, which indicates - whether elements with `id` attributes should be added to the - definitions list. + def get_mobjects_from(self, svg: se.SVG) -> list[VMobject]: + """Convert the elements of the SVG to a list of mobjects. - Returns - ------- - List[VMobject] - A VMobject representing the associated SVG element. + Parameters + ---------- + svg + The parsed SVG file. """ - result = [] - # First, let all non-elements pass (like text entries) - if not isinstance(element, MinidomElement): - return result - - style = cascade_element_style(element, inherited_style) - is_defs = element.tagName == "defs" - - if element.tagName == "style": - pass # TODO, handle style - elif element.tagName in ["g", "svg", "symbol", "defs"]: - result += it.chain( - *( - self._get_mobjects_from( - child, - style, - within_defs=within_defs or is_defs, - ) - for child in element.childNodes - ) - ) - elif element.tagName == "path": - temp = element.getAttribute("d") - if temp != "": - result.append(self._path_string_to_mobject(temp, style)) - elif element.tagName == "use": - # note, style is calcuated in a different way for `use` elements. - result += self._use_to_mobjects(element, style) - elif element.tagName in ["line"]: - result.append(self._line_to_mobject(element, style)) - elif element.tagName == "rect": - result.append(self._rect_to_mobject(element, style)) - elif element.tagName == "circle": - result.append(self._circle_to_mobject(element, style)) - elif element.tagName == "ellipse": - result.append(self._ellipse_to_mobject(element, style)) - elif element.tagName in ["polygon", "polyline"]: - result.append(self._polygon_to_mobject(element, style)) - else: - pass # TODO - - result = [m for m in result if m is not None] - group_cls = self.get_group_class() - - self._handle_transforms(element, group_cls(*result)) - if len(result) > 1 and not self.unpack_groups: - result = [group_cls(*result)] - - if within_defs and element.hasAttribute("id"): - # it seems wasteful to throw away the actual element, - # but I'd like the parsing to be as similar as possible - self.def_map[element.getAttribute("id")] = (style, element) - if is_defs: - # defs shouldn't be part of the result tree, only the id dictionary. - return [] - + for shape in svg.elements(): + if isinstance(shape, se.Group): + continue + elif isinstance(shape, se.Path): + mob = self.path_to_mobject(shape) + elif isinstance(shape, se.SimpleLine): + mob = self.line_to_mobject(shape) + elif isinstance(shape, se.Rect): + mob = self.rect_to_mobject(shape) + elif isinstance(shape, (se.Circle, se.Ellipse)): + mob = self.ellipse_to_mobject(shape) + elif isinstance(shape, se.Polygon): + mob = self.polygon_to_mobject(shape) + elif isinstance(shape, se.Polyline): + mob = self.polyline_to_mobject(shape) + elif isinstance(shape, se.Text): + mob = self.text_to_mobject(shape) + elif isinstance(shape, se.Use) or type(shape) == se.SVGElement: + continue + else: + logger.warning(f"Unsupported element type: {type(shape)}") + continue + if mob is None or not mob.has_points(): + continue + self.apply_style_to_mobject(mob, shape) + if isinstance(shape, se.Transformable) and shape.apply: + self.handle_transform(mob, shape.transform) + result.append(mob) return result - def generate_style( - self, - color: Color | None, - fill_color: Color | None, - stroke_color: Color | None, - fill_opacity: float, - stroke_opacity: float, - ): - style = { - "fill-opacity": fill_opacity, - "stroke-opacity": stroke_opacity, - } - if color: - style["fill"] = style["stroke"] = color.get_hex_l() - if fill_color: - style["fill"] = fill_color.hex_l - if stroke_color: - style["stroke"] = stroke_color.hex_l - - return style - - def _path_string_to_mobject(self, path_string: str, style: dict): - """Converts a SVG path element's ``d`` attribute to a mobject. + @staticmethod + def handle_transform(mob: VMobject, matrix: se.Matrix) -> VMobject: + """Apply SVG transformations to the converted mobject. Parameters ---------- - path_string : :class:`str` - A path with potentially multiple path commands to create a shape. - - style : :class:`dict` - Style specification, using the SVG names for properties. - - Returns - ------- - SVGPathMobject - A VMobject from the given path string, or d attribute. + mob + The converted mobject. + matrix + The transformation matrix determined from the SVG + transformation. """ - return SVGPathMobject( - path_string, **self.path_string_config, **parse_style(style) - ) + mat = np.array([[matrix.a, matrix.c], [matrix.b, matrix.d]]) + vec = np.array([matrix.e, matrix.f, 0.0]) + mob.apply_matrix(mat) + mob.shift(vec) + return mob - def _attribute_to_float(self, attr): - """A helper method which converts the attribute to float. + @staticmethod + def apply_style_to_mobject(mob: VMobject, shape: se.GraphicObject) -> VMobject: + """Apply SVG style information to the converted mobject. Parameters ---------- - attr : str - An SVG path attribute. - - Returns - ------- - float - A float representing the attribute string value. + mob + The converted mobject. + shape + The parsed SVG element. """ - stripped_attr = "".join( - [char for char in attr if char in string.digits + ".-e"], + mob.set_style( + stroke_width=shape.stroke_width, + stroke_color=shape.stroke.hexrgb, + stroke_opacity=shape.stroke.opacity, + fill_color=shape.fill.hexrgb, + fill_opacity=shape.fill.opacity, ) - return float(stripped_attr) + return mob - def _use_to_mobjects( - self, - use_element: MinidomElement, - local_style: dict, - ) -> list[VMobject]: - """Converts a SVG element to a collection of VMobjects. + def path_to_mobject(self, path: se.Path) -> VMobjectFromSVGPath: + """Convert a path element to a vectorized mobject. Parameters ---------- - use_element : :class:`MinidomElement` - An SVG element which represents nodes that should be - duplicated elsewhere. - - local_style : :class:`Dict` - The styling using SVG property names at the point the element is ``d. - Not all values are applied; styles defined when the element is specified in - the `` tag cannot be overridden here. - - Returns - ------- - List[VMobject] - A collection of VMobjects that are a copy of the defined object + path + The parsed SVG path. """ + return VMobjectFromSVGPath(path, **self.path_string_config) - # Remove initial "#" character - ref = use_element.getAttribute("xlink:href")[1:] - - try: - def_style, def_element = self.def_map[ref] - except KeyError: - warning_text = f"{self.file_name} contains a reference to id #{ref}, which is not recognized" - warnings.warn(warning_text) - return [] - - # In short, the def-ed style overrides the new style, - # in cases when the def-ed styled is defined. - style = local_style.copy() - style.update(def_style) - - return self._get_mobjects_from(def_element, style) - - def _line_to_mobject(self, line_element: MinidomElement, style: dict): - """Creates a Line VMobject from an SVG element. + @staticmethod + def line_to_mobject(line: se.Line) -> Line: + """Convert a line element to a vectorized mobject. Parameters ---------- - line_element : :class:`minidom.Element` - An SVG line element. - - style : :class:`dict` - Style specification, using the SVG names for properties. - - Returns - ------- - Line - A Line VMobject + line + The parsed SVG line. """ - x1, y1, x2, y2 = ( - self._attribute_to_float(line_element.getAttribute(key)) - if line_element.hasAttribute(key) - else 0.0 - for key in ("x1", "y1", "x2", "y2") + return Line( + start=_convert_point_to_3d(line.x1, line.y1), + end=_convert_point_to_3d(line.x2, line.y2), ) - return Line([x1, -y1, 0], [x2, -y2, 0], **parse_style(style)) - def _rect_to_mobject(self, rect_element: MinidomElement, style: dict): - """Converts a SVG command to a VMobject. + @staticmethod + def rect_to_mobject(rect: se.Rect) -> Rectangle: + """Convert a rectangle element to a vectorized mobject. Parameters ---------- - rect_element : minidom.Element - A SVG rect path command. - - style : dict - Style specification, using the SVG names for properties. - - Returns - ------- - Rectangle - Creates either a Rectangle, or RoundRectangle, VMobject from a - rect element. + rect + The parsed SVG rectangle. """ - - stroke_width = rect_element.getAttribute("stroke-width") - corner_radius = rect_element.getAttribute("rx") - - if stroke_width in ["", "none", "0"]: - stroke_width = 0 - - if corner_radius in ["", "0", "none"]: - corner_radius = 0 - - corner_radius = float(corner_radius) - - parsed_style = parse_style(style) - parsed_style["stroke_width"] = stroke_width - - if corner_radius == 0: + if rect.rx == 0 or rect.ry == 0: mob = Rectangle( - width=self._attribute_to_float(rect_element.getAttribute("width")), - height=self._attribute_to_float(rect_element.getAttribute("height")), - **parsed_style, + width=rect.width, + height=rect.height, ) else: mob = RoundedRectangle( - width=self._attribute_to_float(rect_element.getAttribute("width")), - height=self._attribute_to_float(rect_element.getAttribute("height")), - corner_radius=corner_radius, - **parsed_style, + width=rect.width, + height=rect.height * rect.rx / rect.ry, + corner_radius=rect.rx, ) - - mob.shift(mob.get_center() - mob.get_corner(UP + LEFT)) + mob.stretch_to_fit_height(rect.height) + mob.shift( + _convert_point_to_3d(rect.x + rect.width / 2, rect.y + rect.height / 2) + ) return mob - def _circle_to_mobject(self, circle_element: MinidomElement, style: dict): - """Creates a Circle VMobject from a SVG command. + @staticmethod + def ellipse_to_mobject(ellipse: se.Ellipse | se.Circle) -> Circle: + """Convert an ellipse or circle element to a vectorized mobject. Parameters ---------- - circle_element : :class:`minidom.Element` - A SVG circle path command. + ellipse + The parsed SVG ellipse or circle. + """ + mob = Circle(radius=ellipse.rx) + if ellipse.rx != ellipse.ry: + mob.stretch_to_fit_height(2 * ellipse.ry) + mob.shift(_convert_point_to_3d(ellipse.cx, ellipse.cy)) + return mob - style : :class:`dict` - Style specification, using the SVG names for properties. + @staticmethod + def polygon_to_mobject(polygon: se.Polygon) -> Polygon: + """Convert a polygon element to a vectorized mobject. - Returns - ------- - Circle - A Circle VMobject + Parameters + ---------- + polygon + The parsed SVG polygon. """ - x, y, r = ( - self._attribute_to_float(circle_element.getAttribute(key)) - if circle_element.hasAttribute(key) - else 0.0 - for key in ("cx", "cy", "r") - ) - return Circle(radius=r, **parse_style(style)).shift(x * RIGHT + y * DOWN) + points = [_convert_point_to_3d(*point) for point in polygon] + return Polygon(*points) - def _ellipse_to_mobject(self, circle_element: MinidomElement, style: dict): - """Creates a stretched Circle VMobject from a SVG path - command. + def polyline_to_mobject(self, polyline: se.Polyline) -> VMobject: + """Convert a polyline element to a vectorized mobject. Parameters ---------- - circle_element : :class:`minidom.Element` - A SVG circle path command. + polyline + The parsed SVG polyline. + """ + points = [_convert_point_to_3d(*point) for point in polyline] + vmobject_class = self.get_mobject_type_class() + return vmobject_class().set_points_as_corners(points) - style : :class:`dict` - Style specification, using the SVG names for properties. + @staticmethod + def text_to_mobject(text: se.Text): + """Convert a text element to a vectorized mobject. - Returns - ------- - Circle - A Circle VMobject - """ - x, y, rx, ry = ( - self._attribute_to_float(circle_element.getAttribute(key)) - if circle_element.hasAttribute(key) - else 0.0 - for key in ("cx", "cy", "rx", "ry") - ) - return ( - Circle(**parse_style(style)) - .scale(rx * RIGHT + ry * UP) - .shift(x * RIGHT + y * DOWN) - ) + .. warning:: - def _polygon_to_mobject(self, polygon_element: MinidomElement, style: dict): - """Constructs a VMobject from a SVG element. + Not yet implemented. Parameters ---------- - polygon_element : :class:`minidom.Element` - An SVG polygon element. + text + The parsed SVG text. + """ + logger.warning(f"Unsupported element type: {type(text)}") + return - style : :class:`dict` - Style specification, using the SVG names for properties. + def move_into_position(self) -> None: + """Scale and move the generated mobject into position.""" + if self.should_center: + self.center() + if self.svg_height is not None: + self.set_height(self.svg_height) + if self.svg_width is not None: + self.set_width(self.svg_width) - Returns - ------- - SVGPathMobject - A VMobject representing the polygon. - """ - # This seems hacky... yes it is. - path_string = polygon_element.getAttribute("points").lstrip() - for digit in string.digits: - path_string = path_string.replace(" " + digit, " L" + digit) - path_string = "M" + path_string - if polygon_element.tagName == "polygon": - path_string = path_string + "Z" - return self._path_string_to_mobject(path_string, style) - - def _handle_transforms(self, element, mobject): - """Applies the SVG transform to the specified mobject. Transforms include: - ``matrix``, ``translate``, and ``scale``. - Parameters - ---------- - element : :class:`minidom.Element` - The transform command to perform +class VMobjectFromSVGPath(VMobject, metaclass=ConvertToOpenGL): + """A vectorized mobject representing an SVG path. - mobject : :class:`Mobject` - The Mobject to transform. - """ + .. note:: - x, y = ( - self._attribute_to_float(element.getAttribute(key)) - if element.hasAttribute(key) - else 0.0 - for key in ("x", "y") - ) - mobject.shift(x * RIGHT + y * DOWN) - - transform_attr_value = element.getAttribute("transform") - - # parse the various transforms in the attribute value - transform_names = ["matrix", "translate", "scale", "rotate", "skewX", "skewY"] - - # Borrowed/Inspired from: - # https://github.com/cjlano/svg/blob/3ea3384457c9780fa7d67837c9c5fd4ebc42cb3b/svg/svg.py#L75 - - # match any SVG transformation with its parameter (until final parenthesis) - # [^)]* == anything but a closing parenthesis - # '|'.join == OR-list of SVG transformations - transform_regex = "|".join([x + r"[^)]*\)" for x in transform_names]) - transforms = re.findall(transform_regex, transform_attr_value)[::-1] - - number_regex = r"[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?" - - for t in transforms: - op_name, op_args = t.split("(") - op_name = op_name.strip() - op_args = [float(x) for x in re.findall(number_regex, op_args)] - - if op_name == "matrix": - transform_args = np.array(op_args).reshape([3, 2]) - x = transform_args[2][0] - y = -transform_args[2][1] - matrix = np.identity(self.dim) - matrix[:2, :2] = transform_args[:2, :] - matrix[1] *= -1 - matrix[:, 1] *= -1 - - for mob in mobject.family_members_with_points(): - if config["renderer"] == "opengl": - mob.points = np.dot(mob.points, matrix) - else: - mob.points = np.dot(mob.points, matrix) - mobject.shift(x * RIGHT + y * UP) - - elif op_name == "scale": - scale_values = op_args - if len(scale_values) == 2: - scale_x, scale_y = scale_values - mobject.scale(np.array([scale_x, scale_y, 1]), about_point=ORIGIN) - elif len(scale_values) == 1: - scale = scale_values[0] - mobject.scale(np.array([scale, scale, 1]), about_point=ORIGIN) - - elif op_name == "translate": - if len(op_args) == 2: - x, y = op_args - else: - x = op_args - y = 0 - mobject.shift(x * RIGHT + y * DOWN) + The ``long_lines``, ``should_subdivide_sharp_curves``, + and ``should_remove_null_curves`` keyword arguments are + only respected with the OpenGL renderer. - else: - # TODO: handle rotate, skewX and skewY - # for now adding a warning message - logger.warning( - "Handling of %s transform is not supported yet!", - op_name, - ) - - def _flatten(self, input_list): - """A helper method to flatten the ``input_list`` into an 1D array.""" - output_list = [] - for i in input_list: - if isinstance(i, list): - output_list.extend(self._flatten(i)) - else: - output_list.append(i) - return output_list + Parameters + ---------- + path_obj + A parsed SVG path object. + long_lines + Whether or not straight lines in the vectorized mobject + are drawn in one or two segments. + should_subdivide_sharp_curves + Whether or not to subdivide subcurves further in case + two segments meet at an angle that is sharper than a + given threshold. + should_remove_null_curves + Whether or not to remove subcurves of length 0. + kwargs + Further keyword arguments are passed to the parent + class. + """ - def _move_into_position(self, width, height): - """Uses the SVGMobject's config dictionary to set the Mobject's - width, height, and/or center it. Use ``width``, ``height``, and - ``should_center`` respectively to modify this. - """ - if self.should_center: - self.center() - if height is not None: - self.height = height - if width is not None: - self.width = width + def __init__( + self, + path_obj: se.Path, + long_lines: bool = False, + should_subdivide_sharp_curves: bool = False, + should_remove_null_curves: bool = False, + **kwargs, + ): + # Get rid of arcs + path_obj.approximate_arcs_with_quads() + self.path_obj = path_obj + + self.long_lines = long_lines + self.should_subdivide_sharp_curves = should_subdivide_sharp_curves + self.should_remove_null_curves = should_remove_null_curves + + super().__init__(**kwargs) + + def init_points(self) -> None: + # TODO: cache mobject in a re-importable way + + self.handle_commands() - def init_colors(self, propagate_colors=False): if config.renderer == "opengl": - self.set_style( - fill_color=self.fill_color or self.color, - fill_opacity=self.fill_opacity, - stroke_color=self.stroke_color or self.color, - stroke_width=self.stroke_width, - stroke_opacity=self.stroke_opacity, - recurse=propagate_colors, - ) - else: - super().init_colors(propagate_colors=propagate_colors) + if self.should_subdivide_sharp_curves: + # For a healthy triangulation later + self.subdivide_sharp_curves() + if self.should_remove_null_curves: + # Get rid of any null curves + self.set_points(self.get_points_without_null_curves()) + + generate_points = init_points + + def handle_commands(self) -> None: + segment_class_to_func_map = { + se.Move: (self.start_new_path, ("end",)), + se.Close: (self.close_path, ()), + se.Line: (self.add_line_to, ("end",)), + se.QuadraticBezier: ( + self.add_quadratic_bezier_curve_to, + ("control", "end"), + ), + se.CubicBezier: ( + self.add_cubic_bezier_curve_to, + ("control1", "control2", "end"), + ), + } + for segment in self.path_obj: + segment_class = segment.__class__ + func, attr_names = segment_class_to_func_map[segment_class] + points = [ + _convert_point_to_3d(*segment.__getattribute__(attr_name)) + for attr_name in attr_names + ] + func(*points) + + # Get rid of the side effect of trailing "Z M" commands. + if self.has_new_path_started(): + self.resize_points(self.get_num_points() - 1) diff --git a/manim/mobject/svg/svg_path.py b/manim/mobject/svg/svg_path.py deleted file mode 100644 index 9d23bb7ca2..0000000000 --- a/manim/mobject/svg/svg_path.py +++ /dev/null @@ -1,483 +0,0 @@ -"""Mobjects generated from an SVG pathstring.""" - - -from __future__ import annotations - -__all__ = ["SVGPathMobject", "string_to_numbers"] - - -import re -from math import * - -import numpy as np - -from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL - -from ... import config -from ...constants import * -from ..types.vectorized_mobject import VMobject - - -def correct_out_of_range_radii(rx, ry, x1p, y1p): - """Correction of out-of-range radii. - - See: https://www.w3.org/TR/SVG11/implnote.html#ArcCorrectionOutOfRangeRadii - """ - # Step 1: Ensure radii are non-zero (taken care of in elliptical_arc_to_cubic_bezier). - # Step 2: Ensure radii are positive. If rx or ry have negative signs, these are dropped; - # the absolute value is used instead. - rx = abs(rx) - ry = abs(ry) - # Step 3: Ensure radii are large enough. - Lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry) - if Lambda > 1: - rx = sqrt(Lambda) * rx - ry = sqrt(Lambda) * ry - - # Step 4: Proceed with computations. - return rx, ry - - -def vector_angle(ux, uy, vx, vy): - """Calculate the dot product angle between two vectors. - - This clamps the argument to the arc cosine due to roundoff errors - from some SVG files. - """ - sign = -1 if ux * vy - uy * vx < 0 else 1 - ua = sqrt(ux * ux + uy * uy) - va = sqrt(vx * vx + vy * vy) - dot = ux * vx + uy * vy - - # Clamp argument between [-1,1]. - return sign * acos(max(min(dot / (ua * va), 1), -1)) - - -def get_elliptical_arc_center_parameters(x1, y1, rx, ry, phi, fA, fS, x2, y2): - """Conversion from endpoint to center parameterization. - - See: https://www.w3.org/TR/SVG11/implnote.html#ArcConversionEndpointToCenter - """ - cos_phi = cos(phi) - sin_phi = sin(phi) - # Step 1: Compute (x1p,y1p). - x = (x1 - x2) / 2 - y = (y1 - y2) / 2 - x1p = x * cos_phi + y * sin_phi - y1p = -x * sin_phi + y * cos_phi - - # Correct out of range radii - rx, ry = correct_out_of_range_radii(rx, ry, x1p, y1p) - - # Step 2: Compute (cxp,cyp). - rx2 = rx * rx - ry2 = ry * ry - x1p2 = x1p * x1p - y1p2 = y1p * y1p - k = sqrt(max((rx2 * ry2 - rx2 * y1p2 - ry2 * x1p2) / (rx2 * y1p2 + ry2 * x1p2), 0)) - sign = -1 if fA == fS else 1 - cxp = sign * k * (rx * y1p) / ry - cyp = sign * k * (-ry * x1p) / rx - - # Step 3: Compute (cx,cy) from (cxp,cyp). - x = (x1 + x2) / 2 - y = (y1 + y2) / 2 - cx = cxp * cos_phi - cyp * sin_phi + x - cy = cxp * sin_phi + cyp * cos_phi + y - - # Step 4: Compute theta1 and dtheta. - x = (x1p - cxp) / rx - y = (y1p - cyp) / ry - theta1 = vector_angle(1, 0, x, y) - - x_ = (-x1p - cxp) / rx - y_ = (-y1p - cyp) / ry - dtheta = degrees(vector_angle(x, y, x_, y_)) % 360 - - if fS == 0 and dtheta > 0: - dtheta -= 360 - elif fS == 1 and dtheta < 0: - dtheta += 360 - - return cx, cy, theta1, radians(dtheta) - - -def elliptical_arc_to_cubic_bezier(x1, y1, rx, ry, phi, fA, fS, x2, y2): - """Generate cubic bezier points to approximate SVG elliptical arc. - - See: http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes - """ - # Out of range parameters - # See: https://www.w3.org/TR/SVG11/implnote.html#ArcOutOfRangeParameters - # If rx or ry are 0 then this arc is treated as a - # straight line segment (a "lineto") joining the endpoints. - if not rx or not ry: - return [x1, y1, x2, y2, x2, y2] - - # phi is taken mod 360 degrees and set to radians for subsequent calculations. - phi = radians(phi % 360) - - # Any nonzero value for either of the flags fA or fS is taken to mean the value 1. - fA = 1 if fA else 0 - fS = 1 if fS else 0 - - # Convert from endpoint to center parameterization. - cx, cy, theta1, dtheta = get_elliptical_arc_center_parameters( - x1, - y1, - rx, - ry, - phi, - fA, - fS, - x2, - y2, - ) - - # For a given arc we should "chop" it up into segments if it is too big - # to help miminze cubic bezier curve approximation errors. - # If dtheta is a multiple of 90 degrees, set the limit to 90 degrees, - # otherwise 360/10=36 degrees is a decent sweep limit. - if degrees(dtheta) % 90 == 0: - sweep_limit = 90 - else: - sweep_limit = 36 - - segments = int(ceil(abs(degrees(dtheta)) / sweep_limit)) - segment = dtheta / float(segments) - current_angle = theta1 - start_x = x1 - start_y = y1 - cos_phi = cos(phi) - sin_phi = sin(phi) - alpha = sin(segment) * (sqrt(4 + 3 * pow(tan(segment / 2.0), 2)) - 1) / 3.0 - bezier_points = [] - - # Calculate the cubic bezier points from elliptical arc parametric equations. - # See: (the box on page 18) http://www.spaceroots.org/documents/ellipse/elliptical-arc.pdf - for idx in range(segments): - next_angle = current_angle + segment - - cos_start = cos(current_angle) - sin_start = sin(current_angle) - - e1x = -rx * cos_phi * sin_start - ry * sin_phi * cos_start - e1y = -rx * sin_phi * sin_start + ry * cos_phi * cos_start - q1_x = start_x + alpha * e1x - q1_y = start_y + alpha * e1y - - cos_end = cos(next_angle) - sin_end = sin(next_angle) - - p2x = cx + rx * cos_phi * cos_end - ry * sin_phi * sin_end - p2y = cy + rx * sin_phi * cos_end + ry * cos_phi * sin_end - - end_x = p2x - end_y = p2y - - if idx == segments - 1: - end_x = x2 - end_y = y2 - - e2x = -rx * cos_phi * sin_end - ry * sin_phi * cos_end - e2y = -rx * sin_phi * sin_end + ry * cos_phi * cos_end - q2_x = end_x - alpha * e2x - q2_y = end_y - alpha * e2y - - bezier_points += [[q1_x, q1_y, 0], [q2_x, q2_y, 0], [end_x, end_y, 0]] - start_x = end_x - start_y = end_y - current_angle = next_angle - - return bezier_points - - -def string_to_numbers(num_string: str) -> list[float]: - """Parse the SVG string representing a sequence of numbers into an array of floats. - - Parameters - ---------- - num_string : :class:`str` - String representing a sequence of numbers, separated by commas, spaces, etc. - - Returns - ------- - list(float) - List of float values parsed out of the string. - """ - num_string = num_string.replace("-", ",-") - num_string = num_string.replace("e,-", "e-") - float_results = [] - for s in re.split("[ ,]", num_string): - if s != "": - try: - float_results.append(float(s)) - except ValueError: - # in this case, it's something like "2.4.3.14 which should be parsed as "2.4 0.3 0.14" - undotted_parts = s.split(".") - float_results.append(float(undotted_parts[0] + "." + undotted_parts[1])) - float_results += [float("." + u) for u in undotted_parts[2:]] - return float_results - - -def grouped(iterable, n): - """Group iterable into arrays of n items.""" - return (np.array(v) for v in zip(*[iter(iterable)] * n)) - - -class SVGPathMobject(VMobject, metaclass=ConvertToOpenGL): - def __init__(self, path_string, **kwargs): - self.path_string = path_string - if config.renderer == "opengl": - kwargs["long_lines"] = True - super().__init__(**kwargs) - self.current_path_start = np.zeros((1, self.dim)) - - def get_path_commands(self): - """Returns a list of possible path commands used within an SVG ``d`` - attribute. - - See: https://svgwg.org/svg2-draft/paths.html#DProperty for further - details on what each path command does. - - Returns - ------- - List[:class:`str`] - The various upper and lower cased path commands. - """ - result = [ - "M", # moveto - "L", # lineto - "H", # horizontal lineto - "V", # vertical lineto - "C", # curveto - "S", # smooth curveto - "Q", # quadratic Bezier curve - "T", # smooth quadratic Bezier curveto - "A", # elliptical Arc - "Z", # closepath - ] - result += [s.lower() for s in result] - return result - - def generate_points(self): - """Generates points from a given an SVG ``d`` attribute.""" - pattern = "[%s]" % ("".join(self.get_path_commands())) - pairs = list( - zip( - re.findall(pattern, self.path_string), - re.split(pattern, self.path_string)[1:], - ), - ) - # Which mobject should new points be added to - prev_command = None - for command, coord_string in pairs: - self.handle_command(command, coord_string, prev_command) - prev_command = command - if config["renderer"] == "opengl": - if self.should_subdivide_sharp_curves: - # For a healthy triangulation later - self.subdivide_sharp_curves() - if self.should_remove_null_curves: - # Get rid of any null curves - self.set_points(self.get_points_without_null_curves()) - # people treat y-coordinate differently - self.rotate(np.pi, RIGHT, about_point=ORIGIN) - - init_points = generate_points - - def handle_command(self, command, coord_string, prev_command): - """Core logic for handling each of the various path commands.""" - # Relative SVG commands are specified as lowercase letters - is_relative = command.islower() - command = command.upper() - - # Keep track of the most recently completed point - if config["renderer"] == "opengl": - points = self.points - else: - points = self.points - start_point = points[-1] if points.shape[0] else np.zeros((1, self.dim)) - - # Produce the (absolute) coordinates of the controls and handles - new_points = self.string_to_points( - command, - is_relative, - coord_string, - start_point, - ) - - if command == "M": # moveto - self.start_new_path(new_points[0]) - for p in new_points[1:]: - self.add_line_to(p) - return - - elif command in ["H", "V", "L"]: # lineto of any kind - for p in new_points: - self.add_line_to(p) - return - - elif command == "C": # Cubic - # points must be added in groups of 3. - for i in range(0, len(new_points), 3): - self.add_cubic_bezier_curve_to(*new_points[i : i + 3]) - return - - elif command == "S": # Smooth cubic - if config["renderer"] == "opengl": - points = self.points - else: - points = self.points - prev_handle = start_point - if prev_command.upper() in ["C", "S"]: - prev_handle = points[-2] - for i in range(0, len(new_points), 2): - new_handle = 2 * start_point - prev_handle - self.add_cubic_bezier_curve_to( - new_handle, - new_points[i], - new_points[i + 1], - ) - start_point = new_points[i + 1] - prev_handle = new_points[i] - return - - elif command == "Q": # quadratic Bezier curve - for i in range(0, len(new_points), 2): - self.add_quadratic_bezier_curve_to(new_points[i], new_points[i + 1]) - return - - elif command == "T": # smooth quadratic - prev_quad_handle = start_point - if prev_command.upper() in ["Q", "T"]: - # because of the conversion from quadratic to cubic, - # our actual previous handle was 3/2 in the direction of p[-2] from p[-1] - prev_quad_handle = 1.5 * points[-2] - 0.5 * points[-1] - for p in new_points: - new_quad_handle = 2 * start_point - prev_quad_handle - self.add_quadratic_bezier_curve_to(new_quad_handle, p) - start_point = p - prev_quad_handle = new_quad_handle - - elif command == "A": # elliptical Arc - # points must be added in groups of 3. See `string_to_points` for - # case that new_points can be None. - if new_points is not None: - for i in range(0, len(new_points), 3): - self.add_cubic_bezier_curve_to(*new_points[i : i + 3]) - return - - elif command == "Z": # closepath - if config["renderer"] == "opengl": - self.close_path() - else: - self.add_line_to(self.current_path_start) - return - - def string_to_points(self, command, is_relative, coord_string, start_point): - """Convert an SVG command string into a sequence of absolute-positioned control points. - - Parameters - ----- - command : `str` - A string containing a single uppercase letter representing the SVG command. - - is_relative : `bool` - Whether the command is relative to the end of the previous command - - coord_string : `str` - A string that contains many comma- or space-separated numbers that defined the control points. Different - commands require different numbers of numbers as arguments. - - start_point : `ndarray` - If the command is relative, the position to begin the relations from. - """ - - # this call to "string to numbers" where problems like parsing 0.5.6 lie - numbers = string_to_numbers(coord_string) - - # arcs are weirdest, handle them first. - if command == "A": - result = np.zeros((0, self.dim)) - last_end_point = None - for elliptic_numbers in grouped(numbers, 7): - # The startpoint changes with each iteration. - if last_end_point is not None: - start_point = last_end_point - - # We have to handle offsets here because ellipses are complicated. - if is_relative: - elliptic_numbers[5] += start_point[0] - elliptic_numbers[6] += start_point[1] - - # If the endpoints (x1, y1) and (x2, y2) are identical, then this - # is equivalent to omitting the elliptical arc segment entirely. - # for more information of where this math came from visit: - # http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes - if ( - start_point[0] == elliptic_numbers[5] - and start_point[1] == elliptic_numbers[6] - ): - continue - - result = np.append( - result, - elliptical_arc_to_cubic_bezier(*start_point[:2], *elliptic_numbers), - axis=0, - ) - - # We store the endpoint so that it can be the startpoint for the - # next iteration. - last_end_point = elliptic_numbers[5:] - - return result - - # H and V expect a sequence of single coords, not coord pairs like the rest of the commands. - elif command == "H": - result = np.zeros((len(numbers), self.dim)) - result[:, 0] = numbers - if not is_relative: - result[:, 1] = start_point[1] - - elif command == "V": - result = np.zeros((len(numbers), self.dim)) - result[:, 1] = numbers - if not is_relative: - result[:, 0] = start_point[0] - - else: - num_points = len(numbers) // 2 - result = np.zeros((num_points, self.dim)) - result[:, :2] = np.array(numbers).reshape((num_points, 2)) - - # If it's not relative, we don't have any more work! - if not is_relative: - return result - - # Each control / target point is calculated relative to the ending position of the previous curve. - # Curves consist of multiple point listings depending on the command. - entries = 1 - # Quadratic curves expect pairs, S expects 3 (cubic) but one is implied by smoothness - if command in ["Q", "S"]: - entries = 2 - # Only cubic curves expect three points. - elif command == "C": - entries = 3 - - offset = start_point - for i in range(result.shape[0]): - result[i, :] = result[i, :] + offset - if (i + 1) % entries == 0: - offset = result[i, :] - - return result - - def get_original_path_string(self): - """A simple getter for the path's ``d`` attribute.""" - return self.path_string - - def start_new_path(self, point): - self.current_path_start = point - super().start_new_path(point) - return self diff --git a/manim/mobject/text/numbers.py b/manim/mobject/text/numbers.py index 624ec950b3..963c11dc06 100644 --- a/manim/mobject/text/numbers.py +++ b/manim/mobject/text/numbers.py @@ -301,7 +301,7 @@ class Variable(VMobject, metaclass=ConvertToOpenGL): ---------- var : Union[:class:`int`, :class:`float`] The initial value you need to keep track of and display. - label : Union[:class:`str`, :class:`~.Tex`, :class:`~.MathTex`, :class:`~.Text`, :class:`~.TexSymbol`, :class:`~.SingleStringMathTex`] + label : Union[:class:`str`, :class:`~.Tex`, :class:`~.MathTex`, :class:`~.Text`, :class:`~.SingleStringMathTex`] The label for your variable. Raw strings are convertex to :class:`~.MathTex` objects. var_type : Union[:class:`DecimalNumber`, :class:`Integer`], optional The class used for displaying the number. Defaults to :class:`DecimalNumber`. @@ -313,7 +313,7 @@ class Variable(VMobject, metaclass=ConvertToOpenGL): Attributes ---------- - label : Union[:class:`str`, :class:`~.Tex`, :class:`~.MathTex`, :class:`~.Text`, :class:`~.TexSymbol`, :class:`~.SingleStringMathTex`] + label : Union[:class:`str`, :class:`~.Tex`, :class:`~.MathTex`, :class:`~.Text`, :class:`~.SingleStringMathTex`] The label for your variable, for example ``x = ...``. tracker : :class:`~.ValueTracker` Useful in updating the value of your variable on-screen. diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index f918a3bd78..413a0f022b 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -13,7 +13,6 @@ from __future__ import annotations __all__ = [ - "TexSymbol", "SingleStringMathTex", "MathTex", "Tex", @@ -34,9 +33,7 @@ from manim import config, logger from manim.constants import * from manim.mobject.geometry.line import Line -from manim.mobject.svg.style_utils import parse_style from manim.mobject.svg.svg_mobject import SVGMobject -from manim.mobject.svg.svg_path import SVGPathMobject from manim.mobject.types.vectorized_mobject import VectorizedPoint, VGroup, VMobject from manim.utils.tex import TexTemplate from manim.utils.tex_file_writing import tex_to_svg_file @@ -46,12 +43,6 @@ tex_string_to_mob_map = {} -class TexSymbol(SVGPathMobject): - """Purely a renaming of SVGPathMobject.""" - - pass - - class SingleStringMathTex(SVGMobject): """Elementary building block for rendering text with LaTeX. @@ -100,10 +91,14 @@ def __init__( should_center=should_center, stroke_width=stroke_width, height=height, - should_subdivide_sharp_curves=True, - should_remove_null_curves=True, + path_string_config={ + "should_subdivide_sharp_curves": True, + "should_remove_null_curves": True, + }, **kwargs, ) + self.init_colors() + # used for scaling via font_size.setter self.initial_height = self.height @@ -218,13 +213,11 @@ def _organize_submobjects_left_to_right(self): def get_tex_string(self): return self.tex_string - def path_string_to_mobject(self, path_string, style): - # Overwrite superclass default to use - # specialized path_string mobject - return TexSymbol(path_string, **self.path_string_config, **parse_style(style)) - def init_colors(self, propagate_colors=True): - super().init_colors(propagate_colors=propagate_colors) + if config.renderer == "opengl": + super().init_colors() + else: + super().init_colors(propagate_colors=propagate_colors) class MathTex(SingleStringMathTex): diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index fab20e01e1..7ab523684f 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -423,7 +423,6 @@ def __init__( height: float = None, width: float = None, should_center: bool = True, - unpack_groups: bool = True, disable_ligatures: bool = False, **kwargs, ) -> None: @@ -482,7 +481,6 @@ def __init__( height=height, width=width, should_center=should_center, - unpack_groups=unpack_groups, **kwargs, ) self.text = text @@ -780,7 +778,10 @@ def _text2svg(self, color: Color): return svg_file def init_colors(self, propagate_colors=True): - super().init_colors(propagate_colors=propagate_colors) + if config.renderer == "opengl": + super().init_colors() + else: + super().init_colors(propagate_colors=propagate_colors) class MarkupText(SVGMobject): @@ -1096,7 +1097,6 @@ def __init__( height: int = None, width: int = None, should_center: bool = True, - unpack_groups: bool = True, disable_ligatures: bool = False, **kwargs, ) -> None: @@ -1145,7 +1145,6 @@ def __init__( height=height, width=width, should_center=should_center, - unpack_groups=unpack_groups, **kwargs, ) diff --git a/manim/mobject/types/point_cloud_mobject.py b/manim/mobject/types/point_cloud_mobject.py index acc981cc68..4a6b5302ac 100644 --- a/manim/mobject/types/point_cloud_mobject.py +++ b/manim/mobject/types/point_cloud_mobject.py @@ -183,6 +183,10 @@ def point_from_proportion(self, alpha): index = alpha * (self.get_num_points() - 1) return self.points[index] + @staticmethod + def get_mobject_type_class(): + return PMobject + # Alignment def align_points_with_larger(self, larger_mobject): assert isinstance(larger_mobject, PMobject) diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index e2a679c7ae..2556385f8e 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -123,6 +123,10 @@ def __init__( def get_group_class(self): return VGroup + @staticmethod + def get_mobject_type_class(): + return VMobject + # Colors def init_colors(self, propagate_colors=True): self.set_fill( @@ -788,6 +792,10 @@ def is_closed(self): # TODO use consider_points_equals_2d ? return self.consider_points_equals(self.points[0], self.points[-1]) + def close_path(self): + if not self.is_closed(): + self.add_line_to(self.get_subpaths()[-1][0]) + def add_points_as_corners(self, points: np.ndarray) -> "VMobject": for point in points: self.add_line_to(point) diff --git a/manim/utils/images.py b/manim/utils/images.py index a8ef93e931..0731496ddc 100644 --- a/manim/utils/images.py +++ b/manim/utils/images.py @@ -24,6 +24,14 @@ def get_full_raster_image_path(image_file_name: str) -> str: ) +def get_full_vector_image_path(image_file_name: str): + return seek_full_path_from_defaults( + image_file_name, + default_dir=config.get_dir("assets_dir"), + extensions=[".svg"], + ) + + def drag_pixels(frames: list[np.array]) -> list[np.array]: curr = frames[0] new_frames = [] diff --git a/manim/utils/iterables.py b/manim/utils/iterables.py index afcf6d992a..1d8c0a5367 100644 --- a/manim/utils/iterables.py +++ b/manim/utils/iterables.py @@ -426,3 +426,17 @@ def uniq_chain(*args: Iterable) -> Generator: continue unique_items.add(x) yield x + + +def hash_obj(obj: object) -> int: + """Determines a hash, even of potentially mutable objects.""" + if isinstance(obj, dict): + return hash(tuple(sorted((hash_obj(k), hash_obj(v)) for k, v in obj.items()))) + + if isinstance(obj, set): + return hash(tuple(sorted(hash_obj(e) for e in obj))) + + if isinstance(obj, (tuple, list)): + return hash(tuple(hash_obj(e) for e in obj)) + + return hash(obj) diff --git a/poetry.lock b/poetry.lock index dd0b420b1f..00de2cc0e0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -20,8 +20,8 @@ sniffio = ">=1.1" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -doc = ["packaging", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"] +doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] trio = ["trio (>=0.16)"] [[package]] @@ -45,8 +45,8 @@ argon2-cffi-bindings = "*" typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -dev = ["pre-commit", "cogapp", "tomli", "coverage[toml] (>=5.0.2)", "hypothesis", "pytest", "sphinx", "sphinx-notfound-page", "furo"] -docs = ["sphinx", "sphinx-notfound-page", "furo"] +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"] [[package]] @@ -61,7 +61,7 @@ python-versions = ">=3.6" cffi = ">=1.0.1" [package.extras] -dev = ["pytest", "cogapp", "pre-commit", "wheel"] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] tests = ["pytest"] [[package]] @@ -82,6 +82,7 @@ python-versions = ">=3.6.2" [package.dependencies] lazy-object-proxy = ">=1.4.0" +setuptools = ">=20.0" typed-ast = {version = ">=1.4.0,<2.0", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""} typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} wrapt = ">=1.11,<2" @@ -103,13 +104,13 @@ optional = false python-versions = ">=3.5" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] +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"] [[package]] -name = "babel" +name = "Babel" version = "2.10.3" description = "Internationalization utilities" category = "main" @@ -187,11 +188,11 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "Sphinx (==4.3.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)", "black (==22.3.0)", "mypy (==0.961)"] +dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] [[package]] name = "certifi" -version = "2022.9.14" +version = "2022.9.24" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -290,7 +291,7 @@ optional = false python-versions = "*" [package.extras] -test = ["hypothesis (==3.55.3)", "flake8 (==3.7.8)"] +test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "coverage" @@ -315,7 +316,7 @@ optional = false python-versions = ">=3.6" [[package]] -name = "cython" +name = "Cython" version = "0.29.32" description = "The Cython compiler for writing C extensions for the Python language." category = "main" @@ -335,7 +336,7 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", [[package]] name = "dearpygui" -version = "1.7.0" +version = "1.7.1" description = "DearPyGui: A simple Python GUI Toolkit" category = "main" optional = true @@ -366,7 +367,7 @@ optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] -name = "deprecated" +name = "Deprecated" version = "1.2.13" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." category = "dev" @@ -377,7 +378,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" wrapt = ">=1.10,<2" [package.extras] -dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] +dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] [[package]] name = "dill" @@ -427,14 +428,14 @@ testing = ["pre-commit"] [[package]] name = "fastjsonschema" -version = "2.16.1" +version = "2.16.2" description = "Fastest Python implementation of JSON schema" category = "main" optional = true python-versions = "*" [package.extras] -devel = ["colorama", "jsonschema", "json-spec", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] [[package]] name = "filelock" @@ -562,16 +563,16 @@ importlib-metadata = {version = ">=0.9", markers = "python_version < \"3.8\""} [[package]] name = "fonttools" -version = "4.37.2" +version = "4.37.3" description = "Tools to manipulate font files" category = "dev" optional = false python-versions = ">=3.7" [package.extras] -all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "uharfbuzz (>=0.23.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=14.0.0)", "xattr"] +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)"] graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["scipy", "munkres"] +interpolatable = ["munkres", "scipy"] lxml = ["lxml (>=4.0,<5)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] @@ -580,7 +581,7 @@ symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=14.0.0)"] -woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] name = "furo" @@ -608,7 +609,7 @@ python-versions = ">=3.6" smmap = ">=3.0.1,<6" [[package]] -name = "gitpython" +name = "GitPython" version = "3.1.27" description = "GitPython is a python library used to interact with Git repositories" category = "dev" @@ -667,9 +668,9 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +testing = ["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)"] [[package]] name = "importlib-resources" @@ -683,8 +684,8 @@ python-versions = ">=3.7" zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [[package]] name = "iniconfig" @@ -696,7 +697,7 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.15.3" +version = "6.16.0" description = "IPython Kernel for Jupyter" category = "main" optional = true @@ -716,7 +717,7 @@ tornado = ">=6.1" traitlets = ">=5.1.0" [package.extras] -test = ["flaky", "ipyparallel", "pre-commit", "pytest-cov", "pytest-timeout", "pytest (>=6.0)"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=6.0)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" @@ -737,6 +738,7 @@ pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" pygments = "*" +setuptools = ">=18.5" traitlets = ">=4.2" [package.extras] @@ -745,13 +747,13 @@ doc = ["Sphinx (>=1.3)"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] -notebook = ["notebook", "ipywidgets"] +notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.17)"] +test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] [[package]] -name = "ipython-genutils" +name = "ipython_genutils" version = "0.2.0" description = "Vestigial utilities from IPython" category = "main" @@ -767,10 +769,10 @@ optional = false python-versions = ">=3.6.1,<4.0" [package.extras] -pipfile_deprecated_finder = ["pipreqs", "requirementslib"] -requirements_deprecated_finder = ["pipreqs", "pip-api"] colors = ["colorama (>=0.4.3,<0.5.0)"] +pipfile_deprecated_finder = ["pipreqs", "requirementslib"] plugins = ["setuptools"] +requirements_deprecated_finder = ["pip-api", "pipreqs"] [[package]] name = "isosurfaces" @@ -799,7 +801,7 @@ qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["Django (<3.1)", "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" @@ -861,7 +863,7 @@ tornado = ">=6.2" traitlets = "*" [package.extras] -doc = ["ipykernel", "myst-parser", "sphinx-rtd-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt"] +doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] [[package]] @@ -881,7 +883,7 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-server" -version = "1.18.1" +version = "1.19.1" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "main" optional = true @@ -906,7 +908,7 @@ traitlets = ">=5.1" websocket-client = "*" [package.extras] -test = ["coverage", "ipykernel", "pre-commit", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "pytest (>=6.0)", "requests"] +test = ["coverage", "ipykernel", "pre-commit", "pytest (>=6.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "jupyterlab" @@ -929,7 +931,7 @@ tomli = "*" tornado = ">=6.1.0" [package.extras] -test = ["check-manifest", "coverage", "jupyterlab-server", "pre-commit", "pytest (>=6.0)", "pytest-cov", "pytest-console-scripts", "pytest-check-links (>=0.5)", "requests", "requests-cache", "virtualenv"] +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"] [[package]] @@ -942,7 +944,7 @@ python-versions = ">=3.7" [[package]] name = "jupyterlab-server" -version = "2.15.1" +version = "2.15.2" description = "A set of server components for JupyterLab and JupyterLab like applications." category = "main" optional = true @@ -960,7 +962,7 @@ requests = "*" [package.extras] openapi = ["openapi-core (>=0.14.2)", "ruamel-yaml"] -test = ["codecov", "ipykernel", "jupyter-server", "openapi-core (>=0.14.2)", "openapi-spec-validator (<0.5)", "pytest-console-scripts", "pytest-cov", "pytest (>=5.3.2)", "ruamel-yaml", "strict-rfc3339"] +test = ["codecov", "ipykernel", "jupyter-server[test]", "openapi-core (>=0.14.2,<0.15.0)", "openapi-spec-validator (<0.5)", "pytest (>=5.3.2)", "pytest-console-scripts", "pytest-cov", "ruamel-yaml", "strict-rfc3339"] [[package]] name = "kiwisolver" @@ -992,11 +994,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] -htmlsoup = ["beautifulsoup4"] +htmlsoup = ["BeautifulSoup4"] source = ["Cython (>=0.29.7)"] [[package]] -name = "manimpango" +name = "ManimPango" version = "0.4.1" description = "Bindings for Pango for using with Manim." category = "main" @@ -1030,17 +1032,17 @@ mdurl = ">=0.1,<1.0" typing_extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [package.extras] -testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] -rtd = ["sphinx-book-theme", "sphinx-design", "sphinx-copybutton", "sphinx", "pyyaml", "myst-parser", "attrs"] -profiling = ["gprof2dot"] -plugins = ["mdit-py-plugins"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] -compare = ["panflute (>=2.1.3,<2.2.0)", "mistune (>=2.0.2,<2.1.0)", "mistletoe (>=0.8.1,<0.9.0)", "markdown (>=3.3.6,<3.4.0)", "commonmark (>=0.9.1,<0.10.0)"] +benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] code_style = ["pre-commit (==2.6)"] -benchmarking = ["pytest-benchmark (>=3.2,<4.0)", "pytest", "psutil"] +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"] +profiling = ["gprof2dot"] +rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +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" @@ -1087,19 +1089,19 @@ python-versions = "*" [[package]] name = "mdit-py-plugins" -version = "0.3.0" +version = "0.3.1" description = "Collection of plugins for markdown-it-py" category = "dev" optional = false -python-versions = "~=3.6" +python-versions = ">=3.7" [package.dependencies] markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -testing = ["pytest-regressions", "pytest-cov", "pytest (>=3.6,<4)", "coverage"] -rtd = ["sphinx-book-theme (>=0.1.0,<0.2.0)", "myst-parser (>=0.14.0,<0.15.0)"] -code_style = ["pre-commit (==2.6)"] +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"] [[package]] name = "mdurl" @@ -1144,14 +1146,14 @@ pyglet = ">=2.0dev23" pyrr = ">=0.10.3,<1" [package.extras] -pysdl2 = ["pysdl2"] -pyside2 = ["PySide2 (<6)"] glfw = ["glfw"] pygame = ["pygame (>=2.1.2)"] -pyqt5 = ["pyqt5"] +pyqt5 = ["PyQt5"] +pysdl2 = ["PySDL2"] +pyside2 = ["PySide2 (<6)"] pywavefront = ["pywavefront (>=1.3.3,<2)"] tk = ["pyopengltk (>=0.0.3)"] -trimesh = ["trimesh (>=3.2.6,<4)", "scipy (>=1.3.2)"] +trimesh = ["scipy (>=1.3.2)", "trimesh (>=3.2.6,<4)"] [[package]] name = "multipledispatch" @@ -1210,8 +1212,8 @@ typing-extensions = "*" [package.extras] 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)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)", "sphinxcontrib.mermaid (>=0.7.1,<0.8.0)", "sphinxext-opengraph (>=0.6.3,<0.7.0)"] -testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest (>=6,<7)", "pytest-cov", "pytest-regressions", "pytest-param-files (>=0.3.4,<0.4.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"] [[package]] name = "nbclassic" @@ -1241,9 +1243,9 @@ tornado = ">=6.1" traitlets = ">=4.2.1" [package.extras] -test = ["requests-unixsocket", "pytest-tornasync", "pytest-cov", "selenium (==4.1.5)", "nbval", "testpath", "requests", "coverage", "pytest"] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] json-logging = ["json-logging"] -docs = ["myst-parser", "sphinx-rtd-theme", "sphinxcontrib-github-alt", "nbsphinx", "sphinx"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-tornasync", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] [[package]] name = "nbclient" @@ -1260,7 +1262,7 @@ nest-asyncio = "*" traitlets = ">=5.2.2" [package.extras] -sphinx = ["autodoc-traits", "mock", "moto", "myst-parser", "Sphinx (>=1.7)", "sphinx-book-theme"] +sphinx = ["Sphinx (>=1.7)", "autodoc-traits", "mock", "moto", "myst-parser", "sphinx-book-theme"] test = ["black", "check-manifest", "flake8", "ipykernel", "ipython", "ipywidgets", "mypy", "nbconvert", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"] [[package]] @@ -1291,8 +1293,8 @@ tinycss2 = "*" traitlets = ">=5.0" [package.extras] -all = ["ipykernel", "ipython", "ipywidgets (>=7)", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pyqtwebengine (>=5.15)", "pytest", "pytest-cov", "pytest-dependency", "sphinx-rtd-theme", "sphinx (==5.0.2)", "tornado (>=6.1)"] -docs = ["ipython", "nbsphinx (>=0.2.12)", "sphinx-rtd-theme", "sphinx (==5.0.2)"] +all = ["ipykernel", "ipython", "ipywidgets (>=7)", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pyqtwebengine (>=5.15)", "pytest", "pytest-cov", "pytest-dependency", "sphinx (==5.0.2)", "sphinx-rtd-theme", "tornado (>=6.1)"] +docs = ["ipython", "nbsphinx (>=0.2.12)", "sphinx (==5.0.2)", "sphinx-rtd-theme"] qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] @@ -1301,7 +1303,7 @@ webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.5.0" +version = "5.6.1" description = "The Jupyter Notebook format" category = "main" optional = true @@ -1309,12 +1311,13 @@ python-versions = ">=3.7" [package.dependencies] fastjsonschema = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.8\""} jsonschema = ">=2.6" -jupyter_core = "*" +jupyter-core = "*" traitlets = ">=5.1" [package.extras] -test = ["check-manifest", "testpath", "pytest", "pre-commit", "pep440"] +test = ["check-manifest", "pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" @@ -1333,11 +1336,11 @@ optional = false python-versions = ">=3.7" [package.extras] -default = ["numpy (>=1.19)", "scipy (>=1.5,!=1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] +default = ["matplotlib (>=3.3)", "numpy (>=1.19)", "pandas (>=1.1)", "scipy (>=1.5,!=1.6.1)"] developer = ["black (==21.5b1)", "pre-commit (>=2.12)"] -doc = ["sphinx (>=4.0,<5.0)", "pydata-sphinx-theme (>=0.6,<1.0)", "sphinx-gallery (>=0.9,<1.0)", "numpydoc (>=1.1)", "pillow (>=8.2)", "nb2plots (>=0.6)", "texext (>=0.6.6)"] -extra = ["lxml (>=4.5)", "pygraphviz (>=1.7)", "pydot (>=1.4.1)"] -test = ["pytest (>=6.2)", "pytest-cov (>=2.12)", "codecov (>=2.1)"] +doc = ["nb2plots (>=0.6)", "numpydoc (>=1.1)", "pillow (>=8.2)", "pydata-sphinx-theme (>=0.6,<1.0)", "sphinx (>=4.0,<5.0)", "sphinx-gallery (>=0.9,<1.0)", "texext (>=0.6.6)"] +extra = ["lxml (>=4.5)", "pydot (>=1.4.1)", "pygraphviz (>=1.7)"] +test = ["codecov (>=2.1)", "pytest (>=6.2)", "pytest-cov (>=2.12)"] [[package]] name = "nodeenv" @@ -1347,6 +1350,9 @@ category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +[package.dependencies] +setuptools = "*" + [[package]] name = "notebook" version = "6.4.12" @@ -1373,9 +1379,9 @@ tornado = ">=6.1" traitlets = ">=4.2.1" [package.extras] -docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] json-logging = ["json-logging"] -test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium", "testpath"] [[package]] name = "notebook-shim" @@ -1389,7 +1395,7 @@ python-versions = ">=3.7" jupyter-server = ">=1.8,<2.0" [package.extras] -test = ["pytest-console-scripts", "pytest-tornasync", "pytest"] +test = ["pytest", "pytest-console-scripts", "pytest-tornasync"] [[package]] name = "numpy" @@ -1458,7 +1464,7 @@ optional = true python-versions = "*" [[package]] -name = "pillow" +name = "Pillow" version = "9.2.0" description = "Python Imaging Library (Fork)" category = "main" @@ -1470,7 +1476,7 @@ docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues 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" @@ -1486,8 +1492,8 @@ optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] [[package]] name = "pluggy" @@ -1501,8 +1507,8 @@ python-versions = ">=3.6" importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} [package.extras] -testing = ["pytest-benchmark", "pytest"] -dev = ["tox", "pre-commit"] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" @@ -1552,7 +1558,7 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] -test = ["ipaddress", "mock", "enum34", "pywin32", "wmi"] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "psutil-wheels" @@ -1563,7 +1569,7 @@ optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] -test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"] +test = ["enum34", "ipaddress", "mock", "pywin32", "unittest2", "wmi"] [[package]] name = "ptyprocess" @@ -1636,7 +1642,7 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] -name = "pygithub" +name = "PyGithub" version = "1.55" description = "Use the full Github API v3" category = "dev" @@ -1654,14 +1660,14 @@ integrations = ["cryptography"] [[package]] name = "pyglet" -version = "2.0.dev23" +version = "2.0a4" description = "Cross-platform windowing and multimedia library" category = "main" optional = false python-versions = "*" [[package]] -name = "pygments" +name = "Pygments" version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" @@ -1672,7 +1678,7 @@ python-versions = ">=3.6" plugins = ["importlib-metadata"] [[package]] -name = "pyjwt" +name = "PyJWT" version = "2.5.0" description = "JSON Web Token implementation in Python" category = "dev" @@ -1681,9 +1687,9 @@ python-versions = ">=3.7" [package.extras] crypto = ["cryptography (>=3.3.1)", "types-cryptography (>=3.3.21)"] -dev = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "types-cryptography (>=3.3.21)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "pre-commit"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.3.1)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "types-cryptography (>=3.3.21)", "zope.interface"] docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] -tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" @@ -1707,7 +1713,7 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\"" testutil = ["gitpython (>3)"] [[package]] -name = "pynacl" +name = "PyNaCl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" category = "dev" @@ -1718,27 +1724,27 @@ python-versions = ">=3.6" cffi = ">=1.4.1" [package.extras] -docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] -tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] +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 = "8.5" +version = "8.5.1" description = "Python<->ObjC Interoperability Module" category = "main" optional = false python-versions = ">=3.6" [[package]] -name = "pyobjc-framework-cocoa" -version = "8.5" +name = "pyobjc-framework-Cocoa" +version = "8.5.1" description = "Wrappers for the Cocoa frameworks on macOS" category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -pyobjc-core = ">=8.5" +pyobjc-core = ">=8.5.1" [[package]] name = "pyparsing" @@ -1749,7 +1755,7 @@ optional = false python-versions = ">=3.6.8" [package.extras] -diagrams = ["railroad-diagrams", "jinja2"] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyrr" @@ -1806,7 +1812,7 @@ coverage = {version = ">=5.2.1", extras = ["toml"]} pytest = ">=4.6" [package.extras] -testing = ["virtualenv", "pytest-xdist", "six", "process-tests", "hunter", "fields"] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] [[package]] name = "pytest-forked" @@ -1874,7 +1880,7 @@ optional = true python-versions = ">=3.7" [[package]] -name = "pyyaml" +name = "PyYAML" version = "6.0" description = "YAML parser and emitter for Python" category = "dev" @@ -1883,7 +1889,7 @@ python-versions = ">=3.6" [[package]] name = "pyzmq" -version = "24.0.0" +version = "24.0.1" description = "Python bindings for 0MQ" category = "main" optional = true @@ -1975,7 +1981,7 @@ 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" @@ -1983,10 +1989,23 @@ optional = true python-versions = "*" [package.extras] -nativelib = ["pyobjc-framework-cocoa", "pywin32"] -objc = ["pyobjc-framework-cocoa"] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] win32 = ["pywin32"] +[[package]] +name = "setuptools" +version = "65.4.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx", "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)", "mock", "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-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 = "6.4.2" @@ -1997,6 +2016,7 @@ python-versions = ">=3.6" [package.dependencies] packaging = ">=20.0" +setuptools = "*" tomli = ">=1.0.0" [package.extras] @@ -2020,7 +2040,7 @@ optional = false python-versions = ">=3.7" [package.extras] -testing = ["pytest-randomly", "pytest-xdist", "coverage", "pytest"] +testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] [[package]] name = "smmap" @@ -2055,7 +2075,7 @@ optional = false python-versions = ">=3.6" [[package]] -name = "sphinx" +name = "Sphinx" version = "4.5.0" description = "Python documentation generator" category = "dev" @@ -2083,8 +2103,8 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "docutils-stubs", "types-typed-ast", "types-requests"] -test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "types-requests", "types-typed-ast"] +test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] [[package]] name = "sphinx-basic-ng" @@ -2098,7 +2118,7 @@ python-versions = ">=3.7" sphinx = ">=4.0,<6.0" [package.extras] -docs = ["furo", "myst-parser", "sphinx-copybutton", "sphinx-inline-tabs", "ipython"] +docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-tabs"] [[package]] name = "sphinx-copybutton" @@ -2112,8 +2132,8 @@ python-versions = ">=3.6" sphinx = ">=1.8" [package.extras] -rtd = ["sphinx-book-theme", "ipython", "sphinx"] code_style = ["pre-commit (==2.12.1)"] +rtd = ["ipython", "sphinx", "sphinx-book-theme"] [[package]] name = "sphinxcontrib-applehelp" @@ -2124,8 +2144,8 @@ optional = false python-versions = ">=3.5" [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-devhelp" @@ -2136,8 +2156,8 @@ optional = false python-versions = ">=3.5" [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-htmlhelp" @@ -2148,8 +2168,8 @@ optional = false python-versions = ">=3.6" [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-jsmath" @@ -2160,7 +2180,7 @@ optional = false python-versions = ">=3.5" [package.extras] -test = ["mypy", "flake8", "pytest"] +test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-programoutput" @@ -2182,8 +2202,8 @@ optional = false python-versions = ">=3.5" [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-serializinghtml" @@ -2194,7 +2214,7 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] @@ -2216,6 +2236,14 @@ category = "main" optional = false python-versions = ">=2.7" +[[package]] +name = "svgelements" +version = "1.8.3" +description = "Svg Elements Parsing" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "terminado" version = "0.15.0" @@ -2230,7 +2258,7 @@ pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} tornado = ">=6.1.0" [package.extras] -test = ["pre-commit", "pytest-timeout", "pytest (>=6.0)"] +test = ["pre-commit", "pytest (>=6.0)", "pytest-timeout"] [[package]] name = "tinycss2" @@ -2244,8 +2272,8 @@ python-versions = ">=3.6" webencodings = ">=0.4" [package.extras] -test = ["coverage", "pytest-isort", "pytest-flake8", "pytest-cov", "pytest"] -doc = ["sphinx-rtd-theme", "sphinx"] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["coverage[toml]", "pytest", "pytest-cov", "pytest-flake8", "pytest-isort"] [[package]] name = "toml" @@ -2324,7 +2352,7 @@ optional = false python-versions = "*" [[package]] -name = "types-pillow" +name = "types-Pillow" version = "8.3.11" description = "Typing stubs for Pillow" category = "dev" @@ -2333,15 +2361,15 @@ python-versions = "*" [[package]] name = "types-protobuf" -version = "3.20.3" +version = "3.20.4" description = "Typing stubs for protobuf" category = "dev" optional = false python-versions = "*" [[package]] -name = "types-pygments" -version = "2.13.0" +name = "types-Pygments" +version = "2.13.1" description = "Typing stubs for Pygments" category = "dev" optional = false @@ -2353,7 +2381,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.28.10" +version = "2.28.11" description = "Typing stubs for requests" category = "dev" optional = false @@ -2372,7 +2400,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.24" +version = "1.26.25" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -2395,8 +2423,8 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -2453,9 +2481,9 @@ optional = true python-versions = ">=3.7" [package.extras] +docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +optional = ["python-socks", "wsaccel"] test = ["websockets"] -optional = ["wsaccel", "python-socks"] -docs = ["sphinx-rtd-theme (>=0.5)", "Sphinx (>=3.4)"] [[package]] name = "wrapt" @@ -2474,8 +2502,8 @@ optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] +testing = ["func-timeout", "jaraco.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"] @@ -2484,7 +2512,7 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "6b4a0bf2152203096fff0b2d8a0667e2b19895921065ce81e16a8d53e6b267a8" +content-hash = "7427fde1a59595ee9a5fddd5fd67126de36be4398670784dca9bec63723e6f2e" [metadata.files] alabaster = [ @@ -2541,7 +2569,7 @@ 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 = [ +Babel = [ {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, ] @@ -2587,8 +2615,8 @@ bleach = [ {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, ] certifi = [ - {file = "certifi-2022.9.14-py3-none-any.whl", hash = "sha256:e232343de1ab72c2aa521b625c80f699e356830fd0e2c620b465b304b17b0516"}, - {file = "certifi-2022.9.14.tar.gz", hash = "sha256:36973885b9542e6bd01dea287b2b4b3b21236307c56324fcc3f1160f2d655ed5"}, + {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, + {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, ] cffi = [ {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, @@ -2743,7 +2771,7 @@ cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, ] -cython = [ +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"}, @@ -2790,20 +2818,20 @@ data-science-types = [ {file = "data_science_types-0.2.23-py3-none-any.whl", hash = "sha256:bca319abc0e53a0316f9fcb887937e942477cb9e5fc63c8581e0b0438903b977"}, ] dearpygui = [ - {file = "dearpygui-1.7.0-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:24b103b727e63d83779e755241599b3b3f5e9106e6d9fc43ad379ea1e05ac614"}, - {file = "dearpygui-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:200efd08c59e5781e836efb52af5d489b36e7f862ebc528460d8f42e00a4ea9b"}, - {file = "dearpygui-1.7.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:621293153b99d8ee1584cfb28ceb3685e3cd607f8901b3225535f918d7d96ce4"}, - {file = "dearpygui-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:95b845e15c579fec3b422502c86fea4dd37b3fe53cde8e0f58d62381f01d0169"}, - {file = "dearpygui-1.7.0-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:1b493fdd2f9abfdd08af3ab5623961020d13208a5ec27874e6c1a1d3091950b3"}, - {file = "dearpygui-1.7.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:172d6596e62084221d859c473fb62467071e9b7823e8dd9a00343abd852bdbb2"}, - {file = "dearpygui-1.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:10558b8bdcfa044cd65a89001db992f120e6dc1cc508497379e2d873195b6121"}, - {file = "dearpygui-1.7.0-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:98e5fc7100ab52a851c3e7386dcc6a88a8b9baf536a4ed5231967f0991ede852"}, - {file = "dearpygui-1.7.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e32919f39f11fb6b1869d426d98994b2cc76ebbcaf224649c03663478e6f81b0"}, - {file = "dearpygui-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:de50832ad40481eec7ca6e23a8a1324e299b5b38b1341f510468d4a0fd4951c7"}, - {file = "dearpygui-1.7.0-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:8cba8dea7c53f5b41416dbc6dda55d00d0a66e47dde0ae470d59d20d1b6b693f"}, - {file = "dearpygui-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42105b5ecc7afc70e8998012764bd4d571800f0c90d8e9a435b2bae6ab450db4"}, - {file = "dearpygui-1.7.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:69945c1f9e23125dfd354bf895142aef7bdeeecfc1c512f815b35c7c336d020f"}, - {file = "dearpygui-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:dd52c7e1aa780beb316c700adfdfb341f09f7361aea394fb47eb82fae2767cfc"}, + {file = "dearpygui-1.7.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:85f39fb21071cf49ebed3389cdb7e4dbe40ef2e0ccc61c51a74e6042c0c2eada"}, + {file = "dearpygui-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:68c664b609c9cd87feea6d93cb44453cc54992be28e278fa1a82062cbbc0b53b"}, + {file = "dearpygui-1.7.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:9616efc1d2205f8211d2b14a1d9cb79a3736a184c4357e77d9f8804039152cf5"}, + {file = "dearpygui-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:a1ec93d63efbbee0fb4e6863a679e7ea6f0ad592119e562cef6e2c8c93e17971"}, + {file = "dearpygui-1.7.1-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:431e7a4e5ded86bc2822e72d8f2701d66c943d07d32121064a35426fd3f57efc"}, + {file = "dearpygui-1.7.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ff5e6d5e480ba629d6038e2b4c08ebb86d85dffce29633abc45dbe0b7dd1452a"}, + {file = "dearpygui-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:01641ca8b65ae80d8b83300aa61e14505709bdf4b3384480ccd56b6c49ea8f89"}, + {file = "dearpygui-1.7.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:f929734485e9e8325ef90d0d2a937cafe44f515c6e00d6dfe6421df1edd782ea"}, + {file = "dearpygui-1.7.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:f0b906c7005c595c831988596079c040540d5f68c4265141b9dbb58abe7df644"}, + {file = "dearpygui-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:513f012182170954f55013cd5bc702f58dbc7cdfcec7a11a47247044096f7889"}, + {file = "dearpygui-1.7.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:e48260f211a1c6085190e0a8d2bab7b8b94193f25547636ea5cebfbfbeed7c82"}, + {file = "dearpygui-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e16fb825122a465049f0e16445903c6984d440bd37471ab2fb67e207bdf4dee1"}, + {file = "dearpygui-1.7.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:083c61419d0b8a87caff9338ba058be9468f41afb02b7c0184e1d426db18d376"}, + {file = "dearpygui-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:0518505a81174e1b4de5525bf9664d6def1232c88dfda842853a1a8cf2cecd28"}, ] debugpy = [ {file = "debugpy-1.6.3-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:c4b2bd5c245eeb49824bf7e539f95fb17f9a756186e51c3e513e32999d8846f3"}, @@ -2833,7 +2861,7 @@ 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 = [ +Deprecated = [ {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, ] @@ -2858,8 +2886,8 @@ execnet = [ {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, ] fastjsonschema = [ - {file = "fastjsonschema-2.16.1-py3-none-any.whl", hash = "sha256:2f7158c4de792555753d6c2277d6a2af2d406dfd97aeca21d17173561ede4fe6"}, - {file = "fastjsonschema-2.16.1.tar.gz", hash = "sha256:d6fa3ffbe719768d70e298b9fb847484e2bdfdb7241ed052b8d57a9294a8c334"}, + {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.0-py3-none-any.whl", hash = "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4"}, @@ -2902,8 +2930,8 @@ flake8-simplify = [ {file = "flake8_simplify-0.14.6.tar.gz", hash = "sha256:c4008db8016707684a1f0502ee69f3c2da37687d3cf7031cc1f326bf5986bf47"}, ] fonttools = [ - {file = "fonttools-4.37.2-py3-none-any.whl", hash = "sha256:88d48ef24486137c864dc56707b4b54ef8a97ab9162c2721ec61434baf1c4d13"}, - {file = "fonttools-4.37.2.zip", hash = "sha256:b6d86ffd0a5f83d3da6a34d5f99a90398638e423cd6a8d93c5808af703432c7f"}, + {file = "fonttools-4.37.3-py3-none-any.whl", hash = "sha256:a5bc5f5d48faa4085310b8ebd4c5d33bf27c6636c5f10a7de792510af2745a81"}, + {file = "fonttools-4.37.3.zip", hash = "sha256:f32ef6ec966cf0e7d2aa88601fed2e3a8f2851c26b5db2c80ccc8f82bee4eedc"}, ] furo = [ {file = "furo-2022.9.15-py3-none-any.whl", hash = "sha256:9129dead1f75e9fb4fa407612f1d5a0d0320767e6156c925aafe36f362f9b11a"}, @@ -2913,7 +2941,7 @@ gitdb = [ {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, ] -gitpython = [ +GitPython = [ {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, ] @@ -2982,14 +3010,14 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] ipykernel = [ - {file = "ipykernel-6.15.3-py3-none-any.whl", hash = "sha256:befe3736944b21afec8e832725e9a45f254c8bd9afc40b61d6661c97e45aff5a"}, - {file = "ipykernel-6.15.3.tar.gz", hash = "sha256:b81d57b0e171670844bf29cdc11562b1010d3da87115c4513e0ee660a8368765"}, + {file = "ipykernel-6.16.0-py3-none-any.whl", hash = "sha256:d3d95241cd4dd302fea9d5747b00509b58997356d1f6333c9a074c3eccb78cb3"}, + {file = "ipykernel-6.16.0.tar.gz", hash = "sha256:7fe42c0d58435e971dc15fd42189f20d66bf35f3056bda4f6554271bc1fa3d0d"}, ] ipython = [ {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, ] -ipython-genutils = [ +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"}, ] @@ -3005,7 +3033,7 @@ jedi = [ {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, ] -jinja2 = [ +Jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] @@ -3026,8 +3054,8 @@ jupyter-core = [ {file = "jupyter_core-4.11.1.tar.gz", hash = "sha256:2e5f244d44894c4154d06aeae3419dd7f1b0ef4494dc5584929b398c61cfd314"}, ] jupyter-server = [ - {file = "jupyter_server-1.18.1-py3-none-any.whl", hash = "sha256:022759b09c96a4e2feb95de59ce4283e04e17782efe197b91d23a47521609b77"}, - {file = "jupyter_server-1.18.1.tar.gz", hash = "sha256:2b72fc595bccae292260aad8157a0ead8da2c703ec6ae1bb7b36dbad0e267ea7"}, + {file = "jupyter_server-1.19.1-py3-none-any.whl", hash = "sha256:ea3587840f2a906883c9eecb6bc85ef87ba1b7ba4cb6eafbacfac4a568862106"}, + {file = "jupyter_server-1.19.1.tar.gz", hash = "sha256:d1cc3596945849742bc3eedf0699feeb50ad6c6045ebef02a9298b7f13c27e9f"}, ] jupyterlab = [ {file = "jupyterlab-3.4.7-py3-none-any.whl", hash = "sha256:30c64bc0aa0ba09959ab6fd5c74f08a6ae64656b46a29e2522142a5fda0dc486"}, @@ -3038,8 +3066,8 @@ jupyterlab-pygments = [ {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, ] jupyterlab-server = [ - {file = "jupyterlab_server-2.15.1-py3-none-any.whl", hash = "sha256:5e04008a98bfb510471b8b8a7059f7cdbb1797e1f255657f39ea3d838ba00bf6"}, - {file = "jupyterlab_server-2.15.1.tar.gz", hash = "sha256:305313970e131c590cf77bb6b8ca7e98591bc304111e8d103bc91d212e94796f"}, + {file = "jupyterlab_server-2.15.2-py3-none-any.whl", hash = "sha256:ec7cc9ddd16c407ba3ecd3579771fa7ae4c8f239ba401649f35e44ecbc3d41cc"}, + {file = "jupyterlab_server-2.15.2.tar.gz", hash = "sha256:c0bcdd4606e640e6f16d236ceac55336dc8bf98cbbce067af27524ccc2fb2640"}, ] kiwisolver = [ {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, @@ -3222,7 +3250,7 @@ lxml = [ {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9"}, {file = "lxml-4.9.1.tar.gz", hash = "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"}, ] -manimpango = [ +ManimPango = [ {file = "ManimPango-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc70c1ae3bb853b7244ea2c9b50c908e9d7a93062ec68315872e38771cc66969"}, {file = "ManimPango-0.4.1-cp310-cp310-win32.whl", hash = "sha256:5228e5326dc52753f4e6855ac4bf9667d78c0005315cddaf74fac5c2a6f87bc3"}, {file = "ManimPango-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:a83da66451498d6cc3f6e637157ca6c7530b68f9bc0ac6fe043b04bf78c87073"}, @@ -3273,7 +3301,7 @@ 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 = [ +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"}, @@ -3361,8 +3389,8 @@ mccabe = [ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] mdit-py-plugins = [ - {file = "mdit-py-plugins-0.3.0.tar.gz", hash = "sha256:ecc24f51eeec6ab7eecc2f9724e8272c2fb191c2e93cf98109120c2cace69750"}, - {file = "mdit_py_plugins-0.3.0-py3-none-any.whl", hash = "sha256:b1279701cee2dbf50e188d3da5f51fee8d78d038cdf99be57c6b9d1aa93b4073"}, + {file = "mdit-py-plugins-0.3.1.tar.gz", hash = "sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441"}, + {file = "mdit_py_plugins-0.3.1-py3-none-any.whl", hash = "sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1"}, ] mdurl = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, @@ -3482,8 +3510,8 @@ nbconvert = [ {file = "nbconvert-7.0.0.tar.gz", hash = "sha256:fd1e361da30e30e4c5a5ae89f7cae95ca2a4d4407389672473312249a7ba0060"}, ] nbformat = [ - {file = "nbformat-5.5.0-py3-none-any.whl", hash = "sha256:eb21018bbcdb29e7a4b8b29068d4b6794cdad685db8fcd569b97a09a048dc2e4"}, - {file = "nbformat-5.5.0.tar.gz", hash = "sha256:9ebe30e6c3b3e5b47d39ff0a3897a1acf523d2bfafcb4e2d04cdb70f8a66c507"}, + {file = "nbformat-5.6.1-py3-none-any.whl", hash = "sha256:9c071f0f615c1b0f4f9bf6745ecfd3294fc02daf279a05c76004c901e9dc5893"}, + {file = "nbformat-5.6.1.tar.gz", hash = "sha256:146b5b9969391387c2089256359f5da7c718b1d8a88ba814320273ea410e646e"}, ] nest-asyncio = [ {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, @@ -3562,7 +3590,7 @@ 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 = [ +Pillow = [ {file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"}, {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"}, {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7888310f6214f19ab2b6df90f3f06afa3df7ef7355fc025e78a3044737fab1f5"}, @@ -3622,7 +3650,7 @@ pillow = [ {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"}, {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"}, ] -pkgutil-resolve-name = [ +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"}, ] @@ -3734,19 +3762,19 @@ 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 = [ +PyGithub = [ {file = "PyGithub-1.55-py3-none-any.whl", hash = "sha256:2caf0054ea079b71e539741ae56c5a95e073b81fa472ce222e81667381b9601b"}, {file = "PyGithub-1.55.tar.gz", hash = "sha256:1bbfff9372047ff3f21d5cd8e07720f3dbfdaf6462fcaed9d815f528f1ba7283"}, ] pyglet = [ - {file = "pyglet-2.0.dev23-py3-none-any.whl", hash = "sha256:3f425b45376892f6866e9b10f215004f22f720a2ff02df5d4b96405d04cb546d"}, - {file = "pyglet-2.0.dev23.zip", hash = "sha256:0e8fab3cb085b9ae28ad782bf636e75b9493816baee9c1c57cb9d0769b1b894d"}, + {file = "pyglet-2.0a4-py3-none-any.whl", hash = "sha256:bdf709d46a97c50817a17492aac8467056753ebd4fbf738c8f495004f008ef0a"}, + {file = "pyglet-2.0a4.zip", hash = "sha256:24724841fae19c8060c349f2ae470ed49df3dca4bef1ba7fa6050b9b4bd77d74"}, ] -pygments = [ +Pygments = [ {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, ] -pyjwt = [ +PyJWT = [ {file = "PyJWT-2.5.0-py3-none-any.whl", hash = "sha256:8d82e7087868e94dd8d7d418e5088ce64f7daab4b36db654cbaedb46f9d1ca80"}, {file = "PyJWT-2.5.0.tar.gz", hash = "sha256:e77ab89480905d86998442ac5788f35333fa85f65047a534adc38edf3c88fc3b"}, ] @@ -3754,7 +3782,7 @@ pylint = [ {file = "pylint-2.13.9-py3-none-any.whl", hash = "sha256:705c620d388035bdd9ff8b44c5bcdd235bfb49d276d488dd2c8ff1736aa42526"}, {file = "pylint-2.13.9.tar.gz", hash = "sha256:095567c96e19e6f57b5b907e67d265ff535e588fe26b12b5ebe1fc5645b2c731"}, ] -pynacl = [ +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"}, @@ -3767,22 +3795,24 @@ pynacl = [ {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, ] pyobjc-core = [ - {file = "pyobjc-core-8.5.tar.gz", hash = "sha256:704c275439856c0d1287469f0d589a7d808d48b754a93d9ce5415d4eaf06d576"}, - {file = "pyobjc_core-8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0c234143b48334443f5adcf26e668945a6d47bc1fa6223e80918c6c735a029d9"}, - {file = "pyobjc_core-8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1486ee533f0d76f666804ce89723ada4db56bfde55e56151ba512d3f849857f8"}, - {file = "pyobjc_core-8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:412de06dfa728301c04b3e46fd7453320a8ae8b862e85236e547cd797a73b490"}, - {file = "pyobjc_core-8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b3e09cccb1be574a82cc9f929ae27fc4283eccc75496cb5d51534caa6bb83a3"}, - {file = "pyobjc_core-8.5-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:eeafe21f879666ab7f57efcc6b007c9f5f8733d367b7e380c925203ed83f000d"}, - {file = "pyobjc_core-8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c0071686976d7ea8c14690950e504a13cb22b4ebb2bc7b5ec47c1c1c0f6eff41"}, -] -pyobjc-framework-cocoa = [ - {file = "pyobjc-framework-Cocoa-8.5.tar.gz", hash = "sha256:569bd3a020f64b536fb2d1c085b37553e50558c9f907e08b73ffc16ae68e1861"}, - {file = "pyobjc_framework_Cocoa-8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7a7c160416696bf6035dfcdf0e603aaa52858d6afcddfcc5ab41733619ac2529"}, - {file = "pyobjc_framework_Cocoa-8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6ceba444282030be8596b812260e8d28b671254a51052ad778d32da6e17db847"}, - {file = "pyobjc_framework_Cocoa-8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f46b2b161b8dd40c7b9e00bc69636c3e6480b2704a69aee22ee0154befbe163a"}, - {file = "pyobjc_framework_Cocoa-8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b31d425aee8698cbf62b187338f5ca59427fa4dca2153a73866f7cb410713119"}, - {file = "pyobjc_framework_Cocoa-8.5-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:898359ac1f76eedec8aa156847682378a8950824421c40edb89391286e607dc4"}, - {file = "pyobjc_framework_Cocoa-8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:baa2947f76b119a3360973d74d57d6dada87ac527bab9a88f31596af392f123c"}, + {file = "pyobjc-core-8.5.1.tar.gz", hash = "sha256:f8592a12de076c27006700c4a46164478564fa33d7da41e7cbdd0a3bf9ddbccf"}, + {file = "pyobjc_core-8.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b62dcf987cc511188fc2aa5b4d3b9fd895361ea4984380463497ce4b0752ddf4"}, + {file = "pyobjc_core-8.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0accc653501a655f66c13f149a1d3d30e6cb65824edf852f7960a00c4f930d5b"}, + {file = "pyobjc_core-8.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f82b32affc898e9e5af041c1cecde2c99f2ce160b87df77f678c99f1550a4655"}, + {file = "pyobjc_core-8.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f7b2f6b6f3caeb882c658fe0c7098be2e8b79893d84daa8e636cb3e58a07df00"}, + {file = "pyobjc_core-8.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:872c0202c911a5a2f1269261c168e36569f6ddac17e5d854ac19e581726570cc"}, + {file = "pyobjc_core-8.5.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:21f92e231a4bae7f2d160d065f5afbf5e859a1e37f29d34ac12592205fc8c108"}, + {file = "pyobjc_core-8.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:315334dd09781129af6a39641248891c4caa57043901750b0139c6614ce84ec0"}, +] +pyobjc-framework-Cocoa = [ + {file = "pyobjc-framework-Cocoa-8.5.1.tar.gz", hash = "sha256:9a3de5cdb4644e85daf53f2ed912ef6c16ea5804a9e65552eafe62c2e139eb8c"}, + {file = "pyobjc_framework_Cocoa-8.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:aa572acc2628488a47be8d19f4701fc96fce7377cc4da18316e1e08c3918521a"}, + {file = "pyobjc_framework_Cocoa-8.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cb3ae21c8d81b7f02a891088c623cef61bca89bd671eff58c632d2f926b649f3"}, + {file = "pyobjc_framework_Cocoa-8.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:88f08f5bd94c66d373d8413c1d08218aff4cff0b586e0cc4249b2284023e7577"}, + {file = "pyobjc_framework_Cocoa-8.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:063683b57e4bd88cb0f9631ae65d25ec4eecf427d2fe8d0c578f88da9c896f3f"}, + {file = "pyobjc_framework_Cocoa-8.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f8806ddfac40620fb27f185d0f8937e69e330617319ecc2eccf6b9c8451bdd1"}, + {file = "pyobjc_framework_Cocoa-8.5.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:7733a9a201df9e0cc2a0cf7bf54d76bd7981cba9b599353b243e3e0c9eefec10"}, + {file = "pyobjc_framework_Cocoa-8.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f0ab227f99d3e25dd3db73f8cde0999914a5f0dd6a08600349d25f95eaa0da63"}, ] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, @@ -3862,7 +3892,7 @@ pywinpty = [ {file = "pywinpty-2.0.8-cp39-none-win_amd64.whl", hash = "sha256:ea7c1da94eed5ef93e75026c67c60d4dca33ea9a1c212fa89221079a7b463c68"}, {file = "pywinpty-2.0.8.tar.gz", hash = "sha256:a89b9021c63ef78b1e7d8e14f0fac4748c88a0c2e4f529c84f37f6e72b914280"}, ] -pyyaml = [ +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"}, @@ -3905,80 +3935,80 @@ pyyaml = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] pyzmq = [ - {file = "pyzmq-24.0.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:38e9ff2918d50a588e56aa80dae0373ef9f67512fc5691f95db2f59edabc083e"}, - {file = "pyzmq-24.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5439bef77fd3818c20e1bf5657836e105e4e48e1a7996e24ebb55402a681934e"}, - {file = "pyzmq-24.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8698db54fd49af74333190fb154448dcfc67a382aa2b2d784ffe981b7cf421ec"}, - {file = "pyzmq-24.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e24d7bda7a32ff35d0c914a52dd920a408f73d7e4b93d6755d7c67e819a8cd8c"}, - {file = "pyzmq-24.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00a8a4f83259b91b238244c999a33e0a77c0427d496902fb75fdf1601e4c9d3d"}, - {file = "pyzmq-24.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4985a82958d67eafd3f8c9c215c3da8f633592024f771420477f22f011846235"}, - {file = "pyzmq-24.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0775b65e79cccfca2b017e80ffe6dbd224b035a47245c4140b08e93996425942"}, - {file = "pyzmq-24.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e5a398955b1cfdd85dd699f2390661b7bbe9edcbadd70a444c79c69e6c31c91"}, - {file = "pyzmq-24.0.0-cp310-cp310-win32.whl", hash = "sha256:1bdec8988cad1f9a8453b4d00fd11598a91604cd9b205640e98b2f22e0435921"}, - {file = "pyzmq-24.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:eadf1d3841c2155b68ef49147253fd4ac1447a972d01c08248114edc4d3ba9d5"}, - {file = "pyzmq-24.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:99bb8cff279f7d1f516919d82b35ed0796c53ce7da7dca191fabfa4c53f47740"}, - {file = "pyzmq-24.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:452c3d5bfbaf96f32ef20673e6ba238355891884009f0c87e0f97a985293ef42"}, - {file = "pyzmq-24.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65b532c95a4cde95bb4787b5545321ed5624fa8d7391bce17c4e2a0717b97bb7"}, - {file = "pyzmq-24.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9cd5c7449f297a1b53a4803413db907a8cad1178435e2879c1b92816f2bbe56"}, - {file = "pyzmq-24.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f81f4065ff8ccd207204129463fd587b25c9f593128176a717dbabc03af9b233"}, - {file = "pyzmq-24.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b5107313c7f28b0e074da7a9d8c0132cb8dc32fdd3b5a4c6a224d30e50d6324"}, - {file = "pyzmq-24.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f200cdca2fc842749a3f263ccf9e4b50e732ad14f53b60faf68ef656b75c32a"}, - {file = "pyzmq-24.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ae33cb195304ac16996184b115f9e27eb9f0b14062e97fbd1d446e3e4a594ff0"}, - {file = "pyzmq-24.0.0-cp311-cp311-win32.whl", hash = "sha256:62ee069fe338d0b057b81e752dad2b9b6b206ba8570a878dbbe8b93b7b99ebb1"}, - {file = "pyzmq-24.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:e9e3fa94fa1e58763a7b824b8e0015d93c9fdd8e449d0218d13d01172e3d1539"}, - {file = "pyzmq-24.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b94a3453a18bb914b2cac1ac38c09f980a3c86a8cd0bb744dd6bd03ab8ff958a"}, - {file = "pyzmq-24.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e66d3237a7e8a11cdb8b470c77a6fb43f49fe9407936a2c9ac468ba2ba0982e"}, - {file = "pyzmq-24.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:44c1dc858b76d2ab28f5ea040dd5e816a71624a8cf38d4ca3208006fd2a9375e"}, - {file = "pyzmq-24.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:761016baa6ca720677ce01d453801e41db2d0e53cf052ed00ba8c2e6cae4d2cd"}, - {file = "pyzmq-24.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:ef4bd725c06d6ee9e502419ceeb5dfaccb6bbe36f359fd0366b90a56b6dae647"}, - {file = "pyzmq-24.0.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:40cdb50e82393253d340b6a357474588eb01cfd90b06231d5bfbc14490490b1b"}, - {file = "pyzmq-24.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:eb3b8acb5dc33ec812d79f35b85fddc43d8f75b65c00c635ee3c0b527e11c8ea"}, - {file = "pyzmq-24.0.0-cp36-cp36m-win32.whl", hash = "sha256:8988209d5efae9b5c9297fb48d153e2528384c1afe2c9fd8eeb474cd6e765199"}, - {file = "pyzmq-24.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:52d881c33f8db5ffcb0aabc14cc71098453f4700511195cebca846000b44b080"}, - {file = "pyzmq-24.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:844040d44cc4320cdffb258fe03768ff0b37e710d56a70dd1f6c2902738f1e28"}, - {file = "pyzmq-24.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05524f7cfa4f7398259a428fbb22ec4c3f0665c6a303a0d6afdd98457b19af3"}, - {file = "pyzmq-24.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ff4e510a9509d36359c7af4684e73489cdd53c781dd4bc9b07dc808fab56cc48"}, - {file = "pyzmq-24.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dbb871b22acec52c1b046ef6aa3d16f83618c704772f126a49e7446a0c885278"}, - {file = "pyzmq-24.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f1ddc43cceb500e4a6495250d9d34cac93e6d9e89a46f0e34fcefcc3caf66ef3"}, - {file = "pyzmq-24.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a5cdbede23aae133e50f786adc4a2cacf60bddde649e3dc122c32368daa2c007"}, - {file = "pyzmq-24.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ee24b94b5ae22af9148e597f512fae8383908ca07d3b7f99b349679fede4d7d3"}, - {file = "pyzmq-24.0.0-cp37-cp37m-win32.whl", hash = "sha256:c37c0046d04c0fdd99a9a31d6a9ce7d703cca3b7fdde5738603503dfba58a25f"}, - {file = "pyzmq-24.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b1ef471c62c3d0681cfbaa8bbaf96f22e20cafd391ecad8a43317f6b1598478e"}, - {file = "pyzmq-24.0.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:dfde6624d3d99d9a67235b60ae13be1a6ffce2f1de3cd2be9900f011d5d6a6a6"}, - {file = "pyzmq-24.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fc2c363f68bbb9fea6b8137c432c6df9d7c8c76b01549c4410c506dac9e30663"}, - {file = "pyzmq-24.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6814a6add1b7cb76e3fdfd961ce4c48c1f0a29e82bdb3d060a669b85bc6db454"}, - {file = "pyzmq-24.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1a53c6030c4f45859af9a75cfc0d8b551b8924f9b2503397c69d0fa2f62d2370"}, - {file = "pyzmq-24.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f328d28d0a1ea43d7030e1999ced9db252ba4ef2531af3e9bfc135cca77b8324"}, - {file = "pyzmq-24.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8a43105683a66de78489b30037b97c9ce5f821f57035f6944f633bbd4baadd15"}, - {file = "pyzmq-24.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3823e5e613a61948b2e6b85fd91f872772717d24cd1df871836665d4c56d6b34"}, - {file = "pyzmq-24.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1c23568e1581f637b1a1e1fd15dcd5e9165332c94bf8101c562e7c50640d673e"}, - {file = "pyzmq-24.0.0-cp38-cp38-win32.whl", hash = "sha256:8a93abd67a46c6b91f28a7513b9f8b9a5432fd573c3d6444c083e07209bf96e4"}, - {file = "pyzmq-24.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:8361c90701fc6ff5f16c81c969563c6915402fbecb2ddc9c5063fec0238e5e52"}, - {file = "pyzmq-24.0.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:4ec8847ab93200a94fd3e88e2824a6bba9a46d28161f1bf0be24f2237c40c291"}, - {file = "pyzmq-24.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f969214a9ebf1175a8aba863d6f1220174130188686d4ed475d138a240e60c1c"}, - {file = "pyzmq-24.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a07fb73ae006a5b565d19232e5a6592fd7c93e57e67c2e592bf0b21f1676767"}, - {file = "pyzmq-24.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1b978e1318311eb69523ed60f084b752f52f27ffea4ce2f60deab4d8a4cca6de"}, - {file = "pyzmq-24.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f355d23a420a6b39241bbef2c803839b01d52d680d89aac39460505e57b2cd03"}, - {file = "pyzmq-24.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5c1c2d7ebe991d8e36365ccd6b47297b6b96393ad453cad990901c21924add30"}, - {file = "pyzmq-24.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0128c7b723984e31c1b0df5bc532715defd13bf64d8d9eddd7207d093759ae4"}, - {file = "pyzmq-24.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ed10f5a942a2903a722d63806b7a9d2e0a966c038100dc763483d8fbe8ea074"}, - {file = "pyzmq-24.0.0-cp39-cp39-win32.whl", hash = "sha256:201e4d5733cecfd469d9ceee57500a0f365f85d6f14dd524105e2a0be8cd93c1"}, - {file = "pyzmq-24.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:460f0ff945d4b46c2d568941be33cf08954fca1e3239cf6a6ee03b1371de8f64"}, - {file = "pyzmq-24.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:534d13940b2476e4bacb54558c7b9b62fb275c2839e06267597a3e4b2f291196"}, - {file = "pyzmq-24.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ebdb43e947291c5cb80ef6c7d525f64bc4ed685de43f855ba0cf2b0fd8052e3a"}, - {file = "pyzmq-24.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ce8c61297a751c67062d11e44352e9379da03a90d95aa352395d3b1e53e9f20a"}, - {file = "pyzmq-24.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adbf2bb11a616210735d6a112186d378f7934be3f2935e6d9dd760c110840c3a"}, - {file = "pyzmq-24.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0584420cbd2dac77f81bdc4b9da2635a54300563d4632433b08cb1f505341ef0"}, - {file = "pyzmq-24.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8ea1861512c7f32d0c585119a2caea6665eec6df429abf5810826b0df9587de1"}, - {file = "pyzmq-24.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:be67e7f48fce8dbefd602f779c7382c874a1a1a3d08f375366c4d28baaa0bfd4"}, - {file = "pyzmq-24.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ff6c9fdbcfb285e28fe35eaf5ba39644cbc65343aa41844217c2b5a99abbdd7e"}, - {file = "pyzmq-24.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6736703c7581d18e3959c1d786035c620def2f096e762aefaf08cfa39844d1e"}, - {file = "pyzmq-24.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a5b9471e5e507f51f4c0acabec60a7ae2ea218ac6134a8e5ec5674845347a63a"}, - {file = "pyzmq-24.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dbece43299705eca217808759f4322c7cab41db2ba3ad8d7261ee2b17abe6488"}, - {file = "pyzmq-24.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:025a0815d36ccd54cf002feb9cbe0e37c2253eca305ee4dc72ccdb4a814eefb4"}, - {file = "pyzmq-24.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc21a74f337298840f59f21a12fbf6ec1de798cd69d6b331ef9ed88ac8cb18f0"}, - {file = "pyzmq-24.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf6477a083f8a1b54893ad24bc15f94dd0684b02320c69d2a69dcf36f70e73cb"}, - {file = "pyzmq-24.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aa6d0dfa94ce89d050dca0104389e10c537715bf10e5b0bfe5ece79f17f1719e"}, - {file = "pyzmq-24.0.0.tar.gz", hash = "sha256:13b008bd142c9f6079ad75a30504eef2291502e9eac90e722b16fcf9ce856147"}, + {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"}, @@ -4030,10 +4060,14 @@ screeninfo = [ {file = "screeninfo-0.8.1-py3-none-any.whl", hash = "sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c"}, {file = "screeninfo-0.8.1.tar.gz", hash = "sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1"}, ] -send2trash = [ +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.4.0-py3-none-any.whl", hash = "sha256:c2d2709550f15aab6c9110196ea312f468f41cd546bceb24127a1be6fdcaeeb1"}, + {file = "setuptools-65.4.0.tar.gz", hash = "sha256:a8f6e213b4b0661f590ccf40de95d28a177cd747d098624ad3f69c40287297e9"}, +] setuptools-scm = [ {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, @@ -4094,7 +4128,7 @@ soupsieve = [ {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, ] -sphinx = [ +Sphinx = [ {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, ] @@ -4141,6 +4175,10 @@ sphinxext-opengraph = [ srt = [ {file = "srt-3.5.2.tar.gz", hash = "sha256:7aa4ad5ce4126d3f53b3e7bc4edaa86653d0378bf1c0b1ab8c59f5ab41384450"}, ] +svgelements = [ + {file = "svgelements-1.8.3-py2.py3-none-any.whl", hash = "sha256:a224776c167d3ba6342d2baa4d98a140d045cb7cf039e7a539732dffbffebf76"}, + {file = "svgelements-1.8.3.tar.gz", hash = "sha256:df9ed1fc25d4324f78e62126b2b73e105658fb823fc6e2f69052202ca92c204b"}, +] terminado = [ {file = "terminado-0.15.0-py3-none-any.whl", hash = "sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197"}, {file = "terminado-0.15.0.tar.gz", hash = "sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"}, @@ -4212,29 +4250,29 @@ types-docutils = [ {file = "types-docutils-0.19.1.tar.gz", hash = "sha256:7df133b87105af410fc6a992030a70ee9f5a2c2636c5afe7e0de285eb9fdb015"}, {file = "types_docutils-0.19.1-py3-none-any.whl", hash = "sha256:6b110b17ba4bfbde765b69acca6a6da373094d99a5a3bce1d5a8c9d29b293d89"}, ] -types-pillow = [ +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.3.tar.gz", hash = "sha256:aae6404a9c902970da33977d1bc44cebae4957a5ceeced650b9afafb36051bb2"}, - {file = "types_protobuf-3.20.3-py3-none-any.whl", hash = "sha256:7344c65ff8ff915e5e997e0ac16b1c0ad6ee7fca11df5a64f550aedb264fdb23"}, + {file = "types-protobuf-3.20.4.tar.gz", hash = "sha256:0dad3a5009895c985a56e2837f61902bad9594151265ac0ee907bb16d0b01eb7"}, + {file = "types_protobuf-3.20.4-py3-none-any.whl", hash = "sha256:5082437afe64ce3b31c8db109eae86e02fda11e4d5f9ac59cb8578a8a138aa70"}, ] -types-pygments = [ - {file = "types-Pygments-2.13.0.tar.gz", hash = "sha256:00cc3e228ffdf6ffcf20af13190ef6e315f3585e5e8d27c12d1b56ff7ecde2f2"}, - {file = "types_Pygments-2.13.0-py3-none-any.whl", hash = "sha256:3985a4105d9b768bee5f311d7682d60c59ddd9f04d0977695f430ab9b218706b"}, +types-Pygments = [ + {file = "types-Pygments-2.13.1.tar.gz", hash = "sha256:6e231ec18f5d651f7863734bfdd8ca2f50dedd0c521422828a3f9638d6490092"}, + {file = "types_Pygments-2.13.1-py3-none-any.whl", hash = "sha256:52f71bc31caa0d0578ce8bb7e7761d3b1f6797ece86e26c6bc49a1f15e1e485c"}, ] types-requests = [ - {file = "types-requests-2.28.10.tar.gz", hash = "sha256:97d8f40aa1ffe1e58c3726c77d63c182daea9a72d9f1fa2cafdea756b2a19f2c"}, - {file = "types_requests-2.28.10-py3-none-any.whl", hash = "sha256:45b485725ed58752f2b23461252f1c1ad9205b884a1e35f786bb295525a3e16a"}, + {file = "types-requests-2.28.11.tar.gz", hash = "sha256:7ee827eb8ce611b02b5117cfec5da6455365b6a575f5e3ff19f655ba603e6b4e"}, + {file = "types_requests-2.28.11-py3-none-any.whl", hash = "sha256:af5f55e803cabcfb836dad752bd6d8a0fc8ef1cd84243061c0e27dee04ccf4fd"}, ] 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.24.tar.gz", hash = "sha256:a1b3aaea7dda3eb1b51699ee723aadd235488e4dc4648e030f09bc429ecff42f"}, - {file = "types_urllib3-1.26.24-py3-none-any.whl", hash = "sha256:cf7918503d02d3576e503bbfb419b0e047c4617653bba09624756ab7175e15c9"}, + {file = "types-urllib3-1.26.25.tar.gz", hash = "sha256:5aef0e663724eef924afa8b320b62ffef2c1736c1fa6caecfc9bc6c8ae2c3def"}, + {file = "types_urllib3-1.26.25-py3-none-any.whl", hash = "sha256:c1d78cef7bd581e162e46c20a57b2e1aa6ebecdcf01fd0713bb90978ff3e3427"}, ] typing-extensions = [ {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, diff --git a/pyproject.toml b/pyproject.toml index 4c817cb183..66655e511e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,6 +56,7 @@ srt = "^3.5.0" screeninfo = "^0.8" Pygments = "^2.10.0" "backports.cached-property" = { version = "^1.0.1", python = "<3.8" } +svgelements = "^1.7.2" [tool.poetry.extras] jupyterlab = ["jupyterlab", "notebook"] diff --git a/tests/module/mobject/svg/test_svg_mobject.py b/tests/module/mobject/svg/test_svg_mobject.py index 41c6e15dc6..116feb9e32 100644 --- a/tests/module/mobject/svg/test_svg_mobject.py +++ b/tests/module/mobject/svg/test_svg_mobject.py @@ -3,7 +3,6 @@ from colour import Color from manim import * -from manim.mobject.svg.svg_path import string_to_numbers from tests.helpers.path_utils import get_svg_resource @@ -57,23 +56,3 @@ def test_stroke_overrides_color(): stroke_color=expected_color, ) assert svg.stroke_color == Color(expected_color) - - -def test_string_to_numbers(): - cases = { - "3, 14, 159": [3.0, 14.0, 159.0], - "2.7 1828-1828": [2.7, 1828.0, -1828.0], - "1-.618.033": [1.0, -0.618, 0.033], - # this one is a real-world example! - "1.5938,1.5938,0,0,1-.1559.6874": [ - 1.5938, - 1.5938, - 0.0, - 0.0, - 1.0, - -0.1559, - 0.6874, - ], - } - for case, result in cases.items(): - assert string_to_numbers(case) == result diff --git a/tests/test_graphical_units/control_data/img_and_svg/Arcs01.npz b/tests/test_graphical_units/control_data/img_and_svg/Arcs01.npz index 82fb79b0785f801b6ca4780c7538b68f47538068..8a92131b477a9afe22e7a3728e483a4901f16f2e 100644 GIT binary patch literal 7845 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 XVm3GV?ig3%2=J{9{I>e*nfbo}(!qZ$ literal 7641 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 CXIh&8 diff --git a/tests/test_graphical_units/control_data/img_and_svg/Arcs02.npz b/tests/test_graphical_units/control_data/img_and_svg/Arcs02.npz index 23040991a60509c49d9d3f4995b6b003ab30606f..f102bb6a60c5434e6c0144e3cee26cab04fffee4 100644 GIT binary patch literal 26869 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 RM#$gJgAW(@b0rD+>YtwJwW9z4 diff --git a/tests/test_graphical_units/control_data/img_and_svg/ContiguousUSMap.npz b/tests/test_graphical_units/control_data/img_and_svg/ContiguousUSMap.npz index 3e67b429dabc7ea886142d6e5598b4c29adf3906..72281ffd096ea19c131f516ff6bc7408c6bdb452 100644 GIT binary patch literal 50524 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ÐlmAM|$v1O(e^T^3sS4aK~l>k~REGYlO^?W3IX> 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 Q>3R4|9R5kzjQrRC070n8wg3PC literal 51969 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
    - - **Thank you for contributing!** From 0835d4b39e0042538eae14098bef1d579332f70e Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sun, 9 Oct 2022 17:22:28 +0200 Subject: [PATCH 129/555] Implemented fallback save behavior for `pytest --show_diff` (#2981) * implemented fallback behavior for --show_diff * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/utils/testing/_frames_testers.py | 7 ++++++- manim/utils/testing/_show_diff.py | 24 +++++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/manim/utils/testing/_frames_testers.py b/manim/utils/testing/_frames_testers.py index 0496583c15..7c7fa46783 100644 --- a/manim/utils/testing/_frames_testers.py +++ b/manim/utils/testing/_frames_testers.py @@ -49,7 +49,12 @@ def check_frame(self, frame_number: int, frame: np.ndarray): self._frames_compared += 1 except AssertionError as e: if self._show_diff: - show_diff_helper(frame_number, frame, self._frames[frame_number]) + show_diff_helper( + frame_number, + frame, + self._frames[frame_number], + self._file_path.name, + ) raise e diff --git a/manim/utils/testing/_show_diff.py b/manim/utils/testing/_show_diff.py index 0e80295ef6..0cb2aab0f5 100644 --- a/manim/utils/testing/_show_diff.py +++ b/manim/utils/testing/_show_diff.py @@ -1,5 +1,8 @@ from __future__ import annotations +import logging +import warnings + import numpy as np @@ -7,6 +10,7 @@ def show_diff_helper( frame_number: int, frame_data: np.ndarray, expected_frame_data: np.ndarray, + control_data_filename: str, ): """Will visually display with matplotlib differences between frame generated and the one expected.""" import matplotlib.gridspec as gridspec @@ -18,11 +22,11 @@ def show_diff_helper( ax = fig.add_subplot(gs[0, 0]) ax.imshow(frame_data) - ax.set_title("Generated :") + ax.set_title("Generated") ax = fig.add_subplot(gs[0, 1]) ax.imshow(expected_frame_data) - ax.set_title("Expected :") + ax.set_title("Expected") ax = fig.add_subplot(gs[1, :]) diff_im = expected_frame_data.copy() @@ -37,6 +41,16 @@ def show_diff_helper( np.array([255, 0, 0, 255], dtype="uint8"), ) # Set any different pixels to red ax.imshow(diff_im, interpolation="nearest") - ax.set_title("Differences summary : (green = same, red = different)") - - plt.show() + ax.set_title("Difference summary: (green = same, red = different)") + + with warnings.catch_warnings(): + warnings.simplefilter("error") + try: + plt.show() + except UserWarning: + filename = f"{control_data_filename[:-4]}-diff.pdf" + plt.savefig(filename) + logging.warning( + "Interactive matplotlib interface not available," + f" diff saved to {filename}." + ) From 18fe1e64a9b67048c52ae3b018bba044113475df Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Mon, 10 Oct 2022 01:07:57 +0200 Subject: [PATCH 130/555] Debugging Windows CI Pipeline (#2983) * run tests without xdist * specifically run tests/opengl tests * fix version of moderngl-window to <=2.4.1 * Revert "run tests without xdist" This reverts commit 5d0d3e0264e7b4752360dd3f5bc763b2c6eda8fd. * Print info about OpenGL drivers * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Revert "Revert "run tests without xdist"" This reverts commit b6d2510c5275280d6fcd06839324661e27a901e7. * test * test * test * test * Revert "Revert "Revert "run tests without xdist""" This reverts commit 3a15beeea262a0976c0947553f642426b4e16706. * Revert "specifically run tests/opengl tests" This reverts commit a19809c3497061ce8b8db961ea0487e2cfd9c597. * test-arm: prefer currently active python * Revert "fix version of moderngl-window to <=2.4.1" This reverts commit ef9430712c36ab62d261d9ae2ed448ca736b7dbe. * regenerate lockfile * run module doctests with -v * fixed config-leaking doctests * ensure that correct pytest is run * try to investigate segfault closer * fixed pre-commit issue * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * pytest apparently does not run testsetup/testcleanup blocks, revert * duplicate config import * remove debug output from pipeline * fixed doctests Co-authored-by: Naveen M K Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 18 +- conftest.py | 13 + .../opengl/opengl_vectorized_mobject.py | 38 +- manim/mobject/types/vectorized_mobject.py | 7 +- poetry.lock | 377 +++++++----------- 5 files changed, 192 insertions(+), 261 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4e9d1da6d8..cf8501a6a1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: - name: Install Manim run: | - poetry env use ${{ matrix.python }} + poetry config virtualenvs.prefer-active-python true poetry install - name: Run tests @@ -66,7 +66,6 @@ jobs: env: DISPLAY: :0 PYTEST_ADDOPTS: "--color=yes" # colors in pytest - GLCONTEXT_WIN_LIBGL: C:\msys64\mingw64\bin\opengl32.dll strategy: fail-fast: false matrix: @@ -165,15 +164,7 @@ jobs: path: ${{ github.workspace }}\ManimCache key: ${{ runner.os }}-dependencies-tinytex-${{ hashFiles('.github/manimdependency.json') }}-${{ steps.cache-vars.outputs.date }}-1 - - name: Setup MSYS2 (Windows) - if: runner.os == 'Windows' - uses: msys2/setup-msys2@v2 - with: - release: false - msystem: MINGW64 - path-type: inherit - install: >- - mingw-w64-x86_64-mesa + - uses: ssciwr/setup-mesa-dist-win@v1 - name: Install system dependencies (Windows) if: runner.os == 'Windows' && steps.cache-windows.outputs.cache-hit != 'true' @@ -197,7 +188,6 @@ jobs: run: | $env:Path += ";" + "$($PWD)\ManimCache\LatexWindows\TinyTeX\bin\win32" $env:Path = "$env:USERPROFILE\.poetry\bin;$($env:PATH)" - $env:PATH = "C:\msys64\mingw64\bin;$($env:PATH)" echo "$env:Path" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Install manim @@ -207,11 +197,11 @@ jobs: - name: Run tests run: | - poetry run pytest + poetry run python -m pytest - name: Run module doctests run: | - poetry run pytest --cov-append --doctest-modules --ignore-glob="*opengl*" manim + poetry run python -m pytest -v --cov-append --doctest-modules manim - name: Run doctests in rst files run: | diff --git a/conftest.py b/conftest.py index 842ab76dd7..6881050589 100644 --- a/conftest.py +++ b/conftest.py @@ -5,6 +5,8 @@ from __future__ import annotations +import moderngl + # If it is running Doctest the current directory # is changed because it also tests the config module # itself. If it's a normal test then it uses the @@ -24,3 +26,14 @@ def temp_media_dir(tmpdir, monkeypatch, request): with tempconfig({"media_dir": str(tmpdir)}): assert config.media_dir == str(tmpdir) yield tmpdir + + +def pytest_report_header(config): + ctx = moderngl.create_standalone_context() + return ( + "\nOpenGL Information", + "------------------", + f"vendor: {ctx.info['GL_VENDOR'].strip()}", + f"renderer: {ctx.info['GL_RENDERER'].strip()}", + f"version: {ctx.info['GL_VERSION'].strip()}\n", + ) diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 858e753505..112369110e 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -1629,28 +1629,39 @@ class OpenGLVGroup(OpenGLVMobject): can subtract elements of a OpenGLVGroup via :meth:`~.OpenGLVGroup.remove` method, or `-` and `-=` operators: - >>> from manim import Triangle, Square, config + .. doctest:: + + >>> from manim import config + >>> original_renderer = config.renderer >>> config.renderer = "opengl" + + >>> from manim import Triangle, Square >>> from manim.opengl import OpenGLVGroup + >>> config.renderer + 'opengl' >>> vg = OpenGLVGroup() >>> triangle, square = Triangle(), Square() >>> vg.add(triangle) OpenGLVGroup(Triangle) - >>> vg + square # a new OpenGLVGroup is constructed + >>> vg + square # a new OpenGLVGroup is constructed OpenGLVGroup(Triangle, Square) - >>> vg # not modified + >>> vg # not modified OpenGLVGroup(Triangle) - >>> vg += square; vg # modifies vg + >>> vg += square # modifies vg + >>> vg OpenGLVGroup(Triangle, Square) >>> vg.remove(triangle) OpenGLVGroup(Square) - >>> vg - square; # a new OpenGLVGroup is constructed + >>> vg - square # a new OpenGLVGroup is constructed OpenGLVGroup() - >>> vg # not modified + >>> vg # not modified OpenGLVGroup(Square) - >>> vg -= square; vg # modifies vg + >>> vg -= square # modifies vg + >>> vg OpenGLVGroup() + >>> config.renderer = original_renderer + .. manim:: ArcShapeIris :save_last_frame: @@ -1767,13 +1778,20 @@ def __setitem__(self, key: int, value: OpenGLVMobject | Sequence[OpenGLVMobject] ------- None - Examples - -------- - Normal usage:: + Tests + ----- + + .. doctest:: + + >>> from manim import config + >>> original_renderer = config.renderer + >>> config.renderer = "opengl" >>> vgroup = OpenGLVGroup(OpenGLVMobject()) >>> new_obj = OpenGLVMobject() >>> vgroup[0] = new_obj + + >>> config.renderer = original_renderer """ if not all(isinstance(m, OpenGLVMobject) for m in value): raise TypeError("All submobjects must be of type OpenGLVMobject") diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 2556385f8e..3a59d35287 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -1889,10 +1889,9 @@ def __setitem__(self, key: int, value: Union[VMobject, typing.Sequence[VMobject] ------- None - Examples - -------- - Normal usage:: - + Tests + ----- + Check that item assignment does not raise error:: >>> vgroup = VGroup(VMobject()) >>> new_obj = VMobject() >>> vgroup[0] = new_obj diff --git a/poetry.lock b/poetry.lock index 00de2cc0e0..068f118f4b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -153,11 +153,11 @@ lxml = ["lxml"] [[package]] name = "black" -version = "22.8.0" +version = "22.10.0" description = "The uncompromising code formatter." category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7" [package.dependencies] click = ">=8.0.0" @@ -295,7 +295,7 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "coverage" -version = "6.4.4" +version = "6.5.0" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -563,7 +563,7 @@ importlib-metadata = {version = ">=0.9", markers = "python_version < \"3.8\""} [[package]] name = "fonttools" -version = "4.37.3" +version = "4.37.4" description = "Tools to manipulate font files" category = "dev" optional = false @@ -585,7 +585,7 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] name = "furo" -version = "2022.9.15" +version = "2022.9.29" description = "A clean customisable Sphinx documentation theme." category = "dev" optional = false @@ -610,7 +610,7 @@ smmap = ">=3.0.1,<6" [[package]] name = "GitPython" -version = "3.1.27" +version = "3.1.28" description = "GitPython is a python library used to interact with Git repositories" category = "dev" optional = false @@ -630,7 +630,7 @@ python-versions = "*" [[package]] name = "identify" -version = "2.5.5" +version = "2.5.6" description = "File identification library for Python" category = "dev" optional = false @@ -657,7 +657,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.12.0" +version = "4.13.0" description = "Read metadata from Python packages" category = "main" optional = false @@ -668,13 +668,13 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +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)"] [[package]] name = "importlib-resources" -version = "5.9.0" +version = "5.10.0" description = "Read resources from Python packages" category = "main" optional = true @@ -684,8 +684,8 @@ python-versions = ">=3.7" zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [[package]] name = "iniconfig" @@ -912,7 +912,7 @@ test = ["coverage", "ipykernel", "pre-commit", "pytest (>=6.0)", "pytest-console [[package]] name = "jupyterlab" -version = "3.4.7" +version = "3.4.8" description = "JupyterLab computational environment" category = "main" optional = true @@ -983,20 +983,6 @@ category = "dev" optional = false python-versions = ">=3.6" -[[package]] -name = "lxml" -version = "4.9.1" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "main" -optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.7)"] - [[package]] name = "ManimPango" version = "0.4.1" @@ -1217,7 +1203,7 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest [[package]] name = "nbclassic" -version = "0.4.3" +version = "0.4.5" description = "A web-based notebook environment for interactive computing" category = "main" optional = true @@ -1249,7 +1235,7 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-tornasync", "reques [[package]] name = "nbclient" -version = "0.6.8" +version = "0.7.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "main" optional = true @@ -1267,7 +1253,7 @@ test = ["black", "check-manifest", "flake8", "ipykernel", "ipython", "ipywidgets [[package]] name = "nbconvert" -version = "7.0.0" +version = "7.2.1" description = "Converting Jupyter Notebooks" category = "main" optional = true @@ -1281,7 +1267,6 @@ importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" -lxml = "*" markupsafe = ">=2.0" mistune = ">=2.0.3,<3" nbclient = ">=0.5.0" @@ -1293,8 +1278,8 @@ tinycss2 = "*" traitlets = ">=5.0" [package.extras] -all = ["ipykernel", "ipython", "ipywidgets (>=7)", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pyqtwebengine (>=5.15)", "pytest", "pytest-cov", "pytest-dependency", "sphinx (==5.0.2)", "sphinx-rtd-theme", "tornado (>=6.1)"] -docs = ["ipython", "nbsphinx (>=0.2.12)", "sphinx (==5.0.2)", "sphinx-rtd-theme"] +all = ["ipykernel", "ipython", "ipywidgets (>=7)", "myst-parser", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pyqtwebengine (>=5.15)", "pytest", "pytest-cov", "pytest-dependency", "sphinx (==5.0.2)", "sphinx-rtd-theme", "tornado (>=6.1)"] +docs = ["ipython", "myst-parser", "nbsphinx (>=0.2.12)", "sphinx (==5.0.2)", "sphinx-rtd-theme"] qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] @@ -1321,7 +1306,7 @@ test = ["check-manifest", "pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.5" +version = "1.5.6" description = "Patch asyncio to allow nested event loops" category = "main" optional = true @@ -1857,7 +1842,7 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2022.2.1" +version = "2022.4" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -1943,7 +1928,7 @@ docutils = ">=0.11,<1.0" [[package]] name = "rich" -version = "12.5.1" +version = "12.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -1995,14 +1980,14 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "65.4.0" +version = "65.4.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +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)", "mock", "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-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"] @@ -2108,14 +2093,14 @@ test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] [[package]] name = "sphinx-basic-ng" -version = "0.0.1a12" +version = "1.0.0b1" description = "A modern skeleton for Sphinx themes." category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] -sphinx = ">=4.0,<6.0" +sphinx = ">=4.0" [package.extras] docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-tabs"] @@ -2238,7 +2223,7 @@ python-versions = ">=2.7" [[package]] name = "svgelements" -version = "1.8.3" +version = "1.8.4" description = "Svg Elements Parsing" category = "main" optional = false @@ -2246,7 +2231,7 @@ python-versions = "*" [[package]] name = "terminado" -version = "0.15.0" +version = "0.16.0" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." category = "main" optional = true @@ -2381,7 +2366,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.28.11" +version = "2.28.11.2" description = "Typing stubs for requests" category = "dev" optional = false @@ -2408,7 +2393,7 @@ python-versions = "*" [[package]] name = "typing-extensions" -version = "4.3.0" +version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false @@ -2495,15 +2480,15 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "zipp" -version = "3.8.1" +version = "3.9.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] -testing = ["func-timeout", "jaraco.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)"] +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"] @@ -2586,29 +2571,27 @@ beautifulsoup4 = [ {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, ] black = [ - {file = "black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd"}, - {file = "black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27"}, - {file = "black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747"}, - {file = "black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869"}, - {file = "black-22.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90"}, - {file = "black-22.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a05da0430bd5ced89176db098567973be52ce175a55677436a271102d7eaa3fe"}, - {file = "black-22.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a098a69a02596e1f2a58a2a1c8d5a05d5a74461af552b371e82f9fa4ada8342"}, - {file = "black-22.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5594efbdc35426e35a7defa1ea1a1cb97c7dbd34c0e49af7fb593a36bd45edab"}, - {file = "black-22.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983526af1bea1e4cf6768e649990f28ee4f4137266921c2c3cee8116ae42ec3"}, - {file = "black-22.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b2c25f8dea5e8444bdc6788a2f543e1fb01494e144480bc17f806178378005e"}, - {file = "black-22.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:78dd85caaab7c3153054756b9fe8c611efa63d9e7aecfa33e533060cb14b6d16"}, - {file = "black-22.8.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cea1b2542d4e2c02c332e83150e41e3ca80dc0fb8de20df3c5e98e242156222c"}, - {file = "black-22.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b879eb439094751185d1cfdca43023bc6786bd3c60372462b6f051efa6281a5"}, - {file = "black-22.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a12e4e1353819af41df998b02c6742643cfef58282915f781d0e4dd7a200411"}, - {file = "black-22.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3a73f66b6d5ba7288cd5d6dad9b4c9b43f4e8a4b789a94bf5abfb878c663eb3"}, - {file = "black-22.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:e981e20ec152dfb3e77418fb616077937378b322d7b26aa1ff87717fb18b4875"}, - {file = "black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c"}, - {file = "black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497"}, - {file = "black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c"}, - {file = "black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41"}, - {file = "black-22.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec"}, - {file = "black-22.8.0-py3-none-any.whl", hash = "sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4"}, - {file = "black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, + {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"}, @@ -2716,56 +2699,56 @@ commonmark = [ {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] coverage = [ - {file = "coverage-6.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7b4da9bafad21ea45a714d3ea6f3e1679099e420c8741c74905b92ee9bfa7cc"}, - {file = "coverage-6.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fde17bc42e0716c94bf19d92e4c9f5a00c5feb401f5bc01101fdf2a8b7cacf60"}, - {file = "coverage-6.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdbb0d89923c80dbd435b9cf8bba0ff55585a3cdb28cbec65f376c041472c60d"}, - {file = "coverage-6.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67f9346aeebea54e845d29b487eb38ec95f2ecf3558a3cffb26ee3f0dcc3e760"}, - {file = "coverage-6.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42c499c14efd858b98c4e03595bf914089b98400d30789511577aa44607a1b74"}, - {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c35cca192ba700979d20ac43024a82b9b32a60da2f983bec6c0f5b84aead635c"}, - {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9cc4f107009bca5a81caef2fca843dbec4215c05e917a59dec0c8db5cff1d2aa"}, - {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f444627b3664b80d078c05fe6a850dd711beeb90d26731f11d492dcbadb6973"}, - {file = "coverage-6.4.4-cp310-cp310-win32.whl", hash = "sha256:66e6df3ac4659a435677d8cd40e8eb1ac7219345d27c41145991ee9bf4b806a0"}, - {file = "coverage-6.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:35ef1f8d8a7a275aa7410d2f2c60fa6443f4a64fae9be671ec0696a68525b875"}, - {file = "coverage-6.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c1328d0c2f194ffda30a45f11058c02410e679456276bfa0bbe0b0ee87225fac"}, - {file = "coverage-6.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61b993f3998ee384935ee423c3d40894e93277f12482f6e777642a0141f55782"}, - {file = "coverage-6.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5dd4b8e9cd0deb60e6fcc7b0647cbc1da6c33b9e786f9c79721fd303994832f"}, - {file = "coverage-6.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7026f5afe0d1a933685d8f2169d7c2d2e624f6255fb584ca99ccca8c0e966fd7"}, - {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9c7b9b498eb0c0d48b4c2abc0e10c2d78912203f972e0e63e3c9dc21f15abdaa"}, - {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ee2b2fb6eb4ace35805f434e0f6409444e1466a47f620d1d5763a22600f0f892"}, - {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ab066f5ab67059d1f1000b5e1aa8bbd75b6ed1fc0014559aea41a9eb66fc2ce0"}, - {file = "coverage-6.4.4-cp311-cp311-win32.whl", hash = "sha256:9d6e1f3185cbfd3d91ac77ea065d85d5215d3dfa45b191d14ddfcd952fa53796"}, - {file = "coverage-6.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e3d3c4cc38b2882f9a15bafd30aec079582b819bec1b8afdbde8f7797008108a"}, - {file = "coverage-6.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a095aa0a996ea08b10580908e88fbaf81ecf798e923bbe64fb98d1807db3d68a"}, - {file = "coverage-6.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef6f44409ab02e202b31a05dd6666797f9de2aa2b4b3534e9d450e42dea5e817"}, - {file = "coverage-6.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b7101938584d67e6f45f0015b60e24a95bf8dea19836b1709a80342e01b472f"}, - {file = "coverage-6.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a32ec68d721c3d714d9b105c7acf8e0f8a4f4734c811eda75ff3718570b5e3"}, - {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6a864733b22d3081749450466ac80698fe39c91cb6849b2ef8752fd7482011f3"}, - {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:08002f9251f51afdcc5e3adf5d5d66bb490ae893d9e21359b085f0e03390a820"}, - {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a3b2752de32c455f2521a51bd3ffb53c5b3ae92736afde67ce83477f5c1dd928"}, - {file = "coverage-6.4.4-cp37-cp37m-win32.whl", hash = "sha256:f855b39e4f75abd0dfbcf74a82e84ae3fc260d523fcb3532786bcbbcb158322c"}, - {file = "coverage-6.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ee6ae6bbcac0786807295e9687169fba80cb0617852b2fa118a99667e8e6815d"}, - {file = "coverage-6.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:564cd0f5b5470094df06fab676c6d77547abfdcb09b6c29c8a97c41ad03b103c"}, - {file = "coverage-6.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cbbb0e4cd8ddcd5ef47641cfac97d8473ab6b132dd9a46bacb18872828031685"}, - {file = "coverage-6.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6113e4df2fa73b80f77663445be6d567913fb3b82a86ceb64e44ae0e4b695de1"}, - {file = "coverage-6.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d032bfc562a52318ae05047a6eb801ff31ccee172dc0d2504614e911d8fa83e"}, - {file = "coverage-6.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e431e305a1f3126477abe9a184624a85308da8edf8486a863601d58419d26ffa"}, - {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cf2afe83a53f77aec067033199797832617890e15bed42f4a1a93ea24794ae3e"}, - {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:783bc7c4ee524039ca13b6d9b4186a67f8e63d91342c713e88c1865a38d0892a"}, - {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ff934ced84054b9018665ca3967fc48e1ac99e811f6cc99ea65978e1d384454b"}, - {file = "coverage-6.4.4-cp38-cp38-win32.whl", hash = "sha256:e1fabd473566fce2cf18ea41171d92814e4ef1495e04471786cbc943b89a3781"}, - {file = "coverage-6.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:4179502f210ebed3ccfe2f78bf8e2d59e50b297b598b100d6c6e3341053066a2"}, - {file = "coverage-6.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:98c0b9e9b572893cdb0a00e66cf961a238f8d870d4e1dc8e679eb8bdc2eb1b86"}, - {file = "coverage-6.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc600f6ec19b273da1d85817eda339fb46ce9eef3e89f220055d8696e0a06908"}, - {file = "coverage-6.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a98d6bf6d4ca5c07a600c7b4e0c5350cd483c85c736c522b786be90ea5bac4f"}, - {file = "coverage-6.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01778769097dbd705a24e221f42be885c544bb91251747a8a3efdec6eb4788f2"}, - {file = "coverage-6.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfa0b97eb904255e2ab24166071b27408f1f69c8fbda58e9c0972804851e0558"}, - {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:fcbe3d9a53e013f8ab88734d7e517eb2cd06b7e689bedf22c0eb68db5e4a0a19"}, - {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:15e38d853ee224e92ccc9a851457fb1e1f12d7a5df5ae44544ce7863691c7a0d"}, - {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6913dddee2deff8ab2512639c5168c3e80b3ebb0f818fed22048ee46f735351a"}, - {file = "coverage-6.4.4-cp39-cp39-win32.whl", hash = "sha256:354df19fefd03b9a13132fa6643527ef7905712109d9c1c1903f2133d3a4e145"}, - {file = "coverage-6.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:1238b08f3576201ebf41f7c20bf59baa0d05da941b123c6656e42cdb668e9827"}, - {file = "coverage-6.4.4-pp36.pp37.pp38-none-any.whl", hash = "sha256:f67cf9f406cf0d2f08a3515ce2db5b82625a7257f88aad87904674def6ddaec1"}, - {file = "coverage-6.4.4.tar.gz", hash = "sha256:e16c45b726acb780e1e6f88b286d3c10b3914ab03438f32117c4aa52d7f30d58"}, + {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"}, @@ -2930,20 +2913,20 @@ flake8-simplify = [ {file = "flake8_simplify-0.14.6.tar.gz", hash = "sha256:c4008db8016707684a1f0502ee69f3c2da37687d3cf7031cc1f326bf5986bf47"}, ] fonttools = [ - {file = "fonttools-4.37.3-py3-none-any.whl", hash = "sha256:a5bc5f5d48faa4085310b8ebd4c5d33bf27c6636c5f10a7de792510af2745a81"}, - {file = "fonttools-4.37.3.zip", hash = "sha256:f32ef6ec966cf0e7d2aa88601fed2e3a8f2851c26b5db2c80ccc8f82bee4eedc"}, + {file = "fonttools-4.37.4-py3-none-any.whl", hash = "sha256:afae1b39555f9c3f0ad1f0f1daf678e5ad157e38c8842ecb567951bf1a9b9fd7"}, + {file = "fonttools-4.37.4.zip", hash = "sha256:86918c150c6412798e15a0de6c3e0d061ddefddd00f97b4f7b43dfa867ad315e"}, ] furo = [ - {file = "furo-2022.9.15-py3-none-any.whl", hash = "sha256:9129dead1f75e9fb4fa407612f1d5a0d0320767e6156c925aafe36f362f9b11a"}, - {file = "furo-2022.9.15.tar.gz", hash = "sha256:4a7ef1c8a3b615171592da4d2ad8a53cc4aacfbe111958890f5f9ff7279066ab"}, + {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.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, ] GitPython = [ - {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, - {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, + {file = "GitPython-3.1.28-py3-none-any.whl", hash = "sha256:77bfbd299d8709f6af7e0c70840ef26e7aff7cf0c1ed53b42dd7fc3a310fcb02"}, + {file = "GitPython-3.1.28.tar.gz", hash = "sha256:6bd3451b8271132f099ceeaf581392eaf6c274af74bb06144307870479d0697c"}, ] glcontext = [ {file = "glcontext-2.3.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2eb3c2d7879076a33e801283ab2403788b78e1a45dc89e664a3100b967d471a1"}, @@ -2986,8 +2969,8 @@ glcontext = [ {file = "glcontext-2.3.6.tar.gz", hash = "sha256:cdb540eec587deddca037fb4dfdaa0921dcab0fd4d7ea5f1079e44fcb1b81e67"}, ] identify = [ - {file = "identify-2.5.5-py2.py3-none-any.whl", hash = "sha256:ef78c0d96098a3b5fe7720be4a97e73f439af7cf088ebf47b620aeaa10fadf97"}, - {file = "identify-2.5.5.tar.gz", hash = "sha256:322a5699daecf7c6fd60e68852f36f2ecbb6a36ff6e6e973e0d2bb6fca203ee6"}, + {file = "identify-2.5.6-py2.py3-none-any.whl", hash = "sha256:b276db7ec52d7e89f5bc4653380e33054ddc803d25875952ad90b0f012cbcdaa"}, + {file = "identify-2.5.6.tar.gz", hash = "sha256:6c32dbd747aa4ceee1df33f25fed0b0f6e0d65721b15bd151307ff7056d50245"}, ] idna = [ {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, @@ -2998,12 +2981,12 @@ imagesize = [ {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.12.0-py3-none-any.whl", hash = "sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23"}, - {file = "importlib_metadata-4.12.0.tar.gz", hash = "sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670"}, + {file = "importlib_metadata-4.13.0-py3-none-any.whl", hash = "sha256:8a8a81bcf996e74fee46f0d16bd3eaa382a7eb20fd82445c3ad11f4090334116"}, + {file = "importlib_metadata-4.13.0.tar.gz", hash = "sha256:dd0173e8f150d6815e098fd354f6414b0f079af4644ddfe90c71e2fc6174346d"}, ] importlib-resources = [ - {file = "importlib_resources-5.9.0-py3-none-any.whl", hash = "sha256:f78a8df21a79bcc30cfd400bdc38f314333de7c0fb619763f6b9dabab8268bb7"}, - {file = "importlib_resources-5.9.0.tar.gz", hash = "sha256:5481e97fb45af8dcf2f798952625591c58fe599d0735d86b10f54de086a61681"}, + {file = "importlib_resources-5.10.0-py3-none-any.whl", hash = "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437"}, + {file = "importlib_resources-5.10.0.tar.gz", hash = "sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, @@ -3058,8 +3041,8 @@ jupyter-server = [ {file = "jupyter_server-1.19.1.tar.gz", hash = "sha256:d1cc3596945849742bc3eedf0699feeb50ad6c6045ebef02a9298b7f13c27e9f"}, ] jupyterlab = [ - {file = "jupyterlab-3.4.7-py3-none-any.whl", hash = "sha256:30c64bc0aa0ba09959ab6fd5c74f08a6ae64656b46a29e2522142a5fda0dc486"}, - {file = "jupyterlab-3.4.7.tar.gz", hash = "sha256:4dc48ab0980e3af2e921dff26e0013dd03b104b1b67f0d85b67448e16e25311e"}, + {file = "jupyterlab-3.4.8-py3-none-any.whl", hash = "sha256:4626a0434c76a3a22f11c4efaa1d031d2586367f72cfdbdbff6b08b6ef0060f7"}, + {file = "jupyterlab-3.4.8.tar.gz", hash = "sha256:1fafb8b657005d91603f3c3adfd6d9e8eaf33fdc601537fef09283332efe67cb"}, ] jupyterlab-pygments = [ {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, @@ -3178,78 +3161,6 @@ lazy-object-proxy = [ {file = "lazy_object_proxy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61"}, {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, ] -lxml = [ - {file = "lxml-4.9.1-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed"}, - {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c62e8dd9754b7debda0c5ba59d34509c4688f853588d75b53c3791983faa96fc"}, - {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21fb3d24ab430fc538a96e9fbb9b150029914805d551deeac7d7822f64631dfc"}, - {file = "lxml-4.9.1-cp27-cp27m-win32.whl", hash = "sha256:86e92728ef3fc842c50a5cb1d5ba2bc66db7da08a7af53fb3da79e202d1b2cd3"}, - {file = "lxml-4.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4cfbe42c686f33944e12f45a27d25a492cc0e43e1dc1da5d6a87cbcaf2e95627"}, - {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dad7b164905d3e534883281c050180afcf1e230c3d4a54e8038aa5cfcf312b84"}, - {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a614e4afed58c14254e67862456d212c4dcceebab2eaa44d627c2ca04bf86837"}, - {file = "lxml-4.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f9ced82717c7ec65a67667bb05865ffe38af0e835cdd78728f1209c8fffe0cad"}, - {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d9fc0bf3ff86c17348dfc5d322f627d78273eba545db865c3cd14b3f19e57fa5"}, - {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e5f66bdf0976ec667fc4594d2812a00b07ed14d1b44259d19a41ae3fff99f2b8"}, - {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8"}, - {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8caf4d16b31961e964c62194ea3e26a0e9561cdf72eecb1781458b67ec83423d"}, - {file = "lxml-4.9.1-cp310-cp310-win32.whl", hash = "sha256:4780677767dd52b99f0af1f123bc2c22873d30b474aa0e2fc3fe5e02217687c7"}, - {file = "lxml-4.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:b122a188cd292c4d2fcd78d04f863b789ef43aa129b233d7c9004de08693728b"}, - {file = "lxml-4.9.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:be9eb06489bc975c38706902cbc6888f39e946b81383abc2838d186f0e8b6a9d"}, - {file = "lxml-4.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3"}, - {file = "lxml-4.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:927a9dd016d6033bc12e0bf5dee1dde140235fc8d0d51099353c76081c03dc29"}, - {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9232b09f5efee6a495a99ae6824881940d6447debe272ea400c02e3b68aad85d"}, - {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:04da965dfebb5dac2619cb90fcf93efdb35b3c6994fea58a157a834f2f94b318"}, - {file = "lxml-4.9.1-cp35-cp35m-win32.whl", hash = "sha256:4d5bae0a37af799207140652a700f21a85946f107a199bcb06720b13a4f1f0b7"}, - {file = "lxml-4.9.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4878e667ebabe9b65e785ac8da4d48886fe81193a84bbe49f12acff8f7a383a4"}, - {file = "lxml-4.9.1-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:1355755b62c28950f9ce123c7a41460ed9743c699905cbe664a5bcc5c9c7c7fb"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:bcaa1c495ce623966d9fc8a187da80082334236a2a1c7e141763ffaf7a405067"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6eafc048ea3f1b3c136c71a86db393be36b5b3d9c87b1c25204e7d397cee9536"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:13c90064b224e10c14dcdf8086688d3f0e612db53766e7478d7754703295c7c8"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206a51077773c6c5d2ce1991327cda719063a47adc02bd703c56a662cdb6c58b"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e8f0c9d65da595cfe91713bc1222af9ecabd37971762cb830dea2fc3b3bb2acf"}, - {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8f0a4d179c9a941eb80c3a63cdb495e539e064f8054230844dcf2fcb812b71d3"}, - {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:830c88747dce8a3e7525defa68afd742b4580df6aa2fdd6f0855481e3994d391"}, - {file = "lxml-4.9.1-cp36-cp36m-win32.whl", hash = "sha256:1e1cf47774373777936c5aabad489fef7b1c087dcd1f426b621fda9dcc12994e"}, - {file = "lxml-4.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:5974895115737a74a00b321e339b9c3f45c20275d226398ae79ac008d908bff7"}, - {file = "lxml-4.9.1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1423631e3d51008871299525b541413c9b6c6423593e89f9c4cfbe8460afc0a2"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:2aaf6a0a6465d39b5ca69688fce82d20088c1838534982996ec46633dc7ad6cc"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:9f36de4cd0c262dd9927886cc2305aa3f2210db437aa4fed3fb4940b8bf4592c"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae06c1e4bc60ee076292e582a7512f304abdf6c70db59b56745cca1684f875a4"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:57e4d637258703d14171b54203fd6822fda218c6c2658a7d30816b10995f29f3"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6d279033bf614953c3fc4a0aa9ac33a21e8044ca72d4fa8b9273fe75359d5cca"}, - {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a60f90bba4c37962cbf210f0188ecca87daafdf60271f4c6948606e4dabf8785"}, - {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6ca2264f341dd81e41f3fffecec6e446aa2121e0b8d026fb5130e02de1402785"}, - {file = "lxml-4.9.1-cp37-cp37m-win32.whl", hash = "sha256:27e590352c76156f50f538dbcebd1925317a0f70540f7dc8c97d2931c595783a"}, - {file = "lxml-4.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:eea5d6443b093e1545ad0210e6cf27f920482bfcf5c77cdc8596aec73523bb7e"}, - {file = "lxml-4.9.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f05251bbc2145349b8d0b77c0d4e5f3b228418807b1ee27cefb11f69ed3d233b"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:487c8e61d7acc50b8be82bda8c8d21d20e133c3cbf41bd8ad7eb1aaeb3f07c97"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d1a92d8e90b286d491e5626af53afef2ba04da33e82e30744795c71880eaa21"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b570da8cd0012f4af9fa76a5635cd31f707473e65a5a335b186069d5c7121ff2"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ef87fca280fb15342726bd5f980f6faf8b84a5287fcc2d4962ea8af88b35130"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:93e414e3206779ef41e5ff2448067213febf260ba747fc65389a3ddaa3fb8715"}, - {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6653071f4f9bac46fbc30f3c7838b0e9063ee335908c5d61fb7a4a86c8fd2036"}, - {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:32a73c53783becdb7eaf75a2a1525ea8e49379fb7248c3eeefb9412123536387"}, - {file = "lxml-4.9.1-cp38-cp38-win32.whl", hash = "sha256:1a7c59c6ffd6ef5db362b798f350e24ab2cfa5700d53ac6681918f314a4d3b94"}, - {file = "lxml-4.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:1436cf0063bba7888e43f1ba8d58824f085410ea2025befe81150aceb123e345"}, - {file = "lxml-4.9.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:4beea0f31491bc086991b97517b9683e5cfb369205dac0148ef685ac12a20a67"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:41fb58868b816c202e8881fd0f179a4644ce6e7cbbb248ef0283a34b73ec73bb"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bd34f6d1810d9354dc7e35158aa6cc33456be7706df4420819af6ed966e85448"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:edffbe3c510d8f4bf8640e02ca019e48a9b72357318383ca60e3330c23aaffc7"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d949f53ad4fc7cf02c44d6678e7ff05ec5f5552b235b9e136bd52e9bf730b91"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:079b68f197c796e42aa80b1f739f058dcee796dc725cc9a1be0cdb08fc45b000"}, - {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9c3a88d20e4fe4a2a4a84bf439a5ac9c9aba400b85244c63a1ab7088f85d9d25"}, - {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4e285b5f2bf321fc0857b491b5028c5f276ec0c873b985d58d7748ece1d770dd"}, - {file = "lxml-4.9.1-cp39-cp39-win32.whl", hash = "sha256:ef72013e20dd5ba86a8ae1aed7f56f31d3374189aa8b433e7b12ad182c0d2dfb"}, - {file = "lxml-4.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:10d2017f9150248563bb579cd0d07c61c58da85c922b780060dcc9a3aa9f432d"}, - {file = "lxml-4.9.1-pp37-pypy37_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538747a9d7827ce3e16a8fdd201a99e661c7dee3c96c885d8ecba3c35d1032c"}, - {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0645e934e940107e2fdbe7c5b6fb8ec6232444260752598bc4d09511bd056c0b"}, - {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6daa662aba22ef3258934105be2dd9afa5bb45748f4f702a3b39a5bf53a1f4dc"}, - {file = "lxml-4.9.1-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:603a464c2e67d8a546ddaa206d98e3246e5db05594b97db844c2f0a1af37cf5b"}, - {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c4b2e0559b68455c085fb0f6178e9752c4be3bba104d6e881eb5573b399d1eb2"}, - {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0f3f0059891d3254c7b5fb935330d6db38d6519ecd238ca4fce93c234b4a0f73"}, - {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c852b1530083a620cb0de5f3cd6826f19862bafeaf77586f1aef326e49d95f0c"}, - {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9"}, - {file = "lxml-4.9.1.tar.gz", hash = "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"}, -] ManimPango = [ {file = "ManimPango-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc70c1ae3bb853b7244ea2c9b50c908e9d7a93062ec68315872e38771cc66969"}, {file = "ManimPango-0.4.1-cp310-cp310-win32.whl", hash = "sha256:5228e5326dc52753f4e6855ac4bf9667d78c0005315cddaf74fac5c2a6f87bc3"}, @@ -3498,24 +3409,24 @@ myst-parser = [ {file = "myst_parser-0.17.2-py3-none-any.whl", hash = "sha256:1635ce3c18965a528d6de980f989ff64d6a1effb482e1f611b1bfb79e38f3d98"}, ] nbclassic = [ - {file = "nbclassic-0.4.3-py3-none-any.whl", hash = "sha256:4b01076effdac53e775cd1b6a4e891663568b32621468e205b502a23b2921899"}, - {file = "nbclassic-0.4.3.tar.gz", hash = "sha256:f03111b2cebaa69b88370a7b23b19b2b37c9bb71767f1828cdfd7a047eae8edd"}, + {file = "nbclassic-0.4.5-py3-none-any.whl", hash = "sha256:07fba5a9e52a6ed7e795b45d300629b2a07a69e5a47398833b7977a7ecc8a3c1"}, + {file = "nbclassic-0.4.5.tar.gz", hash = "sha256:05704c6cdd8301bf52e40ed9fae39e80d6bc5d2d447dc67831c145b4dd928779"}, ] nbclient = [ - {file = "nbclient-0.6.8-py3-none-any.whl", hash = "sha256:7cce8b415888539180535953f80ea2385cdbb444944cdeb73ffac1556fdbc228"}, - {file = "nbclient-0.6.8.tar.gz", hash = "sha256:268fde3457cafe1539e32eb1c6d796bbedb90b9e92bacd3e43d83413734bb0e8"}, + {file = "nbclient-0.7.0-py3-none-any.whl", hash = "sha256:434c91385cf3e53084185334d675a0d33c615108b391e260915d1aa8e86661b8"}, + {file = "nbclient-0.7.0.tar.gz", hash = "sha256:a1d844efd6da9bc39d2209bf996dbd8e07bf0f36b796edfabaa8f8a9ab77c3aa"}, ] nbconvert = [ - {file = "nbconvert-7.0.0-py3-none-any.whl", hash = "sha256:26843ae233167e8aae31c20e3e1d91f431f04c9f34363bbe2dd0d247f772641c"}, - {file = "nbconvert-7.0.0.tar.gz", hash = "sha256:fd1e361da30e30e4c5a5ae89f7cae95ca2a4d4407389672473312249a7ba0060"}, + {file = "nbconvert-7.2.1-py3-none-any.whl", hash = "sha256:50a54366ab53da20e82668818b7b2f3f7b85c0bcd46ec8e18836f12b39180dfa"}, + {file = "nbconvert-7.2.1.tar.gz", hash = "sha256:1e180801205ad831b6e2480c5a03307dfb6327fa5b2f9b156d6fed45f9700686"}, ] nbformat = [ {file = "nbformat-5.6.1-py3-none-any.whl", hash = "sha256:9c071f0f615c1b0f4f9bf6745ecfd3294fc02daf279a05c76004c901e9dc5893"}, {file = "nbformat-5.6.1.tar.gz", hash = "sha256:146b5b9969391387c2089256359f5da7c718b1d8a88ba814320273ea410e646e"}, ] nest-asyncio = [ - {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, - {file = "nest_asyncio-1.5.5.tar.gz", hash = "sha256:e442291cd942698be619823a17a86a5759eabe1f8613084790de189fe9e16d65"}, + {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.6.3-py3-none-any.whl", hash = "sha256:80b6b89c77d1dfb64a4c7854981b60aeea6360ac02c6d4e4913319e0a313abef"}, @@ -3866,8 +3777,8 @@ python-dateutil = [ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] pytz = [ - {file = "pytz-2022.2.1-py2.py3-none-any.whl", hash = "sha256:220f481bdafa09c3955dfbdddb7b57780e9a94f5127e35456a48589b9e0c0197"}, - {file = "pytz-2022.2.1.tar.gz", hash = "sha256:cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5"}, + {file = "pytz-2022.4-py2.py3-none-any.whl", hash = "sha256:2c0784747071402c6e99f0bafdb7da0fa22645f06554c7ae06bf6358897e9c91"}, + {file = "pytz-2022.4.tar.gz", hash = "sha256:48ce799d83b6f8aab2020e369b627446696619e79645419610b9facd909b3174"}, ] pywin32 = [ {file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"}, @@ -4022,8 +3933,8 @@ restructuredtext-lint = [ {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, ] rich = [ - {file = "rich-12.5.1-py3-none-any.whl", hash = "sha256:2eb4e6894cde1e017976d2975ac210ef515d7548bc595ba20e195fb9628acdeb"}, - {file = "rich-12.5.1.tar.gz", hash = "sha256:63a5c5ce3673d3d5fbbf23cd87e11ab84b6b451436f1b7f19ec54b6bc36ed7ca"}, + {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.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, @@ -4065,8 +3976,8 @@ Send2Trash = [ {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, ] setuptools = [ - {file = "setuptools-65.4.0-py3-none-any.whl", hash = "sha256:c2d2709550f15aab6c9110196ea312f468f41cd546bceb24127a1be6fdcaeeb1"}, - {file = "setuptools-65.4.0.tar.gz", hash = "sha256:a8f6e213b4b0661f590ccf40de95d28a177cd747d098624ad3f69c40287297e9"}, + {file = "setuptools-65.4.1-py3-none-any.whl", hash = "sha256:1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012"}, + {file = "setuptools-65.4.1.tar.gz", hash = "sha256:3050e338e5871e70c72983072fe34f6032ae1cdeeeb67338199c2f74e083a80e"}, ] setuptools-scm = [ {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, @@ -4133,8 +4044,8 @@ Sphinx = [ {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, ] sphinx-basic-ng = [ - {file = "sphinx_basic_ng-0.0.1a12-py3-none-any.whl", hash = "sha256:e8b6efd2c5ece014156de76065eda01ddfca0fee465aa020b1e3c12f84570bbe"}, - {file = "sphinx_basic_ng-0.0.1a12.tar.gz", hash = "sha256:cffffb14914ddd26c94b1330df1d72dab5a42e220aaeb5953076a40b9c50e801"}, + {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"}, @@ -4176,12 +4087,12 @@ srt = [ {file = "srt-3.5.2.tar.gz", hash = "sha256:7aa4ad5ce4126d3f53b3e7bc4edaa86653d0378bf1c0b1ab8c59f5ab41384450"}, ] svgelements = [ - {file = "svgelements-1.8.3-py2.py3-none-any.whl", hash = "sha256:a224776c167d3ba6342d2baa4d98a140d045cb7cf039e7a539732dffbffebf76"}, - {file = "svgelements-1.8.3.tar.gz", hash = "sha256:df9ed1fc25d4324f78e62126b2b73e105658fb823fc6e2f69052202ca92c204b"}, + {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.15.0-py3-none-any.whl", hash = "sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197"}, - {file = "terminado-0.15.0.tar.gz", hash = "sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"}, + {file = "terminado-0.16.0-py3-none-any.whl", hash = "sha256:3e995072a7178a104c41134548ce9b03e4e7f0a538e9c29df4f1fbc81c7cfc75"}, + {file = "terminado-0.16.0.tar.gz", hash = "sha256:fac14374eb5498bdc157ed32e510b1f60d5c3c7981a9f5ba018bb9a64cec0c25"}, ] tinycss2 = [ {file = "tinycss2-1.1.1-py3-none-any.whl", hash = "sha256:fe794ceaadfe3cf3e686b22155d0da5780dd0e273471a51846d0a02bc204fec8"}, @@ -4263,8 +4174,8 @@ types-Pygments = [ {file = "types_Pygments-2.13.1-py3-none-any.whl", hash = "sha256:52f71bc31caa0d0578ce8bb7e7761d3b1f6797ece86e26c6bc49a1f15e1e485c"}, ] types-requests = [ - {file = "types-requests-2.28.11.tar.gz", hash = "sha256:7ee827eb8ce611b02b5117cfec5da6455365b6a575f5e3ff19f655ba603e6b4e"}, - {file = "types_requests-2.28.11-py3-none-any.whl", hash = "sha256:af5f55e803cabcfb836dad752bd6d8a0fc8ef1cd84243061c0e27dee04ccf4fd"}, + {file = "types-requests-2.28.11.2.tar.gz", hash = "sha256:fdcd7bd148139fb8eef72cf4a41ac7273872cad9e6ada14b11ff5dfdeee60ed3"}, + {file = "types_requests-2.28.11.2-py3-none-any.whl", hash = "sha256:14941f8023a80b16441b3b46caffcbfce5265fd14555844d6029697824b5a2ef"}, ] types-setuptools = [ {file = "types-setuptools-57.4.18.tar.gz", hash = "sha256:8ee03d823fe7fda0bd35faeae33d35cb5c25b497263e6a58b34c4cfd05f40bcf"}, @@ -4275,8 +4186,8 @@ types-urllib3 = [ {file = "types_urllib3-1.26.25-py3-none-any.whl", hash = "sha256:c1d78cef7bd581e162e46c20a57b2e1aa6ebecdcf01fd0713bb90978ff3e3427"}, ] typing-extensions = [ - {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, - {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, ] urllib3 = [ {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, @@ -4392,6 +4303,6 @@ wrapt = [ {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] zipp = [ - {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, - {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, + {file = "zipp-3.9.0-py3-none-any.whl", hash = "sha256:972cfa31bc2fedd3fa838a51e9bc7e64b7fb725a8c00e7431554311f180e9980"}, + {file = "zipp-3.9.0.tar.gz", hash = "sha256:3a7af91c3db40ec72dd9d154ae18e008c69efe8ca88dde4f9a731bb82fe2f9eb"}, ] From bf3867b932ba8179101888b6fd77ff098152284f Mon Sep 17 00:00:00 2001 From: Owen Samuel <45167001+OwenSamuel@users.noreply.github.com> Date: Wed, 12 Oct 2022 17:23:58 +0100 Subject: [PATCH 131/555] fix: corrected parameters and enhanced the description of interpolate_color within image_mobject (#2919) --- manim/mobject/types/image_mobject.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index 80b8755997..c245841596 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -235,17 +235,17 @@ def fade(self, darkness=0.5, family=True): return self def interpolate_color(self, mobject1, mobject2, alpha): - """Interpolates an array of pixel color values into another array of - equal size. + """Interpolates the array of pixel color values from one ImageMobject + into an array of equal size in the target ImageMobject. Parameters ---------- mobject1 : ImageMobject The ImageMobject to transform from. - mobject1 : ImageMobject - + mobject2 : ImageMobject The ImageMobject to transform into. + alpha : float Used to track the lerp relationship. Not opacity related. """ From 98993ba9addd5adba868c297f35e3ebefa25e9cd Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Sun, 16 Oct 2022 13:22:06 -0700 Subject: [PATCH 132/555] Add encoding for `open()` function in text_file_writing module (#2995) Saw this message https://discord.com/channels/581738731934056449/1030665460280197220/1030665460280197220 and found that `open` is missing `encoding` parameter which was the root cause of that error. By default, on windows, `open` doesn't use `utf-8` encoding and that's why it was throwing an error. --- manim/utils/tex_file_writing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/utils/tex_file_writing.py b/manim/utils/tex_file_writing.py index d335691da3..d90b8af0e3 100644 --- a/manim/utils/tex_file_writing.py +++ b/manim/utils/tex_file_writing.py @@ -250,7 +250,7 @@ def print_all_tex_errors(log_file, tex_compiler, tex_file): f"{tex_compiler} failed but did not produce a log file. " "Check your LaTeX installation.", ) - with open(log_file) as f: + with open(log_file, encoding="utf-8") as f: tex_compilation_log = f.readlines() error_indices = [ index From f65991c2897ea62660d22a005edaec8a576e7881 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Tue, 25 Oct 2022 23:52:39 +0200 Subject: [PATCH 133/555] Fixed segmentation faults from doctests under Python 3.10 (#2994) * ignore *opengl* glob for module doctests again * removed custom pytest_report_header, fixes testing submodules (????) * restore previous version of conftest, with segfault fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * handle situation of non-available readline * Update conftest.py Co-authored-by: Naveen M K Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Naveen M K --- .github/workflows/ci.yml | 2 +- conftest.py | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cf8501a6a1..ea5a5ab20a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -201,7 +201,7 @@ jobs: - name: Run module doctests run: | - poetry run python -m pytest -v --cov-append --doctest-modules manim + poetry run python -m pytest -v --cov-append --ignore-glob="*opengl*" --doctest-modules manim - name: Run doctests in rst files run: | diff --git a/conftest.py b/conftest.py index 6881050589..da37e19ba5 100644 --- a/conftest.py +++ b/conftest.py @@ -5,6 +5,12 @@ from __future__ import annotations +try: + # https://github.com/moderngl/moderngl/issues/517 + import readline # required to prevent a segfault on Python 3.10 +except ModuleNotFoundError: # windows + pass + import moderngl # If it is running Doctest the current directory @@ -30,10 +36,12 @@ def temp_media_dir(tmpdir, monkeypatch, request): def pytest_report_header(config): ctx = moderngl.create_standalone_context() + info = ctx.info + ctx.release() return ( - "\nOpenGL Information", + "\nOpenGL information", "------------------", - f"vendor: {ctx.info['GL_VENDOR'].strip()}", - f"renderer: {ctx.info['GL_RENDERER'].strip()}", - f"version: {ctx.info['GL_VERSION'].strip()}\n", + f"vendor: {info['GL_VENDOR'].strip()}", + f"renderer: {info['GL_RENDERER'].strip()}", + f"version: {info['GL_VERSION'].strip()}\n", ) From 78a3b06b48cf25233c2542b82340010205b5efbd Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Wed, 26 Oct 2022 19:47:17 +0200 Subject: [PATCH 134/555] Added FAQ entry regarding failed ``manimpango`` build (#3001) * added answer about failed manimpango build * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update docs/source/faq/installation.md Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/source/faq/installation.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/source/faq/installation.md b/docs/source/faq/installation.md index 9f54b4c4b8..c60044b66a 100644 --- a/docs/source/faq/installation.md +++ b/docs/source/faq/installation.md @@ -168,3 +168,20 @@ required by Manim. Usually it can be fixed by running ```bash conda install -c conda-forge pycairo ``` + +--- + +## How can I fix the error that `manimpango/cmanimpango.c` could not be found when trying to install Manim? + +This occasionally happens when your system has to build a wheel for +[ManimPango](https://github.com/ManimCommunity/ManimPango) locally because there +is no compatible version for your architecture available on PyPI. + +Very often, the problem is resolved by installing Cython (e.g., via +`pip3 install Cython`) and then trying to reinstall Manim. If this +does not fix it: + +- Make sure that you have installed all build dependencies mentioned + in [ManimPango's README](https://github.com/ManimCommunity/ManimPango), +- and if you still run into troubles after that, please reach out to + us as described in the {doc}`Getting Help FAQs `. From 206db54af53a87985c0d243d75304ea620dad520 Mon Sep 17 00:00:00 2001 From: NotWearingPants <26556598+NotWearingPants@users.noreply.github.com> Date: Wed, 26 Oct 2022 20:51:38 +0300 Subject: [PATCH 135/555] Migrate more `os.path` to `pathlib` in tests (#2991) * Migrate more `os.path` to `pathlib` in tests * Convert test fixtures to pathlib * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix mypy errors in tests * migrate another pathlib instance Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- example_scenes/opengl.py | 3 +- manim/utils/commands.py | 3 +- tests/assert_utils.py | 10 ++-- tests/conftest.py | 10 ++-- tests/helpers/video_utils.py | 10 ++-- tests/interface/test_commands.py | 10 ++-- tests/module/utils/test_file_ops.py | 4 +- tests/opengl/test_ipython_magic_opengl.py | 2 +- tests/test_ipython_magic.py | 2 +- tests/test_logging/test_logging.py | 17 +++--- tests/test_plugins/test_plugins.py | 39 +++++++------- tests/test_scene_rendering/conftest.py | 6 +-- .../opengl/test_caching_related_opengl.py | 4 +- .../opengl/test_cli_flags_opengl.py | 49 +++++++++-------- .../test_caching_related.py | 4 +- tests/test_scene_rendering/test_cli_flags.py | 52 +++++++++---------- .../test_scene_rendering/test_file_writer.py | 2 +- tests/test_scene_rendering/test_sections.py | 17 +++--- tests/utils/logging_tester.py | 40 +++++++------- tests/utils/video_tester.py | 39 +++++++------- 20 files changed, 154 insertions(+), 169 deletions(-) diff --git a/example_scenes/opengl.py b/example_scenes/opengl.py index 729f5a0eb7..b30c5ace29 100644 --- a/example_scenes/opengl.py +++ b/example_scenes/opengl.py @@ -1,4 +1,3 @@ -import os from pathlib import Path import manim.utils.opengl as opengl @@ -462,7 +461,7 @@ def construct(self): # in whatever you've set as the image directory in # the custom_config.yml file - script_location = Path(os.path.realpath(__file__)).parent + script_location = Path(__file__).resolve().parent day_texture = ( script_location / "assets" / "1280px-Whole_world_-_land_and_oceans.jpg" ) diff --git a/manim/utils/commands.py b/manim/utils/commands.py index 51e272909c..2ec9a776dd 100644 --- a/manim/utils/commands.py +++ b/manim/utils/commands.py @@ -1,6 +1,7 @@ from __future__ import annotations import json +import os from pathlib import Path from subprocess import run from typing import Generator @@ -18,7 +19,7 @@ def capture(command, cwd=None, command_input=None): return out, err, p.returncode -def get_video_metadata(path_to_video: str) -> dict[str]: +def get_video_metadata(path_to_video: str | os.PathLike) -> dict[str]: command = [ "ffprobe", "-v", diff --git a/tests/assert_utils.py b/tests/assert_utils.py index 4a08e6365e..0d7d2417f2 100644 --- a/tests/assert_utils.py +++ b/tests/assert_utils.py @@ -8,7 +8,7 @@ def assert_file_exists(filepath: str | os.PathLike) -> None: """Assert that filepath points to an existing file. Print all the elements (files and dir) of the parent dir of the given filepath. - This is mostly to have better assert message than using a raw assert os.path.isfile(filepath). + This is mostly to have better assert message than using a raw assert filepath.is_file(). Parameters ---------- @@ -22,7 +22,7 @@ def assert_file_exists(filepath: str | os.PathLike) -> None: """ path = Path(filepath) if not path.is_file(): - elems = pformat([path.name for path in list(path.parent.iterdir())]) + elems = pformat([path.name for path in path.parent.iterdir()]) message = f"{path.absolute()} is not a file. Other elements in the parent directory are \n{elems}" raise AssertionError(message) @@ -60,14 +60,14 @@ def assert_dir_filled(dirpath: str | os.PathLike) -> None: AssertionError If dirpath does not point to a directory (if the file does exist or it's a file) or the directory is empty. """ - if len(os.listdir(dirpath)) == 0: + if not any(Path(dirpath).iterdir()): raise AssertionError(f"{dirpath} is an empty directory.") def assert_file_not_exists(filepath: str | os.PathLike) -> None: """Assert that filepath does not point to an existing file. Print all the elements (files and dir) of the parent dir of the given filepath. - This is mostly to have better assert message than using a raw assert os.path.isfile(filepath). + This is mostly to have better assert message than using a raw assert filepath.is_file(). Parameters ---------- @@ -81,7 +81,7 @@ def assert_file_not_exists(filepath: str | os.PathLike) -> None: """ path = Path(filepath) if path.is_file(): - elems = pformat([path.name for path in list(path.parent.iterdir())]) + elems = pformat([path.name for path in path.parent.iterdir()]) message = f"{path.absolute()} is a file. Other elements in the parent directory are \n{elems}" raise AssertionError(message) diff --git a/tests/conftest.py b/tests/conftest.py index 05a4e0dcd7..5b9edb656a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ from __future__ import annotations -import os import sys +from pathlib import Path import pytest @@ -55,12 +55,10 @@ def python_version(): @pytest.fixture def reset_cfg_file(): - cfgfilepath = os.path.join(os.path.dirname(__file__), "test_cli", "manim.cfg") - with open(cfgfilepath) as cfgfile: - original = cfgfile.read() + cfgfilepath = Path(__file__).parent / "test_cli" / "manim.cfg" + original = cfgfilepath.read_text() yield - with open(cfgfilepath, "w") as cfgfile: - cfgfile.write(original) + cfgfilepath.write_text(original) @pytest.fixture diff --git a/tests/helpers/video_utils.py b/tests/helpers/video_utils.py index 15bcd3590a..cc96e9acfb 100644 --- a/tests/helpers/video_utils.py +++ b/tests/helpers/video_utils.py @@ -31,7 +31,7 @@ def get_section_index(metapath: Path) -> list[dict[str, Any]]: return index -def save_control_data_from_video(path_to_video: str, name: str) -> None: +def save_control_data_from_video(path_to_video: Path, name: str) -> None: """Helper used to set up a new test that will compare videos. This will create a new ``.json`` file in ``control_data/videos_data`` that contains: @@ -43,9 +43,9 @@ def save_control_data_from_video(path_to_video: str, name: str) -> None: Parameters ---------- - path_to_video : :class:`str` + path_to_video Path to the video to extract information from. - name : :class:`str` + name Name of the test. The .json file will be named with it. See Also @@ -53,7 +53,7 @@ def save_control_data_from_video(path_to_video: str, name: str) -> None: tests/utils/video_tester.py : read control data and compare with output of test """ - orig_path_to_sections = Path(path_to_video) + orig_path_to_sections = path_to_video path_to_sections = orig_path_to_sections.parent.absolute() / "sections" tests_directory = Path(__file__).absolute().parent.parent path_control_data = Path(tests_directory) / "control_data" / "videos_data" @@ -71,6 +71,6 @@ def save_control_data_from_video(path_to_video: str, name: str) -> None: "section_index": section_index, } path_saved = Path(path_control_data) / f"{name}.json" - with open(path_saved, "w") as f: + with path_saved.open("w") as f: json.dump(data, f, indent=4) logger.info(f"Data for {name} saved in {path_saved}") diff --git a/tests/interface/test_commands.py b/tests/interface/test_commands.py index 9f4dbfe0a4..5f6f0dcb75 100644 --- a/tests/interface/test_commands.py +++ b/tests/interface/test_commands.py @@ -103,16 +103,14 @@ def test_manim_init_scene(tmp_path): ) assert not result.exception assert (Path(tmp_dir) / "my_awesome_file.py").exists() - with open(Path(tmp_dir) / "my_awesome_file.py") as f: - file_content = f.read() - assert "NamedFileTestScene(Scene):" in file_content + file_content = (Path(tmp_dir) / "my_awesome_file.py").read_text() + assert "NamedFileTestScene(Scene):" in file_content result = runner.invoke( main, command_unnamed, prog_name="manim", input="Default\n" ) assert (Path(tmp_dir) / "main.py").exists() - with open(Path(tmp_dir) / "main.py") as f: - file_content = f.read() - assert "DefaultFileTestScene(Scene):" in file_content + file_content = (Path(tmp_dir) / "main.py").read_text() + assert "DefaultFileTestScene(Scene):" in file_content def test_manim_new_command(): diff --git a/tests/module/utils/test_file_ops.py b/tests/module/utils/test_file_ops.py index 943a70f75e..b56684eb0c 100644 --- a/tests/module/utils/test_file_ops.py +++ b/tests/module/utils/test_file_ops.py @@ -12,7 +12,7 @@ def test_guarantee_existence(tmp_path: Path): guarantee_existence(test_dir) # test if file dir got created assert_dir_exists(test_dir) - with open(test_dir / "test.txt", "x") as f: + with (test_dir / "test.txt").open("x") as f: pass # test if file didn't get deleted guarantee_existence(test_dir) @@ -21,7 +21,7 @@ def test_guarantee_existence(tmp_path: Path): def test_guarantee_empty_existence(tmp_path: Path): test_dir = tmp_path / "test" test_dir.mkdir() - with open(test_dir / "test.txt", "x"): + with (test_dir / "test.txt").open("x"): pass guarantee_empty_existence(test_dir) diff --git a/tests/opengl/test_ipython_magic_opengl.py b/tests/opengl/test_ipython_magic_opengl.py index ade725cbec..ad1c61a6b5 100644 --- a/tests/opengl/test_ipython_magic_opengl.py +++ b/tests/opengl/test_ipython_magic_opengl.py @@ -29,7 +29,7 @@ def test_jupyter_file_output(tmp_path): with tempconfig({"scene_names": [scene_name], "renderer": "opengl"}): file_name = _generate_file_name() actual_path = tmp_path.with_name(file_name) - with open(actual_path, "w") as outfile: + with actual_path.open("w") as outfile: outfile.write("") assert actual_path.exists() assert actual_path.is_file() diff --git a/tests/test_ipython_magic.py b/tests/test_ipython_magic.py index b3bff2450c..91d1fba8c2 100644 --- a/tests/test_ipython_magic.py +++ b/tests/test_ipython_magic.py @@ -25,7 +25,7 @@ def test_jupyter_file_output(tmp_path): with tempconfig({"scene_names": [scene_name]}): file_name = _generate_file_name() actual_path = tmp_path.with_name(file_name) - with open(actual_path, "w") as outfile: + with actual_path.open("w") as outfile: outfile.write("") assert actual_path.exists() assert actual_path.is_file() diff --git a/tests/test_logging/test_logging.py b/tests/test_logging/test_logging.py index 2c8b94c597..1bbc59de00 100644 --- a/tests/test_logging/test_logging.py +++ b/tests/test_logging/test_logging.py @@ -1,6 +1,5 @@ from __future__ import annotations -import os from pathlib import Path from manim import capture @@ -10,14 +9,10 @@ @logs_comparison( "BasicSceneLoggingTest.txt", - os.path.join("logs", "basic_scenes_square_to_circle_SquareToCircle.log"), + "logs/basic_scenes_square_to_circle_SquareToCircle.log", ) def test_logging_to_file(tmp_path, python_version): - path_basic_scene = os.path.join( - "tests", - "test_logging", - "basic_scenes_square_to_circle.py", - ) + path_basic_scene = Path("tests/test_logging/basic_scenes_square_to_circle.py") command = [ python_version, "-m", @@ -28,7 +23,7 @@ def test_logging_to_file(tmp_path, python_version): "--log_to_file", "--media_dir", str(tmp_path), - path_basic_scene, + str(path_basic_scene), "SquareToCircle", ] _, err, exitcode = capture(command) @@ -54,10 +49,10 @@ def test_error_logging(tmp_path, python_version): @logs_comparison( "bad_tex_scene_BadTex.txt", - Path("logs/bad_tex_scene_BadTex.log"), + "logs/bad_tex_scene_BadTex.log", ) def test_tex_error_logs(tmp_path, python_version): - bad_tex_scene = os.path.join("tests", "test_logging", "bad_tex_scene.py") + bad_tex_scene = Path("tests/test_logging/bad_tex_scene.py") command = [ python_version, "-m", @@ -68,7 +63,7 @@ def test_tex_error_logs(tmp_path, python_version): "INFO", "--media_dir", str(tmp_path), - bad_tex_scene, + str(bad_tex_scene), "BadTex", ] _, err, exitcode = capture(command) diff --git a/tests/test_plugins/test_plugins.py b/tests/test_plugins/test_plugins.py index 149d705410..b73a5d6a1d 100644 --- a/tests/test_plugins/test_plugins.py +++ b/tests/test_plugins/test_plugins.py @@ -60,13 +60,12 @@ def {function_name}(): @pytest.fixture def simple_scenes_path(): - yield str(Path(__file__).parent / "simple_scenes.py") + yield Path(__file__).parent / "simple_scenes.py" def cfg_file_create(cfg_file_contents, path): file_loc = (path / "manim.cfg").absolute() - with open(file_loc, "w") as f: - f.write(cfg_file_contents) + file_loc.write_text(cfg_file_contents) return file_loc @@ -93,7 +92,7 @@ def test_plugin_warning(tmp_path, python_version, simple_scenes_path): str(cfg_file.parent), "--config_file", str(cfg_file), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command, cwd=str(cfg_file.parent)) @@ -110,21 +109,19 @@ def _create_plugin(entry_point, class_name, function_name, all_dec=""): entry_point = entry_point.format(plugin_name=plugin_name) module_dir = plugin_dir / plugin_name module_dir.mkdir(parents=True) - with open(module_dir / "__init__.py", "w") as f: - f.write( - plugin_init_template.format( - class_name=class_name, - function_name=function_name, - all_dec=all_dec, - ), - ) - with open(plugin_dir / "pyproject.toml", "w") as f: - f.write( - plugin_pyproject_template.format( - plugin_name=plugin_name, - plugin_entrypoint=entry_point, - ), - ) + (module_dir / "__init__.py").write_text( + plugin_init_template.format( + class_name=class_name, + function_name=function_name, + all_dec=all_dec, + ), + ) + (plugin_dir / "pyproject.toml").write_text( + plugin_pyproject_template.format( + plugin_name=plugin_name, + plugin_entrypoint=entry_point, + ), + ) command = [ python_version, "-m", @@ -173,7 +170,7 @@ def test_plugin_function_like( str(cfg_file.parent), "--config_file", str(cfg_file), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command, cwd=str(cfg_file.parent)) @@ -251,7 +248,7 @@ def test_plugin_with_all(tmp_path, create_plugin, python_version, simple_scenes_ str(cfg_file.parent), "--config_file", str(cfg_file), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command, cwd=str(cfg_file.parent)) diff --git a/tests/test_scene_rendering/conftest.py b/tests/test_scene_rendering/conftest.py index 9748edab03..d7ae208524 100644 --- a/tests/test_scene_rendering/conftest.py +++ b/tests/test_scene_rendering/conftest.py @@ -9,12 +9,12 @@ @pytest.fixture def manim_cfg_file(): - return str(Path(__file__).parent / "manim.cfg") + return Path(__file__).parent / "manim.cfg" @pytest.fixture def simple_scenes_path(): - return str(Path(__file__).parent / "simple_scenes.py") + return Path(__file__).parent / "simple_scenes.py" @pytest.fixture @@ -46,7 +46,7 @@ def disabling_caching(): @pytest.fixture def infallible_scenes_path(): - return str(Path(__file__).parent / "infallible_scenes.py") + return Path(__file__).parent / "infallible_scenes.py" @pytest.fixture diff --git a/tests/test_scene_rendering/opengl/test_caching_related_opengl.py b/tests/test_scene_rendering/opengl/test_caching_related_opengl.py index 3bc5179574..c9c82a449b 100644 --- a/tests/test_scene_rendering/opengl/test_caching_related_opengl.py +++ b/tests/test_scene_rendering/opengl/test_caching_related_opengl.py @@ -29,7 +29,7 @@ def test_wait_skip(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "-n", "3", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -56,7 +56,7 @@ def test_play_skip(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "-n", "3", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) diff --git a/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py b/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py index 876b011bd0..8f36200dd1 100644 --- a/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py +++ b/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py @@ -1,6 +1,5 @@ from __future__ import annotations -import os import sys import numpy as np @@ -30,7 +29,7 @@ def test_basic_scene_with_default_values(tmp_path, manim_cfg_file, simple_scenes "--write_to_movie", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -91,7 +90,7 @@ def test_basic_scene_l_flag(tmp_path, manim_cfg_file, simple_scenes_path): "--write_to_movie", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -116,7 +115,7 @@ def test_n_flag(tmp_path, simple_scenes_path): "-n 3,6", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] _, err, exit_code = capture(command) @@ -136,7 +135,7 @@ def test_s_flag_no_animations(tmp_path, manim_cfg_file, simple_scenes_path): "-s", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -161,7 +160,7 @@ def test_image_output_for_static_scene(tmp_path, manim_cfg_file, simple_scenes_p "-ql", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -189,7 +188,7 @@ def test_no_image_output_with_interactive_embed( "-ql", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -198,7 +197,7 @@ def test_no_image_output_with_interactive_embed( exists = (tmp_path / "videos").exists() assert not exists, "running manim with static scene rendered a video" - is_empty = len(os.listdir(tmp_path / "images" / "simple_scenes")) == 0 + is_empty = not any((tmp_path / "images" / "simple_scenes").iterdir()) assert ( is_empty ), "running manim static scene with interactive embed rendered an image" @@ -218,7 +217,7 @@ def test_no_default_image_output_with_non_static_scene( "-ql", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -227,7 +226,7 @@ def test_no_default_image_output_with_non_static_scene( exists = (tmp_path / "videos").exists() assert not exists, "running manim with static scene rendered a video" - is_empty = len(os.listdir(tmp_path / "images" / "simple_scenes")) == 0 + is_empty = not any((tmp_path / "images" / "simple_scenes").iterdir()) assert ( is_empty ), "running manim static scene with interactive embed rendered an image" @@ -248,14 +247,14 @@ def test_image_output_for_static_scene_with_write_to_movie( "-ql", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) assert exit_code == 0, err - exists = len(os.listdir(tmp_path / "videos")) == 0 - assert not exists, "running manim with static scene rendered a video" + is_empty = not any((tmp_path / "videos").iterdir()) + assert not is_empty, "running manim with static scene rendered a video" is_empty = not any((tmp_path / "images" / "simple_scenes").iterdir()) assert not is_empty, "running manim without animations did not render an image" @@ -274,7 +273,7 @@ def test_s_flag(tmp_path, manim_cfg_file, simple_scenes_path): "-s", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -302,7 +301,7 @@ def test_r_flag(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "-r", "200,100", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -330,7 +329,7 @@ def test_a_flag(tmp_path, manim_cfg_file, infallible_scenes_path): "--media_dir", str(tmp_path), "-a", - infallible_scenes_path, + str(infallible_scenes_path), ] out, err, exit_code = capture(command) assert exit_code == 0, err @@ -369,7 +368,7 @@ def test_custom_folders(tmp_path, manim_cfg_file, simple_scenes_path): "--media_dir", str(tmp_path), "--custom_folders", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -423,7 +422,7 @@ def test_gif_format_output(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "--format", "gif", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -461,7 +460,7 @@ def test_mp4_format_output(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "--format", "mp4", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -505,7 +504,7 @@ def test_videos_not_created_when_png_format_set( str(tmp_path), "--format", "png", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -549,7 +548,7 @@ def test_images_are_created_when_png_format_set( str(tmp_path), "--format", "png", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -580,7 +579,7 @@ def test_images_are_zero_padded_when_zero_pad_set( "png", "--zero_pad", "3", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -610,7 +609,7 @@ def test_webm_format_output(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "--format", "webm", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -650,7 +649,7 @@ def test_default_format_output_for_transparent_flag( "--media_dir", str(tmp_path), "-t", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -686,7 +685,7 @@ def test_mov_can_be_set_as_output_format(tmp_path, manim_cfg_file, simple_scenes str(tmp_path), "--format", "mov", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) diff --git a/tests/test_scene_rendering/test_caching_related.py b/tests/test_scene_rendering/test_caching_related.py index ae5b9a5c17..af2bb1ff9e 100644 --- a/tests/test_scene_rendering/test_caching_related.py +++ b/tests/test_scene_rendering/test_caching_related.py @@ -26,7 +26,7 @@ def test_wait_skip(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "-n", "3", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -50,7 +50,7 @@ def test_play_skip(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "-n", "3", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) diff --git a/tests/test_scene_rendering/test_cli_flags.py b/tests/test_scene_rendering/test_cli_flags.py index d48f5aac3f..20bdf4faba 100644 --- a/tests/test_scene_rendering/test_cli_flags.py +++ b/tests/test_scene_rendering/test_cli_flags.py @@ -1,6 +1,5 @@ from __future__ import annotations -import os import sys import numpy as np @@ -28,7 +27,7 @@ def test_basic_scene_with_default_values(tmp_path, manim_cfg_file, simple_scenes "manim", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -86,7 +85,7 @@ def test_basic_scene_l_flag(tmp_path, manim_cfg_file, simple_scenes_path): "-ql", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -108,7 +107,7 @@ def test_n_flag(tmp_path, simple_scenes_path): "-n 3,6", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] _, err, exit_code = capture(command) @@ -126,7 +125,7 @@ def test_s_flag_no_animations(tmp_path, manim_cfg_file, simple_scenes_path): "-s", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -150,7 +149,7 @@ def test_s_flag(tmp_path, manim_cfg_file, simple_scenes_path): "-s", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -176,7 +175,7 @@ def test_s_flag_opengl_renderer(tmp_path, manim_cfg_file, simple_scenes_path): "opengl", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -202,7 +201,7 @@ def test_r_flag(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "-r", "200,100", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -227,7 +226,7 @@ def test_a_flag(tmp_path, manim_cfg_file, infallible_scenes_path): "--media_dir", str(tmp_path), "-a", - infallible_scenes_path, + str(infallible_scenes_path), ] _, err, exit_code = capture(command) assert exit_code == 0, err @@ -264,7 +263,7 @@ def test_custom_folders(tmp_path, manim_cfg_file, simple_scenes_path): "--media_dir", str(tmp_path), "--custom_folders", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -291,7 +290,7 @@ def test_custom_output_name_gif(tmp_path, simple_scenes_path): "--format=gif", "-o", custom_name, - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -337,7 +336,7 @@ def test_custom_output_name_mp4(tmp_path, simple_scenes_path): str(tmp_path), "-o", custom_name, - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -406,7 +405,7 @@ def test_gif_format_output(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "--format", "gif", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -442,7 +441,7 @@ def test_mp4_format_output(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "--format", "mp4", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -484,7 +483,7 @@ def test_videos_not_created_when_png_format_set( str(tmp_path), "--format", "png", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -526,7 +525,7 @@ def test_images_are_created_when_png_format_set( str(tmp_path), "--format", "png", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -555,7 +554,7 @@ def test_images_are_created_when_png_format_set_for_opengl( str(tmp_path), "--format", "png", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -584,7 +583,7 @@ def test_images_are_zero_padded_when_zero_pad_set( "png", "--zero_pad", "3", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -620,7 +619,7 @@ def test_images_are_zero_padded_when_zero_pad_set_for_opengl( "png", "--zero_pad", "3", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -648,7 +647,7 @@ def test_webm_format_output(tmp_path, manim_cfg_file, simple_scenes_path): str(tmp_path), "--format", "webm", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -685,7 +684,7 @@ def test_default_format_output_for_transparent_flag( "--media_dir", str(tmp_path), "-t", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -719,7 +718,7 @@ def test_mov_can_be_set_as_output_format(tmp_path, manim_cfg_file, simple_scenes str(tmp_path), "--format", "mov", - simple_scenes_path, + str(simple_scenes_path), scene_name, ] out, err, exit_code = capture(command) @@ -747,13 +746,12 @@ def test_mov_can_be_set_as_output_format(tmp_path, manim_cfg_file, simple_scenes ) def test_input_file_via_cfg(tmp_path, manim_cfg_file, simple_scenes_path): scene_name = "SquareToCircle" - with open(os.path.join(tmp_path, "manim.cfg"), "w") as file: - file.write( - f""" + (tmp_path / "manim.cfg").write_text( + f""" [CLI] input_file = {simple_scenes_path} - """ - ) + """ + ) command = [ sys.executable, diff --git a/tests/test_scene_rendering/test_file_writer.py b/tests/test_scene_rendering/test_file_writer.py index f7ead0d483..8067dcee4c 100644 --- a/tests/test_scene_rendering/test_file_writer.py +++ b/tests/test_scene_rendering/test_file_writer.py @@ -18,7 +18,7 @@ def test_unicode_partial_movie(tmpdir, simple_scenes_path): "manim", "--media_dir", str(tmpdir / unicode_str), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] diff --git a/tests/test_scene_rendering/test_sections.py b/tests/test_scene_rendering/test_sections.py index 4291154dfc..049802f3cb 100644 --- a/tests/test_scene_rendering/test_sections.py +++ b/tests/test_scene_rendering/test_sections.py @@ -1,6 +1,5 @@ from __future__ import annotations -import os import sys import pytest @@ -25,15 +24,15 @@ def test_no_sections(tmp_path, manim_cfg_file, simple_scenes_path): "-ql", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] _, err, exit_code = capture(command) assert exit_code == 0, err - scene_dir = os.path.join(tmp_path, "videos", "simple_scenes", "480p15") + scene_dir = tmp_path / "videos" / "simple_scenes" / "480p15" assert_dir_exists(scene_dir) - assert_dir_not_exists(os.path.join(scene_dir, "sections")) + assert_dir_not_exists(scene_dir / "sections") @pytest.mark.slow @@ -51,15 +50,15 @@ def test_sections(tmp_path, manim_cfg_file, simple_scenes_path): "--save_sections", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] _, err, exit_code = capture(command) assert exit_code == 0, err - scene_dir = os.path.join(tmp_path, "videos", "simple_scenes", "480p15") + scene_dir = tmp_path / "videos" / "simple_scenes" / "480p15" assert_dir_exists(scene_dir) - assert_dir_exists(os.path.join(scene_dir, "sections")) + assert_dir_exists(scene_dir / "sections") @pytest.mark.slow @@ -77,7 +76,7 @@ def test_many_sections(tmp_path, manim_cfg_file, simple_scenes_path): "--save_sections", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] _, err, exit_code = capture(command) @@ -99,7 +98,7 @@ def test_skip_animations(tmp_path, manim_cfg_file, simple_scenes_path): "--save_sections", "--media_dir", str(tmp_path), - simple_scenes_path, + str(simple_scenes_path), scene_name, ] _, err, exit_code = capture(command) diff --git a/tests/utils/logging_tester.py b/tests/utils/logging_tester.py index 5e40f42195..d2501c8c2a 100644 --- a/tests/utils/logging_tester.py +++ b/tests/utils/logging_tester.py @@ -4,16 +4,16 @@ import json import os from functools import wraps +from pathlib import Path import pytest -def _check_logs(reference_logfile, generated_logfile): - with open(reference_logfile) as reference_logs, open( - generated_logfile, - ) as generated_logs: - reference_logs = reference_logs.readlines() - generated_logs = generated_logs.readlines() +def _check_logs(reference_logfile_path: Path, generated_logfile_path: Path) -> None: + with reference_logfile_path.open() as reference_logfile: + reference_logs = reference_logfile.readlines() + with generated_logfile_path.open() as generated_logfile: + generated_logs = generated_logfile.readlines() diff = abs(len(reference_logs) - len(generated_logs)) if len(reference_logs) != len(generated_logs): msg_assert = "" @@ -26,7 +26,7 @@ def _check_logs(reference_logfile, generated_logfile): for log in generated_logs[len(reference_logs) :]: msg_assert += log msg_assert += f"\nPath of reference log: {reference_logfile}\nPath of generated logs: {generated_logfile}" - pytest.fail(msg_assert + reference_logfile + " " + generated_logfile) + pytest.fail(msg_assert) for index, ref, gen in zip(itertools.count(), reference_logs, generated_logs): # As they are string, we only need to check if they are equal. If they are not, we then compute a more precise difference, to debug. @@ -46,17 +46,19 @@ def _check_logs(reference_logfile, generated_logfile): ) -def logs_comparison(control_data_file, log_path_from_media_dir): +def logs_comparison( + control_data_file: str | os.PathLike, log_path_from_media_dir: str | os.PathLike +): """Decorator used for any test that needs to check logs. Parameters ---------- - control_data_file : :class:`str` + control_data_file Name of the control data file, i.e. .log that will be compared to the outputted logs. .. warning:: You don't have to pass the path here. .. example:: "SquareToCircleWithLFlag.log" - log_path_from_media_dir : :class:`str` + log_path_from_media_dir The path of the .log generated, from the media dir. Example: /logs/Square.log. Returns @@ -65,31 +67,29 @@ def logs_comparison(control_data_file, log_path_from_media_dir): The test wrapped with which we are going to make the comparison. """ + control_data_file = Path(control_data_file) + log_path_from_media_dir = Path(log_path_from_media_dir) + def decorator(f): @wraps(f) def wrapper(*args, **kwargs): # NOTE : Every args goes seemingly in kwargs instead of args; this is perhaps Pytest. result = f(*args, **kwargs) tmp_path = kwargs["tmp_path"] - tests_directory = os.path.dirname( - os.path.dirname(os.path.abspath(__file__)), - ) - control_data_path = os.path.join( - tests_directory, - "control_data", - "logs_data", - control_data_file, + tests_directory = Path(__file__).absolute().parent.parent + control_data_path = ( + tests_directory / "control_data" / "logs_data" / control_data_file ) path_log_generated = tmp_path / log_path_from_media_dir # The following will say precisely which subdir does not exist. - if not os.path.exists(path_log_generated): + if not path_log_generated.exists(): for parent in reversed(path_log_generated.parents): if not parent.exists(): pytest.fail( f"'{parent.name}' does not exist in '{parent.parent}' (which exists). ", ) break - _check_logs(control_data_path, str(path_log_generated)) + _check_logs(control_data_path, path_log_generated) return result return wrapper diff --git a/tests/utils/video_tester.py b/tests/utils/video_tester.py index 643a82b8f6..2b74e65409 100644 --- a/tests/utils/video_tester.py +++ b/tests/utils/video_tester.py @@ -4,6 +4,7 @@ import os from functools import wraps from pathlib import Path +from typing import Any from manim import get_video_metadata @@ -11,12 +12,12 @@ from ..helpers.video_utils import get_section_dir_layout, get_section_index -def load_control_data(path_to_data): - with open(path_to_data) as f: +def load_control_data(path_to_data: Path) -> Any: + with path_to_data.open() as f: return json.load(f) -def check_video_data(path_control_data, path_video_gen): +def check_video_data(path_control_data: Path, path_video_gen: Path) -> None: """Compare control data with generated output. Used abbreviations: exp -> expected @@ -25,7 +26,7 @@ def check_video_data(path_control_data, path_video_gen): meta -> metadata """ # movie file specification - path_sec_gen = Path(path_video_gen).parent.absolute() / "sections" + path_sec_gen = path_video_gen.parent.absolute() / "sections" control_data = load_control_data(path_control_data) movie_meta_gen = get_video_metadata(path_video_gen) movie_meta_exp = control_data["movie_metadata"] @@ -48,7 +49,7 @@ def check_video_data(path_control_data, path_video_gen): raise AssertionError(f"Sections don't match:\n{mismatch}") # sections index file - scene_name = Path(path_video_gen).stem + scene_name = path_video_gen.stem path_sec_index_gen = path_sec_gen / f"{scene_name}.json" sec_index_gen = get_section_index(path_sec_index_gen) sec_index_exp = control_data["section_index"] @@ -67,7 +68,9 @@ def check_video_data(path_control_data, path_video_gen): ) -def video_comparison(control_data_file, scene_path_from_media_dir): +def video_comparison( + control_data_file: str | os.PathLike, scene_path_from_media_dir: str | os.PathLike +): """Decorator used for any test that needs to check a rendered scene/video. .. warning:: @@ -76,11 +79,11 @@ def video_comparison(control_data_file, scene_path_from_media_dir): Parameters ---------- - control_data_file : :class:`str` + control_data_file Name of the control data file, i.e. the .json containing all the pre-rendered references of the scene tested. .. warning:: You don't have to pass the path here. - scene_path_from_media_dir : :class:`str` + scene_path_from_media_dir The path of the scene generated, from the media dir. Example: /videos/1080p60/SquareToCircle.mp4. See Also @@ -88,31 +91,29 @@ def video_comparison(control_data_file, scene_path_from_media_dir): tests/helpers/video_utils.py : create control data """ + control_data_file = Path(control_data_file) + scene_path_from_media_dir = Path(scene_path_from_media_dir) + def decorator(f): @wraps(f) def wrapper(*args, **kwargs): # NOTE : Every args goes seemingly in kwargs instead of args; this is perhaps Pytest. result = f(*args, **kwargs) tmp_path = kwargs["tmp_path"] - tests_directory = os.path.dirname( - os.path.dirname(os.path.abspath(__file__)), - ) - path_control_data = os.path.join( - tests_directory, - "control_data", - "videos_data", - control_data_file, + tests_directory = Path(__file__).absolute().parent.parent + path_control_data = ( + tests_directory / "control_data" / "videos_data" / control_data_file ) path_video_gen = tmp_path / scene_path_from_media_dir - if not os.path.exists(path_video_gen): + if not path_video_gen.exists(): for parent in reversed(path_video_gen.parents): if not parent.exists(): raise AssertionError( f"'{parent.name}' does not exist in '{parent.parent}' (which exists). ", ) # TODO: use when pytest --set_test option - # save_control_data_from_video(path_video_gen, control_data_file[:-5]) - check_video_data(path_control_data, str(path_video_gen)) + # save_control_data_from_video(path_video_gen, control_data_file.stem) + check_video_data(path_control_data, path_video_gen) return result return wrapper From b3b90ef3468365fa9c97ccc2e722dd742b79b1ee Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Wed, 26 Oct 2022 19:52:08 +0200 Subject: [PATCH 136/555] Rewrote unstable tests for :mod:`.text_mobject` to be non-graphical (#2982) * removed text test control data * rewrote text tests to be non-graphical * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../control_data/text/Text2Color.npz | Bin 8920 -> 0 bytes .../text/text_color_inheritance.npz | Bin 9280 -> 0 bytes tests/test_graphical_units/test_text.py | 35 +++++++++--------- 3 files changed, 17 insertions(+), 18 deletions(-) delete mode 100644 tests/test_graphical_units/control_data/text/Text2Color.npz delete mode 100644 tests/test_graphical_units/control_data/text/text_color_inheritance.npz diff --git a/tests/test_graphical_units/control_data/text/Text2Color.npz b/tests/test_graphical_units/control_data/text/Text2Color.npz deleted file mode 100644 index 590b905174ade83086644bd0f7e1bee14da35a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8920 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 WKH$B-ZEStV{PZz@E^Xc=^M3(CX>Sz( diff --git a/tests/test_graphical_units/test_text.py b/tests/test_graphical_units/test_text.py index 4d319a27bd..606ff4251f 100644 --- a/tests/test_graphical_units/test_text.py +++ b/tests/test_graphical_units/test_text.py @@ -1,35 +1,34 @@ import pytest +from colour import Color -from manim import * -from manim.utils.testing.frames_comparison import frames_comparison +from manim import RED, MarkupText, Text, VGroup, VMobject __module_test__ = "text" -@pytest.mark.skipif( - not sys.platform.startswith("linux"), - reason="MacOS and Windows render fonts differently, so they need separate comparison data.", -) -@frames_comparison -def test_Text2Color(scene): - scene.add(Text("this is a text with spaces!", t2c={"spaces": RED})) +def test_Text2Color(): + txt = Text( + "this is a text with spaces!", + t2c={"spaces": RED}, + stroke_width=1, + 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") # "!" -@pytest.mark.skipif( - not sys.platform.startswith("linux"), - reason="MacOS and Windows render fonts differently, so they need separate comparison data.", -) -@frames_comparison -def test_text_color_inheritance(scene): +def test_text_color_inheritance(): """Test that Text and MarkupText correctly inherit colour from their parent class.""" VMobject.set_default(color=RED) # set both to a singular font so that the tests agree. text = Text("test_color_inheritance", font="Dejavu Sans") markup_text = MarkupText("test_color_inheritance", font="Dejavu Sans") - vgr = VGroup(text, markup_text).arrange() + + assert all(char.fill_color == Color(RED) for char in text) + assert all(char.fill_color == Color(RED) for char in markup_text) # reset the default color so that future tests aren't affected by this change. VMobject.set_default() - - scene.add(vgr) From 7514e4a7b434d7eb15407f89003f643776912ce1 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 28 Oct 2022 16:49:30 +0200 Subject: [PATCH 137/555] added one asterisk to make section underline long enough (#3004) --- docs/source/installation/windows.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/installation/windows.rst b/docs/source/installation/windows.rst index 7c8a3e94c9..a17cc6f947 100644 --- a/docs/source/installation/windows.rst +++ b/docs/source/installation/windows.rst @@ -55,7 +55,7 @@ the :ref:`optional dependencies ` section below. Winget -***** +****** While there is no recipe for installing Manim with Winget directly, you can install all requirements by running: From 44ce03165891702fd5ca7f985795d27d865ce2f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Eertmans?= Date: Fri, 28 Oct 2022 23:39:38 +0200 Subject: [PATCH 138/555] Added documentation and example for :class:`.CyclicReplace` (#2978) * docs: CycleTransform documentation & example * feat: repeat cyclic animation * Update manim/animation/transform.py Co-authored-by: Benjamin Hackl * Update manim/animation/transform.py Co-authored-by: Benjamin Hackl * Update manim/animation/transform.py Co-authored-by: Benjamin Hackl * Update manim/animation/transform.py Co-authored-by: Benjamin Hackl * Update manim/animation/transform.py Co-authored-by: Benjamin Hackl * Update manim/animation/transform.py Co-authored-by: Benjamin Hackl Co-authored-by: Benjamin Hackl --- manim/animation/transform.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/manim/animation/transform.py b/manim/animation/transform.py index cdf44f409f..d4584c8968 100644 --- a/manim/animation/transform.py +++ b/manim/animation/transform.py @@ -691,6 +691,37 @@ def _init_path_func(self) -> None: class CyclicReplace(Transform): + """An animation moving mobjects cyclically. + + In particular, this means: the first mobject takes the place + of the second mobject, the second one takes the place of + the third mobject, and so on. The last mobject takes the + place of the first one. + + Parameters + ---------- + mobjects + List of mobjects to be transformed. + path_arc + The angle of the arc (in radians) that the mobjects will follow to reach + their target. + kwargs + Further keyword arguments that are passed to :class:`.Transform`. + + Examples + -------- + .. manim :: CyclicReplaceExample + + class CyclicReplaceExample(Scene): + def construct(self): + group = VGroup(Square(), Circle(), Triangle(), Star()) + group.arrange(RIGHT) + self.add(group) + + for _ in range(4): + self.play(CyclicReplace(*group)) + """ + def __init__( self, *mobjects: Mobject, path_arc: float = 90 * DEGREES, **kwargs ) -> None: From 3c172e2a8a0738aa8e700ee44eeb9579e1dcf860 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 29 Oct 2022 09:33:29 +0200 Subject: [PATCH 139/555] Fixed setting ``run_time`` of :class:`.Succession` after creating the animation object (#3003) * fixed run_time scaling of Succession * added test for Succession run_time set after initialization --- manim/animation/composition.py | 2 +- tests/module/animation/test_composition.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/manim/animation/composition.py b/manim/animation/composition.py index 4c4f1db52a..f3848b6a76 100644 --- a/manim/animation/composition.py +++ b/manim/animation/composition.py @@ -166,7 +166,7 @@ def next_animation(self) -> None: self.update_active_animation(self.active_index + 1) def interpolate(self, alpha: float) -> None: - current_time = self.rate_func(alpha) * self.run_time + current_time = self.rate_func(alpha) * self.max_end_time while self.active_end_time is not None and current_time >= self.active_end_time: self.next_animation() if self.active_animation is not None and self.active_start_time is not None: diff --git a/tests/module/animation/test_composition.py b/tests/module/animation/test_composition.py index 9f26474558..73cc6b0d60 100644 --- a/tests/module/animation/test_composition.py +++ b/tests/module/animation/test_composition.py @@ -90,6 +90,26 @@ def test_succession_in_succession_timing(): assert nested_succession.active_animation is None +def test_timescaled_succession(): + s1, s2, s3 = Square(), Square(), Square() + anim = Succession( + FadeIn(s1, run_time=2), + FadeIn(s2), + FadeIn(s3), + ) + anim.scene = MagicMock() + anim.run_time = 42 + anim.begin() + anim.interpolate(0.2) + assert anim.active_index == 0 + anim.interpolate(0.4) + assert anim.active_index == 0 + anim.interpolate(0.6) + assert anim.active_index == 1 + anim.interpolate(0.8) + assert anim.active_index == 2 + + def test_animationbuilder_in_group(): sqr = Square() circ = Circle() From 9d1f066d637cb15baea10e6907ab85efff8fb36f Mon Sep 17 00:00:00 2001 From: NotWearingPants <26556598+NotWearingPants@users.noreply.github.com> Date: Sun, 30 Oct 2022 09:28:26 +0200 Subject: [PATCH 140/555] Migrate more `os.path` to `pathlib` (#2980) * Migrate more `os.path` to `pathlib` * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix type errors with recent pathlib code * pathlib fixes * more pathlib fixes * remove unused imports introduced by pathlib migration * convert `open()` calls to pathlib * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Migrate tex_file_writing to pathlib * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * converted more old code to pathlib, and fixed a bug in module_ops * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix test failures * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix test failures * Apply suggestions from code review Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/_config/utils.py | 18 ++-- manim/cli/cfg/group.py | 2 +- manim/cli/init/commands.py | 24 +++--- manim/cli/new/group.py | 15 ++-- manim/mobject/svg/svg_mobject.py | 12 +-- manim/mobject/text/code_mobject.py | 38 +++------ manim/renderer/shader.py | 30 ++++--- manim/renderer/shader_wrapper.py | 28 +++---- manim/scene/scene_file_writer.py | 45 +++++----- manim/scene/section.py | 6 +- manim/utils/docbuild/manim_directive.py | 44 +++++----- manim/utils/file_ops.py | 19 +++-- manim/utils/images.py | 6 +- manim/utils/ipython_magic.py | 2 +- manim/utils/module_ops.py | 8 +- manim/utils/tex.py | 13 +-- manim/utils/tex_file_writing.py | 82 +++++++++---------- scripts/dev_changelog.py | 19 ++--- scripts/extract_frames.py | 9 +- .../opengl/test_cli_flags_opengl.py | 24 ++---- tests/test_scene_rendering/test_cli_flags.py | 40 +++------ 21 files changed, 212 insertions(+), 272 deletions(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 3b0dab6283..90210b9157 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -74,7 +74,9 @@ def config_file_paths() -> list[Path]: return [library_wide, user_wide, folder_wide] -def make_config_parser(custom_file: str = None) -> configparser.ConfigParser: +def make_config_parser( + custom_file: str | os.PathLike | None = None, +) -> configparser.ConfigParser: """Make a :class:`ConfigParser` object and load any ``.cfg`` files. The user-wide file, if it exists, overrides the library-wide file. The @@ -85,7 +87,7 @@ def make_config_parser(custom_file: str = None) -> configparser.ConfigParser: Parameters ---------- - custom_file : :class:`str` + custom_file Path to a custom config file. If used, the folder-wide file in the relevant directory will be ignored, if it exists. If None, the folder-wide file will be used, if it exists. @@ -108,10 +110,10 @@ def make_config_parser(custom_file: str = None) -> configparser.ConfigParser: # read_file() before calling read() for any optional files." # https://docs.python.org/3/library/configparser.html#configparser.ConfigParser.read parser = configparser.ConfigParser() - with open(library_wide) as file: + with library_wide.open() as file: parser.read_file(file) # necessary file - other_files = [user_wide, custom_file if custom_file else folder_wide] + other_files = [user_wide, Path(custom_file) if custom_file else folder_wide] parser.read(other_files) # optional files return parser @@ -809,7 +811,7 @@ def digest_args(self, args: argparse.Namespace) -> ManimConfig: return self - def digest_file(self, filename: str) -> ManimConfig: + def digest_file(self, filename: str | os.PathLike) -> ManimConfig: """Process the config options present in a ``.cfg`` file. This method processes a single ``.cfg`` file, whereas @@ -818,7 +820,7 @@ def digest_file(self, filename: str) -> ManimConfig: Parameters ---------- - filename : :class:`str` + filename Path to the ``.cfg`` file. Returns @@ -840,11 +842,11 @@ def digest_file(self, filename: str) -> ManimConfig: multiple times. """ - if not os.path.isfile(filename): + if not Path(filename).is_file(): raise FileNotFoundError( errno.ENOENT, "Error: --config_file could not find a valid config file.", - filename, + str(filename), ) return self.digest_parser(make_config_parser(filename)) diff --git a/manim/cli/cfg/group.py b/manim/cli/cfg/group.py index eea9185e32..44fdff5ac6 100644 --- a/manim/cli/cfg/group.py +++ b/manim/cli/cfg/group.py @@ -233,7 +233,7 @@ def write(level: str = None, openfile: bool = False) -> None: cfg_file_path = config_paths[2] guarantee_existence(config_paths[2].parents[0]) console.print(CWD_CONFIG_MSG) - with open(cfg_file_path, "w") as fp: + with cfg_file_path.open("w") as fp: parser.write(fp) if openfile: open_file(cfg_file_path) diff --git a/manim/cli/init/commands.py b/manim/cli/init/commands.py index 8124e687f1..ef4a20188e 100644 --- a/manim/cli/init/commands.py +++ b/manim/cli/init/commands.py @@ -74,7 +74,7 @@ def update_cfg(cfg_dict, project_cfg_path): else: cli_config[key] = str(value) - with open(project_cfg_path, "w") as conf: + with project_cfg_path.open("w") as conf: config.write(conf) @@ -154,32 +154,28 @@ def scene(**args): type=click.Choice(get_template_names(), False), default="Default", ) - scene = "" - with open(Path.resolve(get_template_path() / f"{template_name}.mtp")) as f: - scene = f.read() - scene = scene.replace(template_name + "Template", args["scene_name"], 1) + scene = (get_template_path() / f"{template_name}.mtp").resolve().read_text() + scene = scene.replace(template_name + "Template", args["scene_name"], 1) if args["file_name"]: - if args["file_name"][-3:] == ".py": - file_name = args["file_name"] - else: - file_name = args["file_name"] + ".py" + file_name = Path(args["file_name"]) + + if file_name.suffix != ".py": + file_name = file_name.with_suffix(file_name.suffix + ".py") - file_name = Path(file_name) if file_name.is_file(): # file exists so we are going to append new scene to that file - with open(file_name, "a") as f: + with file_name.open("a") as f: f.write("\n\n\n" + scene) else: # file does not exist so we create a new file, append the scene and prepend the import statement - with open(file_name, "w") as f: - f.write("\n\n\n" + scene) + file_name.write_text("\n\n\n" + scene) add_import_statement(file_name) else: # file name is not provided so we assume it is main.py # if main.py does not exist we do not continue - with open(Path("main.py"), "a") as f: + with Path("main.py").open("a") as f: f.write("\n\n\n" + scene) diff --git a/manim/cli/new/group.py b/manim/cli/new/group.py index 32fde0dfe9..8406982615 100644 --- a/manim/cli/new/group.py +++ b/manim/cli/new/group.py @@ -67,7 +67,7 @@ def update_cfg(cfg_dict, project_cfg_path): else: cli_config[key] = str(value) - with open(project_cfg_path, "w") as conf: + with project_cfg_path.open("w") as conf: config.write(conf) @@ -150,28 +150,25 @@ def scene(**args): type=click.Choice(get_template_names(), False), default="Default", ) - scene = "" - with open(Path.resolve(get_template_path() / f"{template_name}.mtp")) as f: - scene = f.read() - scene = scene.replace(template_name + "Template", args["scene_name"], 1) + scene = (get_template_path() / f"{template_name}.mtp").resolve().read_text() + scene = scene.replace(template_name + "Template", args["scene_name"], 1) if args["file_name"]: file_name = Path(args["file_name"] + ".py") if file_name.is_file(): # file exists so we are going to append new scene to that file - with open(file_name, "a") as f: + with file_name.open("a") as f: f.write("\n\n\n" + scene) else: # file does not exist so we create a new file, append the scene and prepend the import statement - with open(file_name, "w") as f: - f.write("\n\n\n" + scene) + file_name.write_text("\n\n\n" + scene) add_import_statement(file_name) else: # file name is not provided so we assume it is main.py # if main.py does not exist we do not continue - with open(Path("main.py"), "a") as f: + with Path("main.py").open("a") as f: f.write("\n\n\n" + scene) diff --git a/manim/mobject/svg/svg_mobject.py b/manim/mobject/svg/svg_mobject.py index 077ccaa48d..e92f1baa45 100644 --- a/manim/mobject/svg/svg_mobject.py +++ b/manim/mobject/svg/svg_mobject.py @@ -3,6 +3,7 @@ from __future__ import annotations import os +from pathlib import Path from xml.etree import ElementTree as ET import numpy as np @@ -86,7 +87,7 @@ class SVGMobject(VMobject, metaclass=ConvertToOpenGL): def __init__( self, - file_name: str | None = None, + file_name: str | os.PathLike | None = None, should_center: bool = True, height: float | None = 2, width: float | None = None, @@ -104,7 +105,7 @@ def __init__( super().__init__(color=None, stroke_color=None, fill_color=None, **kwargs) # process keyword arguments - self.file_name = file_name + self.file_name = Path(file_name) if file_name is not None else None self.should_center = should_center self.svg_height = height @@ -182,18 +183,17 @@ def generate_mobject(self) -> None: element_tree = ET.parse(file_path) new_tree = self.modify_xml_tree(element_tree) # Create a temporary svg file to dump modified svg to be parsed - root, ext = os.path.splitext(file_path) - modified_file_path = root + "_" + ext + modified_file_path = file_path.with_name(f"{file_path.stem}_{file_path.suffix}") new_tree.write(modified_file_path) svg = se.SVG.parse(modified_file_path) - os.remove(modified_file_path) + modified_file_path.unlink() mobjects = self.get_mobjects_from(svg) self.add(*mobjects) self.flip(RIGHT) # Flip y - def get_file_path(self) -> str: + def get_file_path(self) -> Path: """Search for an existing file based on the specified file name.""" if self.file_name is None: raise ValueError("Must specify file for SVGMobject") diff --git a/manim/mobject/text/code_mobject.py b/manim/mobject/text/code_mobject.py index 229274be0a..fcb42150cd 100644 --- a/manim/mobject/text/code_mobject.py +++ b/manim/mobject/text/code_mobject.py @@ -7,8 +7,8 @@ ] import html -import os import re +from pathlib import Path import numpy as np from pygments import highlight @@ -88,7 +88,7 @@ def construct(self): Parameters ---------- - file_name : :class:`str` + file_name Name of the code file to display. code : :class:`str` If ``file_name`` is not specified, a code string can be @@ -153,7 +153,7 @@ def construct(self): def __init__( self, - file_name=None, + file_name: str | os.PathLike = None, code=None, tab_width=3, line_spacing=0.3, @@ -199,8 +199,7 @@ def __init__( self.file_name = file_name if self.file_name: self._ensure_valid_file() - with open(self.file_path, encoding="utf-8") as f: - self.code_string = f.read() + self.code_string = self.file_path.read_text(encoding="utf-8") elif code: self.code_string = code else: @@ -284,16 +283,16 @@ def _ensure_valid_file(self): if self.file_name is None: raise Exception("Must specify file for Code") possible_paths = [ - os.path.join(os.path.join("assets", "codes"), self.file_name), - os.path.expanduser(self.file_name), + Path() / "assets" / "codes" / self.file_name, + Path(self.file_name).expanduser(), ] for path in possible_paths: - if os.path.exists(path): + if path.exists(): self.file_path = path return error = ( - f"From: {os.getcwd()}, could not find {self.file_name} at either " - + f"of these locations: {possible_paths}" + f"From: {Path.cwd()}, could not find {self.file_name} at either " + + f"of these locations: {list(map(str, possible_paths))}" ) raise OSError(error) @@ -369,20 +368,9 @@ def _gen_html_string(self): ) if self.generate_html_file: - os.makedirs( - os.path.join("assets", "codes", "generated_html_files"), - exist_ok=True, - ) - with open( - os.path.join( - "assets", - "codes", - "generated_html_files", - self.file_name + ".html", - ), - "w", - ) as file: - file.write(self.html_string) + output_folder = Path() / "assets" / "codes" / "generated_html_files" + output_folder.mkdir(parents=True, exist_ok=True) + (output_folder / f"{self.file_name}.html").write_text(self.html_string) def _gen_code_json(self): """Function to background_color, generate code_json and tab_spaces from html_string. @@ -559,7 +547,7 @@ def _hilite_me( Defines whether line numbers should be inserted in the html file. divstyles : :class:`str` Some html css styles. - file_path : :class:`str` + file_path : :class:`pathlib.Path` Path of code file. line_no_from : :class:`int` Defines the first line's number in the line count. diff --git a/manim/renderer/shader.py b/manim/renderer/shader.py index ce40a701ff..d1bba27503 100644 --- a/manim/renderer/shader.py +++ b/manim/renderer/shader.py @@ -1,6 +1,5 @@ from __future__ import annotations -import os import re import textwrap from pathlib import Path @@ -24,24 +23,23 @@ ] -def get_shader_code_from_file(file_path): +def get_shader_code_from_file(file_path: Path) -> str: if file_path in file_path_to_code_map: return file_path_to_code_map[file_path] - with open(file_path) as f: - source = f.read() - include_lines = re.finditer( - r"^#include (?P.*\.glsl)$", - source, - flags=re.MULTILINE, + source = file_path.read_text() + include_lines = re.finditer( + r"^#include (?P.*\.glsl)$", + source, + flags=re.MULTILINE, + ) + for match in include_lines: + include_path = match.group("include_path") + included_code = get_shader_code_from_file( + file_path.parent / include_path, ) - for match in include_lines: - include_path = match.group("include_path") - included_code = get_shader_code_from_file( - os.path.join(file_path.parent / include_path), - ) - source = source.replace(match.group(0), included_code) - file_path_to_code_map[file_path] = source - return source + source = source.replace(match.group(0), included_code) + file_path_to_code_map[file_path] = source + return source def filter_attributes(unfiltered_attributes, attributes): diff --git a/manim/renderer/shader_wrapper.py b/manim/renderer/shader_wrapper.py index 9fe87f3c53..8eff1772c1 100644 --- a/manim/renderer/shader_wrapper.py +++ b/manim/renderer/shader_wrapper.py @@ -1,7 +1,6 @@ from __future__ import annotations import copy -import os import re from pathlib import Path @@ -21,13 +20,13 @@ def get_shader_dir(): return Path(__file__).parent / "shaders" -def find_file(file_name, directories=None): +def find_file(file_name: Path, directories: list[Path]) -> Path: # Check if what was passed in is already a valid path to a file - if os.path.exists(file_name): + if file_name.exists(): return file_name - possible_paths = (os.path.join(directory, file_name) for directory in directories) + possible_paths = (directory / file_name for directory in directories) for path in possible_paths: - if os.path.exists(path): + if path.exists(): return path else: logger.debug(f"{path} does not exist.") @@ -48,7 +47,7 @@ def __init__( self.vert_data = vert_data self.vert_indices = vert_indices self.vert_attributes = vert_data.dtype.names - self.shader_folder = shader_folder + self.shader_folder = Path(shader_folder or "") self.uniforms = uniforms or {} self.texture_paths = texture_paths or {} self.depth_test = depth_test @@ -110,9 +109,9 @@ def create_program_id(self): ) def init_program_code(self): - def get_code(name): + def get_code(name: str) -> str | None: return get_shader_code_from_file( - os.path.join(self.shader_folder, f"{name}.glsl"), + self.shader_folder / f"{name}.glsl", ) self.program_code = { @@ -157,22 +156,19 @@ def combine_with(self, *shader_wrappers): filename_to_code_map: dict = {} -def get_shader_code_from_file(filename): - if not filename: - return None +def get_shader_code_from_file(filename: Path) -> str | None: if filename in filename_to_code_map: return filename_to_code_map[filename] try: filepath = find_file( filename, - directories=[get_shader_dir(), "/"], + directories=[get_shader_dir(), Path("/")], ) except OSError: return None - with open(filepath) as f: - result = f.read() + result = filepath.read_text() # To share functionality between shaders, some functions are read in # from other files an inserted into the relevant strings before @@ -185,8 +181,10 @@ def get_shader_code_from_file(filename): ) for line in insertions: inserted_code = get_shader_code_from_file( - os.path.join("include", line.replace("#include ../include/", "")), + Path() / "include" / line.replace("#include ../include/", ""), ) + if inserted_code is None: + return None result = result.replace(line, inserted_code) filename_to_code_map[filename] = result return result diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index 25763268d9..48131c7516 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -50,7 +50,7 @@ class SceneFileWriter: sections : list of :class:`.Section` used to segment scene - sections_output_dir : str + sections_output_dir : :class:`pathlib.Path` where are section videos stored output_name : str @@ -136,7 +136,7 @@ def init_output_directories(self, scene_name): ) # TODO: /dev/null would be good in case sections_output_dir is used without bein set (doesn't work on Windows), everyone likes defensive programming, right? - self.sections_output_dir = "" + self.sections_output_dir = Path("") if config.save_sections: self.sections_output_dir = guarantee_existence( config.get_dir( @@ -540,21 +540,19 @@ def is_already_cached(self, hash_invocation): def combine_files( self, input_files: list[str], - output_file: Path | str, + output_file: Path, create_gif=False, includes_sound=False, ): - file_list = str(self.partial_movie_directory / "partial_movie_file_list.txt") + file_list = self.partial_movie_directory / "partial_movie_file_list.txt" logger.debug( f"Partial movie files to combine ({len(input_files)} files): %(p)s", {"p": input_files[:5]}, ) - with open(file_list, "w", encoding="utf-8") as fp: + with file_list.open("w", encoding="utf-8") as fp: fp.write("# This file is used internally by FFMPEG.\n") for pf_path in input_files: - pf_path = str(pf_path) - if os.name == "nt": - pf_path = pf_path.replace("\\", "/") + pf_path = Path(pf_path).as_posix() fp.write(f"file 'file:{pf_path}'\n") commands = [ config.ffmpeg_executable, @@ -564,7 +562,7 @@ def combine_files( "-safe", "0", "-i", - file_list, + str(file_list), "-loglevel", config.ffmpeg_loglevel.lower(), "-metadata", @@ -603,7 +601,6 @@ def combine_to_movie(self): movie_file_path = self.movie_file_path if is_gif_format(): movie_file_path = self.gif_file_path - movie_file_path = str(movie_file_path) logger.info("Combining to Movie file.") self.combine_files( partial_movie_files, @@ -614,21 +611,22 @@ def combine_to_movie(self): # handle sound if self.includes_sound: - extension = config["movie_file_extension"] - sound_file_path = movie_file_path.replace(extension, ".wav") + sound_file_path = movie_file_path.with_suffix(".wav") # Makes sure sound file length will match video file self.add_audio_segment(AudioSegment.silent(0)) self.audio_segment.export( sound_file_path, bitrate="312k", ) - temp_file_path = movie_file_path.replace(extension, f"_temp{extension}") + temp_file_path = movie_file_path.with_name( + f"{movie_file_path.stem}_temp{movie_file_path.suffix}" + ) commands = [ config.ffmpeg_executable, "-i", - movie_file_path, + str(movie_file_path), "-i", - sound_file_path, + str(sound_file_path), "-y", # overwrite output file if it exists "-c:v", "copy", @@ -647,13 +645,13 @@ def combine_to_movie(self): "-metadata", f"comment=Rendered with Manim Community v{__version__}", # "-shortest", - temp_file_path, + str(temp_file_path), ] subprocess.call(commands) - shutil.move(temp_file_path, movie_file_path) - os.remove(sound_file_path) + shutil.move(str(temp_file_path), str(movie_file_path)) + sound_file_path.unlink() - self.print_file_ready_message(movie_file_path) + self.print_file_ready_message(str(movie_file_path)) if write_to_movie(): for file_path in partial_movie_files: # We have to modify the accessed time so if we have to clean the cache we remove the one used the longest. @@ -670,12 +668,10 @@ def combine_to_section_videos(self) -> None: logger.info(f"Combining partial files for section '{section.name}'") self.combine_files( section.get_clean_partial_movie_files(), - os.path.join(self.sections_output_dir, section.video), + self.sections_output_dir / section.video, ) sections_index.append(section.get_dict(self.sections_output_dir)) - with open( - os.path.join(self.sections_output_dir, f"{self.output_name}.json"), "w" - ) as file: + with (self.sections_output_dir / f"{self.output_name}.json").open("w") as file: json.dump(sections_index, file, indent=4) def clean_cache(self): @@ -718,8 +714,7 @@ def flush_cache_directory(self): def write_subcaption_file(self): """Writes the subcaption file.""" subcaption_file = Path(config.output_file).with_suffix(".srt") - with open(subcaption_file, "w") as f: - f.write(srt.compose(self.subcaptions)) + subcaption_file.write_text(srt.compose(self.subcaptions)) logger.info(f"Subcaption file has been written as {subcaption_file}") def print_file_ready_message(self, file_path): diff --git a/manim/scene/section.py b/manim/scene/section.py index 772035361e..860a969ad5 100644 --- a/manim/scene/section.py +++ b/manim/scene/section.py @@ -2,8 +2,8 @@ from __future__ import annotations -import os from enum import Enum +from pathlib import Path from typing import Any from manim import get_video_metadata @@ -76,7 +76,7 @@ def get_clean_partial_movie_files(self) -> list[str]: """Return all partial movie files that are not ``None``.""" return [el for el in self.partial_movie_files if el is not None] - def get_dict(self, sections_dir: str) -> dict[str, Any]: + def get_dict(self, sections_dir: Path) -> dict[str, Any]: """Get dictionary representation with metadata of output video. The output from this function is used from every section to build the sections index file. @@ -88,7 +88,7 @@ def get_dict(self, sections_dir: str) -> dict[str, Any]: f"Section '{self.name}' cannot be exported as dict, it does not have a video path assigned to it" ) - video_metadata = get_video_metadata(os.path.join(sections_dir, self.video)) + video_metadata = get_video_metadata(sections_dir / self.video) return dict( { "name": self.name, diff --git a/manim/utils/docbuild/manim_directive.py b/manim/utils/docbuild/manim_directive.py index d7fa8a6eb0..fe43764ed3 100644 --- a/manim/utils/docbuild/manim_directive.py +++ b/manim/utils/docbuild/manim_directive.py @@ -321,7 +321,7 @@ def run(self): def _write_rendering_stats(scene_name, run_time, file_name): - with open(rendering_times_file_path, "a") as file: + with rendering_times_file_path.open("a") as file: csv.writer(file).writerow( [ re.sub(r"^(reference\/)|(manim\.)", "", file_name), @@ -333,33 +333,33 @@ def _write_rendering_stats(scene_name, run_time, file_name): def _log_rendering_times(*args): if rendering_times_file_path.exists(): - with open(rendering_times_file_path) as file: + with rendering_times_file_path.open() as file: data = list(csv.reader(file)) - if len(data) == 0: - sys.exit() - - print("\nRendering Summary\n-----------------\n") - - max_file_length = max(len(row[0]) for row in data) - for key, group in it.groupby(data, key=lambda row: row[0]): - key = key.ljust(max_file_length + 1, ".") - group = list(group) - if len(group) == 1: - row = group[0] - print(f"{key}{row[2].rjust(7, '.')}s {row[1]}") - continue - time_sum = sum(float(row[2]) for row in group) - print( - f"{key}{f'{time_sum:.3f}'.rjust(7, '.')}s => {len(group)} EXAMPLES", - ) - for row in group: - print(f"{' '*(max_file_length)} {row[2].rjust(7)}s {row[1]}") + if len(data) == 0: + sys.exit() + + print("\nRendering Summary\n-----------------\n") + + max_file_length = max(len(row[0]) for row in data) + for key, group in it.groupby(data, key=lambda row: row[0]): + key = key.ljust(max_file_length + 1, ".") + group = list(group) + if len(group) == 1: + row = group[0] + print(f"{key}{row[2].rjust(7, '.')}s {row[1]}") + continue + time_sum = sum(float(row[2]) for row in group) + print( + f"{key}{f'{time_sum:.3f}'.rjust(7, '.')}s => {len(group)} EXAMPLES", + ) + for row in group: + print(f"{' '*(max_file_length)} {row[2].rjust(7)}s {row[1]}") print("") def _delete_rendering_times(*args): if rendering_times_file_path.exists(): - os.remove(rendering_times_file_path) + rendering_times_file_path.unlink() def setup(app): diff --git a/manim/utils/file_ops.py b/manim/utils/file_ops.py index 3cddd15592..6a5a7f1f77 100644 --- a/manim/utils/file_ops.py +++ b/manim/utils/file_ops.py @@ -134,15 +134,15 @@ def ensure_executable(path_to_exe: Path) -> bool: def add_extension_if_not_present(file_name: Path, extension: str) -> Path: if file_name.suffix != extension: - return file_name.with_suffix(extension) + return file_name.with_suffix(file_name.suffix + extension) else: return file_name def add_version_before_extension(file_name: Path) -> Path: - file_name = Path(file_name) - path, name, suffix = file_name.parent, file_name.stem, file_name.suffix - return Path(path, f"{name}_ManimCE_v{__version__}{suffix}") + return file_name.with_name( + f"{file_name.stem}_ManimCE_v{__version__}{file_name.suffix}" + ) def guarantee_existence(path: Path) -> Path: @@ -168,7 +168,10 @@ def seek_full_path_from_defaults( for path in possible_paths: if path.exists(): return path - error = f"From: {os.getcwd()}, could not find {file_name} at either of these locations: {possible_paths}" + error = ( + f"From: {Path.cwd()}, could not find {file_name} at either " + f"of these locations: {list(map(str, possible_paths))}" + ) raise OSError(error) @@ -252,11 +255,11 @@ def add_import_statement(file): ---------- file : :class:`Path` """ - with open(file, "r+") as f: + with file.open("r+") as f: import_line = "from manim import *" content = f.read() - f.seek(0, 0) - f.write(import_line.rstrip("\r\n") + "\n" + content) + f.seek(0) + f.write(import_line + "\n" + content) def copy_template_files( diff --git a/manim/utils/images.py b/manim/utils/images.py index 0731496ddc..1ce3dd8c28 100644 --- a/manim/utils/images.py +++ b/manim/utils/images.py @@ -9,6 +9,8 @@ "change_to_rgba_array", ] +from pathlib import Path + import numpy as np from PIL import Image @@ -16,7 +18,7 @@ from ..utils.file_ops import seek_full_path_from_defaults -def get_full_raster_image_path(image_file_name: str) -> str: +def get_full_raster_image_path(image_file_name: str) -> Path: return seek_full_path_from_defaults( image_file_name, default_dir=config.get_dir("assets_dir"), @@ -24,7 +26,7 @@ def get_full_raster_image_path(image_file_name: str) -> str: ) -def get_full_vector_image_path(image_file_name: str): +def get_full_vector_image_path(image_file_name: str) -> Path: return seek_full_path_from_defaults( image_file_name, default_dir=config.get_dir("assets_dir"), diff --git a/manim/utils/ipython_magic.py b/manim/utils/ipython_magic.py index f41a3fb13b..1e4fef9d9a 100644 --- a/manim/utils/ipython_magic.py +++ b/manim/utils/ipython_magic.py @@ -171,7 +171,7 @@ def construct(self): if local_path in self.rendered_files: self.rendered_files[local_path].unlink() self.rendered_files[local_path] = tmpfile - os.makedirs(tmpfile.parent, exist_ok=True) + tmpfile.parent.mkdir(parents=True, exist_ok=True) shutil.copy(local_path, tmpfile) file_type = mimetypes.guess_type(config["output_file"])[0] diff --git a/manim/utils/module_ops.py b/manim/utils/module_ops.py index 60871cf423..ec588c0ef6 100644 --- a/manim/utils/module_ops.py +++ b/manim/utils/module_ops.py @@ -33,11 +33,11 @@ def get_module(file_name: Path): logger.error(f"Failed to render scene: {str(e)}") sys.exit(2) else: - if Path(file_name).exists(): + if file_name.exists(): ext = file_name.suffix if ext != ".py": raise ValueError(f"{file_name} is not a valid Manim python script.") - module_name = ext.replace(os.sep, ".").split(".")[-1] + module_name = ".".join(file_name.with_suffix("").parts) warnings.filterwarnings( "default", @@ -123,7 +123,9 @@ def prompt_user_for_choice(scene_classes): sys.exit(1) -def scene_classes_from_file(file_path, require_single_scene=False, full_list=False): +def scene_classes_from_file( + file_path: Path, require_single_scene=False, full_list=False +): module = get_module(file_path) all_scene_classes = get_scene_classes_from_module(module) if full_list: diff --git a/manim/utils/tex.py b/manim/utils/tex.py index a30533123c..6e881ecfa0 100644 --- a/manim/utils/tex.py +++ b/manim/utils/tex.py @@ -8,7 +8,9 @@ ] import copy +import os import re +from pathlib import Path class TexTemplate: @@ -246,7 +248,7 @@ class TexTemplateFromFile(TexTemplate): Other Parameters ---------------- - tex_filename : Optional[:class:`str`], optional + tex_filename Path to a valid TeX template file Attributes @@ -261,13 +263,14 @@ class TexTemplateFromFile(TexTemplate): The output format resulting from compilation, e.g. ``.dvi`` or ``.pdf`` """ - def __init__(self, **kwargs): - self.template_file = kwargs.pop("tex_filename", "tex_template.tex") + def __init__( + self, *, tex_filename: str | os.PathLike = "tex_template.tex", **kwargs + ): + self.template_file = Path(tex_filename) super().__init__(**kwargs) def _rebuild(self): - with open(self.template_file) as infile: - self.body = infile.read() + self.body = self.template_file.read_text() def file_not_mutable(self): raise Exception("Cannot modify TexTemplate when using a template file.") diff --git a/manim/utils/tex_file_writing.py b/manim/utils/tex_file_writing.py index d90b8af0e3..d53acbe0a6 100644 --- a/manim/utils/tex_file_writing.py +++ b/manim/utils/tex_file_writing.py @@ -39,7 +39,7 @@ def tex_to_svg_file(expression, environment=None, tex_template=None): Returns ------- - :class:`str` + :class:`Path` Path to generated SVG file. """ if tex_template is None: @@ -68,7 +68,7 @@ def generate_tex_file(expression, environment=None, tex_template=None): Returns ------- - :class:`str` + :class:`Path` Path to generated TeX file """ if tex_template is None: @@ -82,29 +82,30 @@ def generate_tex_file(expression, environment=None, tex_template=None): if not tex_dir.exists(): tex_dir.mkdir() - result = Path(tex_dir) / (tex_hash(output) + ".tex") + result = tex_dir / (tex_hash(output) + ".tex") if not result.exists(): logger.info( "Writing %(expression)s to %(path)s", {"expression": expression, "path": f"{result}"}, ) - with open(result, "w", encoding="utf-8") as outfile: - outfile.write(output) - return result.as_posix() + result.write_text(output, encoding="utf-8") + return result -def tex_compilation_command(tex_compiler, output_format, tex_file, tex_dir): +def tex_compilation_command( + tex_compiler: str, output_format: str, tex_file: Path, tex_dir: Path +) -> str: """Prepares the tex compilation command with all necessary cli flags Parameters ---------- - tex_compiler : :class:`str` + tex_compiler String containing the compiler to be used, e.g. ``pdflatex`` or ``lualatex`` - output_format : :class:`str` + output_format String containing the output format generated by the compiler, e.g. ``.dvi`` or ``.pdf`` - tex_file : :class:`str` + tex_file File name of TeX file to be typeset. - tex_dir : :class:`str` + tex_dir Path to the directory where compiler output will be stored. Returns @@ -157,28 +158,26 @@ def insight_package_not_found_error(matching): yield f"Install {matching[1]} it using your LaTeX package manager, or check for typos." -def compile_tex(tex_file, tex_compiler, output_format): +def compile_tex(tex_file: Path, tex_compiler: str, output_format: str) -> Path: """Compiles a tex_file into a .dvi or a .xdv or a .pdf Parameters ---------- - tex_file : :class:`str` + tex_file File name of TeX file to be typeset. - tex_compiler : :class:`str` + tex_compiler String containing the compiler to be used, e.g. ``pdflatex`` or ``lualatex`` - output_format : :class:`str` + output_format String containing the output format generated by the compiler, e.g. ``.dvi`` or ``.pdf`` Returns ------- - :class:`str` + :class:`Path` Path to generated output file in desired format (DVI, XDV or PDF). """ - result = tex_file.replace(".tex", output_format) - result = Path(result).as_posix() - tex_file = Path(tex_file).as_posix() - tex_dir = Path(config.get_dir("tex_dir")).as_posix() - if not Path(result).exists(): + result = tex_file.with_suffix(output_format) + tex_dir = config.get_dir("tex_dir") + if not result.exists(): command = tex_compilation_command( tex_compiler, output_format, @@ -187,7 +186,7 @@ def compile_tex(tex_file, tex_compiler, output_format): ) exit_code = os.system(command) if exit_code != 0: - log_file = tex_file.replace(".tex", ".log") + log_file = tex_file.with_suffix(".log") print_all_tex_errors(log_file, tex_compiler, tex_file) raise ValueError( f"{tex_compiler} error converting to" @@ -202,7 +201,7 @@ def convert_to_svg(dvi_file, extension, page=1): Parameters ---------- - dvi_file : :class:`str` + dvi_file : :class:`Path` File name of the input file to be converted. extension : :class:`str` String containing the file extension and thus indicating the file type, e.g. ``.dvi`` or ``.pdf`` @@ -211,13 +210,10 @@ def convert_to_svg(dvi_file, extension, page=1): Returns ------- - :class:`str` + :class:`Path` Path to generated SVG file. """ - result = dvi_file.replace(extension, ".svg") - result = Path(result) - result_str = result.as_posix() - dvi_file = Path(dvi_file).as_posix() + result = dvi_file.with_suffix(".svg") if not result.exists(): commands = [ "dvisvgm", @@ -226,7 +222,7 @@ def convert_to_svg(dvi_file, extension, page=1): f'"{dvi_file}"', "-n", "-v 0", - "-o " + f'"{result_str}"', + "-o " + f'"{result}"', ">", os.devnull, ] @@ -235,33 +231,31 @@ def convert_to_svg(dvi_file, extension, page=1): # if the file does not exist now, this means conversion failed if not result.exists(): raise ValueError( - f"Your installation does not support converting {extension} files to SVG." + f"Your installation does not support converting {dvi_file.suffix} files to SVG." f" Consider updating dvisvgm to at least version 2.4." f" If this does not solve the problem, please refer to our troubleshooting guide at:" f" https://docs.manim.community/en/stable/installation/troubleshooting.html", ) - return result_str + return result -def print_all_tex_errors(log_file, tex_compiler, tex_file): - if not Path(log_file).exists(): +def print_all_tex_errors(log_file: Path, tex_compiler: str, tex_file: Path) -> None: + if not log_file.exists(): raise RuntimeError( f"{tex_compiler} failed but did not produce a log file. " "Check your LaTeX installation.", ) - with open(log_file, encoding="utf-8") as f: + with log_file.open(encoding="utf-8") as f: tex_compilation_log = f.readlines() - error_indices = [ - index - for index, line in enumerate(tex_compilation_log) - if line.startswith("!") - ] - if error_indices: - with open(tex_file) as g: - tex = g.readlines() - for error_index in error_indices: - print_tex_error(tex_compilation_log, error_index, tex) + error_indices = [ + index for index, line in enumerate(tex_compilation_log) if line.startswith("!") + ] + if error_indices: + with tex_file.open() as f: + tex = f.readlines() + for error_index in error_indices: + print_tex_error(tex_compilation_log, error_index, tex) LATEX_ERROR_INSIGHTS = [ diff --git a/scripts/dev_changelog.py b/scripts/dev_changelog.py index d5ecdd3390..f84dbb1ca3 100755 --- a/scripts/dev_changelog.py +++ b/scripts/dev_changelog.py @@ -47,7 +47,6 @@ import concurrent.futures import datetime -import os import re from collections import defaultdict from pathlib import Path @@ -85,17 +84,13 @@ def update_citation(version, date): - current_directory = os.path.dirname(__file__) - parent_directory = os.path.split(current_directory)[0] - with open(os.path.join(current_directory, "TEMPLATE.cff")) as a, open( - os.path.join(parent_directory, "CITATION.cff"), - "w", - newline="\n", - ) as b: - contents = a.read() - contents = contents.replace("", version) - contents = contents.replace("", date) - b.write(contents) + current_directory = Path(__file__).parent + parent_directory = current_directory.parent + contents = (current_directory / "TEMPLATE.cff").read_text() + contents = contents.replace("", version) + contents = contents.replace("", date) + with (parent_directory / "CITATION.cff").open("w", newline="\n") as f: + f.write(contents) def process_pullrequests(lst, cur, github_repo, pr_nums): diff --git a/scripts/extract_frames.py b/scripts/extract_frames.py index 8771bd3917..7bebbb4b5e 100644 --- a/scripts/extract_frames.py +++ b/scripts/extract_frames.py @@ -1,4 +1,3 @@ -import os import sys import numpy as np @@ -10,9 +9,9 @@ def main(): print_usage() sys.exit(1) npz_file = sys.argv[1] - output_folder = sys.argv[2] - if not os.path.exists(output_folder): - os.makedirs(output_folder) + output_folder = Path(sys.argv[2]) + if not output_folder.exists(): + output_folder.mkdir(parents=True) data = np.load(npz_file) if "frame_data" not in data: @@ -22,7 +21,7 @@ def main(): frames = data["frame_data"] for i, frame in enumerate(frames): img = Image.fromarray(frame) - img.save(os.path.join(output_folder, f"frame{i}.png")) + img.save(output_folder / f"frame{i}.png") print(f"Saved {len(frames)} frames to {output_folder}") diff --git a/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py b/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py index 8f36200dd1..d3ecb1cf2c 100644 --- a/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py +++ b/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py @@ -435,12 +435,8 @@ def test_gif_format_output(tmp_path, manim_cfg_file, simple_scenes_path): unexpected_mp4_path, ) - expected_gif_path = ( - tmp_path - / "videos" - / "simple_scenes" - / "480p15" - / add_version_before_extension("SquareToCircle.gif") + expected_gif_path = add_version_before_extension( + tmp_path / "videos" / "simple_scenes" / "480p15" / "SquareToCircle.gif" ) assert expected_gif_path.exists(), "gif file not found at " + str(expected_gif_path) @@ -466,12 +462,8 @@ def test_mp4_format_output(tmp_path, manim_cfg_file, simple_scenes_path): out, err, exit_code = capture(command) assert exit_code == 0, err - unexpected_gif_path = ( - tmp_path - / "videos" - / "simple_scenes" - / "480p15" - / add_version_before_extension("SquareToCircle.gif") + unexpected_gif_path = add_version_before_extension( + tmp_path / "videos" / "simple_scenes" / "480p15" / "SquareToCircle.gif" ) assert not unexpected_gif_path.exists(), "unexpected gif file found at " + str( unexpected_gif_path, @@ -510,12 +502,8 @@ def test_videos_not_created_when_png_format_set( out, err, exit_code = capture(command) assert exit_code == 0, err - unexpected_gif_path = ( - tmp_path - / "videos" - / "simple_scenes" - / "480p15" - / add_version_before_extension("SquareToCircle.gif") + unexpected_gif_path = add_version_before_extension( + tmp_path / "videos" / "simple_scenes" / "480p15" / "SquareToCircle.gif" ) assert not unexpected_gif_path.exists(), "unexpected gif file found at " + str( unexpected_gif_path, diff --git a/tests/test_scene_rendering/test_cli_flags.py b/tests/test_scene_rendering/test_cli_flags.py index 20bdf4faba..d8c76c0206 100644 --- a/tests/test_scene_rendering/test_cli_flags.py +++ b/tests/test_scene_rendering/test_cli_flags.py @@ -296,12 +296,8 @@ def test_custom_output_name_gif(tmp_path, simple_scenes_path): out, err, exit_code = capture(command) assert exit_code == 0, err - wrong_gif_path = ( - tmp_path - / "videos" - / "simple_scenes" - / "480p15" - / add_version_before_extension(scene_name + ".gif") + wrong_gif_path = add_version_before_extension( + tmp_path / "videos" / "simple_scenes" / "480p15" / f"{scene_name}.gif" ) assert not wrong_gif_path.exists(), ( @@ -350,12 +346,8 @@ def test_custom_output_name_mp4(tmp_path, simple_scenes_path): "The mp4 file does not respect the custom name: " + custom_name + ".mp4" ) - unexpected_gif_path = ( - tmp_path - / "videos" - / "simple_scenes" - / "480p15" - / add_version_before_extension(custom_name + ".gif") + unexpected_gif_path = add_version_before_extension( + tmp_path / "videos" / "simple_scenes" / "480p15" / f"{custom_name}.gif" ) assert not unexpected_gif_path.exists(), "Found an unexpected gif file at " + str( unexpected_gif_path @@ -418,12 +410,8 @@ def test_gif_format_output(tmp_path, manim_cfg_file, simple_scenes_path): unexpected_mp4_path, ) - expected_gif_path = ( - tmp_path - / "videos" - / "simple_scenes" - / "480p15" - / add_version_before_extension("SquareToCircle.gif") + expected_gif_path = add_version_before_extension( + tmp_path / "videos" / "simple_scenes" / "480p15" / "SquareToCircle.gif" ) assert expected_gif_path.exists(), "gif file not found at " + str(expected_gif_path) @@ -447,12 +435,8 @@ def test_mp4_format_output(tmp_path, manim_cfg_file, simple_scenes_path): out, err, exit_code = capture(command) assert exit_code == 0, err - unexpected_gif_path = ( - tmp_path - / "videos" - / "simple_scenes" - / "480p15" - / add_version_before_extension("SquareToCircle.gif") + unexpected_gif_path = add_version_before_extension( + tmp_path / "videos" / "simple_scenes" / "480p15" / "SquareToCircle.gif" ) assert not unexpected_gif_path.exists(), "unexpected gif file found at " + str( unexpected_gif_path, @@ -489,12 +473,8 @@ def test_videos_not_created_when_png_format_set( out, err, exit_code = capture(command) assert exit_code == 0, err - unexpected_gif_path = ( - tmp_path - / "videos" - / "simple_scenes" - / "480p15" - / add_version_before_extension("SquareToCircle.gif") + unexpected_gif_path = add_version_before_extension( + tmp_path / "videos" / "simple_scenes" / "480p15" / "SquareToCircle.gif" ) assert not unexpected_gif_path.exists(), "unexpected gif file found at " + str( unexpected_gif_path, From bf0ea29338694b24e3ec3d7eb087a5aff523b357 Mon Sep 17 00:00:00 2001 From: NotWearingPants <26556598+NotWearingPants@users.noreply.github.com> Date: Thu, 3 Nov 2022 00:52:20 +0200 Subject: [PATCH 141/555] Fixed ``CLI.tex_template_file`` config file setting (#2992) * fix `CLI.tex_template_file` config setting * added test for tex_template_file set in .cfg * create a new config object for testing instead of working within tempconfig Co-authored-by: Benjamin Hackl Co-authored-by: Benjamin Hackl --- manim/_config/utils.py | 2 +- tests/test_config.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 90210b9157..1e3bea7d5e 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -1543,7 +1543,7 @@ def tex_template(self): if not hasattr(self, "_tex_template") or not self._tex_template: fn = self._d["tex_template_file"] if fn: - self._tex_template = TexTemplateFromFile(filename=fn) + self._tex_template = TexTemplateFromFile(tex_filename=fn) else: self._tex_template = TexTemplate() return self._tex_template diff --git a/tests/test_config.py b/tests/test_config.py index c54b738773..b543e8a5e6 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -7,6 +7,7 @@ import numpy as np from manim import WHITE, Scene, Square, Tex, Text, config, tempconfig +from manim._config.utils import ManimConfig from tests.assert_utils import assert_dir_exists, assert_dir_filled, assert_file_exists @@ -210,3 +211,22 @@ def test_dry_run_with_png_format_skipped_animations(): assert config["dry_run"] is True scene = MyScene(skip_animations=True) scene.render() + + +def test_tex_template_file(tmp_path): + """Test that a custom tex template file can be set from a config file.""" + tex_file = Path(tmp_path / "my_template.tex") + tex_file.write_text("Hello World!") + tmp_cfg = tempfile.NamedTemporaryFile("w", dir=tmp_path, delete=False) + tmp_cfg.write( + f""" + [CLI] + tex_template_file = { tex_file } + """, + ) + tmp_cfg.close() + + custom_config = ManimConfig().digest_file(tmp_cfg.name) + + assert Path(custom_config.tex_template_file) == tex_file + assert custom_config.tex_template.body == "Hello World!" From 5ca1763068ca117f0341c52ffa40a619d2199275 Mon Sep 17 00:00:00 2001 From: Duc Phat <51194912+imaphatduc@users.noreply.github.com> Date: Sat, 5 Nov 2022 19:18:11 +0700 Subject: [PATCH 142/555] fix: Align lines correctly when passing `faded_line_ratio` property to NumberPlane (#2894) (#2920) * fix: Align lines correctly when passing `faded_line_ratio` property to NumberPlane (#2894) * regenerated test data * removed unnecessary check for empty input Co-authored-by: Benjamin Hackl --- manim/mobject/graphing/coordinate_systems.py | 2 +- .../coordinate_system/number_plane_log.npz | Bin 12038 -> 11956 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 3fdb9e33bd..ae7665509b 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -2661,7 +2661,7 @@ def _get_lines_parallel_to_axis( for k, x in enumerate(inputs): new_line = line.copy() new_line.shift(unit_vector_axis_perp_to * x) - if k % ratio_faded_lines == 0: + if (k + 1) % ratio_faded_lines == 0: lines1.add(new_line) else: lines2.add(new_line) diff --git a/tests/test_graphical_units/control_data/coordinate_system/number_plane_log.npz b/tests/test_graphical_units/control_data/coordinate_system/number_plane_log.npz index 894f2ebb6d93b1cb69d379b182e6c8276d8c2925..b86dd3568eac177ce37bbd9e3c7d9cee74035ef6 100644 GIT binary patch literal 11956 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 literal 12038 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 KS-sT9{(k|fG5OH| From d76fa670cad3f74953666fa1860be32bc896f738 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 5 Nov 2022 14:52:33 +0000 Subject: [PATCH 143/555] [pre-commit.ci] pre-commit autoupdate (#2900) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/asottile/pyupgrade: v2.37.1 → v3.2.0](https://github.com/asottile/pyupgrade/compare/v2.37.1...v3.2.0) - [github.com/psf/black: 22.6.0 → 22.10.0](https://github.com/psf/black/compare/22.6.0...22.10.0) - [github.com/asottile/yesqa: v1.3.0 → v1.4.0](https://github.com/asottile/yesqa/compare/v1.3.0...v1.4.0) - [github.com/PyCQA/flake8: 4.0.1 → 5.0.4](https://github.com/PyCQA/flake8/compare/4.0.1...5.0.4) - [github.com/pre-commit/mirrors-mypy: v0.961 → v0.982](https://github.com/pre-commit/mirrors-mypy/compare/v0.961...v0.982) - [github.com/codespell-project/codespell: v2.1.0 → v2.2.2](https://github.com/codespell-project/codespell/compare/v2.1.0...v2.2.2) * fixed B902 * ignore B903, B950 * fixed B902 for OpenGLMobject.affects_shader_info_id * ignore B902 in opengl_compatibility * fixed B902 in OpenGLVMobject.triggers_refreshed_triangulation * fixed codespell errors * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * move decorators outside of classes * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * added Nam to ignored words * ignore B902 in opengl_compatibility (again) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Revert "[pre-commit.ci] auto fixes from pre-commit.com hooks" This reverts commit 119e7ddb88501db0b83ac385ec64b3ef7651067f. * move yesqa after flake8 call * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove yesqa from pre-commit stack * Revert "[pre-commit.ci] auto fixes from pre-commit.com hooks" This reverts commit a5b4f70f212983ec1bb5dd0bea0168e80f15591b. * codespell: ignore "nam" Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- .codespellrc | 2 +- .flake8 | 2 +- .pre-commit-config.yaml | 17 ++++----- manim/animation/speedmodifier.py | 2 +- manim/mobject/opengl/opengl_compatibility.py | 4 +-- manim/mobject/opengl/opengl_mobject.py | 27 +++++++------- .../opengl/opengl_vectorized_mobject.py | 35 ++++++++++--------- 7 files changed, 43 insertions(+), 46 deletions(-) diff --git a/.codespellrc b/.codespellrc index f12f26b4c9..bbc928a1bb 100644 --- a/.codespellrc +++ b/.codespellrc @@ -1,4 +1,4 @@ [codespell] exclude-file=.codespell_ignorelines check-hidden=True -ignore-words-list = sherif +ignore-words-list = nam,sherif,falsy diff --git a/.flake8 b/.flake8 index 4907a2f6d6..8d4f3309b0 100644 --- a/.flake8 +++ b/.flake8 @@ -21,7 +21,7 @@ extend-ignore = E203, W503, D202, D212, D213, D404 A001, A002, A003, # Plug-in: flake8-bugbear - B006, B007, B008, B009, B010, + B006, B007, B008, B009, B010, B903, B950, # Plug-in: flake8-simplify SIM105, SIM106, SIM119, diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5f01085ea5..f40031435b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v2.37.1 + rev: v3.2.0 hooks: - id: pyupgrade name: Update code to new python versions @@ -35,7 +35,7 @@ repos: - id: python-check-blanket-noqa name: Precision flake ignores - repo: https://github.com/psf/black - rev: 22.6.0 + rev: 22.10.0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs @@ -43,26 +43,21 @@ repos: hooks: - id: blacken-docs additional_dependencies: [black==22.3.0] - - repo: https://github.com/asottile/yesqa - rev: v1.3.0 - hooks: - - id: yesqa - name: Remove unneeded flake ignores - repo: https://github.com/PyCQA/flake8 - rev: 4.0.1 + rev: 5.0.4 hooks: - id: flake8 additional_dependencies: [flake8-builtins==1.5.3, flake8-bugbear==21.4.3, flake8-docstrings==1.6.0, flake8-rst-docstrings==0.2.3, flake8-pytest-style==1.5.0, flake8-simplify==0.14.1, flake8-comprehensions>=3.6.1] - repo: https://github.com/pre-commit/mirrors-mypy - rev: 'v0.961' + rev: 'v0.982' hooks: - id: mypy additional_dependencies: [types-decorator, types-docutils, types-requests, types-setuptools] - repo: https://github.com/codespell-project/codespell - rev: v2.1.0 + rev: v2.2.2 hooks: - id: codespell - args: ["-L", "medias"] + args: ["-L", "medias,nam"] diff --git a/manim/animation/speedmodifier.py b/manim/animation/speedmodifier.py index 311bd62851..f4218e0828 100644 --- a/manim/animation/speedmodifier.py +++ b/manim/animation/speedmodifier.py @@ -230,7 +230,7 @@ def get_scaled_total_time(self) -> float: @classmethod def add_updater( - self, + cls, mobject: Mobject, update_function: Updater, index: int | None = None, diff --git a/manim/mobject/opengl/opengl_compatibility.py b/manim/mobject/opengl/opengl_compatibility.py index 611bbea190..5bbb2af197 100644 --- a/manim/mobject/opengl/opengl_compatibility.py +++ b/manim/mobject/opengl/opengl_compatibility.py @@ -21,7 +21,7 @@ class ConvertToOpenGL(ABCMeta): _converted_classes = [] - def __new__(mcls, name, bases, namespace): + def __new__(mcls, name, bases, namespace): # noqa: B902 if config.renderer == "opengl": # Must check class names to prevent # cyclic importing. @@ -40,6 +40,6 @@ def __new__(mcls, name, bases, namespace): return super().__new__(mcls, name, bases, namespace) - def __init__(cls, name, bases, namespace): + def __init__(cls, name, bases, namespace): # noqa: B902 super().__init__(name, bases, namespace) cls._converted_classes.append(cls) diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 0246a27a04..7b2d79d235 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -39,6 +39,17 @@ ) +def affects_shader_info_id(func): + @wraps(func) + def wrapper(self): + for mob in self.get_family(): + func(mob) + mob.refresh_shader_wrapper_id() + return self + + return wrapper + + class OpenGLMobject: """Mathematical Object: base class for objects that can be displayed on screen. @@ -2531,16 +2542,6 @@ def unlock_data(self): # Operations touching shader uniforms - def affects_shader_info_id(func): - @wraps(func) - def wrapper(self): - for mob in self.get_family(): - func(mob) - # mob.refresh_shader_wrapper_id() - return self - - return wrapper - @affects_shader_info_id def fix_in_frame(self): self.is_fixed_in_frame = 1.0 @@ -2623,9 +2624,9 @@ def set_color_by_xyz_func( # For shader data - # def refresh_shader_wrapper_id(self): - # self.shader_wrapper.refresh_id() - # return self + def refresh_shader_wrapper_id(self): + self.shader_wrapper.refresh_id() + return self def get_shader_wrapper(self): from manim.renderer.shader_wrapper import ShaderWrapper diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 112369110e..748e050b76 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -43,6 +43,24 @@ } +def triggers_refreshed_triangulation(func): + @wraps(func) + def wrapper(self, *args, **kwargs): + old_points = np.empty((0, 3)) + for mob in self.family_members_with_points(): + old_points = np.concatenate((old_points, mob.points), axis=0) + func(self, *args, **kwargs) + new_points = np.empty((0, 3)) + for mob in self.family_members_with_points(): + new_points = np.concatenate((new_points, mob.points), axis=0) + if not np.array_equal(new_points, old_points): + self.refresh_triangulation() + self.refresh_unit_normal() + return self + + return wrapper + + class OpenGLVMobject(OpenGLMobject): """A vectorized mobject.""" @@ -1449,23 +1467,6 @@ def get_triangulation(self, normal_vector=None): self.needs_new_triangulation = False return tri_indices - def triggers_refreshed_triangulation(func): - @wraps(func) - def wrapper(self, *args, **kwargs): - old_points = np.empty((0, 3)) - for mob in self.family_members_with_points(): - old_points = np.concatenate((old_points, mob.points), axis=0) - func(self, *args, **kwargs) - new_points = np.empty((0, 3)) - for mob in self.family_members_with_points(): - new_points = np.concatenate((new_points, mob.points), axis=0) - if not np.array_equal(new_points, old_points): - self.refresh_triangulation() - self.refresh_unit_normal() - return self - - return wrapper - @triggers_refreshed_triangulation def set_points(self, points): super().set_points(points) From a97ab066c46aae1dc50489a02d08ecc1cc6b4816 Mon Sep 17 00:00:00 2001 From: vahndi Date: Tue, 8 Nov 2022 09:55:40 -0500 Subject: [PATCH 144/555] enable code completion on animate method of Mobject class in supporting IDE's e.g. PyCharm (#3014) --- 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 c7e9bfb213..4def2c5a83 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -226,7 +226,7 @@ def construct(self): cls.__init__ = cls._original__init__ @property - def animate(self): + def animate(self) -> _AnimationBuilder | T: """Used to animate the application of any method of :code:`self`. Any method called on :code:`animate` is converted to an animation of applying From 95bca6f24b42bd8bfec59f20d3a26457372f9d83 Mon Sep 17 00:00:00 2001 From: NotWearingPants <26556598+NotWearingPants@users.noreply.github.com> Date: Thu, 10 Nov 2022 08:17:21 +0200 Subject: [PATCH 145/555] Convert all types of parameters in docstrings to proper type annotations (#2988) * Converted types in docstrings to type annotations * `isort .` * `black .` * Additional docstrings type annotation fixes Co-authored-by: Benjamin Hackl --- manim/_config/__init__.py | 2 +- manim/_config/logger_utils.py | 15 +- manim/_config/utils.py | 10 +- manim/animation/animation.py | 5 +- manim/animation/creation.py | 8 +- manim/animation/indication.py | 10 +- manim/camera/camera.py | 324 ++++++++++-------- manim/camera/moving_camera.py | 14 +- manim/camera/multi_camera.py | 10 +- manim/camera/three_d_camera.py | 56 +-- manim/cli/cfg/group.py | 12 +- manim/cli/init/commands.py | 6 +- manim/cli/new/group.py | 6 +- manim/mobject/geometry/line.py | 104 +++--- manim/mobject/geometry/polygram.py | 40 +-- manim/mobject/geometry/shape_matchers.py | 5 - manim/mobject/graphing/number_line.py | 4 +- manim/mobject/graphing/scale.py | 2 +- manim/mobject/matrix.py | 51 +-- .../opengl/opengl_vectorized_mobject.py | 30 +- manim/mobject/svg/brace.py | 5 +- manim/mobject/table.py | 24 +- manim/mobject/text/code_mobject.py | 113 +++--- manim/mobject/text/numbers.py | 20 +- manim/mobject/three_d/three_dimensions.py | 116 ++++--- manim/mobject/types/image_mobject.py | 49 +-- manim/mobject/types/vectorized_mobject.py | 114 +++--- manim/mobject/vector_field.py | 12 +- manim/renderer/cairo_renderer.py | 40 ++- manim/scene/moving_camera_scene.py | 6 +- manim/scene/scene.py | 131 +++---- manim/scene/scene_file_writer.py | 58 ++-- manim/scene/three_d_scene.py | 52 +-- manim/scene/vector_space_scene.py | 256 ++++++++------ manim/scene/zoomed_scene.py | 8 +- manim/utils/bezier.py | 10 +- manim/utils/caching.py | 6 +- manim/utils/family.py | 9 +- manim/utils/file_ops.py | 12 +- manim/utils/hashing.py | 47 +-- manim/utils/space_ops.py | 4 +- manim/utils/testing/frames_comparison.py | 16 +- manim/utils/tex.py | 67 ++-- manim/utils/tex_file_writing.py | 34 +- scripts/template_docsting_with_example.py | 2 +- tests/helpers/graphical_units.py | 7 +- tests/utils/GraphicalUnitTester.py | 11 +- tests/utils/testing_utils.py | 4 +- 48 files changed, 1046 insertions(+), 901 deletions(-) diff --git a/manim/_config/__init__.py b/manim/_config/__init__.py index ebcca2d550..94bea642aa 100644 --- a/manim/_config/__init__.py +++ b/manim/_config/__init__.py @@ -49,7 +49,7 @@ def tempconfig(temp: ManimConfig | dict) -> _GeneratorContextManager: Parameters ---------- - temp : Union[:class:`ManimConfig`, :class:`dict`] + temp Object whose keys will be used to temporarily update the global ``config``. diff --git a/manim/_config/logger_utils.py b/manim/_config/logger_utils.py index 64b341b7be..ca31b4fa54 100644 --- a/manim/_config/logger_utils.py +++ b/manim/_config/logger_utils.py @@ -56,10 +56,10 @@ def make_logger( Parameters ---------- - parser : :class:`configparser.ConfigParser` + parser A parser containing any .cfg files in use. - verbosity : :class:`str` + verbosity The verbosity level of the logger. Returns @@ -106,7 +106,7 @@ def parse_theme(parser: configparser.ConfigParser) -> Theme: Parameters ---------- - parser : :class:`configparser.ConfigParser` + parser A parser containing any .cfg files in use. Returns @@ -148,9 +148,12 @@ def set_file_logger(scene_name: str, module_name: str, log_dir: Path) -> None: Parameters ---------- - config : :class:`ManimConfig` - The global config, used to determine the log file path. - + scene_name + The name of the scene, used in the name of the log file. + module_name + The name of the module, used in the name of the log file. + log_dir + Path to the folder where log files are stored. """ # Note: The log file name will be # _.log, gotten from config. So it diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 1e3bea7d5e..723a94ba84 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -342,7 +342,7 @@ def update(self, obj: ManimConfig | dict) -> None: Parameters ---------- - obj : Union[:class:`ManimConfig`, :class:`dict`] + obj The object to copy values from. Returns @@ -490,7 +490,7 @@ def digest_parser(self, parser: configparser.ConfigParser) -> ManimConfig: Parameters ---------- - parser : :class:`ConfigParser` + parser An object reflecting the contents of one or many ``.cfg`` files. In particular, it may reflect the contents of multiple files that have been parsed in a cascading fashion. @@ -664,7 +664,7 @@ def digest_args(self, args: argparse.Namespace) -> ManimConfig: Parameters ---------- - args : :class:`argparse.Namespace` + args An object returned by :func:`.main_utils.parse_args()`. Returns @@ -1316,11 +1316,11 @@ def get_dir(self, key: str, **kwargs: str) -> Path: Parameters ---------- - key : :class:`str` + key The config option to be resolved. Must be an option ending in ``'_dir'``, for example ``'media_dir'`` or ``'video_dir'``. - kwargs : :class:`str` + kwargs Any strings to be used when resolving the directory. Returns diff --git a/manim/animation/animation.py b/manim/animation/animation.py index 65b45c3004..b35c67405a 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -415,9 +415,8 @@ def set_rate_func( Parameters ---------- - run_time - The new time the animation should take in seconds. - + rate_func + The new function defining the animation progress based on the relative runtime (see :mod:`~.rate_functions`). Returns ------- diff --git a/manim/animation/creation.py b/manim/animation/creation.py index 46c5ad9fae..541a2afafa 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -138,7 +138,7 @@ class Create(ShowPartial): Parameters ---------- - mobject : :class:`~.VMobject` + mobject The VMobject to animate. Raises @@ -374,7 +374,7 @@ class Unwrite(Write): Parameters ---------- - reverse : :class:`bool` + reverse Set True to have the animation start erasing from the last submobject first. Examples @@ -542,7 +542,7 @@ class AddTextLetterByLetter(ShowIncreasingSubsets): Parameters ---------- - time_per_char : :class:`float` + time_per_char Frequency of appearance of the letters. .. tip:: @@ -585,7 +585,7 @@ class RemoveTextLetterByLetter(AddTextLetterByLetter): Parameters ---------- - time_per_char : :class:`float` + time_per_char Frequency of appearance of the letters. .. tip:: diff --git a/manim/animation/indication.py b/manim/animation/indication.py index d320ec3a40..405581025d 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -77,7 +77,7 @@ class FocusOn(Transform): The color of the spotlight. run_time The duration of the animation. - kwargs : Any + kwargs Additional arguments to be passed to the :class:`~.Succession` constructor Examples @@ -132,7 +132,7 @@ class Indicate(Transform): The color the mobject temporally takes. rate_func The function definig the animation progress at every point in time. - kwargs : Any + kwargs Additional arguments to be passed to the :class:`~.Succession` constructor Examples @@ -186,7 +186,7 @@ class Flash(AnimationGroup): The time width used for the flash lines. See :class:`.~ShowPassingFlash` for more details. run_time The duration of the animation. - kwargs : Any + kwargs Additional arguments to be passed to the :class:`~.Succession` constructor Examples @@ -486,7 +486,7 @@ class Wiggle(Animation): Parameters ---------- - mobject : Mobject + mobject The mobject to wiggle. scale_value The factor by which the mobject will be temporarily scaled. @@ -581,7 +581,7 @@ class Circumscribe(Succession): The color of the surrounding shape. run_time The duration of the entire animation. - kwargs : Any + kwargs Additional arguments to be passed to the :class:`~.Succession` constructor Examples diff --git a/manim/camera/camera.py b/manim/camera/camera.py index 81dfa78d0e..cdc625cc21 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -11,7 +11,7 @@ import pathlib import time from functools import reduce -from typing import Any +from typing import Any, Callable, Iterable import cairo import numpy as np @@ -36,42 +36,38 @@ class Camera: This is the object which takes care of what exactly is displayed on screen at any given moment. - - Some important configuration values and local variables to note are: - - background_image : :class:`str`, optional - The path to an image that should be the background image. - If not set, the background is filled with `self.background_color` - - pixel_height : :class:`int`, optional - The height of the scene in pixels. - """ def __init__( self, - background_image=None, - frame_center=ORIGIN, - image_mode="RGBA", - n_channels=4, - pixel_array_dtype="uint8", - z_buff_func=lambda m: np.round(m.get_center()[2], 2), - cairo_line_width_multiple=0.01, - use_z_index=True, - background=None, - pixel_height=None, - pixel_width=None, - frame_height=None, - frame_width=None, - frame_rate=None, + background_image: str | None = None, + frame_center: np.ndarray = ORIGIN, + image_mode: str = "RGBA", + n_channels: int = 4, + pixel_array_dtype: str = "uint8", + cairo_line_width_multiple: float = 0.01, + use_z_index: bool = True, + background: np.ndarray | None = None, + pixel_height: int | None = None, + pixel_width: int | None = None, + frame_height: float | None = None, + frame_width: float | None = None, + frame_rate: float | None = None, **kwargs, ): """Initialises the Camera. Parameters ---------- - background : optional + background_image + The path to an image that should be the background image. + If not set, the background is filled with `self.background_color` + background What self.background should be, by default None as will be set later. + pixel_height + The height of the scene in pixels. + pixel_width + The width of the scene in pixels. **kwargs Any local variables to be set. """ @@ -80,7 +76,6 @@ def __init__( self.image_mode = image_mode self.n_channels = n_channels self.pixel_array_dtype = pixel_array_dtype - self.z_buff_func = z_buff_func self.cairo_line_width_multiple = cairo_line_width_multiple self.use_z_index = use_z_index self.background = background @@ -149,7 +144,7 @@ def background_opacity(self, alpha): self._background_opacity = alpha self.init_background() - def type_or_raise(self, mobject): + def type_or_raise(self, mobject: Mobject): """Return the type of mobject, if it is a type that can be rendered. If `mobject` is an instance of a class that inherits from a class that @@ -159,7 +154,7 @@ def type_or_raise(self, mobject): Parameters ---------- - mobject : :class:`~.Mobject` + mobject The object to take the type of. Notes @@ -190,15 +185,15 @@ def type_or_raise(self, mobject): return _type raise TypeError(f"Displaying an object of class {_type} is not supported") - def reset_pixel_shape(self, new_height, new_width): + def reset_pixel_shape(self, new_height: float, new_width: float): """This method resets the height and width of a single pixel to the passed new_height and new_width. Parameters ---------- - new_height : int, float + new_height The new height of the entire scene in pixels - new_width : int, float + new_width The new width of the entire scene in pixels """ self.pixel_width = new_width @@ -207,7 +202,7 @@ def reset_pixel_shape(self, new_height, new_width): self.resize_frame_shape() self.reset() - def resize_frame_shape(self, fixed_dimension=0): + def resize_frame_shape(self, fixed_dimension: int = 0): """ Changes frame_shape to match the aspect ratio of the pixels, where fixed_dimension determines @@ -216,7 +211,7 @@ def resize_frame_shape(self, fixed_dimension=0): Parameters ---------- - fixed_dimension : int + fixed_dimension If 0, height is scaled with respect to width else, width is scaled with respect to height. """ @@ -258,14 +253,14 @@ def init_background(self): ) self.background[:, :] = background_rgba - def get_image(self, pixel_array=None): + def get_image(self, pixel_array: np.ndarray | list | tuple | None = None): """Returns an image from the passed pixel array, or from the current frame if the passed pixel array is none. Parameters ---------- - pixel_array : np.array, list, tuple, optional + pixel_array The pixel array from which to get an image, by default None Returns @@ -277,15 +272,17 @@ def get_image(self, pixel_array=None): pixel_array = self.pixel_array return Image.fromarray(pixel_array, mode=self.image_mode) - def convert_pixel_array(self, pixel_array, convert_from_floats=False): + def convert_pixel_array( + self, pixel_array: np.ndarray | list | tuple, convert_from_floats: bool = False + ): """Converts a pixel array from values that have floats in then to proper RGB values. Parameters ---------- - pixel_array : np.array, list, tuple + pixel_array Pixel array to convert. - convert_from_floats : bool, optional + convert_from_floats Whether or not to convert float values to ints, by default False Returns @@ -302,14 +299,16 @@ def convert_pixel_array(self, pixel_array, convert_from_floats=False): ) return retval - def set_pixel_array(self, pixel_array, convert_from_floats=False): + def set_pixel_array( + self, pixel_array: np.ndarray | list | tuple, convert_from_floats: bool = False + ): """Sets the pixel array of the camera to the passed pixel array. Parameters ---------- - pixel_array : np.array, list, tuple + pixel_array The pixel array to convert and then set as the camera's pixel array. - convert_from_floats : bool, optional + convert_from_floats Whether or not to convert float values to proper RGB values, by default False """ converted_array = self.convert_pixel_array(pixel_array, convert_from_floats) @@ -322,21 +321,25 @@ def set_pixel_array(self, pixel_array, convert_from_floats=False): # Set in place self.pixel_array[:, :, :] = converted_array[:, :, :] - def set_background(self, pixel_array, convert_from_floats=False): + def set_background( + self, pixel_array: np.ndarray | list | tuple, convert_from_floats: bool = False + ): """Sets the background to the passed pixel_array after converting to valid RGB values. Parameters ---------- - pixel_array : np.array, list, tuple + pixel_array The pixel array to set the background to. - convert_from_floats : bool, optional + convert_from_floats Whether or not to convert floats values to proper RGB valid ones, by default False """ self.background = self.convert_pixel_array(pixel_array, convert_from_floats) # TODO, this should live in utils, not as a method of Camera - def make_background_from_func(self, coords_to_colors_func): + def make_background_from_func( + self, coords_to_colors_func: Callable[[np.ndarray], np.ndarray] + ): """ Makes a pixel array for the background by using coords_to_colors_func to determine each pixel's color. Each input pixel's color. Each input to coords_to_colors_func is an (x, y) pair in space (in ordinary space coordinates; not @@ -344,7 +347,7 @@ def make_background_from_func(self, coords_to_colors_func): Parameters ---------- - coords_to_colors_func : function + coords_to_colors_func The function whose input is an (x,y) pair of coordinates and whose return values must be the colors for that point @@ -361,7 +364,9 @@ def make_background_from_func(self, coords_to_colors_func): return self.convert_pixel_array(new_background, convert_from_floats=True) - def set_background_from_func(self, coords_to_colors_func): + def set_background_from_func( + self, coords_to_colors_func: Callable[[np.ndarray], np.ndarray] + ): """ Sets the background to a pixel array using coords_to_colors_func to determine each pixel's color. Each input pixel's color. Each input to coords_to_colors_func is an (x, y) pair in space (in ordinary space coordinates; not @@ -369,7 +374,7 @@ def set_background_from_func(self, coords_to_colors_func): Parameters ---------- - coords_to_colors_func : function + coords_to_colors_func The function whose input is an (x,y) pair of coordinates and whose return values must be the colors for that point """ @@ -383,7 +388,7 @@ def reset(self): ------- Camera The camera object after setting the pixel array. - """ "" + """ self.set_pixel_array(self.background) return self @@ -394,20 +399,20 @@ def set_frame_to_background(self, background): def get_mobjects_to_display( self, - mobjects, - include_submobjects=True, - excluded_mobjects=None, + mobjects: Iterable[Mobject], + include_submobjects: bool = True, + excluded_mobjects: list | None = None, ): """Used to get the list of mobjects to display with the camera. Parameters ---------- - mobjects : Mobject + mobjects The Mobjects - include_submobjects : bool, optional + include_submobjects Whether or not to include the submobjects of mobjects, by default True - excluded_mobjects : list, optional + excluded_mobjects Any mobjects to exclude, by default None Returns @@ -427,15 +432,15 @@ def get_mobjects_to_display( use_z_index=self.use_z_index, ) mobjects = list_difference_update(mobjects, all_excluded) - return mobjects + return list(mobjects) - def is_in_frame(self, mobject): + def is_in_frame(self, mobject: Mobject): """Checks whether the passed mobject is in frame or not. Parameters ---------- - mobject : Mobject + mobject The mobject for which the checking needs to be done. Returns @@ -472,7 +477,7 @@ def capture_mobject(self, mobject: Mobject, **kwargs: Any): """ return self.capture_mobjects([mobject], **kwargs) - def capture_mobjects(self, mobjects, **kwargs): + def capture_mobjects(self, mobjects: Iterable[Mobject], **kwargs): """Capture mobjects by printing them on :attr:`pixel_array`. This is the essential function that converts the contents of a Scene @@ -480,10 +485,10 @@ def capture_mobjects(self, mobjects, **kwargs): Parameters ---------- - mobjects : :class:`~.Mobject` + mobjects Mobjects to capture. - kwargs : Any + kwargs Keyword arguments to be passed to :meth:`get_mobjects_to_display`. Notes @@ -507,13 +512,13 @@ def capture_mobjects(self, mobjects, **kwargs): # NOTE: None of the methods below have been mentioned outside of their definitions. Their DocStrings are not as # detailed as possible. - def get_cached_cairo_context(self, pixel_array): + def get_cached_cairo_context(self, pixel_array: np.ndarray): """Returns the cached cairo context of the passed pixel array if it exists, and None if it doesn't. Parameters ---------- - pixel_array : np.array + pixel_array The pixel array to check. Returns @@ -523,19 +528,19 @@ def get_cached_cairo_context(self, pixel_array): """ return self.pixel_array_to_cairo_context.get(id(pixel_array), None) - def cache_cairo_context(self, pixel_array, ctx): + def cache_cairo_context(self, pixel_array: np.ndarray, ctx: cairo.Context): """Caches the passed Pixel array into a Cairo Context Parameters ---------- - pixel_array : np.array + pixel_array The pixel array to cache - ctx : cairo.Context + ctx The context to cache it into. """ self.pixel_array_to_cairo_context[id(pixel_array)] = ctx - def get_cairo_context(self, pixel_array): + def get_cairo_context(self, pixel_array: np.ndarray): """Returns the cairo context for a pixel array after caching it to self.pixel_array_to_cairo_context If that array has already been cached, it returns the @@ -543,7 +548,7 @@ def get_cairo_context(self, pixel_array): Parameters ---------- - pixel_array : np.array + pixel_array The Pixel array to get the cairo context of. Returns @@ -580,14 +585,16 @@ def get_cairo_context(self, pixel_array): self.cache_cairo_context(pixel_array, ctx) return ctx - def display_multiple_vectorized_mobjects(self, vmobjects, pixel_array): + def display_multiple_vectorized_mobjects( + self, vmobjects: list, pixel_array: np.ndarray + ): """Displays multiple VMobjects in the pixel_array Parameters ---------- - vmobjects : list + vmobjects list of VMobjects to display - pixel_array : np.array + pixel_array The pixel array """ if len(vmobjects) == 0: @@ -602,29 +609,31 @@ def display_multiple_vectorized_mobjects(self, vmobjects, pixel_array): pixel_array, ) - def display_multiple_non_background_colored_vmobjects(self, vmobjects, pixel_array): + def display_multiple_non_background_colored_vmobjects( + self, vmobjects: list, pixel_array: np.ndarray + ): """Displays multiple VMobjects in the cairo context, as long as they don't have background colors. Parameters ---------- - vmobjects : list + vmobjects list of the VMobjects - pixel_array : np.ndarray + pixel_array The Pixel array to add the VMobjects to. """ ctx = self.get_cairo_context(pixel_array) for vmobject in vmobjects: self.display_vectorized(vmobject, ctx) - def display_vectorized(self, vmobject, ctx): + def display_vectorized(self, vmobject: VMobject, ctx: cairo.Context): """Displays a VMobject in the cairo context Parameters ---------- - vmobject : VMobject + vmobject The Vectorized Mobject to display - ctx : cairo.Context + ctx The cairo context to use. Returns @@ -638,14 +647,14 @@ def display_vectorized(self, vmobject, ctx): self.apply_stroke(ctx, vmobject) return self - def set_cairo_context_path(self, ctx, vmobject): + def set_cairo_context_path(self, ctx: cairo.Context, vmobject: VMobject): """Sets a path for the cairo context with the vmobject passed Parameters ---------- - ctx : cairo.Context + ctx The cairo context - vmobject : VMobject + vmobject The VMobject Returns @@ -672,16 +681,18 @@ def set_cairo_context_path(self, ctx, vmobject): ctx.close_path() return self - def set_cairo_context_color(self, ctx, rgbas, vmobject): + def set_cairo_context_color( + self, ctx: cairo.Context, rgbas: np.ndarray, vmobject: VMobject + ): """Sets the color of the cairo context Parameters ---------- - ctx : cairo.Context + ctx The cairo context - rgbas : np.ndarray + rgbas The RGBA array with which to color the context. - vmobject : VMobject + vmobject The VMobject with which to set the color. Returns @@ -704,14 +715,14 @@ def set_cairo_context_color(self, ctx, rgbas, vmobject): ctx.set_source(pat) return self - def apply_fill(self, ctx, vmobject): + def apply_fill(self, ctx: cairo.Context, vmobject: VMobject): """Fills the cairo context Parameters ---------- - ctx : cairo.Context + ctx The cairo context - vmobject : VMobject + vmobject The VMobject Returns @@ -723,16 +734,18 @@ def apply_fill(self, ctx, vmobject): ctx.fill_preserve() return self - def apply_stroke(self, ctx, vmobject, background=False): + def apply_stroke( + self, ctx: cairo.Context, vmobject: VMobject, background: bool = False + ): """Applies a stroke to the VMobject in the cairo context. Parameters ---------- - ctx : cairo.Context + ctx The cairo context - vmobject : VMobject + vmobject The VMobject - background : bool, optional + background Whether or not to consider the background when applying this stroke width, by default False @@ -758,15 +771,15 @@ def apply_stroke(self, ctx, vmobject, background=False): ctx.stroke_preserve() return self - def get_stroke_rgbas(self, vmobject, background=False): + def get_stroke_rgbas(self, vmobject: VMobject, background: bool = False): """Gets the RGBA array for the stroke of the passed VMobject. Parameters ---------- - vmobject : VMobject + vmobject The VMobject - background : bool, optional + background Whether or not to consider the background when getting the stroke RGBAs, by default False @@ -777,12 +790,12 @@ def get_stroke_rgbas(self, vmobject, background=False): """ return vmobject.get_stroke_rgbas(background) - def get_fill_rgbas(self, vmobject): + def get_fill_rgbas(self, vmobject: VMobject): """Returns the RGBA array of the fill of the passed VMobject Parameters ---------- - vmobject : VMobject + vmobject The VMobject Returns @@ -808,14 +821,16 @@ def get_background_colored_vmobject_displayer(self): setattr(self, bcvd, BackgroundColoredVMobjectDisplayer(self)) return getattr(self, bcvd) - def display_multiple_background_colored_vmobjects(self, cvmobjects, pixel_array): + def display_multiple_background_colored_vmobjects( + self, cvmobjects: list, pixel_array: np.ndarray + ): """Displays multiple vmobjects that have the same color as the background. Parameters ---------- - cvmobjects : list + cvmobjects List of Colored VMobjects - pixel_array : np.array + pixel_array The pixel array. Returns @@ -833,14 +848,16 @@ def display_multiple_background_colored_vmobjects(self, cvmobjects, pixel_array) # NOTE: Out of the following methods, only `transform_points_pre_display` and `points_to_pixel_coords` have been mentioned outside of their definitions. # As a result, the other methods do not have as detailed docstrings as would be preferred. - def display_multiple_point_cloud_mobjects(self, pmobjects, pixel_array): + def display_multiple_point_cloud_mobjects( + self, pmobjects: list, pixel_array: np.ndarray + ): """Displays multiple PMobjects by modifying the passed pixel array. Parameters ---------- - pmobjects : list + pmobjects List of PMobjects - pixel_array : np.array + pixel_array The pixel array to modify. """ for pmobject in pmobjects: @@ -852,20 +869,27 @@ def display_multiple_point_cloud_mobjects(self, pmobjects, pixel_array): pixel_array, ) - def display_point_cloud(self, pmobject, points, rgbas, thickness, pixel_array): + def display_point_cloud( + self, + pmobject: PMobject, + points: list, + rgbas: np.ndarray, + thickness: float, + pixel_array: np.ndarray, + ): """Displays a PMobject by modifying the Pixel array suitably.. TODO: Write a description for the rgbas argument. Parameters ---------- - pmobject : PMobject + pmobject Point Cloud Mobject - points : list + points The points to display in the point cloud mobject - rgbas : np.array + rgbas - thickness : int, float + thickness The thickness of each point of the PMobject - pixel_array : np.array + pixel_array The pixel array to modify. """ @@ -896,27 +920,31 @@ def display_point_cloud(self, pmobject, points, rgbas, thickness, pixel_array): new_pa[indices] = rgbas pixel_array[:, :] = new_pa.reshape((ph, pw, rgba_len)) - def display_multiple_image_mobjects(self, image_mobjects, pixel_array): + def display_multiple_image_mobjects( + self, image_mobjects: list, pixel_array: np.ndarray + ): """Displays multiple image mobjects by modifying the passed pixel_array. Parameters ---------- - image_mobjects : list + image_mobjects list of ImageMobjects - pixel_array : np.array + pixel_array The pixel array to modify. """ for image_mobject in image_mobjects: self.display_image_mobject(image_mobject, pixel_array) - def display_image_mobject(self, image_mobject: AbstractImageMobject, pixel_array): + def display_image_mobject( + self, image_mobject: AbstractImageMobject, pixel_array: np.ndarray + ): """Displays an ImageMobject by changing the pixel_array suitably. Parameters ---------- - image_mobject : ImageMobject + image_mobject The imageMobject to display - pixel_array : np.ndarray + pixel_array The Pixel array to put the imagemobject in. """ corner_coords = self.points_to_pixel_coords(image_mobject, image_mobject.points) @@ -966,26 +994,26 @@ def display_image_mobject(self, image_mobject: AbstractImageMobject, pixel_array # Paint on top of existing pixel array self.overlay_PIL_image(pixel_array, full_image) - def overlay_rgba_array(self, pixel_array, new_array): + def overlay_rgba_array(self, pixel_array: np.ndarray, new_array: np.ndarray): """Overlays an RGBA array on top of the given Pixel array. Parameters ---------- - pixel_array : np.array + pixel_array The original pixel array to modify. - new_array : np.array + new_array The new pixel array to overlay. """ self.overlay_PIL_image(pixel_array, self.get_image(new_array)) - def overlay_PIL_image(self, pixel_array, image): + def overlay_PIL_image(self, pixel_array: np.ndarray, image: Image): """Overlays a PIL image on the passed pixel array. Parameters ---------- - pixel_array : np.ndarray + pixel_array The Pixel array - image : PIL.Image + image The Image to overlay. """ pixel_array[:, :] = np.array( @@ -993,13 +1021,13 @@ def overlay_PIL_image(self, pixel_array, image): dtype="uint8", ) - def adjust_out_of_range_points(self, points): + def adjust_out_of_range_points(self, points: np.ndarray): """If any of the points in the passed array are out of the viable range, they are adjusted suitably. Parameters ---------- - points : np.array + points The points to adjust Returns @@ -1061,13 +1089,13 @@ def points_to_pixel_coords( result[:, 1] = shifted_points[:, 1] * height_mult + height_add return result.astype("int") - def on_screen_pixels(self, pixel_coords): + def on_screen_pixels(self, pixel_coords: np.ndarray): """Returns array of pixels that are on the screen from a given array of pixel_coordinates Parameters ---------- - pixel_coords : np.array + pixel_coords The pixel coords to check. Returns @@ -1085,12 +1113,12 @@ def on_screen_pixels(self, pixel_coords): ], ) - def adjusted_thickness(self, thickness): + def adjusted_thickness(self, thickness: float): """ Parameters ---------- - thickness : int, float + thickness Returns ------- @@ -1103,12 +1131,12 @@ def adjusted_thickness(self, thickness): factor = big_sum / this_sum return 1 + (thickness - 1) * factor - def get_thickening_nudges(self, thickness): + def get_thickening_nudges(self, thickness: float): """ Parameters ---------- - thickness : int, float + thickness Returns ------- @@ -1119,15 +1147,15 @@ def get_thickening_nudges(self, thickness): _range = list(range(-thickness // 2 + 1, thickness // 2 + 1)) return np.array(list(it.product(_range, _range))) - def thickened_coordinates(self, pixel_coords, thickness): + def thickened_coordinates(self, pixel_coords: np.ndarray, thickness: float): """Returns thickened coordinates for a passed array of pixel coords and a thickness to thicken by. Parameters ---------- - pixel_coords : np.array + pixel_coords Pixel coordinates - thickness : int, float + thickness Thickness Returns @@ -1178,11 +1206,11 @@ def get_coords_of_all_pixels(self): # NOTE: The methods of the following class have not been mentioned outside of their definitions. # Their DocStrings are not as detailed as preferred. class BackgroundColoredVMobjectDisplayer: - def __init__(self, camera): + def __init__(self, camera: Camera): """ Parameters ---------- - camera : Camera + camera Camera object to use. """ self.camera = camera @@ -1195,22 +1223,22 @@ def reset_pixel_array(self): def resize_background_array( self, - background_array, - new_width, - new_height, - mode="RGBA", + background_array: np.ndarray, + new_width: float, + new_height: float, + mode: str = "RGBA", ): """Resizes the pixel array representing the background. Parameters ---------- - background_array : np.array + background_array The pixel - new_width : int, float + new_width The new width of the background - new_height : int, float + new_height The new height of the background - mode : str, optional + mode The PIL image mode, by default "RGBA" Returns @@ -1223,14 +1251,16 @@ def resize_background_array( resized_image = image.resize((new_width, new_height)) return np.array(resized_image) - def resize_background_array_to_match(self, background_array, pixel_array): + def resize_background_array_to_match( + self, background_array: np.ndarray, pixel_array: np.ndarray + ): """Resizes the background array to match the passed pixel array. Parameters ---------- - background_array : np.array + background_array The prospective pixel array. - pixel_array : np.array + pixel_array The pixel array whose width and height should be matched. Returns @@ -1271,12 +1301,12 @@ def get_background_array(self, image: Image.Image | pathlib.Path | str): self.file_name_to_pixel_array_map[image_key] = back_array return back_array - def display(self, *cvmobjects): + def display(self, *cvmobjects: VMobject): """Displays the colored VMobjects. Parameters ---------- - *cvmobjects : VMobject + *cvmobjects The VMobjects Returns diff --git a/manim/camera/moving_camera.py b/manim/camera/moving_camera.py index 22d6be22ed..1d01d01e22 100644 --- a/manim/camera/moving_camera.py +++ b/manim/camera/moving_camera.py @@ -10,6 +10,8 @@ __all__ = ["MovingCamera"] +import numpy as np + from .. import config from ..camera.camera import Camera from ..constants import DOWN, LEFT, RIGHT, UP @@ -87,34 +89,34 @@ def frame_center(self): return self.frame.get_center() @frame_height.setter - def frame_height(self, frame_height): + def frame_height(self, frame_height: float): """Sets the height of the frame in MUnits. Parameters ---------- - frame_height : int, float + frame_height The new frame_height. """ self.frame.stretch_to_fit_height(frame_height) @frame_width.setter - def frame_width(self, frame_width): + def frame_width(self, frame_width: float): """Sets the width of the frame in MUnits. Parameters ---------- - frame_width : int, float + frame_width The new frame_width. """ self.frame.stretch_to_fit_width(frame_width) @frame_center.setter - def frame_center(self, frame_center): + def frame_center(self, frame_center: np.ndarray | list | tuple | Mobject): """Sets the centerpoint of the frame. Parameters ---------- - frame_center : np.array, list, tuple, Mobject + frame_center The point to which the frame must be moved. If is of type mobject, the frame will be moved to the center of that mobject. diff --git a/manim/camera/multi_camera.py b/manim/camera/multi_camera.py index a9eb74969b..a5202135e9 100644 --- a/manim/camera/multi_camera.py +++ b/manim/camera/multi_camera.py @@ -5,6 +5,8 @@ __all__ = ["MultiCamera"] +from manim.mobject.types.image_mobject import ImageMobject + from ..camera.moving_camera import MovingCamera from ..utils.iterables import list_difference_update @@ -14,7 +16,7 @@ class MultiCamera(MovingCamera): def __init__( self, - image_mobjects_from_cameras=None, + image_mobjects_from_cameras: ImageMobject | None = None, allow_cameras_to_capture_their_own_display=False, **kwargs, ): @@ -22,7 +24,7 @@ def __init__( Parameters ---------- - image_mobjects_from_cameras : ImageMobject + image_mobjects_from_cameras kwargs Any valid keyword arguments of MovingCamera. @@ -36,13 +38,13 @@ def __init__( ) super().__init__(**kwargs) - def add_image_mobject_from_camera(self, image_mobject_from_camera): + def add_image_mobject_from_camera(self, image_mobject_from_camera: ImageMobject): """Adds an ImageMobject that's been obtained from the camera into the list ``self.image_mobject_from_cameras`` Parameters ---------- - image_mobject_from_camera : ImageMobject + image_mobject_from_camera The ImageMobject to add to self.image_mobject_from_cameras """ # A silly method to have right now, but maybe there are things diff --git a/manim/camera/three_d_camera.py b/manim/camera/three_d_camera.py index 863cf03e86..87b48f9fa0 100644 --- a/manim/camera/three_d_camera.py +++ b/manim/camera/three_d_camera.py @@ -5,8 +5,11 @@ __all__ = ["ThreeDCamera"] +from typing import Callable + import numpy as np +from manim.mobject.mobject import Mobject from manim.mobject.three_d.three_d_utils import ( get_3d_vmob_end_corner, get_3d_vmob_end_corner_unit_normal, @@ -43,8 +46,6 @@ def __init__( Parameters ---------- - *args - Any argument of Camera *kwargs Any keyword argument of Camera. """ @@ -197,52 +198,52 @@ def get_zoom(self): """ return self.zoom_tracker.get_value() - def set_phi(self, value): + def set_phi(self, value: float): """Sets the polar angle i.e the angle between Z_AXIS and Camera through ORIGIN in radians. Parameters ---------- - value : int, float + value The new value of the polar angle in radians. """ self.phi_tracker.set_value(value) - def set_theta(self, value): + def set_theta(self, value: float): """Sets the azimuthal angle i.e the angle that spins the camera around Z_AXIS in radians. Parameters ---------- - value : int, float + value The new value of the azimuthal angle in radians. """ self.theta_tracker.set_value(value) - def set_focal_distance(self, value): + def set_focal_distance(self, value: float): """Sets the focal_distance of the Camera. Parameters ---------- - value : int, float + value The focal_distance of the Camera. """ self.focal_distance_tracker.set_value(value) - def set_gamma(self, value): + def set_gamma(self, value: float): """Sets the angle of rotation of the camera about the vector from the ORIGIN to the Camera. Parameters ---------- - value : int, float + value The new angle of rotation of the camera. """ self.gamma_tracker.set_value(value) - def set_zoom(self, value): + def set_zoom(self, value: float): """Sets the zoom amount of the camera. Parameters ---------- - value : int, float + value The zoom amount of the camera. """ self.zoom_tracker.set_value(value) @@ -284,13 +285,13 @@ def generate_rotation_matrix(self): result = np.dot(matrix, result) return result - def project_points(self, points): + def project_points(self, points: np.ndarray | list): """Applies the current rotation_matrix as a projection matrix to the passed array of points. Parameters ---------- - points : np.array, list + points The list of points to project. Returns @@ -321,13 +322,13 @@ def project_points(self, points): points[:, i] *= factor * zoom return points - def project_point(self, point): + def project_point(self, point: list | np.ndarray): """Applies the current rotation_matrix as a projection matrix to the passed point. Parameters ---------- - point : list, np.array + point The point to project. Returns @@ -357,7 +358,10 @@ def transform_points_pre_display( return self.project_points(points) def add_fixed_orientation_mobjects( - self, *mobjects, use_static_center_func=False, center_func=None + self, + *mobjects: Mobject, + use_static_center_func: bool = False, + center_func: Callable[[], np.ndarray] | None = None, ): """This method allows the mobject to have a fixed orientation, even when the camera moves around. @@ -367,12 +371,12 @@ def add_fixed_orientation_mobjects( Parameters ---------- - *mobjects : Mobject + *mobjects The mobject whose orientation must be fixed. - use_static_center_func : bool, optional + use_static_center_func Whether or not to use the function that takes the mobject's center as centerpoint, by default False - center_func : func, optional + center_func The function which returns the centerpoint with respect to which the mobject will be oriented, by default None """ @@ -392,7 +396,7 @@ def get_static_center_func(mobject): for submob in mobject.get_family(): self.fixed_orientation_mobjects[submob] = func - def add_fixed_in_frame_mobjects(self, *mobjects): + def add_fixed_in_frame_mobjects(self, *mobjects: Mobject): """This method allows the mobject to have a fixed position, even when the camera moves around. E.G If it was passed through this method, at the top of the frame, it @@ -402,34 +406,34 @@ def add_fixed_in_frame_mobjects(self, *mobjects): Parameters ---------- - **mobjects : Mobject + **mobjects The mobject to fix in frame. """ for mobject in extract_mobject_family_members(mobjects): self.fixed_in_frame_mobjects.add(mobject) - def remove_fixed_orientation_mobjects(self, *mobjects): + def remove_fixed_orientation_mobjects(self, *mobjects: Mobject): """If a mobject was fixed in its orientation by passing it through :meth:`.add_fixed_orientation_mobjects`, then this undoes that fixing. The Mobject will no longer have a fixed orientation. Parameters ---------- - mobjects : :class:`Mobject` + mobjects The mobjects whose orientation need not be fixed any longer. """ for mobject in extract_mobject_family_members(mobjects): if mobject in self.fixed_orientation_mobjects: del self.fixed_orientation_mobjects[mobject] - def remove_fixed_in_frame_mobjects(self, *mobjects): + def remove_fixed_in_frame_mobjects(self, *mobjects: Mobject): """If a mobject was fixed in frame by passing it through :meth:`.add_fixed_in_frame_mobjects`, then this undoes that fixing. The Mobject will no longer be fixed in frame. Parameters ---------- - mobjects : :class:`Mobject` + mobjects The mobjects which need not be fixed in frame any longer. """ for mobject in extract_mobject_family_members(mobjects): diff --git a/manim/cli/cfg/group.py b/manim/cli/cfg/group.py index 44fdff5ac6..bc04f66820 100644 --- a/manim/cli/cfg/group.py +++ b/manim/cli/cfg/group.py @@ -33,7 +33,7 @@ def value_from_string(value: str) -> str | int | bool: """Extracts the literal of proper datatype from a string. Parameters ---------- - value : :class:`str` + value The value to check get the literal from. Returns @@ -54,12 +54,12 @@ def _is_expected_datatype(value: str, expected: str, style: bool = False) -> boo Parameters ---------- - value : :class:`str` + value The string of the value to check (obtained from reading the user input). - expected : :class:`str` + expected The string of the literal datatype must be matched by `value`. Obtained from reading the cfg file. - style : :class:`bool`, optional + style Whether or not to confirm if `value` is a style, by default False Returns @@ -77,7 +77,7 @@ def is_valid_style(style: str) -> bool: """Checks whether the entered color is a valid color according to rich Parameters ---------- - style : :class:`str` + style The style to check whether it is valid. Returns ------- @@ -95,7 +95,7 @@ def replace_keys(default: dict) -> dict: """Replaces _ to . and vice versa in a dictionary for rich Parameters ---------- - default : :class:`dict` + default The dictionary to check and replace Returns ------- diff --git a/manim/cli/init/commands.py b/manim/cli/init/commands.py index ef4a20188e..67dc751646 100644 --- a/manim/cli/init/commands.py +++ b/manim/cli/init/commands.py @@ -54,14 +54,14 @@ def select_resolution(): return [res for res in resolution_options if f"{res[0]}p" == choice][0] -def update_cfg(cfg_dict, project_cfg_path): +def update_cfg(cfg_dict: dict, project_cfg_path: Path): """Updates the manim.cfg file after reading it from the project_cfg_path. Parameters ---------- - cfg : :class:`dict` + cfg_dict values used to update manim.cfg found project_cfg_path. - project_cfg_path : :class:`Path` + project_cfg_path Path of manim.cfg file. """ config = configparser.ConfigParser() diff --git a/manim/cli/new/group.py b/manim/cli/new/group.py index 8406982615..6058102695 100644 --- a/manim/cli/new/group.py +++ b/manim/cli/new/group.py @@ -47,14 +47,14 @@ def select_resolution(): return [res for res in resolution_options if f"{res[0]}p" == choice][0] -def update_cfg(cfg_dict, project_cfg_path): +def update_cfg(cfg_dict: dict, project_cfg_path: Path): """Updates the manim.cfg file after reading it from the project_cfg_path. Parameters ---------- - cfg : :class:`dict` + cfg_dict values used to update manim.cfg found project_cfg_path. - project_cfg_path : :class:`Path` + project_cfg_path Path of manim.cfg file. """ config = configparser.ConfigParser() diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index cd9e60869d..4189813745 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -14,7 +14,7 @@ "RightAngle", ] -from typing import Sequence +from typing import Any, Sequence import numpy as np from colour import Color @@ -28,6 +28,7 @@ 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 @@ -190,13 +191,13 @@ class DashedLine(Line): Parameters ---------- - args : Any + args Arguments to be passed to :class:`Line` - dash_length : :class:`float`, optional + dash_length The length of each individual dash of the line. - dashed_ratio : :class:`float`, optional + dashed_ratio The ratio of dash space to empty space. Range of 0-1. - kwargs : Any + kwargs Additional arguments to be passed to :class:`Line` @@ -221,9 +222,9 @@ def construct(self): def __init__( self, - *args, - dash_length=DEFAULT_DASH_LENGTH, - dashed_ratio=0.5, + *args: Any, + dash_length: float = DEFAULT_DASH_LENGTH, + dashed_ratio: float = 0.5, **kwargs, ): self.dash_length = dash_length @@ -318,15 +319,15 @@ class TangentLine(Line): Parameters ---------- - vmob : :class:`~.VMobject` + vmob The VMobject on which the tangent line is drawn. - alpha : :class:`float` + alpha How far along the shape that the line will be constructed. range: 0-1. - length : :class:`float`, optional + length Length of the tangent line. - d_alpha: :class:`float`, optional + d_alpha The ``dx`` value - kwargs : Any + kwargs Additional arguments to be passed to :class:`Line` @@ -346,7 +347,14 @@ def construct(self): self.add(circle, line_1, line_2) """ - def __init__(self, vmob, alpha, length=1, d_alpha=1e-6, **kwargs): + def __init__( + self, + vmob: VMobject, + alpha: float, + length: float = 1, + d_alpha: float = 1e-6, + **kwargs, + ): self.length = length self.d_alpha = d_alpha da = self.d_alpha @@ -363,11 +371,11 @@ class Elbow(VMobject, metaclass=ConvertToOpenGL): Parameters ---------- - width : :class:`float`, optional + width The length of the elbow's sides. - angle : :class:`float`, optional + angle The rotation of the elbow. - kwargs : Any + kwargs Additional arguments to be passed to :class:`~.VMobject` .. seealso:: @@ -388,7 +396,7 @@ def construct(self): self.add(elbow_group) """ - def __init__(self, width=0.2, angle=0, **kwargs): + def __init__(self, width: float = 0.2, angle: float = 0, **kwargs): self.angle = angle super().__init__(**kwargs) self.set_points_as_corners([UP, UP + RIGHT, RIGHT]) @@ -401,17 +409,17 @@ class Arrow(Line): Parameters ---------- - args : Any + args Arguments to be passed to :class:`Line`. - stroke_width : :class:`float`, optional + stroke_width The thickness of the arrow. Influenced by :attr:`max_stroke_width_to_length_ratio`. - buff : :class:`float`, optional + buff The distance of the arrow from its start and end points. - max_tip_length_to_length_ratio : :class:`float`, optional + max_tip_length_to_length_ratio :attr:`tip_length` scales with the length of the arrow. Increasing this ratio raises the max value of :attr:`tip_length`. - max_stroke_width_to_length_ratio : :class:`float`, optional + max_stroke_width_to_length_ratio :attr:`stroke_width` scales with the length of the arrow. Increasing this ratio ratios the max value of :attr:`stroke_width`. - kwargs : Any + kwargs Additional arguments to be passed to :class:`Line`. @@ -486,11 +494,11 @@ def construct(self): def __init__( self, - *args, - stroke_width=6, - buff=MED_SMALL_BUFF, - max_tip_length_to_length_ratio=0.25, - max_stroke_width_to_length_ratio=5, + *args: Any, + 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, ): self.max_tip_length_to_length_ratio = max_tip_length_to_length_ratio @@ -608,11 +616,11 @@ class Vector(Arrow): Parameters ---------- - direction : Union[:class:`list`, :class:`numpy.ndarray`] + direction The direction of the arrow. - buff : :class:`float` + buff The distance of the vector from its endpoints. - kwargs : Any + kwargs Additional arguments to be passed to :class:`Arrow` Examples @@ -628,7 +636,7 @@ def construct(self): self.add(plane, vector_1, vector_2) """ - def __init__(self, direction=RIGHT, buff=0, **kwargs): + def __init__(self, direction: list | np.ndarray = RIGHT, buff: float = 0, **kwargs): self.buff = buff if len(direction) == 2: direction = np.hstack([direction, 0]) @@ -704,9 +712,9 @@ class DoubleArrow(Arrow): Parameters ---------- - args : Any + args Arguments to be passed to :class:`Arrow` - kwargs : Any + kwargs Additional arguments to be passed to :class:`Arrow` @@ -744,7 +752,7 @@ def construct(self): self.add(box, d1, d2, d3) """ - def __init__(self, *args, **kwargs): + def __init__(self, *args: Any, **kwargs): if "tip_shape_end" in kwargs: kwargs["tip_shape"] = kwargs.pop("tip_shape_end") tip_shape_start = kwargs.pop("tip_shape_start", ArrowTriangleFilledTip) @@ -763,7 +771,7 @@ class Angle(VMobject, metaclass=ConvertToOpenGL): The second line. radius : The radius of the :class:`Arc`. - quadrant : Sequence[:class:`int`] + quadrant A sequence of two :class:`int` numbers determining which of the 4 quadrants should be used. The first value indicates whether to anchor the arc on the first line closer to the end point (1) or start point (-1), and the second value functions similarly for the @@ -773,16 +781,16 @@ class Angle(VMobject, metaclass=ConvertToOpenGL): Toggles between the two possible angles defined by two points and an arc center. If set to False (default), the arc will always go counterclockwise from the point on line1 until the point on line2 is reached. If set to True, the angle will go clockwise from line1 to line2. - dot : :class:`bool` + dot Allows for a :class:`Dot` in the arc. Mainly used as an convention to indicate a right angle. The dot can be customized in the next three parameters. - dot_radius : :class:`float` + dot_radius The radius of the :class:`Dot`. If not specified otherwise, this radius will be 1/10 of the arc radius. - dot_distance : :class:`float` + dot_distance Relative distance from the center to the arc: 0 puts the dot in the center and 1 on the arc itself. - dot_color : :class:`~.Colors` + dot_color The color of the :class:`Dot`. - elbow : :class:`bool` + elbow Produces an elbow-type mobject indicating a right angle, see :class:`RightAngle` for more information and a shorthand. **kwargs @@ -866,13 +874,13 @@ def __init__( line1: Line, line2: Line, radius: float = None, - quadrant=(1, 1), + quadrant: Sequence[int] = (1, 1), other_angle: bool = False, - dot=False, - dot_radius=None, - dot_distance=0.55, - dot_color=WHITE, - elbow=False, + dot: bool = False, + dot_radius: float | None = None, + dot_distance: float = 0.55, + dot_color: Colors = WHITE, + elbow: bool = False, **kwargs, ): super().__init__(**kwargs) diff --git a/manim/mobject/geometry/polygram.py b/manim/mobject/geometry/polygram.py index dbc1e77fae..f96557525e 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -478,7 +478,7 @@ class Triangle(RegularPolygon): Parameters ---------- - kwargs : Any + kwargs Additional arguments to be passed to :class:`RegularPolygon` Examples @@ -503,21 +503,21 @@ class Rectangle(Polygon): Parameters ---------- - color : :class:`~.Colors`, optional + color The color of the rectangle. - height : :class:`float`, optional + height The vertical height of the rectangle. - width : :class:`float`, optional + width The horizontal width of the rectangle. - grid_xstep : :class:`float`, optional + grid_xstep Space between vertical grid lines. - grid_ystep : :class:`float`, optional + grid_ystep Space between horizontal grid lines. - mark_paths_closed : :class:`bool`, optional + mark_paths_closed No purpose. - close_new_points : :class:`bool`, optional + close_new_points No purpose. - kwargs : Any + kwargs Additional arguments to be passed to :class:`Polygon` Examples @@ -541,8 +541,8 @@ def __init__( width: float = 4.0, grid_xstep: float | None = None, grid_ystep: float | None = None, - mark_paths_closed=True, - close_new_points=True, + mark_paths_closed: bool = True, + close_new_points: bool = True, **kwargs, ): super().__init__(UR, UL, DL, DR, color=color, **kwargs) @@ -586,9 +586,9 @@ class Square(Rectangle): Parameters ---------- - side_length : :class:`float`, optional + side_length The length of the sides of the square. - kwargs : Any + kwargs Additional arguments to be passed to :class:`Rectangle`. Examples @@ -604,7 +604,7 @@ def construct(self): self.add(square_1, square_2, square_3) """ - def __init__(self, side_length=2.0, **kwargs): + def __init__(self, side_length: float = 2.0, **kwargs): self.side_length = side_length super().__init__(height=side_length, width=side_length, **kwargs) @@ -614,9 +614,9 @@ class RoundedRectangle(Rectangle): Parameters ---------- - corner_radius : :class:`float`, optional + corner_radius The curvature of the corners of the rectangle. - kwargs : Any + kwargs Additional arguments to be passed to :class:`Rectangle` Examples @@ -633,7 +633,7 @@ def construct(self): self.add(rect_group) """ - def __init__(self, corner_radius=0.5, **kwargs): + def __init__(self, corner_radius: float = 0.5, **kwargs): super().__init__(**kwargs) self.corner_radius = corner_radius self.round_corners(self.corner_radius) @@ -644,9 +644,9 @@ class Cutout(VMobject, metaclass=ConvertToOpenGL): Parameters ---------- - main_shape : :class:`~.VMobject` + main_shape The primary shape from which cutouts are made. - mobjects : :class:`~.VMobject` + mobjects The smaller shapes which are to be cut out of the ``main_shape``. kwargs Further keyword arguments that are passed to the constructor of @@ -674,7 +674,7 @@ def construct(self): self.wait() """ - def __init__(self, main_shape, *mobjects, **kwargs): + def __init__(self, main_shape: VMobject, *mobjects: VMobject, **kwargs): 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 4376213ef9..b2eec1c724 100644 --- a/manim/mobject/geometry/shape_matchers.py +++ b/manim/mobject/geometry/shape_matchers.py @@ -169,11 +169,6 @@ def __init__( class Underline(Line): """Creates an underline. - Parameters - ---------- - Line - The underline. - Examples -------- .. manim:: UnderLine diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index cafea17c9b..aa56c9358a 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -592,14 +592,12 @@ def _create_label_tex( self, label_tex: str | float | VMobject, **kwargs ) -> VMobject: """Checks if the label is a :class:`~.VMobject`, otherwise, creates a - label according to the ``label_constructor``. + label according to :attr:`label_constructor`. Parameters ---------- label_tex The label to be compared against the above types. - label_constructor - The VMobject class used to construct the label. Returns ------- diff --git a/manim/mobject/graphing/scale.py b/manim/mobject/graphing/scale.py index 0e570a6a1a..bee130ffd2 100644 --- a/manim/mobject/graphing/scale.py +++ b/manim/mobject/graphing/scale.py @@ -122,7 +122,7 @@ def __init__(self, base: float = 10, custom_labels: bool = True): ---------- base The base of the log, by default 10. - custom_labels : bool, optional + custom_labels For use with :class:`~.Axes`: Whetherer or not to include ``LaTeX`` axis labels, by default True. diff --git a/manim/mobject/matrix.py b/manim/mobject/matrix.py index f5aadf00e8..f8cc6b0af2 100644 --- a/manim/mobject/matrix.py +++ b/manim/mobject/matrix.py @@ -44,6 +44,7 @@ def construct(self): import numpy as np +from manim.mobject.mobject import Mobject from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.text.numbers import DecimalNumber, Integer from manim.mobject.text.tex_mobject import MathTex, Tex @@ -227,16 +228,16 @@ def _organize_mob_matrix(self, matrix): ) return self - def _add_brackets(self, left="[", right="]", **kwargs): + def _add_brackets(self, left: str = "[", right: str = "]", **kwargs): """Adds the brackets to the Matrix mobject. See Latex document for various bracket types. Parameters ---------- - left : :class:`str`, optional + left the left bracket, by default "[" - right : :class:`str`, optional + right the right bracket, by default "]" Returns @@ -310,12 +311,12 @@ def construct(self): ) ) - def set_column_colors(self, *colors): + def set_column_colors(self, *colors: str): """Set individual colors for each columns of the matrix. Parameters ---------- - colors : :class:`str` + colors The list of colors; each color specified corresponds to a column. Returns @@ -362,12 +363,12 @@ def construct(self): """ return VGroup(*(VGroup(*row) for row in self.mob_matrix)) - def set_row_colors(self, *colors): + def set_row_colors(self, *colors: str): """Set individual colors for each row of the matrix. Parameters ---------- - colors : :class:`str` + colors The list of colors; each color specified corresponds to a row. Returns @@ -487,9 +488,9 @@ def construct(self): def __init__( self, - matrix, - element_to_mobject=DecimalNumber, - element_to_mobject_config={"num_decimal_places": 1}, + matrix: Iterable, + element_to_mobject: Mobject = DecimalNumber, + element_to_mobject_config: dict[str, Mobject] = {"num_decimal_places": 1}, **kwargs, ): """ @@ -497,11 +498,11 @@ def __init__( Parameters ---------- - matrix : :class:`typing.Iterable` + matrix A numpy 2d array or list of lists - element_to_mobject : :class:`~.Mobject`, optional + element_to_mobject Mobject to use, by default DecimalNumber - element_to_mobject_config : Dict[:class:`str`, :class:`~.Mobject`], optional + element_to_mobject_config Config for the desired mobject, by default {"num_decimal_places": 1} """ super().__init__( @@ -530,15 +531,17 @@ def construct(self): self.add(m0) """ - def __init__(self, matrix, element_to_mobject=Integer, **kwargs): + def __init__( + self, matrix: Iterable, element_to_mobject: Mobject = Integer, **kwargs + ): """ Will round if there are decimal entries in the matrix. Parameters ---------- - matrix : :class:`typing.Iterable` + matrix A numpy 2d array or list of lists - element_to_mobject : :class:`~.Mobject`, optional + element_to_mobject Mobject to use, by default Integer """ super().__init__(matrix, element_to_mobject=element_to_mobject, **kwargs) @@ -568,25 +571,25 @@ def __init__(self, matrix, element_to_mobject=lambda m: m, **kwargs): def get_det_text( - matrix, - determinant=None, - background_rect=False, - initial_scale_factor=2, + matrix: Matrix, + determinant: int | str | None = None, + background_rect: bool = False, + initial_scale_factor: float = 2, ): r"""Helper function to create determinant. Parameters ---------- - matrix : :class:`~.Matrix` + matrix The matrix whose determinant is to be created - determinant : :class:`int|str` + determinant The value of the determinant of the matrix - background_rect : :class:`bool` + background_rect The background rectangle - initial_scale_factor : :class:`float` + initial_scale_factor The scale of the text `det` w.r.t the matrix Returns diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 748e050b76..1d6f6d7a42 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -202,7 +202,7 @@ def set_fill( Fill color of the :class:`OpenGLVMobject`. opacity Fill opacity of the :class:`OpenGLVMobject`. - family + recurse If ``True``, the fill color of all submobjects is also set. Returns @@ -491,7 +491,7 @@ def add_line_to(self, point: Sequence[float]) -> OpenGLVMobject: Parameters ---------- - point : Sequence[float] + point end of the straight line. """ end = self.points[-1] @@ -572,7 +572,7 @@ def set_points_as_corners(self, points: Iterable[float]) -> OpenGLVMobject: Parameters ---------- - points : Iterable[float] + points Array of points that will be set as corners. Returns @@ -674,13 +674,13 @@ def consider_points_equals(self, p0, p1): return np.linalg.norm(p1 - p0) < self.tolerance_for_point_equality # Information about the curve - def force_direction(self, target_direction): + def force_direction(self, target_direction: str): """Makes sure that points are either directed clockwise or counterclockwise. Parameters ---------- - target_direction : :class:`str` + target_direction Either ``"CW"`` or ``"CCW"``. """ if target_direction not in ("CW", "CCW"): @@ -760,7 +760,7 @@ def get_nth_curve_points(self, n: int) -> np.ndarray: Parameters ---------- - n : int + n index of the desired bezier curve. Returns @@ -777,7 +777,7 @@ def get_nth_curve_function(self, n: int) -> Callable[[float], np.ndarray]: Parameters ---------- - n : int + n index of the desired curve. Returns @@ -1260,9 +1260,9 @@ def insert_n_curves_to_point_list(self, n: int, points: np.ndarray) -> np.ndarra Parameters ---------- - n : int + n Number of desired curves. - points : np.ndarray + points Starting points. Returns @@ -1319,13 +1319,13 @@ def pointwise_become_partial( Parameters ---------- - vmobject : OpenGLVMobject + vmobject The vmobject that will serve as a model. - a : float + a upper-bound. - b : float + b lower-bound - remap : bool + remap if the point amount should be kept the same (True) This option should be manually set to False if keeping the number of points is not needed """ @@ -1699,12 +1699,12 @@ def __str__(self): f"submobject{'s' if len(self.submobjects) > 0 else ''}" ) - def add(self, *vmobjects): + def add(self, *vmobjects: OpenGLVMobject): """Checks if all passed elements are an instance of OpenGLVMobject and then add them to submobjects Parameters ---------- - vmobjects : :class:`~.OpenGLVMobject` + vmobjects List of OpenGLVMobject to add Returns diff --git a/manim/mobject/svg/brace.py b/manim/mobject/svg/brace.py index e39591235a..63267a5e05 100644 --- a/manim/mobject/svg/brace.py +++ b/manim/mobject/svg/brace.py @@ -12,6 +12,7 @@ from manim._config import config from manim.mobject.geometry.arc import Arc from manim.mobject.geometry.line import Line +from manim.mobject.mobject import Mobject from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.text.tex_mobject import MathTex, Tex @@ -32,7 +33,7 @@ class Brace(VMobjectFromSVGPath): Parameters ---------- - mobject : :class:`~.Mobject` + mobject The mobject adjacent to which the brace is placed. direction : The direction from which the brace faces the mobject. @@ -61,7 +62,7 @@ def construct(self): def __init__( self, - mobject, + mobject: Mobject, direction: Sequence[float] | None = DOWN, buff=0.2, sharpness=2, diff --git a/manim/mobject/table.py b/manim/mobject/table.py index 731b7d1288..9898736448 100644 --- a/manim/mobject/table.py +++ b/manim/mobject/table.py @@ -206,7 +206,7 @@ def __init__( Dict passed to :meth:`~.Mobject.arrange_in_grid`, customizes the arrangement of the table. line_config Dict passed to :class:`~.Line`, customizes the lines of the table. - kwargs : Any + kwargs Additional arguments to be passed to :class:`~.VGroup`. """ @@ -773,7 +773,7 @@ def get_cell(self, pos: Sequence[int] = (1, 1), **kwargs) -> Polygon: pos The position of a specific entry on the table. ``(1,1)`` being the top left entry of the table. - kwargs : Any + kwargs Additional arguments to be passed to :class:`~.Polygon`. Returns @@ -834,7 +834,7 @@ def get_highlighted_cell( of the table. color The color used to highlight the cell. - kwargs : Any + kwargs Additional arguments to be passed to :class:`~.BackgroundRectangle`. Examples @@ -870,7 +870,7 @@ def add_highlighted_cell( of the table. color The color used to highlight the cell. - kwargs : Any + kwargs Additional arguments to be passed to :class:`~.BackgroundRectangle`. Examples @@ -901,15 +901,13 @@ def create( line_animation: Callable[[VMobject | VGroup], Animation] = Create, label_animation: Callable[[VMobject | VGroup], Animation] = Write, element_animation: Callable[[VMobject | VGroup], Animation] = Create, - entry_animation=FadeIn, + entry_animation: Callable[[VMobject | VGroup], Animation] = FadeIn, **kwargs, ) -> AnimationGroup: """Customized create-type function for tables. Parameters ---------- - run_time - The run time of the line creation and the writing of the elements. lag_ratio The lag ratio of the animation. line_animation @@ -918,7 +916,9 @@ def create( The animation style of the table labels, see :mod:`~.creation` for examples. element_animation The animation style of the table elements, see :mod:`~.creation` for examples. - kwargs : Any + entry_animation + The entry animation of the table background, see :mod:`~.creation` for examples. + kwargs Further arguments passed to the creation animations. Returns @@ -1015,7 +1015,7 @@ def __init__( for :class:`~.MathTex`. element_to_mobject The :class:`~.Mobject` class applied to the table entries. Set as :class:`~.MathTex`. - kwargs : Any + kwargs Additional arguments to be passed to :class:`~.Table`. """ super().__init__( @@ -1069,7 +1069,7 @@ def __init__( A 2D array or list of lists. Content of the table must be of type :class:`~.Mobject`. element_to_mobject The :class:`~.Mobject` class applied to the table entries. Set as ``lambda m : m`` to return itself. - kwargs : Any + kwargs Additional arguments to be passed to :class:`~.Table`. """ super().__init__(table, element_to_mobject=element_to_mobject, **kwargs) @@ -1118,7 +1118,7 @@ def __init__( for :class:`~.Integer`. element_to_mobject The :class:`~.Mobject` class applied to the table entries. Set as :class:`~.Integer`. - kwargs : Any + kwargs Additional arguments to be passed to :class:`~.Table`. """ super().__init__(table, element_to_mobject=element_to_mobject, **kwargs) @@ -1166,7 +1166,7 @@ def __init__( The :class:`~.Mobject` class applied to the table entries. Set as :class:`~.DecimalNumber`. element_to_mobject_config Element to mobject config, here set as {"num_decimal_places": 1}. - kwargs : Any + kwargs Additional arguments to be passed to :class:`~.Table`. """ super().__init__( diff --git a/manim/mobject/text/code_mobject.py b/manim/mobject/text/code_mobject.py index fcb42150cd..41742a18ef 100644 --- a/manim/mobject/text/code_mobject.py +++ b/manim/mobject/text/code_mobject.py @@ -7,6 +7,7 @@ ] import html +import os import re from pathlib import Path @@ -90,45 +91,45 @@ def construct(self): ---------- file_name Name of the code file to display. - code : :class:`str` + code If ``file_name`` is not specified, a code string can be passed directly. - tab_width : :class:`int`, optional + tab_width Number of space characters corresponding to a tab character. Defaults to 3. - line_spacing : :class:`float`, optional + line_spacing Amount of space between lines in relation to font size. Defaults to 0.3, which means 30% of font size. - font_size : class:`float`, optional + font_size A number which scales displayed code. Defaults to 24. - font : :class:`str`, optional + font The name of the text font to be used. Defaults to ``"Monospac821 BT"``. - stroke_width : class:`float`, optional + stroke_width Stroke width for text. 0 is recommended, and the default. - margin: class :`float`, optional + margin Inner margin of text from the background. Defaults to 0.3. - indentation_chars : :class:`str`, optional + indentation_chars "Indentation chars" refers to the spaces/tabs at the beginning of a given code line. Defaults to ``" "`` (spaces). - background : :class:`str`, optional + background Defines the background's type. Currently supports only ``"rectangle"`` (default) and ``"window"``. - background_stroke_width : class:`float`, optional + background_stroke_width Defines the stroke width of the background. Defaults to 1. - background_stroke_color : class:`str`, optional + background_stroke_color Defines the stroke color for the background. Defaults to ``WHITE``. - corner_radius : :class:`float`, optional + corner_radius Defines the corner radius for the background. Defaults to 0.2. - insert_line_no : :class:`bool`, optional + insert_line_no Defines whether line numbers should be inserted in displayed code. Defaults to ``True``. - line_no_from : :class:`int`, optional + line_no_from Defines the first line's number in the line count. Defaults to 1. - line_no_buff : :class:`float`, optional + line_no_buff Defines the spacing between line numbers and displayed code. Defaults to 0.4. - style : :class:`str`, optional + style Defines the style type of displayed code. You can see possible names of styles in with :attr:`styles_list`. Defaults to ``"vim"``. - language : Optional[:class:`str`], optional + language Specifies the programming language the given code was written in. If ``None`` (the default), the language will be automatically detected. For the list of possible options, visit https://pygments.org/docs/lexers/ and look for 'aliases or short names'. - generate_html_file : :class:`bool`, optional + generate_html_file Defines whether to generate highlighted html code to the folder `assets/codes/generated_html_files`. Defaults to `False`. Attributes @@ -153,25 +154,25 @@ def construct(self): def __init__( self, - file_name: str | os.PathLike = None, - code=None, - tab_width=3, - line_spacing=0.3, - font_size=24, - font="Monospac821 BT", - stroke_width=0, - margin=0.3, - indentation_chars=" ", - background="rectangle", # or window - background_stroke_width=1, - background_stroke_color=WHITE, - corner_radius=0.2, - insert_line_no=True, - line_no_from=1, - line_no_buff=0.4, - style="vim", - language=None, - generate_html_file=False, + file_name: str | os.PathLike | None = None, + code: str | None = None, + tab_width: int = 3, + line_spacing: float = 0.3, + font_size: float = 24, + font: str = "Monospac821 BT", + stroke_width: float = 0, + margin: float = 0.3, + indentation_chars: str = " ", + background: str = "rectangle", # or window + background_stroke_width: float = 1, + background_stroke_color: str = WHITE, + corner_radius: float = 0.2, + insert_line_no: bool = True, + line_no_from: int = 1, + line_no_buff: float = 0.4, + style: str = "vim", + language: str | None = None, + generate_html_file: bool = False, **kwargs, ): super().__init__( @@ -472,12 +473,12 @@ def _gen_code_json(self): self.code_json[code_json_line_index].append([text, color]) # print(self.code_json) - def _correct_non_span(self, line_str): + def _correct_non_span(self, line_str: str): """Function put text color to those strings that don't have one according to background_color of displayed code. Parameters --------- - line_str : :class:`str` + line_str Takes a html element's string to put color to it according to background_color of displayed code. Returns @@ -525,31 +526,31 @@ def _correct_non_span(self, line_str): def _hilite_me( - code, - language, - style, - insert_line_no, - divstyles, - file_path, - line_no_from, + code: str, + language: str, + style: str, + insert_line_no: bool, + divstyles: str, + file_path: Path, + line_no_from: int, ): """Function to highlight code from string to html. Parameters --------- - code : :class:`str` + code Code string. - language : :class:`str` + language The name of the programming language the given code was written in. - style : :class:`str` + style Code style name. - insert_line_no : :class:`bool` + insert_line_no Defines whether line numbers should be inserted in the html file. - divstyles : :class:`str` + divstyles Some html css styles. - file_path : :class:`pathlib.Path` + file_path Path of code file. - line_no_from : :class:`int` + line_no_from Defines the first line's number in the line count. """ style = style or "colorful" @@ -578,14 +579,14 @@ def _hilite_me( return html -def _insert_line_numbers_in_html(html, line_no_from): +def _insert_line_numbers_in_html(html: str, line_no_from: int): """Function that inserts line numbers in the highlighted HTML code. Parameters --------- - html : :class:`str` + html html string of highlighted code. - line_no_from : :class:`int` + line_no_from Defines the first line's number in the line count. Returns diff --git a/manim/mobject/text/numbers.py b/manim/mobject/text/numbers.py index 963c11dc06..5a0c8413f4 100644 --- a/manim/mobject/text/numbers.py +++ b/manim/mobject/text/numbers.py @@ -11,7 +11,8 @@ from manim import config from manim.constants import * from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL -from manim.mobject.text.tex_mobject import MathTex, SingleStringMathTex +from manim.mobject.text.tex_mobject import MathTex, SingleStringMathTex, Tex +from manim.mobject.text.text_mobject import Text from manim.mobject.types.vectorized_mobject import VMobject from manim.mobject.value_tracker import ValueTracker @@ -299,16 +300,16 @@ class Variable(VMobject, metaclass=ConvertToOpenGL): Parameters ---------- - var : Union[:class:`int`, :class:`float`] + var The initial value you need to keep track of and display. - label : Union[:class:`str`, :class:`~.Tex`, :class:`~.MathTex`, :class:`~.Text`, :class:`~.SingleStringMathTex`] + label The label for your variable. Raw strings are convertex to :class:`~.MathTex` objects. - var_type : Union[:class:`DecimalNumber`, :class:`Integer`], optional + var_type The class used for displaying the number. Defaults to :class:`DecimalNumber`. - num_decimal_places : :class:`int`, optional + num_decimal_places The number of decimal places to display in your variable. Defaults to 2. If `var_type` is an :class:`Integer`, this parameter is ignored. - kwargs : Any + kwargs Other arguments to be passed to `~.Mobject`. Attributes @@ -397,7 +398,12 @@ def construct(self): """ def __init__( - self, var, label, var_type=DecimalNumber, num_decimal_places=2, **kwargs + self, + var: float, + label: str | Tex | MathTex | Text | SingleStringMathTex, + var_type: DecimalNumber | Integer = DecimalNumber, + num_decimal_places: int = 2, + **kwargs, ): self.label = MathTex(label) if isinstance(label, str) else label diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index bbde7d7c76..a2ab19e8bb 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -31,6 +31,7 @@ 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 @@ -348,11 +349,11 @@ class Dot3D(Sphere): Parameters -------- - point : Union[:class:`list`, :class:`numpy.ndarray`], optional + point The location of the dot. - radius : :class:`float`, optional + radius The radius of the dot. - color : :class:`~.Colors`, optional + color The color of the :class:`Dot3D` Examples @@ -374,9 +375,9 @@ def construct(self): def __init__( self, - point=ORIGIN, - radius=DEFAULT_DOT_RADIUS, - color=WHITE, + point: list | np.ndarray = ORIGIN, + radius: float = DEFAULT_DOT_RADIUS, + color: Colors = WHITE, resolution=(8, 8), **kwargs, ): @@ -464,31 +465,31 @@ def construct(self): Parameters -------- - base_radius : :class:`float` + base_radius The base radius from which the cone tapers. - height : :class:`float` + height The height measured from the plane formed by the base_radius to the apex of the cone. - direction : :class:`numpy.array` + direction The direction of the apex. - show_base : :class:`bool` + show_base Whether to show the base plane or not. - v_range : :class:`Sequence[float]` + v_range The azimuthal angle to start and end at. - u_min : :class:`float` + u_min The radius at the apex. - checkerboard_colors : :class:`bool` + checkerboard_colors Show checkerboard grid texture on the cone. """ def __init__( self, - base_radius=1, - height=1, - direction=Z_AXIS, - show_base=False, - v_range=[0, TAU], - u_min=0, - checkerboard_colors=False, + base_radius: float = 1, + height: float = 1, + direction: np.ndarray = Z_AXIS, + show_base: bool = False, + v_range: Sequence[float] = [0, TAU], + u_min: float = 0, + checkerboard_colors: bool = False, **kwargs, ): self.direction = direction @@ -517,13 +518,13 @@ def __init__( self._rotate_to_direction() - def func(self, u, v): + def func(self, u: float, v: float): """Converts from spherical coordinates to cartesian. Parameters --------- - u : :class:`float` + u The radius. - v : :class:`float` + v The azimuthal angle. """ r = u @@ -594,25 +595,25 @@ def construct(self): Parameters --------- - radius : :class:`float` + radius The radius of the cylinder. - height : :class:`float` + height The height of the cylinder. - direction : :class:`numpy.array` + direction The direction of the central axis of the cylinder. - v_range : :class:`Sequence[float]` + v_range The height along the height axis (given by direction) to start and end on. - show_ends : :class:`bool` + show_ends Whether to show the end caps or not. """ def __init__( self, - radius=1, - height=2, - direction=Z_AXIS, - v_range=[0, TAU], - show_ends=True, + radius: float = 1, + height: float = 2, + direction: np.ndarray = Z_AXIS, + v_range: Sequence[float] = [0, TAU], + show_ends: bool = True, resolution=(24, 24), **kwargs, ): @@ -631,13 +632,13 @@ def __init__( self._current_theta = 0 self.set_direction(direction) - def func(self, u, v): + def func(self, u: float, v: float): """Converts from cylindrical coordinates to cartesian. Parameters --------- - u : :class:`float` + u The height. - v : :class:`float` + v The azimuthal angle. """ height = u @@ -728,15 +729,22 @@ def construct(self): Parameters --------- - start : :class:`numpy.array` + start The start position of the line. - end : :class:`numpy.array` + end The end position of the line. - thickness : :class:`float` + thickness The thickness of the line. """ - def __init__(self, start=LEFT, end=RIGHT, thickness=0.02, color=None, **kwargs): + def __init__( + self, + start: np.ndarray = LEFT, + end: np.ndarray = RIGHT, + thickness: float = 0.02, + color=None, + **kwargs, + ): self.thickness = thickness self.set_start_and_end_attrs(start, end, **kwargs) if color is not None: @@ -882,25 +890,25 @@ def construct(self): Parameters --------- - start : :class:`numpy.array` + start The start position of the arrow. - end : :class:`numpy.array` + end The end position of the arrow. - thickness : :class:`float` + thickness The thickness of the arrow. - height : :class:`float` + height The height of the conical tip. - base_radius: :class:`float` + base_radius The base radius of the conical tip. """ def __init__( self, - start=LEFT, - end=RIGHT, - thickness=0.02, - height=0.3, - base_radius=0.08, + start: np.ndarray = LEFT, + end: np.ndarray = RIGHT, + thickness: float = 0.02, + height: float = 0.3, + base_radius: float = 0.08, color=WHITE, **kwargs, ): @@ -940,16 +948,16 @@ def construct(self): Parameters --------- - major_radius : :class:`float` + major_radius Distance from the center of the tube to the center of the torus. - minor_radius : :class:`float` + minor_radius Radius of the tube. """ def __init__( self, - major_radius=3, - minor_radius=1, + major_radius: float = 3, + minor_radius: float = 1, u_range=(0, TAU), v_range=(0, TAU), resolution=None, diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index c245841596..c0eff69c2f 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -27,7 +27,7 @@ class AbstractImageMobject(Mobject): Parameters ---------- - scale_to_resolution : :class:`int` + scale_to_resolution At this resolution the image is placed pixel by pixel onto the screen, so it will look the sharpest and best. This is a custom parameter of ImageMobject so that rendering a scene with @@ -37,7 +37,7 @@ class AbstractImageMobject(Mobject): def __init__( self, - scale_to_resolution, + scale_to_resolution: int, pixel_array_dtype="uint8", resampling_algorithm=Resampling.BICUBIC, **kwargs, @@ -54,7 +54,7 @@ def set_color(self, color, alpha=None, family=True): # Likely to be implemented in subclasses, but no obligation pass - def set_resampling_algorithm(self, resampling_algorithm): + def set_resampling_algorithm(self, resampling_algorithm: int): """ Sets the interpolation method for upscaling the image. By default the image is interpolated using bicubic algorithm. This method lets you change it. @@ -63,15 +63,16 @@ def set_resampling_algorithm(self, resampling_algorithm): Parameters ---------- - resampling_algorithm : :class:`int`, an integer constant described in the - Pillow library, or one from the RESAMPLING_ALGORITHMS global dictionary, under - the following keys: - * 'bicubic' or 'cubic' - * 'nearest' or 'none' - * 'box' - * 'bilinear' or 'linear' - * 'hamming' - * 'lanczos' or 'antialias' + resampling_algorithm + An integer constant described in the Pillow library, + or one from the RESAMPLING_ALGORITHMS global dictionary, + under the following keys: + * 'bicubic' or 'cubic' + * 'nearest' or 'none' + * 'box' + * 'bilinear' or 'linear' + * 'hamming' + * 'lanczos' or 'antialias' """ if isinstance(resampling_algorithm, int): self.resampling_algorithm = resampling_algorithm @@ -107,7 +108,7 @@ class ImageMobject(AbstractImageMobject): Parameters ---------- - scale_to_resolution : :class:`int` + scale_to_resolution At this resolution the image is placed pixel by pixel onto the screen, so it will look the sharpest and best. This is a custom parameter of ImageMobject so that rendering a scene with @@ -167,7 +168,7 @@ def construct(self): def __init__( self, filename_or_array, - scale_to_resolution=QUALITIES[DEFAULT_QUALITY]["pixel_height"], + scale_to_resolution: int = QUALITIES[DEFAULT_QUALITY]["pixel_height"], invert=False, image_mode="RGBA", **kwargs, @@ -205,12 +206,12 @@ def set_color(self, color, alpha=None, family=True): self.color = color return self - def set_opacity(self, alpha): + def set_opacity(self, alpha: float): """Sets the image's opacity. Parameters ---------- - alpha : float + alpha The alpha value of the object, 1 being opaque and 0 being transparent. """ @@ -219,34 +220,36 @@ def set_opacity(self, alpha): self.stroke_opacity = alpha return self - def fade(self, darkness=0.5, family=True): + def fade(self, darkness: float = 0.5, family: bool = True): """Sets the image's opacity using a 1 - alpha relationship. Parameters ---------- - darkness : float + darkness The alpha value of the object, 1 being transparent and 0 being opaque. - family : Boolean + family Whether the submobjects of the ImageMobject should be affected. """ self.set_opacity(1 - darkness) super().fade(darkness, family) return self - def interpolate_color(self, mobject1, mobject2, alpha): + def interpolate_color( + self, mobject1: ImageMobject, mobject2: ImageMobject, alpha: float + ): """Interpolates the array of pixel color values from one ImageMobject into an array of equal size in the target ImageMobject. Parameters ---------- - mobject1 : ImageMobject + mobject1 The ImageMobject to transform from. - mobject2 : ImageMobject + mobject2 The ImageMobject to transform into. - alpha : float + alpha Used to track the lerp relationship. Not opacity related. """ assert mobject1.pixel_array.shape == mobject2.pixel_array.shape, ( diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 3a59d35287..44a816791f 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -68,7 +68,7 @@ class VMobject(Mobject): close_new_points Indicates that it will not be displayed, but that it should count in parent mobject's path - tolerance_point_for_equality + tolerance_for_point_equality This is within a pixel """ @@ -460,7 +460,7 @@ def set_sheen_direction(self, direction: np.ndarray, family=True): Parameters ---------- - direction : :class:`numpy.ndarray`, optional + direction Direction from where the gradient is applied. Examples @@ -483,14 +483,14 @@ def set_sheen_direction(self, direction: np.ndarray, family=True): self.sheen_direction = direction return self - def rotate_sheen_direction(self, angle: np.ndarray, axis: float = OUT, family=True): + def rotate_sheen_direction(self, angle: float, axis: np.ndarray = OUT, family=True): """Rotates the direction of the applied sheen. Parameters ---------- - angle : :class:`float` + angle Angle by which the direction of sheen is rotated. - axis : :class:`numpy.ndarray` + axis Axis of rotation. Examples @@ -514,16 +514,16 @@ def rotate_sheen_direction(self, angle: np.ndarray, axis: float = OUT, family=Tr self.sheen_direction = rotate_vector(self.sheen_direction, angle, axis) return self - def set_sheen(self, factor, direction: np.ndarray = None, family=True): + def set_sheen(self, factor: float, direction: np.ndarray = None, family=True): """Applies a color gradient from a direction. Parameters ---------- - factor : :class:`float` + factor The extent of lustre/gradient to apply. If negative, the gradient starts from black, if positive the gradient starts from white and changes to the current color. - direction : :class:`numpy.ndarray`, optional + direction Direction from where the gradient is applied. Examples @@ -668,11 +668,11 @@ def add_cubic_bezier_curve_to( Parameters ---------- - handle1 : np.ndarray + handle1 first handle - handle2 : np.ndarray + handle2 second handle - anchor : np.ndarray + anchor anchor Returns @@ -720,7 +720,7 @@ def add_line_to(self, point: np.ndarray): Parameters ---------- - point : np.ndarray + point end of the straight line. Returns @@ -743,7 +743,7 @@ def add_smooth_curve_to(self, *points: np.array): Parameters ---------- - points: np.array + points Points (anchor and handle, or just anchor) to add a smooth curve from Returns @@ -809,7 +809,7 @@ def set_points_as_corners(self, points: Sequence[float]): Parameters ---------- - points : Iterable[float] + points Array of points that will be set as corners. Returns @@ -947,9 +947,9 @@ def consider_points_equals_2d(self, p0: np.ndarray, p1: np.ndarray) -> bool: 2D point case. NumPy is overkill for such a small question. Parameters ---------- - p0 : np.ndarray + p0 first point - p1 : np.ndarray + p1 second point Returns @@ -979,7 +979,7 @@ def gen_cubic_bezier_tuples_from_points(self, points: np.ndarray) -> typing.Tupl Parameters ---------- - points : np.ndarray + points Points from which control points will be extracted. Returns @@ -1011,9 +1011,9 @@ def _gen_subpaths_from_points( Parameters ---------- - points : np.ndarray + points points defining the bezier curve. - filter_func : typing.Callable[int, bool] + filter_func Filter-func defining the relation. Returns @@ -1061,7 +1061,7 @@ def get_nth_curve_points(self, n: int) -> np.ndarray: Parameters ---------- - n : int + n index of the desired bezier curve. Returns @@ -1078,7 +1078,7 @@ def get_nth_curve_function(self, n: int) -> typing.Callable[[float], np.ndarray] Parameters ---------- - n : int + n index of the desired curve. Returns @@ -1492,9 +1492,9 @@ def insert_n_curves_to_point_list(self, n: int, points: np.ndarray) -> np.ndarra Parameters ---------- - n : int + n Number of desired curves. - points : np.ndarray + points Starting points. Returns @@ -1592,11 +1592,11 @@ def pointwise_become_partial( Parameters ---------- - vmobject : VMobject + vmobject The vmobject that will serve as a model. - a : float + a upper-bound. - b : float + b lower-bound Returns @@ -1716,13 +1716,13 @@ def construct(self): self.points = self.points[::-1] return self - def force_direction(self, target_direction): + def force_direction(self, target_direction: str): """Makes sure that points are either directed clockwise or counterclockwise. Parameters ---------- - target_direction : :class:`str` + target_direction Either ``"CW"`` or ``"CCW"``. """ if target_direction not in ("CW", "CCW"): @@ -1809,12 +1809,12 @@ def __str__(self): f"submobject{'s' if len(self.submobjects) > 0 else ''}" ) - def add(self, *vmobjects): + def add(self, *vmobjects: VMobject): """Checks if all passed elements are an instance of VMobject and then add them to submobjects Parameters ---------- - vmobjects : :class:`~.VMobject` + vmobjects List of VMobject to add Returns @@ -1907,14 +1907,14 @@ class VDict(VMobject, metaclass=ConvertToOpenGL): Parameters ---------- - mapping_or_iterable : Union[:class:`Mapping`, Iterable[Tuple[Hashable, :class:`~.VMobject`]]], optional + mapping_or_iterable The parameter specifying the key-value mapping of keys and mobjects. - show_keys : :class:`bool`, optional + show_keys Whether to also display the key associated with the mobject. This might be useful when debugging, especially when there are a lot of mobjects in the :class:`VDict`. Defaults to False. - kwargs : Any + kwargs Other arguments to be passed to `Mobject`. Attributes @@ -1999,7 +1999,15 @@ def construct(self): self.wait() """ - def __init__(self, mapping_or_iterable={}, show_keys=False, **kwargs): + def __init__( + self, + mapping_or_iterable: Union[ + typing.Mapping[typing.Hashable, VMobject], + typing.Iterable[typing.Tuple[typing.Hashable, VMobject]], + ] = {}, + show_keys: bool = False, + **kwargs, + ): super().__init__(**kwargs) self.show_keys = show_keys self.submob_dict = {} @@ -2008,7 +2016,13 @@ def __init__(self, mapping_or_iterable={}, show_keys=False, **kwargs): def __repr__(self): return __class__.__name__ + "(" + repr(self.submob_dict) + ")" - def add(self, mapping_or_iterable): + def add( + self, + mapping_or_iterable: Union[ + typing.Mapping[typing.Hashable, VMobject], + typing.Iterable[typing.Tuple[typing.Hashable, VMobject]], + ], + ): """Adds the key-value pairs to the :class:`VDict` object. Also, it internally adds the value to the `submobjects` :class:`list` @@ -2016,7 +2030,7 @@ def add(self, mapping_or_iterable): Parameters --------- - mapping_or_iterable : Union[:class:`Mapping`, Iterable[Tuple[Hashable, :class:`~.VMobject`]]], optional + mapping_or_iterable The parameter specifying the key-value mapping of keys and mobjects. Returns @@ -2036,7 +2050,7 @@ def add(self, mapping_or_iterable): return self - def remove(self, key): + def remove(self, key: typing.Hashable): """Removes the mobject from the :class:`VDict` object having the key `key` Also, it internally removes the mobject from the `submobjects` :class:`list` @@ -2044,7 +2058,7 @@ def remove(self, key): Parameters ---------- - key : :class:`typing.Hashable` + key The key of the submoject to be removed. Returns @@ -2064,12 +2078,12 @@ def remove(self, key): del self.submob_dict[key] return self - def __getitem__(self, key): + def __getitem__(self, key: typing.Hashable): """Override the [] operator for item retrieval. Parameters ---------- - key : :class:`typing.Hashable` + key The key of the submoject to be accessed Returns @@ -2086,14 +2100,14 @@ def __getitem__(self, key): submob = self.submob_dict[key] return submob - def __setitem__(self, key, value): + def __setitem__(self, key: typing.Hashable, value: VMobject): """Override the [] operator for item assignment. Parameters ---------- - key : :class:`typing.Hashable` + key The key of the submoject to be assigned - value : :class:`VMobject` + value The submobject to bind the key to Returns @@ -2111,12 +2125,12 @@ def __setitem__(self, key, value): self.remove(key) self.add([(key, value)]) - def __delitem__(self, key): + def __delitem__(self, key: typing.Hashable): """Override the del operator for deleting an item. Parameters ---------- - key : :class:`typing.Hashable` + key The key of the submoject to be deleted Returns @@ -2143,12 +2157,12 @@ def __delitem__(self, key): """ del self.submob_dict[key] - def __contains__(self, key): + def __contains__(self, key: typing.Hashable): """Override the in operator. Parameters ---------- - key : :class:`typing.Hashable` + key The key to check membership of. Returns @@ -2185,15 +2199,15 @@ def get_all_submobjects(self): submobjects = self.submob_dict.values() return submobjects - def add_key_value_pair(self, key, value): + def add_key_value_pair(self, key: typing.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. Parameters ---------- - key : :class:`typing.Hashable` + key The key of the submobject to be added. - value : :class:`~.VMobject` + value The mobject associated with the key Returns diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index 16074017f6..75b0f2814c 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -58,7 +58,7 @@ class VectorField(VGroup): The value of the color_scheme function to be mapped to the last color in `colors`. Higher values also result in the last color of the gradient. colors The colors defining the color gradient of the vector field. - kwargs : Any + kwargs Additional arguments to be passed to the :class:`~.VGroup` constructor """ @@ -143,7 +143,7 @@ def scale_func( ---------- func The function defining a vector field. - shift_vector + scalar The scalar to be applied to the vector field. Examples @@ -486,7 +486,7 @@ class ArrowVectorField(VectorField): The opacity of the arrows. vector_config Additional arguments to be passed to the :class:`~.Vector` constructor - kwargs : Any + kwargs Additional arguments to be passed to the :class:`~.VGroup` constructor Examples @@ -611,8 +611,6 @@ def get_vector(self, point: np.ndarray): ---------- point The root point of the vector. - kwargs : Any - Additional arguments to be passed to the :class:`~.Vector` constructor """ output = np.asarray(self.func(point)) @@ -907,7 +905,7 @@ def construct(self): def start_animation( self, - warm_up=True, + warm_up: bool = True, flow_speed: float = 1, time_width: float = 0.3, rate_func: Callable[[float], float] = linear, @@ -920,7 +918,7 @@ def start_animation( Parameters ---------- - warm_up : bool, optional + warm_up If `True` the animation is initialized line by line. Otherwise it starts with all lines shown. flow_speed At `flow_speed=1` the distance the flow moves per second is equal to the magnitude of the vector field along its path. The speed value scales the speed of this flow. diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index c491f2f930..f11b7ea7ca 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -14,6 +14,9 @@ from ..utils.exceptions import EndSceneEarlyException from ..utils.iterables import list_update +if typing.TYPE_CHECKING: + from manim.scene.scene import Scene + class CairoRenderer: """A renderer using Cairo. @@ -106,24 +109,23 @@ def play(self, scene, *args, **kwargs): def update_frame( # TODO Description in Docstring self, scene, - mobjects=None, - include_submobjects=True, - ignore_skipping=True, + mobjects: typing.Iterable[Mobject] | None = None, + include_submobjects: bool = True, + ignore_skipping: bool = True, **kwargs, ): """Update the frame. Parameters ---------- - mobjects: list, optional - list of mobjects + scene - background: np.ndarray, optional - Pixel Array for Background. + mobjects + list of mobjects - include_submobjects: bool, optional + include_submobjects - ignore_skipping : bool, optional + ignore_skipping **kwargs @@ -159,15 +161,15 @@ def get_frame(self): """ return np.array(self.camera.pixel_array) - def add_frame(self, frame, num_frames=1): + def add_frame(self, frame: np.ndarray, num_frames: int = 1): """ Adds a frame to the video_file_stream Parameters ---------- - frame : numpy.ndarray + frame The frame to add, as a pixel array. - num_frames: int + num_frames The number of times to add frame. """ dt = 1 / self.camera.frame_rate @@ -182,7 +184,7 @@ def freeze_current_frame(self, duration: float): Parameters ---------- - duration : float + duration [description] """ dt = 1 / self.camera.frame_rate @@ -201,23 +203,23 @@ def show_frame(self): def save_static_frame_data( self, - scene, + scene: Scene, static_mobjects: typing.Iterable[Mobject], ) -> typing.Iterable[Mobject] | None: - """Compute and save the static frame, that will be reused at each frame to avoid to unecesseraly computer - static mobjects. + """Compute and save the static frame, that will be reused at each frame + to avoid unnecessarily computing static mobjects. Parameters ---------- - scene : Scene + scene The scene played. - static_mobjects : typing.Iterable[Mobject] + static_mobjects Static mobjects of the scene. If None, self.static_image is set to None Returns ------- typing.Iterable[Mobject] - the static image computed. + The static image computed. """ self.static_image = None if not static_mobjects: diff --git a/manim/scene/moving_camera_scene.py b/manim/scene/moving_camera_scene.py index f68ca45865..3adef5fc78 100644 --- a/manim/scene/moving_camera_scene.py +++ b/manim/scene/moving_camera_scene.py @@ -70,6 +70,8 @@ def construct(self): __all__ = ["MovingCameraScene"] +from manim.animation.animation import Animation + from ..camera.moving_camera import MovingCamera from ..scene.scene import Scene from ..utils.family import extract_mobject_family_members @@ -89,14 +91,14 @@ class MovingCameraScene(Scene): def __init__(self, camera_class=MovingCamera, **kwargs): super().__init__(camera_class=camera_class, **kwargs) - def get_moving_mobjects(self, *animations): + def get_moving_mobjects(self, *animations: Animation): """ This method returns a list of all of the Mobjects in the Scene that are moving, that are also in the animations passed. Parameters ---------- - *animations : Animation + *animations The Animations whose mobjects will be checked. """ moving_mobjects = super().get_moving_mobjects(*animations) diff --git a/manim/scene/scene.py b/manim/scene/scene.py index ebb0a42cf4..63a718b087 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -30,6 +30,7 @@ from watchdog.events import FileSystemEventHandler from watchdog.observers import Observer +from manim.mobject.mobject import Mobject from manim.mobject.opengl.opengl_mobject import OpenGLPoint from .. import config, logger @@ -208,13 +209,13 @@ def __deepcopy__(self, clone_from_id): result.mobject_updater_lists.append((mobject_clone, cloned_updaters)) return result - def render(self, preview=False): + def render(self, preview: bool = False): """ Renders this Scene. Parameters --------- - preview : bool + preview If true, opens scene in a file viewer. """ self.setup() @@ -312,13 +313,13 @@ def next_section( def __str__(self): return self.__class__.__name__ - def get_attrs(self, *keys): + def get_attrs(self, *keys: str): """ Gets attributes of a scene given the attribute's identifier/name. Parameters ---------- - *keys : str + *keys Name(s) of the argument(s) to return the attribute of. Returns @@ -328,13 +329,13 @@ def get_attrs(self, *keys): """ return [getattr(self, key) for key in keys] - def update_mobjects(self, dt): + def update_mobjects(self, dt: float): """ Begins updating all mobjects in the Scene. Parameters ---------- - dt: int or float + dt Change in time between updates. Defaults (mostly) to 1/frames_per_second """ for mobject in self.mobjects: @@ -434,14 +435,14 @@ def get_mobject_family_members(self): use_z_index=self.renderer.camera.use_z_index, ) - def add(self, *mobjects): + def add(self, *mobjects: Mobject): """ Mobjects will be displayed, from background to foreground in the order with which they are added. Parameters --------- - *mobjects : Mobject + *mobjects Mobjects to add. Returns @@ -486,7 +487,7 @@ def add_mobjects_from_animations(self, animations): self.add(mob) curr_mobjects += mob.get_family() - def remove(self, *mobjects): + def remove(self, *mobjects: Mobject): """ Removes mobjects in the passed list of mobjects from the scene and the foreground, by removing them @@ -494,7 +495,7 @@ def remove(self, *mobjects): Parameters ---------- - *mobjects : Mobject + *mobjects The mobjects to remove. """ if config.renderer == "opengl": @@ -566,9 +567,9 @@ def remove_updater(self, func: Callable[[float], None]) -> None: def restructure_mobjects( self, - to_remove, - mobject_list_name="mobjects", - extract_families=True, + to_remove: Mobject, + mobject_list_name: str = "mobjects", + extract_families: bool = True, ): """ tl:wr @@ -583,13 +584,13 @@ def restructure_mobjects( Parameters ---------- - to_remove : Mobject + to_remove The Mobject to remove. - mobject_list_name : str, optional + mobject_list_name The list of mobjects ("mobjects", "foreground_mobjects" etc) to remove from. - extract_families : bool, optional + extract_families Whether the mobject's families should be recursively extracted. Returns @@ -607,7 +608,7 @@ def restructure_mobjects( setattr(self, mobject_list_name, new_list) return self - def get_restructured_mobject_list(self, mobjects, to_remove): + def get_restructured_mobject_list(self, mobjects: list, to_remove: list): """ Given a list of mobjects and a list of mobjects to be removed, this filters out the removable mobjects from the list of mobjects. @@ -615,10 +616,10 @@ def get_restructured_mobject_list(self, mobjects, to_remove): Parameters ---------- - mobjects : list + mobjects The Mobjects to check. - to_remove : list + to_remove The list of mobjects to remove. Returns @@ -643,14 +644,14 @@ def add_safe_mobjects_from_list(list_to_examine, set_to_remove): return new_mobjects # TODO, remove this, and calls to this - def add_foreground_mobjects(self, *mobjects): + def add_foreground_mobjects(self, *mobjects: Mobject): """ Adds mobjects to the foreground, and internally to the list foreground_mobjects, and mobjects. Parameters ---------- - *mobjects : Mobject + *mobjects The Mobjects to add to the foreground. Returns @@ -662,14 +663,14 @@ def add_foreground_mobjects(self, *mobjects): self.add(*mobjects) return self - def add_foreground_mobject(self, mobject): + def add_foreground_mobject(self, mobject: Mobject): """ Adds a single mobject to the foreground, and internally to the list foreground_mobjects, and mobjects. Parameters ---------- - mobject : Mobject + mobject The Mobject to add to the foreground. Returns @@ -679,14 +680,14 @@ def add_foreground_mobject(self, mobject): """ return self.add_foreground_mobjects(mobject) - def remove_foreground_mobjects(self, *to_remove): + def remove_foreground_mobjects(self, *to_remove: Mobject): """ Removes mobjects from the foreground, and internally from the list foreground_mobjects. Parameters ---------- - *to_remove : Mobject + *to_remove The mobject(s) to remove from the foreground. Returns @@ -697,14 +698,14 @@ def remove_foreground_mobjects(self, *to_remove): self.restructure_mobjects(to_remove, "foreground_mobjects") return self - def remove_foreground_mobject(self, mobject): + def remove_foreground_mobject(self, mobject: Mobject): """ Removes a single mobject from the foreground, and internally from the list foreground_mobjects. Parameters ---------- - mobject : Mobject + mobject The mobject to remove from the foreground. Returns @@ -714,14 +715,14 @@ def remove_foreground_mobject(self, mobject): """ return self.remove_foreground_mobjects(mobject) - def bring_to_front(self, *mobjects): + def bring_to_front(self, *mobjects: Mobject): """ Adds the passed mobjects to the scene again, pushing them to he front of the scene. Parameters ---------- - *mobjects : Mobject + *mobjects The mobject(s) to bring to the front of the scene. Returns @@ -733,14 +734,14 @@ def bring_to_front(self, *mobjects): self.add(*mobjects) return self - def bring_to_back(self, *mobjects): + def bring_to_back(self, *mobjects: Mobject): """ Removes the mobject from the scene and adds them to the back of the scene. Parameters ---------- - *mobjects : Mobject + *mobjects The mobject(s) to push to the back of the scene. Returns @@ -769,13 +770,13 @@ def clear(self): self.foreground_mobjects = [] return self - def get_moving_mobjects(self, *animations): + def get_moving_mobjects(self, *animations: Animation): """ Gets all moving mobjects in the passed animation(s). Parameters ---------- - *animations : Animation + *animations The animations to check for moving mobjects. Returns @@ -818,14 +819,14 @@ def get_moving_and_static_mobjects(self, animations): ) return all_moving_mobject_families, static_mobjects - def compile_animations(self, *args, **kwargs): + def compile_animations(self, *args: Animation, **kwargs): """ Creates _MethodAnimations from any _AnimationBuilders and updates animation kwargs with kwargs passed to play(). Parameters ---------- - *args : Tuple[:class:`Animation`] + *args Animations to be played. **kwargs Configuration for the call to play(). @@ -856,7 +857,9 @@ def compile_animations(self, *args, **kwargs): return animations - def _get_animation_time_progression(self, animations, duration): + def _get_animation_time_progression( + self, animations: list[Animation], duration: float + ): """ You will hardly use this when making your own animations. This method is for Manim's internal use. @@ -867,11 +870,11 @@ def _get_animation_time_progression(self, animations, duration): Parameters ---------- - animations : List[:class:`~.Animation`, ...] + animations The list of animations to get the time progression for. - duration : int or float + duration duration of wait time Returns @@ -908,10 +911,10 @@ def _get_animation_time_progression(self, animations, duration): def get_time_progression( self, - run_time, + run_time: float, description, - n_iterations=None, - override_skip_animations=False, + n_iterations: int | None = None, + override_skip_animations: bool = False, ): """ You will hardly use this when making your own animations. @@ -925,13 +928,13 @@ def get_time_progression( Parameters ---------- - run_time : float + run_time The ``run_time`` of the animation. - n_iterations : int, optional + n_iterations The number of iterations in the animation. - override_skip_animations : bool, optional + override_skip_animations Whether or not to show skipped animations in the progress bar. Returns @@ -954,13 +957,13 @@ def get_time_progression( ) return time_progression - def get_run_time(self, animations): + def get_run_time(self, animations: list[Animation]): """ Gets the total run time for a list of animations. Parameters ---------- - animations : List[:class:`Animation`, ...] + animations A list of the animations whose total ``run_time`` is to be calculated. @@ -1093,7 +1096,7 @@ def pause(self, duration: float = DEFAULT_WAIT_TIME): """ self.wait(duration=duration, frozen_frame=True) - def wait_until(self, stop_condition, max_time=60): + def wait_until(self, stop_condition: Callable[[], bool], max_time: float = 60): """ Like a wrapper for wait(). You pass a function that determines whether to continue waiting, @@ -1101,10 +1104,10 @@ def wait_until(self, stop_condition, max_time=60): Parameters ---------- - stop_condition : function + stop_condition The function whose boolean return value determines whether to continue waiting - max_time : int or float, optional + max_time The maximum wait time in seconds, if the stop_condition is never fulfilled. """ self.wait(max_time, stop_condition=stop_condition) @@ -1117,8 +1120,11 @@ def compile_animation_data(self, *animations: Animation, **play_kwargs): Parameters ---------- - skip_rendering : bool, optional - Whether the rendering should be skipped, by default False + animations + Animation or mobject with mobject method and params + play_kwargs + named parameters affecting what was passed in ``animations``, + e.g. ``run_time``, ``lag_ratio`` and so on. Returns ------- @@ -1172,7 +1178,7 @@ def is_current_animation_frozen_frame(self) -> bool: and self.animations[0].is_static_wait ) - def play_internal(self, skip_rendering=False): + def play_internal(self, skip_rendering: bool = False): """ This method is used to prep the animations for rendering, apply the arguments and parameters required to them, @@ -1180,11 +1186,8 @@ def play_internal(self, skip_rendering=False): Parameters ---------- - args - Animation or mobject with mobject method and params - kwargs - named parameters affecting what was passed in ``args``, - e.g. ``run_time``, ``lag_ratio`` and so on. + skip_rendering + Whether the rendering should be skipped, by default False """ self.duration = self.get_run_time(self.animations) self.time_progression = self._get_animation_time_progression( @@ -1479,19 +1482,25 @@ def construct(self): ) self.renderer.file_writer.subcaptions.append(subtitle) - def add_sound(self, sound_file, time_offset=0, gain=None, **kwargs): + def add_sound( + self, + sound_file: str, + time_offset: float = 0, + gain: float | None = None, + **kwargs, + ): """ This method is used to add a sound to the animation. Parameters ---------- - sound_file : str + sound_file The path to the sound file. - time_offset : int,float, optional + time_offset The offset in the sound file after which the sound can be played. - gain : float + gain Amplification of the sound. Examples diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index 48131c7516..f03f78319c 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -10,7 +10,7 @@ import subprocess import sys from pathlib import Path -from typing import Any +from typing import TYPE_CHECKING, Any import numpy as np import srt @@ -36,6 +36,9 @@ from ..utils.sounds import get_full_sound_file_path from .section import DefaultSectionType, Section +if TYPE_CHECKING: + from manim.renderer.opengl_renderer import OpenGLRenderer + class SceneFileWriter: """ @@ -200,13 +203,13 @@ def next_section(self, name: str, type: str, skip_animations: bool) -> None: ), ) - def add_partial_movie_file(self, hash_animation): + def add_partial_movie_file(self, hash_animation: str): """Adds a new partial movie file path to `scene.partial_movie_files` and current section from a hash. This method will compute the path from the hash. In addition to that it adds the new animation to the current section. Parameters ---------- - hash_animation : str + hash_animation Hash of the animation. """ if not hasattr(self, "partial_movie_directory") or not write_to_movie(): @@ -267,21 +270,26 @@ def create_audio_segment(self): """ self.audio_segment = AudioSegment.silent() - def add_audio_segment(self, new_segment, time=None, gain_to_background=None): + def add_audio_segment( + self, + new_segment: AudioSegment, + time: float | None = None, + gain_to_background: float | None = None, + ): """ This method adds an audio segment from an AudioSegment type object and suitable parameters. Parameters ---------- - new_segment : AudioSegment + new_segment The audio segment to add - time : int, float, optional + time the timestamp at which the sound should be added. - gain_to_background : optional + gain_to_background The gain of the segment from the background. """ if not self.includes_sound: @@ -307,19 +315,25 @@ def add_audio_segment(self, new_segment, time=None, gain_to_background=None): gain_during_overlay=gain_to_background, ) - def add_sound(self, sound_file, time=None, gain=None, **kwargs): + def add_sound( + self, + sound_file: str, + time: float | None = None, + gain: float | None = None, + **kwargs, + ): """ This method adds an audio segment from a sound file. Parameters ---------- - sound_file : str + sound_file The path to the sound file. - time : float or int, optional + time The timestamp at which the audio should be added. - gain : optional + gain The gain of the given audio segment. **kwargs @@ -334,40 +348,40 @@ def add_sound(self, sound_file, time=None, gain=None, **kwargs): self.add_audio_segment(new_segment, time, **kwargs) # Writers - def begin_animation(self, allow_write=False, file_path=None): + def begin_animation(self, allow_write: bool = False, file_path=None): """ Used internally by manim to stream the animation to FFMPEG for displaying or writing to a file. Parameters ---------- - allow_write : bool, optional + allow_write Whether or not to write to a video file. """ if write_to_movie() and allow_write: self.open_movie_pipe(file_path=file_path) - def end_animation(self, allow_write=False): + def end_animation(self, allow_write: bool = False): """ Internally used by Manim to stop streaming to FFMPEG gracefully. Parameters ---------- - allow_write : bool, optional + allow_write Whether or not to write to a video file. """ if write_to_movie() and allow_write: self.close_movie_pipe() - def write_frame(self, frame_or_renderer): + def write_frame(self, frame_or_renderer: np.ndarray | OpenGLRenderer): """ Used internally by Manim to write a frame to the FFMPEG input buffer. Parameters ---------- - frame : np.array + frame_or_renderer Pixel array of the frame. """ if config.renderer == "opengl": @@ -379,7 +393,7 @@ def write_frame(self, frame_or_renderer): if is_png_format() and not config["dry_run"]: self.output_image_from_array(frame) - def write_opengl_frame(self, renderer): + def write_opengl_frame(self, renderer: OpenGLRenderer): if write_to_movie(): self.writing_process.stdin.write( renderer.get_raw_frame_buffer_object_data(), @@ -411,14 +425,14 @@ def output_image(self, image: Image.Image, target_dir, ext, zero_pad: bool): image.save(f"{target_dir}{self.frame_count}{ext}") self.frame_count += 1 - def save_final_image(self, image): + def save_final_image(self, image: np.ndarray): """ The name is a misnomer. This method saves the image passed to it as an in the default image directory. Parameters ---------- - image : np.array + image The pixel array of the image to save. """ if config["dry_run"]: @@ -516,12 +530,12 @@ def close_movie_pipe(self): {"path": f"'{self.partial_movie_file_path}'"}, ) - def is_already_cached(self, hash_invocation): + def is_already_cached(self, hash_invocation: str): """Will check if a file named with `hash_invocation` exists. Parameters ---------- - hash_invocation : :class:`str` + hash_invocation The hash corresponding to an invocation to either `scene.play` or `scene.wait`. Returns diff --git a/manim/scene/three_d_scene.py b/manim/scene/three_d_scene.py index db49e663e1..258cdce1c3 100644 --- a/manim/scene/three_d_scene.py +++ b/manim/scene/three_d_scene.py @@ -67,22 +67,22 @@ def set_camera_orientation( Parameters ---------- - phi : int or float, optional + phi The polar angle i.e the angle between Z_AXIS and Camera through ORIGIN in radians. - theta : int or float, optional + theta The azimuthal angle i.e the angle that spins the camera around the Z_AXIS. - focal_distance : int or float, optional + focal_distance The focal_distance of the Camera. - gamma : int or float, optional + gamma The rotation of the camera about the vector from the ORIGIN to the Camera. - zoom : float, optional + zoom The zoom factor of the scene. - frame_center : list, tuple or np.array, optional + frame_center The new center of the camera frame in cartesian coordinates. """ @@ -100,17 +100,17 @@ def set_camera_orientation( if frame_center is not None: self.renderer.camera._frame_center.move_to(frame_center) - def begin_ambient_camera_rotation(self, rate=0.02, about="theta"): + def begin_ambient_camera_rotation(self, rate: float = 0.02, about: str = "theta"): """ This method begins an ambient rotation of the camera about the Z_AXIS, in the anticlockwise direction Parameters ---------- - rate : int or float, optional + rate The rate at which the camera should rotate about the Z_AXIS. Negative rate means clockwise rotation. - about: (str) + about one of 3 options: ["theta", "phi", "gamma"]. defaults to theta. """ # TODO, use a ValueTracker for rate, so that it @@ -230,25 +230,25 @@ def move_camera( Parameters ---------- - phi : int or float, optional + phi The polar angle i.e the angle between Z_AXIS and Camera through ORIGIN in radians. - theta : int or float, optional + theta The azimuthal angle i.e the angle that spins the camera around the Z_AXIS. - focal_distance : int or float, optional + focal_distance The radial focal_distance between ORIGIN and Camera. - gamma : int or float, optional + gamma The rotation of the camera about the vector from the ORIGIN to the Camera. - zoom : int or float, optional + zoom The zoom factor of the camera. - frame_center : list, tuple or np.array, optional + frame_center The new center of the camera frame in cartesian coordinates. - added_anims : list, optional + added_anims Any other animations to be played at the same time. """ @@ -315,14 +315,14 @@ def move_camera( if frame_center is not None and config.renderer != "opengl": self.remove(self.camera._frame_center) - def get_moving_mobjects(self, *animations): + def get_moving_mobjects(self, *animations: Animation): """ This method returns a list of all of the Mobjects in the Scene that are moving, that are also in the animations passed. Parameters ---------- - *animations : Animation + *animations The animations whose mobjects will be checked. """ moving_mobjects = super().get_moving_mobjects(*animations) @@ -333,7 +333,7 @@ def get_moving_mobjects(self, *animations): return self.mobjects return moving_mobjects - def add_fixed_orientation_mobjects(self, *mobjects, **kwargs): + def add_fixed_orientation_mobjects(self, *mobjects: Mobject, **kwargs): """ This method is used to prevent the rotation and tilting of mobjects as the camera moves around. The mobject can @@ -343,7 +343,7 @@ def add_fixed_orientation_mobjects(self, *mobjects, **kwargs): Parameters ---------- - *mobjects : Mobject + *mobjects The Mobject(s) whose orientation must be fixed. **kwargs @@ -360,7 +360,7 @@ def add_fixed_orientation_mobjects(self, *mobjects, **kwargs): mob.fix_orientation() self.add(mob) - def add_fixed_in_frame_mobjects(self, *mobjects): + def add_fixed_in_frame_mobjects(self, *mobjects: Mobject): """ This method is used to prevent the rotation and movement of mobjects as the camera moves around. The mobject is @@ -369,7 +369,7 @@ def add_fixed_in_frame_mobjects(self, *mobjects): Parameters ---------- - *mobjects : Mobjects + *mobjects The Mobjects whose orientation must be fixed. """ if config.renderer != "opengl": @@ -382,7 +382,7 @@ def add_fixed_in_frame_mobjects(self, *mobjects): mob.fix_in_frame() self.add(mob) - def remove_fixed_orientation_mobjects(self, *mobjects): + def remove_fixed_orientation_mobjects(self, *mobjects: Mobject): """ This method "unfixes" the orientation of the mobjects passed, meaning they will no longer be at the same angle @@ -391,7 +391,7 @@ def remove_fixed_orientation_mobjects(self, *mobjects): Parameters ---------- - *mobjects : Mobjects + *mobjects The Mobjects whose orientation must be unfixed. """ if config.renderer != "opengl": @@ -402,7 +402,7 @@ def remove_fixed_orientation_mobjects(self, *mobjects): mob.unfix_orientation() self.remove(mob) - def remove_fixed_in_frame_mobjects(self, *mobjects): + def remove_fixed_in_frame_mobjects(self, *mobjects: Mobject): """ This method undoes what add_fixed_in_frame_mobjects does. It allows the mobject to be affected by the movement of @@ -410,7 +410,7 @@ def remove_fixed_in_frame_mobjects(self, *mobjects): Parameters ---------- - *mobjects : Mobjects + *mobjects The Mobjects whose position and orientation must be unfixed. """ if config.renderer != "opengl": diff --git a/manim/scene/vector_space_scene.py b/manim/scene/vector_space_scene.py index aa4df4997b..f0bdd351b5 100644 --- a/manim/scene/vector_space_scene.py +++ b/manim/scene/vector_space_scene.py @@ -4,6 +4,8 @@ __all__ = ["VectorScene", "LinearTransformationScene"] +from typing import Callable + import numpy as np from colour import Color @@ -46,13 +48,13 @@ def __init__(self, basis_vector_stroke_width=6, **kwargs): super().__init__(**kwargs) self.basis_vector_stroke_width = basis_vector_stroke_width - def add_plane(self, animate=False, **kwargs): + def add_plane(self, animate: bool = False, **kwargs): """ Adds a NumberPlane object to the background. Parameters ---------- - animate : bool, optional + animate Whether or not to animate the addition of the plane via Create. **kwargs Any valid keyword arguments accepted by NumberPlane. @@ -68,15 +70,15 @@ def add_plane(self, animate=False, **kwargs): self.add(plane) return plane - def add_axes(self, animate=False, color=WHITE, **kwargs): + def add_axes(self, animate: bool = False, color: bool = WHITE, **kwargs): """ Adds a pair of Axes to the Scene. Parameters ---------- - animate : bool, optional + animate Whether or not to animate the addition of the axes through Create. - color : bool, optional + color The color of the axes. Defaults to WHITE. """ axes = Axes(color=color, axis_config={"unit_size": 1}) @@ -85,17 +87,17 @@ def add_axes(self, animate=False, color=WHITE, **kwargs): self.add(axes) return axes - def lock_in_faded_grid(self, dimness=0.7, axes_dimness=0.5): + def lock_in_faded_grid(self, dimness: float = 0.7, axes_dimness: float = 0.5): """ This method freezes the NumberPlane and Axes that were already in the background, and adds new, manipulatable ones to the foreground. Parameters ---------- - dimness : int, float, optional + dimness The required dimness of the NumberPlane - axes_dimness : int, float, optional + axes_dimness The required dimness of the Axes. """ plane = self.add_plane() @@ -109,13 +111,13 @@ def lock_in_faded_grid(self, dimness=0.7, axes_dimness=0.5): self.renderer.camera = Camera(self.renderer.get_frame()) self.clear() - def get_vector(self, numerical_vector, **kwargs): + def get_vector(self, numerical_vector: np.ndarray | list | tuple, **kwargs): """ Returns an arrow on the Plane given an input numerical vector. Parameters ---------- - numerical_vector : np.array, list, tuple + numerical_vector The Vector to plot. **kwargs Any valid keyword argument of Arrow. @@ -132,22 +134,28 @@ def get_vector(self, numerical_vector, **kwargs): **kwargs, ) - def add_vector(self, vector, color=YELLOW, animate=True, **kwargs): + def add_vector( + self, + vector: Arrow | list | tuple | np.ndarray, + color: str = YELLOW, + animate: bool = True, + **kwargs, + ): """ Returns the Vector after adding it to the Plane. Parameters ---------- - vector : Arrow, list, tuple, np.array + vector It can be a pre-made graphical vector, or the coordinates of one. - color : str + color The string of the hex color of the vector. This is only taken into consideration if 'vector' is not an Arrow. Defaults to YELLOW. - animate : bool + animate Whether or not to animate the addition of the vector by using GrowArrow @@ -168,25 +176,18 @@ def add_vector(self, vector, color=YELLOW, animate=True, **kwargs): self.add(vector) return vector - def write_vector_coordinates(self, vector, **kwargs): + def write_vector_coordinates(self, vector: Arrow, **kwargs): """ Returns a column matrix indicating the vector coordinates, after writing them to the screen. Parameters ---------- - vector : :class:`.Arrow` + vector The arrow representing the vector. **kwargs - Any valid keyword arguments of :meth:`~.geometry.Vector.coordinate_label`: - - integer_labels : :class:`bool` - Whether or not to round the coordinates to integers. Default: ``True``. - n_dim : :class:`int` - The number of dimensions of the vector. Default: ``2``. - color - The color of the label. Default: ``WHITE``. + Any valid keyword arguments of :meth:`~.Vector.coordinate_label`: Returns ------- @@ -197,16 +198,16 @@ def write_vector_coordinates(self, vector, **kwargs): self.play(Write(coords)) return coords - def get_basis_vectors(self, i_hat_color=X_COLOR, j_hat_color=Y_COLOR): + def get_basis_vectors(self, i_hat_color: str = X_COLOR, j_hat_color: str = Y_COLOR): """ Returns a VGroup of the Basis Vectors (1,0) and (0,1) Parameters ---------- - i_hat_color : str + i_hat_color The hex colour to use for the basis vector in the x direction - j_hat_color : str + j_hat_color The hex colour to use for the basis vector in the y direction Returns @@ -252,32 +253,32 @@ def get_basis_vector_labels(self, **kwargs): def get_vector_label( self, - vector, + vector: Vector, label, - at_tip=False, - direction="left", - rotate=False, - color=None, - label_scale_factor=LARGE_BUFF - 0.2, + at_tip: bool = False, + direction: str = "left", + rotate: bool = False, + color: str | None = None, + label_scale_factor: float = LARGE_BUFF - 0.2, ): """ Returns naming labels for the passed vector. Parameters ---------- - vector : Vector + vector Vector Object for which to get the label. - at_tip : bool + at_tip Whether or not to place the label at the tip of the vector. - direction : {"left"} + direction If the label should be on the "left" or right of the vector. - rotate : bool + rotate Whether or not to rotate it to align it with the vector. - color : str + color The color to give the label. - label_scale_factor (Union[int,float]) + label_scale_factor How much to scale the label by. Returns @@ -311,20 +312,22 @@ def get_vector_label( label.shift((vector.get_end() - vector.get_start()) / 2) return label - def label_vector(self, vector, label, animate=True, **kwargs): + def label_vector( + self, vector: Vector, label: MathTex | str, animate: bool = True, **kwargs + ): """ Shortcut method for creating, and animating the addition of a label for the vector. Parameters ---------- - vector : Vector + vector The vector for which the label must be added. - label : MathTex, str + label The MathTex/string of the label. - animate : bool, optional + animate Whether or not to animate the labelling w/ Write **kwargs @@ -361,7 +364,12 @@ def position_y_coordinate( y_coord.set_color(Y_COLOR) return y_coord - def coords_to_vector(self, vector, coords_start=2 * RIGHT + 2 * UP, clean_up=True): + def coords_to_vector( + self, + vector: np.ndarray | list | tuple, + coords_start: np.ndarray | list | tuple = 2 * RIGHT + 2 * UP, + clean_up: bool = True, + ): """ This method writes the vector as a column matrix (henceforth called the label), takes the values in it one by one, and form the corresponding @@ -370,16 +378,16 @@ def coords_to_vector(self, vector, coords_start=2 * RIGHT + 2 * UP, clean_up=Tru Parameters ---------- - vector : np.ndarray, list, tuple + vector The vector to show. - coords_start : np.ndarray,list,tuple, optional + coords_start The starting point of the location of the label of the vector that shows it numerically. Defaults to 2 * RIGHT + 2 * UP or (2,2) - clean_up : bool, optional + clean_up Whether or not to remove whatever this method did after it's done. @@ -419,7 +427,12 @@ def coords_to_vector(self, vector, coords_start=2 * RIGHT + 2 * UP, clean_up=Tru self.clear() self.add(*starting_mobjects) - def vector_to_coords(self, vector, integer_labels=True, clean_up=True): + def vector_to_coords( + self, + vector: np.ndarray | list | tuple, + integer_labels: bool = True, + clean_up: bool = True, + ): """ This method displays vector as a Vector() based vector, and then shows the corresponding lines that make up the x and y components of the vector. @@ -428,14 +441,14 @@ def vector_to_coords(self, vector, integer_labels=True, clean_up=True): Parameters ---------- - vector : np.ndarray, list, tuple + vector The vector to show. - integer_label : bool, optional + integer_labels Whether or not to round the value displayed. in the vector's label to the nearest integer - clean_up : bool, optional + clean_up Whether or not to remove whatever this method did after it's done. @@ -477,7 +490,7 @@ def vector_to_coords(self, vector, integer_labels=True, clean_up=True): self.add(*starting_mobjects) return array, x_line, y_line - def show_ghost_movement(self, vector): + def show_ghost_movement(self, vector: Arrow | list | tuple | np.ndarray): """ This method plays an animation that partially shows the entire plane moving in the direction of a particular vector. This is useful when you wish to @@ -486,7 +499,7 @@ def show_ghost_movement(self, vector): Parameters ---------- - vector : Arrow, list, tuple, np.ndarray + vector The vector which indicates the direction of movement. """ if isinstance(vector, Arrow): @@ -641,18 +654,18 @@ def setup(self): self.i_hat, self.j_hat = self.basis_vectors self.add(self.basis_vectors) - def add_special_mobjects(self, mob_list, *mobs_to_add): + def add_special_mobjects(self, mob_list: list, *mobs_to_add: Mobject): """ Adds mobjects to a separate list that can be tracked, if these mobjects have some extra importance. Parameters ---------- - mob_list : list + mob_list The special list to which you want to add these mobjects. - *mobs_to_add : Mobject + *mobs_to_add The mobjects to add. """ @@ -661,44 +674,46 @@ def add_special_mobjects(self, mob_list, *mobs_to_add): mob_list.append(mobject) self.add(mobject) - def add_background_mobject(self, *mobjects): + def add_background_mobject(self, *mobjects: Mobject): """ Adds the mobjects to the special list self.background_mobjects. Parameters ---------- - *mobjects : Mobject + *mobjects The mobjects to add to the list. """ self.add_special_mobjects(self.background_mobjects, *mobjects) # TODO, this conflicts with Scene.add_fore - def add_foreground_mobject(self, *mobjects): + def add_foreground_mobject(self, *mobjects: Mobject): """ Adds the mobjects to the special list self.foreground_mobjects. Parameters ---------- - *mobjects : Mobject + *mobjects The mobjects to add to the list """ self.add_special_mobjects(self.foreground_mobjects, *mobjects) - def add_transformable_mobject(self, *mobjects): + def add_transformable_mobject(self, *mobjects: Mobject): """ Adds the mobjects to the special list self.transformable_mobjects. Parameters ---------- - *mobjects : Mobject + *mobjects The mobjects to add to the list. """ self.add_special_mobjects(self.transformable_mobjects, *mobjects) - def add_moving_mobject(self, mobject, target_mobject=None): + def add_moving_mobject( + self, mobject: Mobject, target_mobject: Mobject | None = None + ): """ Adds the mobject to the special list self.moving_mobject, and adds a property @@ -708,28 +723,30 @@ def add_moving_mobject(self, mobject, target_mobject=None): Parameters ---------- - mobject : Mobject + mobject The mobjects to add to the list - target_mobject : Mobject, optional + target_mobject What the moving_mobject goes to, etc. """ mobject.target = target_mobject self.add_special_mobjects(self.moving_mobjects, mobject) - def get_unit_square(self, color=YELLOW, opacity=0.3, stroke_width=3): + def get_unit_square( + self, color: str = YELLOW, opacity: float = 0.3, stroke_width: float = 3 + ): """ Returns a unit square for the current NumberPlane. Parameters ---------- - color : str, optional + color The string of the hex color code of the color wanted. - opacity : float, int, optional + opacity The opacity of the square - stroke_width : int, float, optional + stroke_width The stroke_width in pixels of the border of the square Returns @@ -748,14 +765,14 @@ def get_unit_square(self, color=YELLOW, opacity=0.3, stroke_width=3): square.move_to(self.plane.coords_to_point(0, 0), DL) return square - def add_unit_square(self, animate=False, **kwargs): + def add_unit_square(self, animate: bool = False, **kwargs): """ Adds a unit square to the scene via self.get_unit_square. Parameters ---------- - animate (bool) + animate Whether or not to animate the addition with DrawBorderThenFill. **kwargs @@ -778,18 +795,20 @@ def add_unit_square(self, animate=False, **kwargs): self.square = square return self - def add_vector(self, vector, color=YELLOW, **kwargs): + def add_vector( + self, vector: Arrow | list | tuple | np.ndarray, color: str = YELLOW, **kwargs + ): """ Adds a vector to the scene, and puts it in the special list self.moving_vectors. Parameters ---------- - vector : Arrow,list,tuple,np.ndarray + vector It can be a pre-made graphical vector, or the coordinates of one. - color : str + color The string of the hex color of the vector. This is only taken into consideration if 'vector' is not an Arrow. Defaults to YELLOW. @@ -806,7 +825,7 @@ def add_vector(self, vector, color=YELLOW, **kwargs): self.moving_vectors.append(vector) return vector - def write_vector_coordinates(self, vector, **kwargs): + def write_vector_coordinates(self, vector: Arrow, **kwargs): """ Returns a column matrix indicating the vector coordinates, after writing them to the screen, and adding them to the @@ -814,7 +833,7 @@ def write_vector_coordinates(self, vector, **kwargs): Parameters ---------- - vector : Arrow + vector The arrow representing the vector. **kwargs @@ -830,7 +849,12 @@ def write_vector_coordinates(self, vector, **kwargs): return coords def add_transformable_label( - self, vector, label, transformation_name="L", new_label=None, **kwargs + self, + vector: Vector, + label: MathTex | str, + transformation_name: str | MathTex = "L", + new_label: str | MathTex | None = None, + **kwargs, ): """ Method for creating, and animating the addition of @@ -838,16 +862,16 @@ def add_transformable_label( Parameters ---------- - vector : Vector + vector The vector for which the label must be added. - label : Union[:class:`~.MathTex`, :class:`str`] + label The MathTex/string of the label. - transformation_name : Union[:class:`str`, :class:`~.MathTex`], optional + transformation_name The name to give the transformation as a label. - new_label : Union[:class:`str`, :class:`~.MathTex`], optional + new_label What the label should display after a Linear Transformation **kwargs @@ -873,7 +897,12 @@ def add_transformable_label( self.transformable_labels.append(label_mob) return label_mob - def add_title(self, title, scale_factor=1.5, animate=False): + def add_title( + self, + title: str | MathTex | Tex, + scale_factor: float = 1.5, + animate: bool = False, + ): """ Adds a title, after scaling it, adding a background rectangle, moving it to the top and adding it to foreground_mobjects adding @@ -881,13 +910,13 @@ def add_title(self, title, scale_factor=1.5, animate=False): Parameters ---------- - title : Union[:class:`str`, :class:`~.MathTex`, :class:`~.Tex`] + title What the title should be. - scale_factor : int, float, optional + scale_factor How much the title should be scaled by. - animate : bool + animate Whether or not to animate the addition. Returns @@ -905,19 +934,21 @@ def add_title(self, title, scale_factor=1.5, animate=False): self.title = title return self - def get_matrix_transformation(self, matrix): + def get_matrix_transformation(self, matrix: np.ndarray | list | tuple): """ Returns a function corresponding to the linear transformation represented by the matrix passed. Parameters ---------- - matrix : np.ndarray, list, tuple + matrix The matrix. """ return self.get_transposed_matrix_transformation(np.array(matrix).T) - def get_transposed_matrix_transformation(self, transposed_matrix): + def get_transposed_matrix_transformation( + self, transposed_matrix: np.ndarray | list | tuple + ): """ Returns a function corresponding to the linear transformation represented by the transposed @@ -925,7 +956,7 @@ def get_transposed_matrix_transformation(self, transposed_matrix): Parameters ---------- - matrix : np.ndarray, list, tuple + transposed_matrix The matrix. """ transposed_matrix = np.array(transposed_matrix) @@ -937,7 +968,7 @@ def get_transposed_matrix_transformation(self, transposed_matrix): raise ValueError("Matrix has bad dimensions") return lambda point: np.dot(point, transposed_matrix) - def get_piece_movement(self, pieces): + def get_piece_movement(self, pieces: list | tuple | np.ndarray): """ This method returns an animation that moves an arbitrary mobject in "pieces" to its corresponding .target value. @@ -946,7 +977,7 @@ def get_piece_movement(self, pieces): Parameters ---------- - pieces : list, tuple, np.array + pieces The pieces for which the movement must be shown. Returns @@ -960,7 +991,7 @@ def get_piece_movement(self, pieces): self.add(start.copy().fade(0.7)) return Transform(start, target, lag_ratio=0) - def get_moving_mobject_movement(self, func): + def get_moving_mobject_movement(self, func: Callable[[np.ndarray], np.ndarray]): """ This method returns an animation that moves a mobject in "self.moving_mobjects" to its corresponding .target value. @@ -969,7 +1000,7 @@ def get_moving_mobject_movement(self, func): Parameters ---------- - func : function + func The function that determines where the .target of the moving mobject goes. @@ -985,7 +1016,7 @@ def get_moving_mobject_movement(self, func): m.target.move_to(target_point) return self.get_piece_movement(self.moving_mobjects) - def get_vector_movement(self, func): + def get_vector_movement(self, func: Callable[[np.ndarray], np.ndarray]): """ This method returns an animation that moves a mobject in "self.moving_vectors" to its corresponding .target value. @@ -994,7 +1025,7 @@ def get_vector_movement(self, func): Parameters ---------- - func : function + func The function that determines where the .target of the moving mobject goes. @@ -1026,7 +1057,7 @@ def get_transformable_label_movement(self): ) return self.get_piece_movement(self.transformable_labels) - def apply_matrix(self, matrix, **kwargs): + def apply_matrix(self, matrix: np.ndarray | list | tuple, **kwargs): """ Applies the transformation represented by the given matrix to the number plane, and each vector/similar @@ -1034,14 +1065,14 @@ def apply_matrix(self, matrix, **kwargs): Parameters ---------- - matrix : np.ndarray, list, tuple + matrix The matrix. **kwargs Any valid keyword argument of self.apply_transposed_matrix() """ self.apply_transposed_matrix(np.array(matrix).T, **kwargs) - def apply_inverse(self, matrix, **kwargs): + def apply_inverse(self, matrix: np.ndarray | list | tuple, **kwargs): """ This method applies the linear transformation represented by the inverse of the passed matrix @@ -1049,14 +1080,16 @@ def apply_inverse(self, matrix, **kwargs): Parameters ---------- - matrix : np.ndarray, list, tuple + matrix The matrix whose inverse is to be applied. **kwargs Any valid keyword argument of self.apply_matrix() """ self.apply_matrix(np.linalg.inv(matrix), **kwargs) - def apply_transposed_matrix(self, transposed_matrix, **kwargs): + def apply_transposed_matrix( + self, transposed_matrix: np.ndarray | list | tuple, **kwargs + ): """ Applies the transformation represented by the given transposed matrix to the number plane, @@ -1064,7 +1097,7 @@ def apply_transposed_matrix(self, transposed_matrix, **kwargs): Parameters ---------- - matrix : np.ndarray, list, tuple + transposed_matrix The matrix. **kwargs Any valid keyword argument of self.apply_function() @@ -1077,7 +1110,7 @@ def apply_transposed_matrix(self, transposed_matrix, **kwargs): kwargs["path_arc"] = net_rotation self.apply_function(func, **kwargs) - def apply_inverse_transpose(self, t_matrix, **kwargs): + def apply_inverse_transpose(self, t_matrix: np.ndarray | list | tuple, **kwargs): """ Applies the inverse of the transformation represented by the given transposed matrix to the number plane and each @@ -1085,7 +1118,7 @@ def apply_inverse_transpose(self, t_matrix, **kwargs): Parameters ---------- - matrix : np.ndarray, list, tuple + t_matrix The matrix. **kwargs Any valid keyword argument of self.apply_transposed_matrix() @@ -1093,7 +1126,9 @@ def apply_inverse_transpose(self, t_matrix, **kwargs): t_inv = np.linalg.inv(np.array(t_matrix).T).T self.apply_transposed_matrix(t_inv, **kwargs) - def apply_nonlinear_transformation(self, function, **kwargs): + def apply_nonlinear_transformation( + self, function: Callable[[np.ndarray], np.ndarray], **kwargs + ): """ Applies the non-linear transformation represented by the given function to the number plane and each @@ -1101,7 +1136,7 @@ def apply_nonlinear_transformation(self, function, **kwargs): Parameters ---------- - function : Function + function The function. **kwargs Any valid keyword argument of self.apply_function() @@ -1109,7 +1144,12 @@ def apply_nonlinear_transformation(self, function, **kwargs): self.plane.prepare_for_nonlinear_transform() self.apply_function(function, **kwargs) - def apply_function(self, function, added_anims=[], **kwargs): + def apply_function( + self, + function: Callable[[np.ndarray], np.ndarray], + added_anims: list = [], + **kwargs, + ): """ Applies the given function to each of the mobjects in self.transformable_mobjects, and plays the animation showing @@ -1117,11 +1157,11 @@ def apply_function(self, function, added_anims=[], **kwargs): Parameters ---------- - function : Function + function The function that affects each point of each mobject in self.transformable_mobjects. - added_anims : list, optional + added_anims Any other animations that need to be played simultaneously with this. diff --git a/manim/scene/zoomed_scene.py b/manim/scene/zoomed_scene.py index 06bc2213ee..361c4eaf55 100644 --- a/manim/scene/zoomed_scene.py +++ b/manim/scene/zoomed_scene.py @@ -132,14 +132,14 @@ def setup(self): self.zoomed_camera = zoomed_camera self.zoomed_display = zoomed_display - def activate_zooming(self, animate=False): + def activate_zooming(self, animate: bool = False): """ This method is used to activate the zooming for the zoomed_camera. Parameters ---------- - animate : bool, optional + animate Whether or not to animate the activation of the zoomed camera. """ @@ -153,13 +153,13 @@ def activate_zooming(self, animate=False): self.zoomed_display, ) - def get_zoom_in_animation(self, run_time=2, **kwargs): + def get_zoom_in_animation(self, run_time: float = 2, **kwargs): """ Returns the animation of camera zooming in. Parameters ---------- - run_time : int or float, optional + run_time The run_time of the animation of the camera zooming in. **kwargs Any valid keyword arguments of ApplyMethod() diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index adf40bba09..79d93f764b 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -38,7 +38,7 @@ def bezier( Parameters ---------- - points : np.ndarray + points points defining the desired bezier curve. Returns @@ -78,11 +78,11 @@ def partial_bezier_points(points: np.ndarray, a: float, b: float) -> np.ndarray: Parameters ---------- - points : np.ndarray + points set of points defining the bezier curve. - a : float + a lower bound of the desired partial bezier curve. - b : float + b upper bound of the desired partial bezier curve. Returns @@ -353,7 +353,7 @@ def get_smooth_handle_points( Parameters ---------- - points : np.ndarray + points Anchors. Returns diff --git a/manim/utils/caching.py b/manim/utils/caching.py index 4e776d9777..cabecd6567 100644 --- a/manim/utils/caching.py +++ b/manim/utils/caching.py @@ -1,10 +1,12 @@ from __future__ import annotations +from typing import Callable + from .. import config, logger from ..utils.hashing import get_hash_from_play_call -def handle_caching_play(func): +def handle_caching_play(func: Callable[..., None]): """Decorator that returns a wrapped version of func that will compute the hash of the play invocation. @@ -14,7 +16,7 @@ def handle_caching_play(func): Parameters ---------- - func : Callable[[...], None] + func The play like function that has to be written to the video file stream. Take the same parameters as `scene.play`. """ diff --git a/manim/utils/family.py b/manim/utils/family.py index d4f31fbb32..3669ed2036 100644 --- a/manim/utils/family.py +++ b/manim/utils/family.py @@ -1,15 +1,16 @@ from __future__ import annotations import itertools as it +from typing import Iterable from ..mobject.mobject import Mobject from ..utils.iterables import remove_list_redundancies def extract_mobject_family_members( - mobjects, + mobjects: Iterable[Mobject], use_z_index=False, - only_those_with_points=False, + only_those_with_points: bool = False, ): """Returns a list of the types of mobjects and their family members present. A "family" in this context refers to a mobject, its submobjects, and their @@ -17,9 +18,9 @@ def extract_mobject_family_members( Parameters ---------- - mobjects : Mobject + mobjects The Mobjects currently in the Scene - only_those_with_points : bool, optional + only_those_with_points Whether or not to only do this for those mobjects that have points. By default False diff --git a/manim/utils/file_ops.py b/manim/utils/file_ops.py index 6a5a7f1f77..1bbb048214 100644 --- a/manim/utils/file_ops.py +++ b/manim/utils/file_ops.py @@ -175,12 +175,12 @@ def seek_full_path_from_defaults( raise OSError(error) -def modify_atime(file_path) -> None: +def modify_atime(file_path: str) -> None: """Will manually change the accessed time (called `atime`) of the file, as on a lot of OS the accessed time refresh is disabled by default. Parameters ---------- - file_path : :class:`str` + file_path The path of the file. """ os.utime(file_path, times=(time.time(), os.path.getmtime(file_path))) @@ -248,12 +248,12 @@ def get_template_path() -> Path: return Path.resolve(Path(__file__).parent.parent / "templates") -def add_import_statement(file): +def add_import_statement(file: Path): """Prepends an import statement in a file Parameters ---------- - file : :class:`Path` + file """ with file.open("r+") as f: import_line = "from manim import *" @@ -269,9 +269,9 @@ def copy_template_files( Parameters ---------- - project_dir : :class:`Path` + project_dir Path to project directory. - template_name : :class:`str` + template_name Name of template. """ template_cfg_path = Path.resolve( diff --git a/manim/utils/hashing.py b/manim/utils/hashing.py index f84f2770d3..60e4422f15 100644 --- a/manim/utils/hashing.py +++ b/manim/utils/hashing.py @@ -14,8 +14,15 @@ import numpy as np +from manim.animation.animation import Animation +from manim.camera.camera import Camera +from manim.mobject.mobject import Mobject + from .. import config, logger +if typing.TYPE_CHECKING: + from manim.scene.scene import Scene + # Sometimes there are elements that are not suitable for hashing (too long or # run-dependent). This is used to filter them out. KEYS_TO_FILTER_OUT = { @@ -50,14 +57,14 @@ def reset_already_processed(cls): cls._already_processed.clear() @classmethod - def check_already_processed_decorator(cls: _Memoizer, is_method=False): + def check_already_processed_decorator(cls: _Memoizer, is_method: bool = False): """Decorator to handle the arguments that goes through the decorated function. Returns _ALREADY_PROCESSED_PLACEHOLDER if the obj has been processed, or lets the decorated function call go ahead. Parameters ---------- - is_method : bool, optional + is_method Whether the function passed is a method, by default False. """ @@ -81,7 +88,7 @@ def check_already_processed(cls, obj: Any) -> Any: Parameters ---------- - obj : Any + obj The object to check. Returns @@ -98,7 +105,7 @@ def mark_as_processed(cls, obj: Any) -> None: Parameters ---------- - obj : Any + obj The object to mark as processed. """ cls._handle_already_processed(obj, lambda x: x) @@ -164,7 +171,7 @@ def _return( class _CustomEncoder(json.JSONEncoder): - def default(self, obj): + def default(self, obj: Any): """ This method is used to serialize objects to JSON format. @@ -178,7 +185,7 @@ def default(self, obj): Parameters ---------- - obj : Any + obj Arbitrary object to convert Returns @@ -225,7 +232,7 @@ def default(self, obj): # Serialize it with only the type of the object. You can change this to whatever string when debugging the serialization process. return str(type(obj)) - def _cleaned_iterable(self, iterable): + def _cleaned_iterable(self, iterable: typing.Iterable[Any]): """Check for circular reference at each iterable that will go through the JSONEncoder, as well as key of the wrong format. If a key with a bad format is found (i.e not a int, string, or float), it gets replaced byt its hash using the same process implemented here. @@ -233,7 +240,7 @@ def _cleaned_iterable(self, iterable): Parameters ---------- - iterable : Iterable[Any] + iterable The iterable to check. """ @@ -278,12 +285,12 @@ def _iter_check_dict(dct): elif isinstance(iterable, dict): return _iter_check_dict(iterable) - def encode(self, obj): + def encode(self, obj: Any): """Overriding of :meth:`JSONEncoder.encode`, to make our own process. Parameters ---------- - obj: Any + obj The object to encode in JSON. Returns @@ -297,12 +304,12 @@ def encode(self, obj): return super().encode(obj) -def get_json(obj): +def get_json(obj: dict): """Recursively serialize `object` to JSON using the :class:`CustomEncoder` class. Parameters ---------- - dict_config : :class:`dict` + obj The dict to flatten Returns @@ -314,25 +321,25 @@ def get_json(obj): def get_hash_from_play_call( - scene_object, - camera_object, - animations_list, - current_mobjects_list, + scene_object: Scene, + camera_object: Camera, + animations_list: typing.Iterable[Animation], + current_mobjects_list: typing.Iterable[Mobject], ) -> str: """Take the list of animations and a list of mobjects and output their hashes. This is meant to be used for `scene.play` function. Parameters ----------- - scene_object : :class:`~.Scene` + scene_object The scene object. - camera_object : :class:`~.Camera` + camera_object The camera object used in the scene. - animations_list : Iterable[:class:`~.Animation`] + animations_list The list of animations. - current_mobjects_list : Iterable[:class:`~.Mobject`] + current_mobjects_list The list of mobjects. Returns diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 3932e5bd70..fe5fb8f13b 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -114,7 +114,7 @@ def quaternion_from_angle_axis( The angle for the quaternion. axis The axis for the quaternion - axis_normalized : bool, optional + axis_normalized Checks whether the axis is normalized, by default False Returns @@ -267,7 +267,7 @@ def rotation_about_z(angle: float) -> np.ndarray: Parameters ---------- - angle : float + angle Angle for the rotation matrix. Returns diff --git a/manim/utils/testing/frames_comparison.py b/manim/utils/testing/frames_comparison.py index 775219a87c..e20e1a2a56 100644 --- a/manim/utils/testing/frames_comparison.py +++ b/manim/utils/testing/frames_comparison.py @@ -45,10 +45,6 @@ def frames_comparison( Parameters ---------- - test_name - The name of the test. - module_name - The module which the test belongs to. last_frame whether the test should test the last frame, by default True. renderer_class @@ -161,7 +157,7 @@ def _make_test_comparing_frames( file_path: Path, base_scene: type[Scene], construct: Callable[[Scene], None], - renderer_class, # Renderer type, there is no superclass renderer yet ..... + renderer_class: type, # Renderer type, there is no superclass renderer yet ..... is_set_test_data_test: bool, last_frame: bool, show_diff: bool, @@ -171,15 +167,15 @@ def _make_test_comparing_frames( Parameters ---------- - file_path : Path + file_path The path of the control frames. - base_scene : Type[Scene] + base_scene The base scene class. - construct : Callable[[Scene], None] + construct The construct method (= the test function) - renderer_class : [type] + renderer_class The renderer base class. - show_diff : bool + show_diff whether to visually show_diff (see --show_diff) Returns diff --git a/manim/utils/tex.py b/manim/utils/tex.py index 6e881ecfa0..d8751e091f 100644 --- a/manim/utils/tex.py +++ b/manim/utils/tex.py @@ -18,17 +18,17 @@ class TexTemplate: Parameters ---------- - tex_compiler : Optional[:class:`str`], optional + tex_compiler The TeX compiler to be used, e.g. ``latex``, ``pdflatex`` or ``lualatex`` - output_format : Optional[:class:`str`], optional + output_format The output format resulting from compilation, e.g. ``.dvi`` or ``.pdf`` - documentclass : Optional[:class:`str`], optional + documentclass The command defining the documentclass, e.g. ``\\documentclass[preview]{standalone}`` - preamble : Optional[:class:`str`], optional + preamble The document's preamble, i.e. the part between ``\\documentclass`` and ``\\begin{document}`` - placeholder_text : Optional[:class:`str`], optional + placeholder_text Text in the document that will be replaced by the expression to be rendered - post_doc_commands : Optional[:class:`str`], optional + post_doc_commands Text (definitions, commands) to be inserted at right after ``\\begin{document}``, e.g. ``\\boldmath`` Attributes @@ -60,12 +60,12 @@ class TexTemplate: def __init__( self, - tex_compiler=None, - output_format=None, - documentclass=None, - preamble=None, - placeholder_text=None, - post_doc_commands=None, + tex_compiler: str | None = None, + output_format: str | None = None, + documentclass: str | None = None, + preamble: str | None = None, + placeholder_text: str | None = None, + post_doc_commands: str | None = None, **kwargs, ): self.tex_compiler = ( @@ -124,14 +124,14 @@ def _rebuild(self): + "\n" ) - def add_to_preamble(self, txt, prepend=False): + def add_to_preamble(self, txt: str, prepend: bool = False): """Adds stuff to the TeX template's preamble (e.g. definitions, packages). Text can be inserted at the beginning or at the end of the preamble. Parameters ---------- - txt : :class:`string` + txt String containing the text to be added, e.g. ``\\usepackage{hyperref}`` - prepend : Optional[:class:`bool`], optional + prepend Whether the text should be added at the beginning of the preamble, i.e. right after ``\\documentclass``. Default is to add it at the end of the preamble, i.e. right before ``\\begin{document}`` """ if prepend: @@ -140,23 +140,23 @@ def add_to_preamble(self, txt, prepend=False): self.preamble += "\n" + txt self._rebuild() - def add_to_document(self, txt): + def add_to_document(self, txt: str): """Adds txt to the TeX template just after \\begin{document}, e.g. ``\\boldmath`` Parameters ---------- - txt : :class:`str` + txt String containing the text to be added. """ self.post_doc_commands += "\n" + txt + "\n" self._rebuild() - def get_texcode_for_expression(self, expression): + def get_texcode_for_expression(self, expression: str): """Inserts expression verbatim into TeX template. Parameters ---------- - expression : :class:`str` + expression The string containing the expression to be typeset, e.g. ``$\\sqrt{2}$`` Returns @@ -166,13 +166,13 @@ def get_texcode_for_expression(self, expression): """ return self.body.replace(self.placeholder_text, expression) - def _texcode_for_environment(self, environment): + def _texcode_for_environment(self, environment: str): """Processes the tex_environment string to return the correct ``\\begin{environment}[extra]{extra}`` and ``\\end{environment}`` strings Parameters ---------- - environment : :class:`str` + environment The tex_environment as a string. Acceptable formats include: ``{align*}``, ``align*``, ``{tabular}[t]{cccl}``, ``tabular}{cccl``, ``\\begin{tabular}[t]{cccl}``. @@ -204,14 +204,14 @@ def _texcode_for_environment(self, environment): return begin, end - def get_texcode_for_expression_in_env(self, expression, environment): + def get_texcode_for_expression_in_env(self, expression: str, environment: str): r"""Inserts expression into TeX template wrapped in \begin{environment} and \end{environment} Parameters ---------- - expression : :class:`str` + expression The string containing the expression to be typeset, e.g. ``$\\sqrt{2}$`` - environment : :class:`str` + environment The string containing the environment in which the expression should be typeset, e.g. ``align*`` Returns @@ -231,25 +231,10 @@ class TexTemplateFromFile(TexTemplate): Parameters ---------- - tex_compiler : Optional[:class:`str`], optional - The TeX compiler to be used, e.g. ``latex``, ``pdflatex`` or ``lualatex`` - output_format : Optional[:class:`str`], optional - The output format resulting from compilation, e.g. ``.dvi`` or ``.pdf`` - documentclass : Optional[:class:`str`], optional - The command defining the documentclass, e.g. ``\\documentclass[preview]{standalone}`` - preamble : Optional[:class:`str`], optional - The document's preamble, i.e. the part between ``\\documentclass`` and ``\\begin{document}`` - placeholder_text : Optional[:class:`str`], optional - Text in the document that will be replaced by the expression to be rendered - post_doc_commands : Optional[:class:`str`], optional - Text (definitions, commands) to be inserted at right after ``\\begin{document}``, e.g. ``\\boldmath`` - kwargs : :class:`str` - The kwargs specified can only be strings. - - Other Parameters - ---------------- tex_filename Path to a valid TeX template file + kwargs + Arguments for :class:`~.TexTemplate`. Attributes ---------- diff --git a/manim/utils/tex_file_writing.py b/manim/utils/tex_file_writing.py index d53acbe0a6..5423c80c8b 100644 --- a/manim/utils/tex_file_writing.py +++ b/manim/utils/tex_file_writing.py @@ -14,6 +14,8 @@ import unicodedata from pathlib import Path +from manim.utils.tex import TexTemplate + from .. import config, logger @@ -25,16 +27,20 @@ def tex_hash(expression): return hasher.hexdigest()[:16] -def tex_to_svg_file(expression, environment=None, tex_template=None): +def tex_to_svg_file( + expression: str, + environment: str | None = None, + tex_template: TexTemplate | None = None, +): """Takes a tex expression and returns the svg version of the compiled tex Parameters ---------- - expression : :class:`str` + expression String containing the TeX expression to be rendered, e.g. ``\\sqrt{2}`` or ``foo`` - environment : Optional[:class:`str`], optional + environment The string containing the environment in which the expression should be typeset, e.g. ``align*`` - tex_template : Optional[:class:`~.TexTemplate`], optional + tex_template Template class used to typesetting. If not set, use default template set via `config["tex_template"]` Returns @@ -53,17 +59,21 @@ def tex_to_svg_file(expression, environment=None, tex_template=None): return convert_to_svg(dvi_file, tex_template.output_format) -def generate_tex_file(expression, environment=None, tex_template=None): +def generate_tex_file( + expression: str, + environment: str | None = None, + tex_template: TexTemplate | None = None, +): """Takes a tex expression (and an optional tex environment), and returns a fully formed tex file ready for compilation. Parameters ---------- - expression : :class:`str` + expression String containing the TeX expression to be rendered, e.g. ``\\sqrt{2}`` or ``foo`` - environment : Optional[:class:`str`], optional + environment The string containing the environment in which the expression should be typeset, e.g. ``align*`` - tex_template : Optional[:class:`~.TexTemplate`], optional + tex_template Template class used to typesetting. If not set, use default template set via `config["tex_template"]` Returns @@ -196,16 +206,16 @@ def compile_tex(tex_file: Path, tex_compiler: str, output_format: str) -> Path: return result -def convert_to_svg(dvi_file, extension, page=1): +def convert_to_svg(dvi_file: Path, extension: str, page: int = 1): """Converts a .dvi, .xdv, or .pdf file into an svg using dvisvgm. Parameters ---------- - dvi_file : :class:`Path` + dvi_file File name of the input file to be converted. - extension : :class:`str` + extension String containing the file extension and thus indicating the file type, e.g. ``.dvi`` or ``.pdf`` - page : Optional[:class:`int`], optional + page Page to be converted if input file is multi-page. Returns diff --git a/scripts/template_docsting_with_example.py b/scripts/template_docsting_with_example.py index 4a8621b5eb..ce2466dbdc 100644 --- a/scripts/template_docsting_with_example.py +++ b/scripts/template_docsting_with_example.py @@ -13,7 +13,7 @@ class SomeClass: Parameters ---------- - scale_factor : :class:`float` + scale_factor The factor used for scaling. Returns diff --git a/tests/helpers/graphical_units.py b/tests/helpers/graphical_units.py index f6568d6ff7..b202217b05 100644 --- a/tests/helpers/graphical_units.py +++ b/tests/helpers/graphical_units.py @@ -9,17 +9,18 @@ import numpy as np from manim import config, logger +from manim.scene.scene import Scene -def set_test_scene(scene_object, module_name): +def set_test_scene(scene_object: type[Scene], module_name: str): """Function used to set up the test data for a new feature. This will basically set up a pre-rendered frame for a scene. This is meant to be used only when setting up tests. Please refer to the wiki. Parameters ---------- - scene_object : :class:`~.Scene` + scene_object The scene with which we want to set up a new test. - module_name : :class:`str` + module_name The name of the module in which the functionality tested is contained. For example, ``Write`` is contained in the module ``creation``. This will be used in the folder architecture of ``/tests_data``. diff --git a/tests/utils/GraphicalUnitTester.py b/tests/utils/GraphicalUnitTester.py index 18fe373c56..02128221c9 100644 --- a/tests/utils/GraphicalUnitTester.py +++ b/tests/utils/GraphicalUnitTester.py @@ -8,6 +8,7 @@ from manim import config, tempconfig from manim.renderer.opengl_renderer import OpenGLRenderer +from manim.scene.scene import Scene class GraphicalUnitTester: @@ -15,11 +16,9 @@ class GraphicalUnitTester: Parameters ---------- - scene_class : :class:`~.Scene` + scene_class The scene to be tested - config_scene : :class:`dict` - The configuration of the scene - module_tested : :class:`str` + module_tested The name of the module tested. i.e if we are testing functions of creation.py, the module will be "creation" Attributes @@ -32,7 +31,9 @@ class GraphicalUnitTester: The scene tested """ - def __init__(self, scene_class, module_tested, tmpdir, rgb_atol=0): + def __init__( + self, scene_class: type[Scene], module_tested: str, tmpdir, rgb_atol=0 + ): # Disable the the logs, (--quiet is broken) TODO logging.disable(logging.CRITICAL) tests_directory = Path(__file__).absolute().parent.parent diff --git a/tests/utils/testing_utils.py b/tests/utils/testing_utils.py index 8c4729742f..f87dda4d7e 100644 --- a/tests/utils/testing_utils.py +++ b/tests/utils/testing_utils.py @@ -4,12 +4,12 @@ import sys -def get_scenes_to_test(module_name): +def get_scenes_to_test(module_name: str): """Get all Test classes of the module from which it is called. Used to fetch all the SceneTest of the module. Parameters ---------- - module_name : :class:`str` + module_name The name of the module tested. Returns From 457da140055bcb25a4f93ee0af84b631a69c06d2 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 10 Nov 2022 08:07:41 +0100 Subject: [PATCH 146/555] Follow-up to :pr:`2988` -- fixes and improvements to some docstrings (#3018) * Converted types in docstrings to type annotations * `isort .` * `black .` * Additional docstrings type annotation fixes * line break in animation.py * moved Camera.__init__ docstring to class docstring * fixed ReST formatting error in image_mobject.py * start of description captialization Co-authored-by: NotWearingPants <26556598+NotWearingPants@users.noreply.github.com> --- manim/animation/animation.py | 3 ++- manim/camera/camera.py | 32 ++++++++++++++-------------- manim/mobject/types/image_mobject.py | 1 + manim/scene/scene.py | 2 +- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/manim/animation/animation.py b/manim/animation/animation.py index b35c67405a..286bca5fe4 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -416,7 +416,8 @@ def set_rate_func( Parameters ---------- rate_func - The new function defining the animation progress based on the relative runtime (see :mod:`~.rate_functions`). + The new function defining the animation progress based on the + relative runtime (see :mod:`~.rate_functions`). Returns ------- diff --git a/manim/camera/camera.py b/manim/camera/camera.py index cdc625cc21..1128ea612a 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -36,6 +36,21 @@ class Camera: This is the object which takes care of what exactly is displayed on screen at any given moment. + + Parameters + ---------- + background_image + The path to an image that should be the background image. + If not set, the background is filled with :attr:`self.background_color` + background + What :attr:`background` is set to. By default, ``None``. + pixel_height + The height of the scene in pixels. + pixel_width + The width of the scene in pixels. + kwargs + Additional arguments (``background_color``, ``background_opacity``) + to be set. """ def __init__( @@ -55,22 +70,6 @@ def __init__( frame_rate: float | None = None, **kwargs, ): - """Initialises the Camera. - - Parameters - ---------- - background_image - The path to an image that should be the background image. - If not set, the background is filled with `self.background_color` - background - What self.background should be, by default None as will be set later. - pixel_height - The height of the scene in pixels. - pixel_width - The width of the scene in pixels. - **kwargs - Any local variables to be set. - """ self.background_image = background_image self.frame_center = frame_center self.image_mode = image_mode @@ -100,6 +99,7 @@ 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])) diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index c0eff69c2f..091c60a195 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -67,6 +67,7 @@ def set_resampling_algorithm(self, resampling_algorithm: int): An integer constant described in the Pillow library, or one from the RESAMPLING_ALGORITHMS global dictionary, under the following keys: + * 'bicubic' or 'cubic' * 'nearest' or 'none' * 'box' diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 63a718b087..103a6a62d1 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -1123,7 +1123,7 @@ def compile_animation_data(self, *animations: Animation, **play_kwargs): animations Animation or mobject with mobject method and params play_kwargs - named parameters affecting what was passed in ``animations``, + Named parameters affecting what was passed in ``animations``, e.g. ``run_time``, ``lag_ratio`` and so on. Returns From 59b83d8d104595a8edf8e99fee7fc7c84bfcaf5a Mon Sep 17 00:00:00 2001 From: Alex Lembcke Date: Thu, 10 Nov 2022 19:30:01 -0500 Subject: [PATCH 147/555] Added documentation to :mod:`.three_dimensions` (#2915) * Updated docstrings for three_dimensions. * Updated docstrings for three_dimensions. * Moved parameters section before examples. * removed superfluous colons * fixed overly long line * fixed underline lengths Co-authored-by: Benjamin Hackl --- manim/mobject/three_d/three_dimensions.py | 318 ++++++++++++++++------ 1 file changed, 235 insertions(+), 83 deletions(-) diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index a2ab19e8bb..a47095a3e8 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -47,16 +47,31 @@ class Surface(VGroup, metaclass=ConvertToOpenGL): Parameters ---------- - func : - The function that defines the surface. - u_range : + func + The function defining the :class:`Surface`. + u_range The range of the ``u`` variable: ``(u_min, u_max)``. - v_range : + v_range The range of the ``v`` variable: ``(v_min, v_max)``. - resolution : - The number of samples taken of the surface. A tuple - can be used to define different resolutions for ``u`` and - ``v`` respectively. + resolution + The number of samples taken of the :class:`Surface`. A tuple can be + used to define different resolutions for ``u`` and ``v`` respectively. + fill_color + The color of the :class:`Surface`. Ignored if ``checkerboard_colors`` + is set. + fill_opacity + The opacity of the :class:`Surface`, from 0 being fully transparent + to 1 being fully opaque. Defaults to 1. + checkerboard_colors + Colors individual faces alternating colors. Overrides ``fill_color``. + stroke_color + Color of the stroke surrounding each face of :class:`Surface`. + stroke_width + Width of the stroke surrounding each face of :class:`Surface`. + Defaults to 0.5. + should_make_jagged + Changes the anchor mode of the Bézier curves from smooth to jagged. + Defaults to ``False``. Examples -------- @@ -162,6 +177,22 @@ def _setup_in_uv_space(self): self.set_fill_by_checkerboard(*self.checkerboard_colors) def set_fill_by_checkerboard(self, *colors, opacity=None): + """Sets the fill_color of each face of :class:`Surface` in + an alternating pattern. + + Parameters + ---------- + colors + List of colors for alternating pattern. + opacity + The fill_opacity of :class:`Surface`, from 0 being fully transparent + to 1 being fully opaque. + + Returns + ------- + :class:`~.Surface` + The parametric surface with an alternating pattern. + """ n_colors = len(colors) for face in self: c_index = (face.u_index + face.v_index) % n_colors @@ -176,16 +207,19 @@ def set_fill_by_value( axis: int = 2, **kwargs, ): - """Sets the color of each mobject of a parametric surface to a color relative to its axis-value + """Sets the color of each mobject of a parametric surface to a color + relative to its axis-value. Parameters ---------- - axes : - The axes for the parametric surface, which will be used to map axis-values to colors. - colorscale : - A list of colors, ordered from lower axis-values to higher axis-values. If a list of tuples is passed - containing colors paired with numbers, then those numbers will be used as the pivots. - axis : + axes + The axes for the parametric surface, which will be used to map + axis-values to colors. + colorscale + A list of colors, ordered from lower axis-values to higher axis-values. + If a list of tuples is passed containing colors paired with numbers, + then those numbers will be used as the pivots. + axis The chosen axis to use for the color mapping. (0 = x, 1 = y, 2 = z) Returns @@ -282,10 +316,24 @@ def param_surface(u, v): class Sphere(Surface): - """A mobject representing a three-dimensional sphere. + """An three-dimensional sphere. + + Parameters + ---------- + center + Center of the :class:`Sphere`. + radius + The radius of the :class:`Sphere`. + resolution + The number of samples taken of the :class:`Sphere`. A tuple can be used + to define different resolutions for ``u`` and ``v`` respectively. + u_range + The range of the ``u`` variable: ``(u_min, u_max)``. + v_range + The range of the ``v`` variable: ``(v_min, v_max)``. Examples - --------- + -------- .. manim:: ExampleSphere :save_last_frame: @@ -348,13 +396,16 @@ class Dot3D(Sphere): """A spherical dot. Parameters - -------- + ---------- point The location of the dot. radius The radius of the dot. color - The color of the :class:`Dot3D` + The color of the :class:`Dot3D`. + resolution + The number of samples taken of the :class:`Dot3D`. A tuple can be + used to define different resolutions for ``u`` and ``v`` respectively. Examples -------- @@ -386,6 +437,35 @@ def __init__( class Cube(VGroup): + """A three-dimensional cube. + + Parameters + ---------- + side_length + Length of each side of the :class:`Cube`. + fill_opacity + The opacity of the :class:`Cube`, from 0 being fully transparent to 1 being + fully opaque. Defaults to 0.75. + fill_color + The color of the :class:`Cube`. + stroke_width + The width of the stroke surrounding each face of the :class:`Cube`. + + Examples + -------- + + .. manim:: CubeExample + :save_last_frame: + + class CubeExample(ThreeDScene): + def construct(self): + self.set_camera_orientation(phi=75*DEGREES, theta=-45*DEGREES) + + axes = ThreeDAxes() + cube = Cube(side_length=3, fill_opacity=0.7, fill_color=BLUE) + self.add(cube) + """ + def __init__( self, side_length=2, @@ -418,7 +498,13 @@ def generate_points(self): class Prism(Cube): - """A cuboid. + """A right rectangular prism (or rectangular cuboid). + Defined by the length of each side in ``[x, y, z]`` format. + + Parameters + ---------- + dimensions + Dimensions of the :class:`Prism` in ``[x, y, z]`` format. Examples -------- @@ -451,24 +537,13 @@ class Cone(Surface): height) The spherical radius, r, is calculated using the pythagorean theorem. - Examples - -------- - .. manim:: ExampleCone - :save_last_frame: - - class ExampleCone(ThreeDScene): - def construct(self): - axes = ThreeDAxes() - cone = Cone(direction=X_AXIS+Y_AXIS+2*Z_AXIS, resolution=8) - self.set_camera_orientation(phi=5*PI/11, theta=PI/9) - self.add(axes, cone) - Parameters - -------- + ---------- base_radius The base radius from which the cone tapers. height - The height measured from the plane formed by the base_radius to the apex of the cone. + The height measured from the plane formed by the base_radius to + the apex of the cone. direction The direction of the apex. show_base @@ -479,6 +554,18 @@ def construct(self): The radius at the apex. checkerboard_colors Show checkerboard grid texture on the cone. + + Examples + -------- + .. manim:: ExampleCone + :save_last_frame: + + class ExampleCone(ThreeDScene): + def construct(self): + axes = ThreeDAxes() + cone = Cone(direction=X_AXIS+Y_AXIS+2*Z_AXIS, resolution=8) + self.set_camera_orientation(phi=5*PI/11, theta=PI/9) + self.add(axes, cone) """ def __init__( @@ -520,8 +607,9 @@ def __init__( def func(self, u: float, v: float): """Converts from spherical coordinates to cartesian. + Parameters - --------- + ---------- u The radius. v @@ -571,30 +659,32 @@ def _rotate_to_direction(self): self._current_phi = phi def set_direction(self, direction): + """Changes the direction of the apex of the :class:`Cone`. + + Parameters + ---------- + direction : :class:`numpy.array` + The direction of the apex. + """ self.direction = direction self._rotate_to_direction() def get_direction(self): + """Returns the current direction of the apex of the :class:`Cone`. + + Returns + ------- + direction : :class:`numpy.array` + The direction of the apex. + """ return self.direction class Cylinder(Surface): """A cylinder, defined by its height, radius and direction, - Examples - --------- - .. manim:: ExampleCylinder - :save_last_frame: - - class ExampleCylinder(ThreeDScene): - def construct(self): - axes = ThreeDAxes() - cylinder = Cylinder(radius=2, height=3) - self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES) - self.add(axes, cylinder) - Parameters - --------- + ---------- radius The radius of the cylinder. height @@ -605,6 +695,21 @@ def construct(self): The height along the height axis (given by direction) to start and end on. show_ends Whether to show the end caps or not. + resolution + The number of samples taken of the :class:`Cylinder`. A tuple can be used + to define different resolutions for ``u`` and ``v`` respectively. + + Examples + -------- + .. manim:: ExampleCylinder + :save_last_frame: + + class ExampleCylinder(ThreeDScene): + def construct(self): + axes = ThreeDAxes() + cylinder = Cylinder(radius=2, height=3) + self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES) + self.add(axes, cylinder) """ def __init__( @@ -634,8 +739,9 @@ def __init__( def func(self, u: float, v: float): """Converts from cylindrical coordinates to cartesian. + Parameters - --------- + ---------- u The height. v @@ -702,21 +808,45 @@ def _rotate_to_direction(self): self._current_phi = phi def set_direction(self, direction): + """Sets the direction of the central axis of the :class:`Cylinder`. + + Parameters + ---------- + direction + The direction of the central axis of the :class:`Cylinder`. + """ # if get_norm(direction) is get_norm(self.direction): # pass self.direction = direction self._rotate_to_direction() def get_direction(self): - """Returns the direction of the central axis of the cylinder.""" + """Returns the direction of the central axis of the :class:`Cylinder`. + + Returns + ------- + direction + The direction of the central axis of the :class:`Cylinder`. + """ return self.direction class Line3D(Cylinder): """A cylindrical line, for use in ThreeDScene. + Parameters + ---------- + start + The start point of the line. + end + The end point of the line. + thickness + The thickness of the line. + color + The color of the line. + Examples - --------- + -------- .. manim:: ExampleLine3D :save_last_frame: @@ -726,15 +856,6 @@ def construct(self): line = Line3D(start=np.array([0, 0, 0]), end=np.array([2, 2, 2])) self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES) self.add(axes, line) - - Parameters - --------- - start - The start position of the line. - end - The end position of the line. - thickness - The thickness of the line. """ def __init__( @@ -753,7 +874,15 @@ def __init__( def set_start_and_end_attrs(self, start, end, **kwargs): """Sets the start and end points of the line. - If either ``start`` or ``end`` are :class:`Mobjects <.Mobject>`, this gives their centers. + If either ``start`` or ``end`` are :class:`Mobjects <.Mobject>`, + this gives their centers. + + Parameters + ---------- + start + Starting point or :class:`Mobject`. + end + Ending point or :class:`Mobject`. """ rough_start = self.pointify(start) rough_end = self.pointify(end) @@ -783,9 +912,23 @@ def pointify(self, mob_or_point, direction=None): return np.array(mob_or_point) def get_start(self): + """Returns the starting point of the :class:`Line3D`. + + Returns + ------- + start : :class:`numpy.array` + Starting point of the :class:`Line3D`. + """ return self.start def get_end(self): + """Returns the ending point of the :class:`Line3D`. + + Returns + ------- + end : :class:`numpy.array` + Ending point of the :class:`Line3D`. + """ return self.end @classmethod @@ -872,8 +1015,23 @@ def construct(self): class Arrow3D(Line3D): """An arrow made out of a cylindrical line and a conical tip. + Parameters + ---------- + start + The start position of the arrow. + end + The end position of the arrow. + thickness + The thickness of the arrow. + height + The height of the conical tip. + base_radius + The base radius of the conical tip. + color + The color of the arrow. + Examples - --------- + -------- .. manim:: ExampleArrow3D :save_last_frame: @@ -887,19 +1045,6 @@ def construct(self): ) self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES) self.add(axes, arrow) - - Parameters - --------- - start - The start position of the arrow. - end - The end position of the arrow. - thickness - The thickness of the arrow. - height - The height of the conical tip. - base_radius - The base radius of the conical tip. """ def __init__( @@ -934,8 +1079,22 @@ def __init__( class Torus(Surface): """A torus. + Parameters + ---------- + major_radius + Distance from the center of the tube to the center of the torus. + minor_radius + Radius of the tube. + u_range + The range of the ``u`` variable: ``(u_min, u_max)``. + v_range + The range of the ``v`` variable: ``(v_min, v_max)``. + resolution + The number of samples taken of the :class:`Torus`. A tuple can be + used to define different resolutions for ``u`` and ``v`` respectively. + Examples - --------- + -------- .. manim :: ExampleTorus :save_last_frame: @@ -945,13 +1104,6 @@ def construct(self): torus = Torus() self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES) self.add(axes, torus) - - Parameters - --------- - major_radius - Distance from the center of the tube to the center of the torus. - minor_radius - Radius of the tube. """ def __init__( From bd844f46d804c8cad50d06ad20ab5bebaee9987b Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sun, 13 Nov 2022 07:14:35 +0100 Subject: [PATCH 148/555] Replaced renderer strings with :class:`.RendererType` enum entries (#3017) * remove unused constants * remove deprecated --use_opengl_renderer flag * remove unnecessary workaround with class initialization * add OpenGLMobject.name to get rid of one renderer check * add VMobject.n_points_per_curve property to get rid of more renderer checks * replace renderer string checks with enum check * added mobject.utils module with renderer-dependent class getters * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * ensure that capitalization of passed renderer type is irrelevant * remove unused entries from mobject.utils.__all__ * fixed isort ignore in manim.__init__ * fixed lower-case casting of passed renderer * fixed doctests * more documentation + doctests for mobject.utils * removed incorrect paragraph about ConverToOpenGL metaclass * added docstring for RendererType enum * renderer compatibility section in plugin dev documentation * added mobject.utils to reference manual * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Remove actual doctest (it ran the compatibility code) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Naveen M K --- docs/source/plugins.rst | 20 ++++ docs/source/reference_index/mobjects.rst | 1 + manim/__init__.py | 20 +--- manim/_config/default.cfg | 3 - manim/_config/utils.py | 91 ++++++++++----- manim/animation/animation.py | 5 +- manim/animation/changing.py | 5 +- manim/animation/composition.py | 3 +- manim/animation/transform.py | 14 ++- manim/animation/transform_matching_parts.py | 3 +- manim/cli/render/commands.py | 10 +- manim/cli/render/render_options.py | 15 +-- manim/constants.py | 48 ++++---- manim/mobject/geometry/boolean_ops.py | 6 +- manim/mobject/geometry/line.py | 2 +- manim/mobject/graphing/coordinate_systems.py | 6 +- manim/mobject/mobject.py | 5 +- manim/mobject/opengl/opengl_compatibility.py | 8 +- manim/mobject/opengl/opengl_mobject.py | 4 +- .../opengl/opengl_vectorized_mobject.py | 4 +- manim/mobject/table.py | 9 +- manim/mobject/text/numbers.py | 2 +- manim/mobject/text/tex_mobject.py | 4 +- manim/mobject/text/text_mobject.py | 14 +-- manim/mobject/three_d/three_dimensions.py | 21 ++-- manim/mobject/types/vectorized_mobject.py | 9 +- manim/mobject/utils.py | 107 ++++++++++++++++++ manim/mobject/vector_field.py | 15 +-- manim/scene/scene.py | 16 +-- manim/scene/scene_file_writer.py | 13 +-- manim/scene/three_d_scene.py | 32 +++--- manim/utils/ipython_magic.py | 21 +--- manim/utils/space_ops.py | 10 +- tests/module/mobject/mobject/test_set_attr.py | 8 +- 34 files changed, 344 insertions(+), 210 deletions(-) create mode 100644 manim/mobject/utils.py diff --git a/docs/source/plugins.rst b/docs/source/plugins.rst index 2bc3c2743d..0359d29b5e 100644 --- a/docs/source/plugins.rst +++ b/docs/source/plugins.rst @@ -81,6 +81,7 @@ For specifying multiple plugins, comma-separated values must be used. Creating Plugins **************** + Plugins are intended to extend Manim's core functionality. If you aren't sure whether a feature should be included in Manim's core, feel free to ask over on the `Discord server `_. Visit @@ -132,3 +133,22 @@ For example, Here, Manim will call the function ``setup_things`` defined in ``manim_awesomeplugin.imports`` and calls that. It returns a list of function or modules which will be imported globally. + +A note on Renderer Compatibility +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Depending on which renderer is currently active, custom mobjects +created in your plugin might want to behave differently as the +corresponding mobject base classes are (unfortunately) not fully +compatible. + +The currently active renderer can be queried by checking the value +of ``manim.config.renderer``. All possible renderer types are given +by :class:`.constants.RendererType`. The module :mod:`.manim.mobject.utils` +contains utility functions that return the base class for the currently +active renderer. + +A simple form of renderer compatibility (by hot-swapping the class +inheritance chain) for Mobjects directly inheriting from +:class:`.Mobject` or :class:`.VMobject` can be achieved by using the +:class:`.mobject.opengl.opengl_compatibility.ConvertToOpenGL` metaclass. diff --git a/docs/source/reference_index/mobjects.rst b/docs/source/reference_index/mobjects.rst index cd0f0b72f7..a736738e17 100644 --- a/docs/source/reference_index/mobjects.rst +++ b/docs/source/reference_index/mobjects.rst @@ -18,5 +18,6 @@ Mobjects ~mobject.text ~mobject.three_d ~mobject.types + ~mobject.utils ~mobject.value_tracker ~mobject.vector_field diff --git a/manim/__init__.py b/manim/__init__.py index 7734f32a20..a697122752 100644 --- a/manim/__init__.py +++ b/manim/__init__.py @@ -10,26 +10,16 @@ import sys +# isort: off + # Importing the config module should be the first thing we do, since other # modules depend on the global config dict for initialization. from ._config import * -# Workaround to set the renderer passed via CLI args *before* importing -# Manim's classes (as long as the metaclass approach for switching -# between OpenGL and cairo rendering is in place, classes depend -# on the value of config.renderer). -for i, arg in enumerate(sys.argv): - if arg.startswith("--renderer"): - if "=" in arg: - _, parsed_renderer = arg.split("=") - else: - parsed_renderer = sys.argv[i + 1] - config.renderer = parsed_renderer - elif arg == "--use_opengl_renderer": - config.renderer = "opengl" - # many scripts depend on this -> has to be loaded first -from .utils.commands import * # isort:skip +from .utils.commands import * + +# isort: on from .animation.animation import * from .animation.changing import * diff --git a/manim/_config/default.cfg b/manim/_config/default.cfg index 651951cf6e..2bdd2d9623 100644 --- a/manim/_config/default.cfg +++ b/manim/_config/default.cfg @@ -96,9 +96,6 @@ partial_movie_dir = {video_dir}/partial_movie_files/{scene_name} # --renderer [cairo|opengl] renderer = cairo -# --use_opengl_renderer -use_opengl_renderer = False - # --enable_gui enable_gui = False diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 723a94ba84..cdbd62fce4 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -27,6 +27,7 @@ import numpy as np from .. import constants +from ..constants import RendererType from ..utils.tex import TexTemplate, TexTemplateFromFile from ..utils.tex_templates import TexTemplateLibrary @@ -293,7 +294,6 @@ class MyScene(Scene): "text_dir", "upto_animation_number", "renderer", - "use_opengl_renderer", "enable_gui", "gui_location", "use_projection_fill_shaders", @@ -425,6 +425,31 @@ def _set_from_list(self, key: str, val: Any, values: list) -> None: else: raise ValueError(f"attempted to set {key} to {val}; must be in {values}") + def _set_from_enum(self, key: str, enum_value: Any, enum_class: EnumMeta) -> None: + """Set ``key`` to the enum object with value ``enum_value`` in the given + ``enum_class``. + + Tests:: + + >>> from enum import Enum + >>> class Fruit(Enum): + ... APPLE = 1 + ... BANANA = 2 + ... CANTALOUPE = 3 + >>> test_config = ManimConfig() + >>> test_config._set_from_enum("fruit", 1, Fruit) + >>> test_config._d['fruit'] + + >>> test_config._set_from_enum("fruit", Fruit.BANANA, Fruit) + >>> test_config._d['fruit'] + + >>> test_config._set_from_enum("fruit", 42, Fruit) + Traceback (most recent call last): + ... + ValueError: 42 is not a valid Fruit + """ + self._d[key] = enum_class(enum_value) + def _set_boolean(self, key: str | int, val: Any) -> None: """Set ``key`` to ``val`` if ``val`` is Boolean.""" if val in [True, False]: @@ -549,7 +574,6 @@ def digest_parser(self, parser: configparser.ConfigParser) -> ManimConfig: "disable_caching_warning", "flush_cache", "custom_folders", - "use_opengl_renderer", "enable_gui", "fullscreen", "use_projection_fill_shaders", @@ -724,7 +748,6 @@ def digest_args(self, args: argparse.Namespace) -> ManimConfig: "verbosity", "renderer", "background_color", - "use_opengl_renderer", "enable_gui", "fullscreen", "use_projection_fill_shaders", @@ -801,7 +824,10 @@ def digest_args(self, args: argparse.Namespace) -> ManimConfig: if args.tex_template: self.tex_template = TexTemplateFromFile(tex_filename=args.tex_template) - if self.renderer == "opengl" and getattr(args, "write_to_movie") is None: + if ( + self.renderer == RendererType.OPENGL + and getattr(args, "write_to_movie") is None + ): # --write_to_movie was not passed on the command line, so don't generate video. self["write_to_movie"] = False @@ -1186,12 +1212,40 @@ def dry_run(self, val: bool) -> None: @property def renderer(self): - """Renderer: "cairo", "opengl""" + """The currently active renderer. + + Populated with one of the available renderers in :class:`.RendererType`. + + Tests:: + + >>> test_config = ManimConfig() + >>> test_config.renderer is None # a new ManimConfig is unpopulated + True + >>> test_config.renderer = 'opengl' + >>> test_config.renderer + + >>> test_config.renderer = 42 + Traceback (most recent call last): + ... + ValueError: 42 is not a valid RendererType + + Check that capitalization of renderer types is irrelevant:: + + >>> test_config.renderer = 'OpenGL' + >>> test_config.renderer = 'cAirO' + """ return self._d["renderer"] @renderer.setter - def renderer(self, val: str) -> None: - """Renderer for animations.""" + def renderer(self, val: str | RendererType) -> None: + """The setter of the renderer property. + + Takes care of switching inheritance bases using the + :class:`.ConvertToOpenGL` metaclass. + """ + if isinstance(val, str): + val = val.lower() + renderer = RendererType(val) try: from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.opengl.opengl_mobject import OpenGLMobject @@ -1201,7 +1255,7 @@ def renderer(self, val: str) -> None: from ..mobject.types.vectorized_mobject import VMobject for cls in ConvertToOpenGL._converted_classes: - if val == "opengl": + if renderer == RendererType.OPENGL: conversion_dict = { Mobject: OpenGLMobject, VMobject: OpenGLVMobject, @@ -1223,26 +1277,7 @@ def renderer(self, val: str) -> None: # can just do nothing. pass - self._set_from_list( - "renderer", - val, - ["cairo", "opengl"], - ) - - @property - def use_opengl_renderer(self): - """Whether or not to use the OpenGL renderer.""" - return self._d["use_opengl_renderer"] - - @use_opengl_renderer.setter - def use_opengl_renderer(self, val: bool) -> None: - self._d["use_opengl_renderer"] = val - if val: - self._set_from_list( - "renderer", - "opengl", - ["cairo", "opengl"], - ) + self._set_from_enum("renderer", renderer, RendererType) media_dir = property( lambda self: self._d["media_dir"], diff --git a/manim/animation/animation.py b/manim/animation/animation.py index 286bca5fe4..c77af0cbf6 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -6,6 +6,7 @@ from manim.mobject.opengl.opengl_mobject import OpenGLMobject from .. import config, logger +from ..constants import RendererType from ..mobject import mobject from ..mobject.mobject import Mobject from ..mobject.opengl import opengl_mobject @@ -149,7 +150,7 @@ def __init__( self.suspend_mobject_updating: bool = suspend_mobject_updating self.lag_ratio: float = lag_ratio self._on_finish: Callable[[Scene], None] = _on_finish - if config["renderer"] == "opengl": + if config["renderer"] == RendererType.OPENGL: self.starting_mobject: OpenGLMobject = OpenGLMobject() self.mobject: OpenGLMobject = ( mobject if mobject is not None else OpenGLMobject() @@ -265,7 +266,7 @@ def get_all_mobjects(self) -> Sequence[Mobject]: return self.mobject, self.starting_mobject def get_all_families_zipped(self) -> Iterable[tuple]: - if config["renderer"] == "opengl": + if config["renderer"] == RendererType.OPENGL: return zip(*(mob.get_family() for mob in self.get_all_mobjects())) return zip( *(mob.family_members_with_points() for mob in self.get_all_mobjects()) diff --git a/manim/animation/changing.py b/manim/animation/changing.py index 501932e9f5..fbe3a4c0d2 100644 --- a/manim/animation/changing.py +++ b/manim/animation/changing.py @@ -158,8 +158,5 @@ def update_path(self, mob, dt): if self.dissipating_time: self.time += dt if self.time - 1 > self.dissipating_time: - if config["renderer"] == "opengl": - nppcc = self.n_points_per_curve - else: - nppcc = self.n_points_per_cubic_curve + nppcc = self.n_points_per_curve self.set_points(self.points[nppcc:]) diff --git a/manim/animation/composition.py b/manim/animation/composition.py index f3848b6a76..609e6547be 100644 --- a/manim/animation/composition.py +++ b/manim/animation/composition.py @@ -11,6 +11,7 @@ from .._config import config from ..animation.animation import Animation, prepare_animation +from ..constants import RendererType from ..mobject.mobject import Group, Mobject from ..scene.scene import Scene from ..utils.iterables import remove_list_redundancies @@ -44,7 +45,7 @@ def __init__( mobjects = remove_list_redundancies( [anim.mobject for anim in self.animations if not anim.is_introducer()], ) - if config["renderer"] == "opengl": + if config["renderer"] == RendererType.OPENGL: self.group = OpenGLGroup(*mobjects) else: self.group = Group(*mobjects) diff --git a/manim/animation/transform.py b/manim/animation/transform.py index d4584c8968..20e5192fe0 100644 --- a/manim/animation/transform.py +++ b/manim/animation/transform.py @@ -36,7 +36,13 @@ from .. import config from ..animation.animation import Animation -from ..constants import DEFAULT_POINTWISE_FUNCTION_RUN_TIME, DEGREES, ORIGIN, OUT +from ..constants import ( + DEFAULT_POINTWISE_FUNCTION_RUN_TIME, + DEGREES, + ORIGIN, + OUT, + RendererType, +) from ..mobject.mobject import Group, Mobject from ..utils.paths import path_along_arc, path_along_circles from ..utils.rate_functions import smooth, squish_rate_func @@ -191,7 +197,7 @@ def begin(self) -> None: self.target_copy = self.target_mobject.copy() # Note, this potentially changes the structure # of both mobject and target_mobject - if config["renderer"] == "opengl": + if config.renderer == RendererType.OPENGL: self.mobject.align_data_and_family(self.target_copy) else: self.mobject.align_data(self.target_copy) @@ -222,7 +228,7 @@ def get_all_families_zipped(self) -> Iterable[tuple]: # more precise typing? self.starting_mobject, self.target_copy, ] - if config["renderer"] == "opengl": + if config.renderer == RendererType.OPENGL: return zip(*(mob.get_family() for mob in mobs)) return zip(*(mob.family_members_with_points() for mob in mobs)) @@ -830,7 +836,7 @@ def __init__(self, mobject, target_mobject, stretch=True, dim_to_match=1, **kwar self.stretch = stretch self.dim_to_match = dim_to_match mobject.save_state() - if config["renderer"] == "opengl": + if config.renderer == RendererType.OPENGL: group = OpenGLGroup(mobject, target_mobject.copy()) else: group = Group(mobject, target_mobject.copy()) diff --git a/manim/animation/transform_matching_parts.py b/manim/animation/transform_matching_parts.py index 85fe5b4aa1..8a400983b8 100644 --- a/manim/animation/transform_matching_parts.py +++ b/manim/animation/transform_matching_parts.py @@ -12,6 +12,7 @@ from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVGroup, OpenGLVMobject from .._config import config +from ..constants import RendererType from ..mobject.mobject import Group, Mobject from ..mobject.types.vectorized_mobject import VGroup, VMobject from .composition import AnimationGroup @@ -146,7 +147,7 @@ def get_shape_map(self, mobject: Mobject) -> dict: for sm in self.get_mobject_parts(mobject): key = self.get_mobject_key(sm) if key not in shape_map: - if config["renderer"] == "opengl": + if config["renderer"] == RendererType.OPENGL: shape_map[key] = OpenGLVGroup() else: shape_map[key] = VGroup() diff --git a/manim/cli/render/commands.py b/manim/cli/render/commands.py index f105676592..9c1fc83fbb 100644 --- a/manim/cli/render/commands.py +++ b/manim/cli/render/commands.py @@ -17,7 +17,7 @@ from ... import __version__, config, console, error_console, logger from ..._config import tempconfig -from ...constants import EPILOG +from ...constants import EPILOG, RendererType from ...utils.module_ops import scene_classes_from_file from .ease_of_access_options import ease_of_access_options from .global_options import global_options @@ -46,12 +46,6 @@ def render( SCENES is an optional list of scenes in the file. """ - if args["use_opengl_renderer"]: - logger.warning( - "--use_opengl_renderer is deprecated, please use --renderer=opengl instead!", - ) - args["renderer"] = "opengl" - if args["save_as_gif"]: logger.warning("--save_as_gif is deprecated, please use --format=gif instead!") args["format"] = "gif" @@ -90,7 +84,7 @@ def __repr__(self): config.digest_args(click_args) file = Path(config.input_file) - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: from manim.renderer.opengl_renderer import OpenGLRenderer try: diff --git a/manim/cli/render/render_options.py b/manim/cli/render/render_options.py index 9b99e62722..22166beb73 100644 --- a/manim/cli/render/render_options.py +++ b/manim/cli/render/render_options.py @@ -5,7 +5,7 @@ import click from cloup import option, option_group -from manim.constants import QUALITIES +from manim.constants import QUALITIES, RendererType from ... import logger @@ -95,15 +95,12 @@ def validate_resolution(ctx, param, value): ), option( "--renderer", - type=click.Choice(["cairo", "opengl"], case_sensitive=False), + type=click.Choice( + [renderer_type.value for renderer_type in RendererType], + case_sensitive=False, + ), help="Select a renderer for your Scene.", - default=None, - ), - option( - "--use_opengl_renderer", - is_flag=True, - help="Render scenes using OpenGL (Deprecated).", - default=None, + default="cairo", ), option( "-g", diff --git a/manim/constants.py b/manim/constants.py index 2eb8b9147e..ef50e0b396 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -4,12 +4,13 @@ from __future__ import annotations +from enum import Enum + import numpy as np from cloup import Context from PIL.Image import Resampling __all__ = [ - "NOT_SETTING_FONT_MSG", "SCENE_NOT_FOUND_MESSAGE", "CHOOSE_NUMBER_MESSAGE", "INVALID_NUMBER_MESSAGE", @@ -64,24 +65,16 @@ "PI", "TAU", "DEGREES", - "GIF_FILE_EXTENSION", - "FFMPEG_VERBOSITY_MAP", - "VERBOSITY_CHOICES", "QUALITIES", "DEFAULT_QUALITY", - "DEFAULT_QUALITY_SHORT", "EPILOG", "CONTEXT_SETTINGS", "SHIFT_VALUE", "CTRL_VALUE", + "RendererType", ] # Messages -NOT_SETTING_FONT_MSG: str = """ -You haven't set font. -If you are not using English, this may cause text rendering problem. -You set font like: -text = Text('your text', font='your font') -""" + SCENE_NOT_FOUND_MESSAGE: str = """ {} is not in the script """ @@ -200,18 +193,6 @@ DEGREES: float = TAU / 360 """The exchange rate between radians and degrees.""" -# gif stuff -GIF_FILE_EXTENSION: str = ".gif" - -FFMPEG_VERBOSITY_MAP: dict[str, str] = { - "DEBUG": "error", - "INFO": "error", - "WARNING": "error", - "ERROR": "error", - "CRITICAL": "fatal", -} -VERBOSITY_CHOICES = FFMPEG_VERBOSITY_MAP.keys() - # Video qualities QUALITIES: dict[str, dict[str, str | int | None]] = { "fourk_quality": { @@ -253,7 +234,6 @@ } DEFAULT_QUALITY: str = "high_quality" -DEFAULT_QUALITY_SHORT = QUALITIES[DEFAULT_QUALITY]["flag"] EPILOG = "Made with <3 by Manim Community developers." SHIFT_VALUE = 65505 @@ -264,3 +244,23 @@ align_sections=True, show_constraints=True, ) + + +class RendererType(Enum): + """An enumeration of all renderer types that can be assigned to + the ``config.renderer`` attribute. + + Manim's configuration allows assigning string values to the renderer + setting, the values are then replaced by the corresponding enum object. + In other words, you can run:: + + config.renderer = "opengl" + + and checking the renderer afterwards reveals that the attribute has + assumed the value:: + + + """ + + CAIRO = "cairo" #: A renderer based on the cairo backend. + OPENGL = "opengl" #: An OpenGL-based renderer. diff --git a/manim/mobject/geometry/boolean_ops.py b/manim/mobject/geometry/boolean_ops.py index a7900339bc..9d3ccf034c 100644 --- a/manim/mobject/geometry/boolean_ops.py +++ b/manim/mobject/geometry/boolean_ops.py @@ -12,6 +12,8 @@ from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.types.vectorized_mobject import VMobject +from ...constants import RendererType + __all__ = ["Union", "Intersection", "Difference", "Exclusion"] @@ -82,7 +84,7 @@ def _convert_vmobject_to_skia_path(self, vmobject: VMobject) -> SkiaPath: return path # In OpenGL it's quadratic beizer curves while on Cairo it's cubic... - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: subpaths = vmobject.get_subpaths_from_points(points) for subpath in subpaths: quads = vmobject.get_bezier_tuples_from_points(subpath) @@ -92,7 +94,7 @@ def _convert_vmobject_to_skia_path(self, vmobject: VMobject) -> SkiaPath: path.quadTo(*p1[:2], *p2[:2]) if vmobject.consider_points_equals(subpath[0], subpath[-1]): path.close() - else: + elif config.renderer == RendererType.CAIRO: subpaths = vmobject.gen_subpaths_from_points_2d(points) for subpath in subpaths: quads = vmobject.gen_cubic_bezier_tuples_from_points(subpath) diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index 4189813745..695881ae9b 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -598,7 +598,7 @@ def get_default_tip_length(self) -> float: def _set_stroke_width_from_length(self): """Sets stroke width based on length.""" max_ratio = self.max_stroke_width_to_length_ratio - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: self.set_stroke( width=min(self.initial_stroke_width, max_ratio * self.get_length()), recurse=False, diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index ae7665509b..80f88b94c8 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -918,7 +918,7 @@ def param_trig(u, v): ) self.add(axes, trig_plane) """ - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: surface = Surface( lambda u, v: self.c2p(u, v, function(u, v)), u_range=u_range, @@ -931,7 +931,7 @@ def param_trig(u, v): colorscale=colorscale, axis=colorscale_axis, ) - else: + elif config.renderer == RendererType.OPENGL: surface = OpenGLSurface( lambda u, v: self.c2p(u, v, function(u, v)), u_range=u_range, @@ -2336,7 +2336,7 @@ def __init__( self.add(z_axis) self.z_axis = z_axis - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: self._add_3d_pieces() self._set_axis_shading() diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 4def2c5a83..dddf3c5639 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -333,10 +333,7 @@ def __deepcopy__(self, clone_from_id): return result def __repr__(self): - if config["renderer"] == "opengl": - return super().__repr__() - else: - return str(self.name) + return str(self.name) def reset_points(self): """Sets :attr:`points` to be an empty array.""" diff --git a/manim/mobject/opengl/opengl_compatibility.py b/manim/mobject/opengl/opengl_compatibility.py index 5bbb2af197..dc7c020e17 100644 --- a/manim/mobject/opengl/opengl_compatibility.py +++ b/manim/mobject/opengl/opengl_compatibility.py @@ -8,21 +8,19 @@ from manim.mobject.opengl.opengl_three_dimensions import OpenGLSurface from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject +from ...constants import RendererType + class ConvertToOpenGL(ABCMeta): """Metaclass for swapping (V)Mobject with its OpenGL counterpart at runtime depending on config.renderer. This metaclass should only need to be inherited on the lowest order inheritance classes such as Mobject and VMobject. - - Note that with this implementation, changing the value of ``config.renderer`` - after Manim has been imported won't have the desired effect and will lead to - spurious errors. """ _converted_classes = [] def __new__(mcls, name, bases, namespace): # noqa: B902 - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: # Must check class names to prevent # cyclic importing. base_names_to_opengl = { diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 7b2d79d235..5e3cd2ecfa 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -104,8 +104,10 @@ def __init__( listen_to_events=False, model_matrix=None, should_render=True, + name: str | None = None, **kwargs, ): + self.name = self.__class__.__name__ if name is None else name # getattr in case data/uniforms are already defined in parent classes. self.data = getattr(self, "data", {}) self.uniforms = getattr(self, "uniforms", {}) @@ -163,7 +165,7 @@ def __str__(self): return self.__class__.__name__ def __repr__(self): - return self.__class__.__name__ + return str(self.name) def __sub__(self, other): raise NotImplementedError diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 1d6f6d7a42..90b1f38b66 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -315,7 +315,7 @@ def get_style(self): def match_style(self, vmobject, recurse=True): vmobject_style = vmobject.get_style() - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: vmobject_style["stroke_width"] = vmobject_style["stroke_width"][0][0] self.set_style(**vmobject_style, recurse=False) if recurse: @@ -1639,7 +1639,7 @@ class OpenGLVGroup(OpenGLVMobject): >>> from manim import Triangle, Square >>> from manim.opengl import OpenGLVGroup >>> config.renderer - 'opengl' + >>> vg = OpenGLVGroup() >>> triangle, square = Triangle(), Square() >>> vg.add(triangle) diff --git a/manim/mobject/table.py b/manim/mobject/table.py index 9898736448..7e8e45fca3 100644 --- a/manim/mobject/table.py +++ b/manim/mobject/table.py @@ -83,6 +83,7 @@ def construct(self): 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 class Table(VGroup): @@ -328,13 +329,7 @@ def _add_labels(self, mob_table: VGroup) -> VGroup: else: # Placeholder to use arrange_in_grid if top_left_entry is not set. # Import OpenGLVMobject to work with --renderer=opengl - if config.renderer == "opengl": - from manim.opengl import OpenGLVMobject - - dummy_class = OpenGLVMobject - else: - dummy_class = VMobject - dummy_mobject = dummy_class() + dummy_mobject = get_vectorized_mobject_class()() col_labels = [dummy_mobject] + self.col_labels mob_table.insert(0, col_labels) else: diff --git a/manim/mobject/text/numbers.py b/manim/mobject/text/numbers.py index 5a0c8413f4..f5a3b92209 100644 --- a/manim/mobject/text/numbers.py +++ b/manim/mobject/text/numbers.py @@ -252,7 +252,7 @@ def set_value(self, number: float): for sm1, sm2 in zip(self.submobjects, old_submobjects): sm1.match_style(sm2) - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: for mob in old_family: # Dumb hack...due to how scene handles families # of animated mobjects diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index 413a0f022b..92a4bd2cc2 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -214,9 +214,9 @@ def get_tex_string(self): return self.tex_string def init_colors(self, propagate_colors=True): - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: super().init_colors() - else: + elif config.renderer == RendererType.CAIRO: super().init_colors(propagate_colors=propagate_colors) diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 7ab523684f..803d7b4350 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -488,10 +488,7 @@ def __init__( self.submobjects = [*self._gen_chars()] self.chars = self.get_group_class()(*self.submobjects) self.text = text_without_tabs.replace(" ", "").replace("\n", "") - if config.renderer == "opengl": - nppc = self.n_points_per_curve - else: - nppc = self.n_points_per_cubic_curve + nppc = self.n_points_per_curve for each in self: if len(each.points) == 0: continue @@ -778,9 +775,9 @@ def _text2svg(self, color: Color): return svg_file def init_colors(self, propagate_colors=True): - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: super().init_colors() - else: + elif config.renderer == RendererType.CAIRO: super().init_colors(propagate_colors=propagate_colors) @@ -1151,10 +1148,7 @@ def __init__( self.chars = self.get_group_class()(*self.submobjects) self.text = text_without_tabs.replace(" ", "").replace("\n", "") - if config.renderer == "opengl": - nppc = self.n_points_per_curve - else: - nppc = self.n_points_per_cubic_curve + nppc = self.n_points_per_curve for each in self: if len(each.points) == 0: continue diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index a47095a3e8..6f53ca91d5 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -303,9 +303,9 @@ def param_surface(u, v): new_colors[i], color_index, ) - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: mob.set_color(mob_color, recurse=False) - else: + elif config.renderer == RendererType.CAIRO: mob.set_color(mob_color, family=False) break @@ -367,9 +367,9 @@ def __init__( v_range=(0, PI), **kwargs, ): - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: res_value = (101, 51) - else: + elif config.renderer == RendererType.CAIRO: res_value = (24, 12) resolution = resolution if resolution is not None else res_value @@ -754,8 +754,13 @@ def func(self, u: float, v: float): def add_bases(self): """Adds the end caps of the cylinder.""" - color = self.color if config["renderer"] == "opengl" else self.fill_color - opacity = self.opacity if config["renderer"] == "opengl" else self.fill_opacity + if config.renderer == RendererType.OPENGL: + color = self.color + opacity = self.opacity + elif config.renderer == RendererType.CAIRO: + color = self.fill_color + opacity = self.fill_opacity + self.base_top = Circle( radius=self.radius, color=color, @@ -1115,9 +1120,9 @@ def __init__( resolution=None, **kwargs, ): - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: res_value = (101, 101) - else: + elif config.renderer == RendererType.CAIRO: res_value = (24, 24) resolution = resolution if resolution is not None else res_value diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 44a816791f..3aa6dfe40e 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -120,6 +120,11 @@ def __init__( if stroke_color: self.stroke_color = stroke_color + # OpenGL compatibility + @property + def n_points_per_curve(self): + return self.n_points_per_cubic_curve + def get_group_class(self): return VGroup @@ -2262,7 +2267,7 @@ def __init__( ) self.set_points(np.array([location])) - basecls = OpenGLVMobject if config.renderer == "opengl" else VMobject + basecls = OpenGLVMobject if config.renderer == RendererType.OPENGL else VMobject @basecls.width.getter def width(self): @@ -2461,7 +2466,7 @@ def __init__( ) # Family is already taken care of by get_subcurve # implementation - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: self.match_style(vmobject, recurse=False) else: self.match_style(vmobject, family=False) diff --git a/manim/mobject/utils.py b/manim/mobject/utils.py new file mode 100644 index 0000000000..b38bb57f2e --- /dev/null +++ b/manim/mobject/utils.py @@ -0,0 +1,107 @@ +"""Utilities for working with mobjects.""" + +from __future__ import annotations + +__all__ = [ + "get_mobject_class", + "get_point_mobject_class", + "get_vectorized_mobject_class", +] + +from .._config import config +from ..constants import RendererType +from .mobject import Mobject +from .opengl.opengl_mobject import OpenGLMobject +from .opengl.opengl_point_cloud_mobject import OpenGLPMobject +from .opengl.opengl_vectorized_mobject import OpenGLVMobject +from .types.point_cloud_mobject import PMobject +from .types.vectorized_mobject import VMobject + + +def get_mobject_class() -> type: + """Gets the base mobject class, depending on the currently active renderer. + + .. NOTE:: + + This method is intended to be used in the code base of Manim itself + or in plugins where code should work independent of the selected + renderer. + + Examples + -------- + + The function has to be explicitly imported. We test that + the name of the returned class is one of the known mobject + base classes:: + + >>> from manim.mobject.utils import get_mobject_class + >>> get_mobject_class().__name__ in ['Mobject', 'OpenGLMobject'] + True + """ + if config.renderer == RendererType.CAIRO: + return Mobject + if config.renderer == RendererType.OPENGL: + return OpenGLMobject + raise NotImplementedError( + "Base mobjects are not implemented for the active renderer." + ) + + +def get_vectorized_mobject_class() -> type: + """Gets the vectorized mobject class, depending on the currently + active renderer. + + .. NOTE:: + + This method is intended to be used in the code base of Manim itself + or in plugins where code should work independent of the selected + renderer. + + Examples + -------- + + The function has to be explicitly imported. We test that + the name of the returned class is one of the known mobject + base classes:: + + >>> from manim.mobject.utils import get_vectorized_mobject_class + >>> get_vectorized_mobject_class().__name__ in ['VMobject', 'OpenGLVMobject'] + True + """ + if config.renderer == RendererType.CAIRO: + return VMobject + if config.renderer == RendererType.OPENGL: + return OpenGLVMobject + raise NotImplementedError( + "Vectorized mobjects are not implemented for the active renderer." + ) + + +def get_point_mobject_class() -> type: + """Gets the point cloud mobject class, depending on the currently + active renderer. + + .. NOTE:: + + This method is intended to be used in the code base of Manim itself + or in plugins where code should work independent of the selected + renderer. + + Examples + -------- + + The function has to be explicitly imported. We test that + the name of the returned class is one of the known mobject + base classes:: + + >>> from manim.mobject.utils import get_point_mobject_class + >>> get_point_mobject_class().__name__ in ['PMobject', 'OpenGLPMobject'] + True + """ + if config.renderer == RendererType.CAIRO: + return PMobject + if config.renderer == RendererType.OPENGL: + return OpenGLPMobject + raise NotImplementedError( + "Point cloud mobjects are not implemented for the active renderer." + ) diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index 75b0f2814c..14f2f64f32 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -20,15 +20,15 @@ from manim.animation.updaters.update import UpdateFromAlphaFunc from manim.mobject.geometry.line import Vector from manim.mobject.graphing.coordinate_systems import CoordinateSystem -from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject from .. import config from ..animation.composition import AnimationGroup, Succession from ..animation.creation import Create from ..animation.indication import ShowPassingFlash -from ..constants import OUT, RIGHT, UP +from ..constants import OUT, RIGHT, UP, RendererType from ..mobject.mobject import Mobject -from ..mobject.types.vectorized_mobject import VGroup, VMobject +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.rate_functions import ease_out_sine, linear @@ -799,7 +799,7 @@ def outside_box(p): max_steps = ceil(virtual_time / dt) + 1 if not self.single_color: self.background_img = self.get_colored_background_image() - if config["renderer"] == "opengl": + if config["renderer"] == RendererType.OPENGL: self.values_to_rgbas = self.get_vectorized_rgba_gradient_function( min_color_scheme_value, max_color_scheme_value, @@ -816,17 +816,14 @@ def outside_box(p): step = max_steps if not step: continue - if config["renderer"] == "opengl": - line = OpenGLVMobject() - else: - line = VMobject() + line = get_vectorized_mobject_class()() line.duration = step * dt step = max(1, int(len(points) / self.max_anchors_per_line)) line.set_points_smoothly(points[::step]) if self.single_color: line.set_stroke(self.color) else: - if config["renderer"] == "opengl": + if config.renderer == RendererType.OPENGL: # scaled for compatibility with cairo line.set_stroke(width=self.stroke_width / 4.0) norms = np.array( diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 103a6a62d1..bf5753750e 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -124,7 +124,7 @@ def __init__( self.mouse_press_callbacks = [] self.interactive_mode = False - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: # Items associated with interaction self.mouse_point = OpenGLPoint() self.mouse_drag_point = OpenGLPoint() @@ -424,12 +424,12 @@ def get_mobject_family_members(self): list List of mobject family members. """ - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: family_members = [] for mob in self.mobjects: family_members.extend(mob.get_family()) return family_members - else: + elif config.renderer == RendererType.CAIRO: return extract_mobject_family_members( self.mobjects, use_z_index=self.renderer.camera.use_z_index, @@ -451,7 +451,7 @@ def add(self, *mobjects: Mobject): The same scene after adding the Mobjects in. """ - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: new_mobjects = [] new_meshes = [] for mobject_or_mesh in mobjects: @@ -463,7 +463,7 @@ def add(self, *mobjects: Mobject): self.mobjects += new_mobjects self.remove(*new_meshes) self.meshes += new_meshes - else: + elif config.renderer == RendererType.CAIRO: mobjects = [*mobjects, *self.foreground_mobjects] self.restructure_mobjects(to_remove=mobjects) self.mobjects += mobjects @@ -498,7 +498,7 @@ def remove(self, *mobjects: Mobject): *mobjects The mobjects to remove. """ - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: mobjects_to_remove = [] meshes_to_remove = set() for mobject_or_mesh in mobjects: @@ -514,7 +514,7 @@ def remove(self, *mobjects: Mobject): filter(lambda mesh: mesh not in set(meshes_to_remove), self.meshes), ) return self - else: + elif config.renderer == RendererType.CAIRO: for list_name in "mobjects", "foreground_mobjects": self.restructure_mobjects(mobjects, list_name, False) return self @@ -1162,7 +1162,7 @@ def begin_animations(self) -> None: animation._setup_scene(self) animation.begin() - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: # Paint all non-moving objects onto the screen, so they don't # have to be rendered every frame ( diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index f03f78319c..0767d8e505 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -8,7 +8,6 @@ import os import shutil import subprocess -import sys from pathlib import Path from typing import TYPE_CHECKING, Any @@ -21,7 +20,7 @@ from .. import config, logger from .._config.logger_utils import set_file_logger -from ..constants import GIF_FILE_EXTENSION +from ..constants import RendererType from ..utils.file_ops import ( add_extension_if_not_present, add_version_before_extension, @@ -149,7 +148,7 @@ def init_output_directories(self, scene_name): if is_gif_format(): self.gif_file_path = add_extension_if_not_present( - self.output_name, GIF_FILE_EXTENSION + self.output_name, ".gif" ) if not config["output_file"]: @@ -384,9 +383,9 @@ def write_frame(self, frame_or_renderer: np.ndarray | OpenGLRenderer): frame_or_renderer Pixel array of the frame. """ - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: self.write_opengl_frame(frame_or_renderer) - else: + elif config.renderer == RendererType.CAIRO: frame = frame_or_renderer if write_to_movie(): self.writing_process.stdin.write(frame.tobytes()) @@ -481,7 +480,7 @@ def open_movie_pipe(self, file_path=None): fps = config["frame_rate"] if fps == int(fps): # fps is integer fps = int(fps) - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: width, height = self.renderer.get_pixel_shape() else: height = config["pixel_height"] @@ -506,7 +505,7 @@ def open_movie_pipe(self, file_path=None): "-metadata", f"comment=Rendered with Manim Community v{__version__}", ] - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: command += ["-vf", "vflip"] if is_webm_format(): command += ["-vcodec", "libvpx-vp9", "-auto-alt-ref", "0"] diff --git a/manim/scene/three_d_scene.py b/manim/scene/three_d_scene.py index 258cdce1c3..4e619b7ffd 100644 --- a/manim/scene/three_d_scene.py +++ b/manim/scene/three_d_scene.py @@ -20,7 +20,7 @@ from ..animation.animation import Animation from ..animation.transform import Transform from ..camera.three_d_camera import ThreeDCamera -from ..constants import DEGREES +from ..constants import DEGREES, RendererType from ..mobject.mobject import Mobject from ..mobject.types.vectorized_mobject import VectorizedPoint, VGroup from ..renderer.opengl_renderer import OpenGLCamera @@ -117,7 +117,7 @@ def begin_ambient_camera_rotation(self, rate: float = 0.02, about: str = "theta" # can begin and end smoothly about: str = about.lower() try: - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: trackers = { "theta": self.camera.theta_tracker, "phi": self.camera.phi_tracker, @@ -126,7 +126,7 @@ def begin_ambient_camera_rotation(self, rate: float = 0.02, about: str = "theta" x: ValueTracker = trackers[about] x.add_updater(lambda m, dt: x.increment_value(rate * dt)) self.add(x) - else: + elif config.renderer == RendererType.OPENGL: cam: OpenGLCamera = self.camera methods = { "theta": cam.increment_theta, @@ -144,7 +144,7 @@ def stop_ambient_camera_rotation(self, about="theta"): """ about: str = about.lower() try: - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: trackers = { "theta": self.camera.theta_tracker, "phi": self.camera.phi_tracker, @@ -153,7 +153,7 @@ def stop_ambient_camera_rotation(self, about="theta"): x: ValueTracker = trackers[about] x.clear_updaters() self.remove(x) - else: + elif config.renderer == RendererType.OPENGL: self.camera.clear_updaters() except Exception: raise ValueError("Invalid ambient rotation angle.") @@ -254,7 +254,7 @@ def move_camera( """ anims = [] - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: self.camera: ThreeDCamera value_tracker_pairs = [ (phi, self.camera.phi_tracker), @@ -268,7 +268,7 @@ def move_camera( anims.append(tracker.animate.set_value(value)) if frame_center is not None: anims.append(self.camera._frame_center.animate.move_to(frame_center)) - else: + elif config.renderer == RendererType.OPENGL: cam: OpenGLCamera = self.camera cam2 = cam.copy() methods = { @@ -312,7 +312,7 @@ def move_camera( # it is required to redraw every object. These lines remove frame_center from the Scene once # its animation is done, ensuring that manim does not think that it is moving. Since the # frame_center is never actually drawn, this shouldn't break anything. - if frame_center is not None and config.renderer != "opengl": + if frame_center is not None and config.renderer == RendererType.CAIRO: self.remove(self.camera._frame_center) def get_moving_mobjects(self, *animations: Animation): @@ -351,10 +351,10 @@ def add_fixed_orientation_mobjects(self, *mobjects: Mobject, **kwargs): use_static_center_func : bool center_func : function """ - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: self.add(*mobjects) self.renderer.camera.add_fixed_orientation_mobjects(*mobjects, **kwargs) - else: + elif config.renderer == RendererType.OPENGL: for mob in mobjects: mob: OpenGLMobject mob.fix_orientation() @@ -372,11 +372,11 @@ def add_fixed_in_frame_mobjects(self, *mobjects: Mobject): *mobjects The Mobjects whose orientation must be fixed. """ - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: self.add(*mobjects) self.camera: ThreeDCamera self.camera.add_fixed_in_frame_mobjects(*mobjects) - else: + elif config.renderer == RendererType.OPENGL: for mob in mobjects: mob: OpenGLMobject mob.fix_in_frame() @@ -394,9 +394,9 @@ def remove_fixed_orientation_mobjects(self, *mobjects: Mobject): *mobjects The Mobjects whose orientation must be unfixed. """ - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: self.renderer.camera.remove_fixed_orientation_mobjects(*mobjects) - else: + elif config.renderer == RendererType.OPENGL: for mob in mobjects: mob: OpenGLMobject mob.unfix_orientation() @@ -413,9 +413,9 @@ def remove_fixed_in_frame_mobjects(self, *mobjects: Mobject): *mobjects The Mobjects whose position and orientation must be unfixed. """ - if config.renderer != "opengl": + if config.renderer == RendererType.CAIRO: self.renderer.camera.remove_fixed_in_frame_mobjects(*mobjects) - else: + elif config.renderer == RendererType.OPENGL: for mob in mobjects: mob: OpenGLMobject mob.unfix_from_frame() diff --git a/manim/utils/ipython_magic.py b/manim/utils/ipython_magic.py index 1e4fef9d9a..c877cabd7f 100644 --- a/manim/utils/ipython_magic.py +++ b/manim/utils/ipython_magic.py @@ -13,6 +13,8 @@ from manim.__main__ import main from manim.renderer.shader import shader_program_cache +from ..constants import RendererType + try: from IPython import get_ipython from IPython.core.interactiveshell import InteractiveShell @@ -128,21 +130,10 @@ def construct(self): config.digest_args(args) renderer = None - if config.renderer == "opengl": - # Check if the imported mobjects extend the OpenGLMobject class - # meaning ConvertToOpenGL did its job - if "OpenGLMobject" in [ - parent_class.__name__ for parent_class in Group.mro() - ]: - from manim.renderer.opengl_renderer import OpenGLRenderer - - renderer = OpenGLRenderer() - else: - logger.warning( - "Renderer must be set to OpenGL in the configuration file " - "before importing Manim! Using cairo renderer instead.", - ) - config.renderer = "cairo" + if config.renderer == RendererType.OPENGL: + from manim.renderer.opengl_renderer import OpenGLRenderer + + renderer = OpenGLRenderer() try: SceneClass = local_ns[config["scene_names"][0]] diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index fe5fb8f13b..203462057a 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -45,7 +45,7 @@ from scipy.spatial.transform import Rotation from .. import config -from ..constants import DOWN, OUT, PI, RIGHT, TAU, UP +from ..constants import DOWN, OUT, PI, RIGHT, TAU, UP, RendererType from ..utils.iterables import adjacent_pairs @@ -69,7 +69,7 @@ def quaternion_mult( Union[np.ndarray, List[Union[float, np.ndarray]]] Returns a list of product of two quaternions. """ - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: if len(quats) == 0: return [1, 0, 0, 0] result = quats[0] @@ -83,7 +83,7 @@ def quaternion_mult( w1 * z2 + z1 * w2 + x1 * y2 - y1 * x2, ] return result - else: + elif config.renderer == RendererType.CAIRO: q1 = quats[0] q2 = quats[1] @@ -122,11 +122,11 @@ def quaternion_from_angle_axis( List[float] Gives back a quaternion from the angle and axis """ - if config.renderer == "opengl": + if config.renderer == RendererType.OPENGL: if not axis_normalized: axis = normalize(axis) return [math.cos(angle / 2), *(math.sin(angle / 2) * axis)] - else: + elif config.renderer == RendererType.CAIRO: return np.append(np.cos(angle / 2), np.sin(angle / 2) * normalize(axis)) diff --git a/tests/module/mobject/mobject/test_set_attr.py b/tests/module/mobject/mobject/test_set_attr.py index 2e483062e4..f9cdd40fe6 100644 --- a/tests/module/mobject/mobject/test_set_attr.py +++ b/tests/module/mobject/mobject/test_set_attr.py @@ -2,13 +2,13 @@ import numpy as np -from manim import config +from manim import RendererType, config from manim.constants import RIGHT from manim.mobject.geometry.polygram import Square def test_Data(): - config.renderer = "opengl" + config.renderer = RendererType.OPENGL a = Square().move_to(RIGHT) data_bb = a.data["bounding_box"] np.testing.assert_array_equal( @@ -39,4 +39,6 @@ def test_Data(): ) np.testing.assert_array_equal(a.bounding_box, data_bb) - config.renderer = "cairo" # needs to be here or else the following cairo tests fail + config.renderer = ( + RendererType.CAIRO + ) # needs to be here or else the following cairo tests fail From 93f916587b1e29d4b0aeddf49ccfbc72d05d688e Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sun, 13 Nov 2022 07:24:45 +0100 Subject: [PATCH 149/555] Fixed rendering SVG paths with multiple move commands (#3019) * implement missing VMobject.resize_points * ensure that VMobject.start_new_path *actually* starts a new path * add missing imports * doctest resize_array * added test with weird dvisvgm generated svg * black * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Naveen M K --- manim/mobject/types/vectorized_mobject.py | 32 +++++++- manim/utils/iterables.py | 25 +++--- .../img_and_svg/path_multiple_moves.npz | Bin 0 -> 12363 bytes .../img_svg_resources/path_multiple_moves.svg | 71 ++++++++++++++++++ .../test_graphical_units/test_img_and_svg.py | 11 +++ 5 files changed, 121 insertions(+), 18 deletions(-) create mode 100644 tests/test_graphical_units/control_data/img_and_svg/path_multiple_moves.npz create mode 100644 tests/test_graphical_units/img_svg_resources/path_multiple_moves.svg diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 3aa6dfe40e..55f69e5ccf 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -14,7 +14,7 @@ import itertools as it import sys import typing -from typing import Optional, Sequence, Union +from typing import Callable, Optional, Sequence, Union import colour import numpy as np @@ -39,7 +39,7 @@ ) from ...utils.color import BLACK, WHITE, color_to_rgba from ...utils.deprecation import deprecated -from ...utils.iterables import make_even, stretch_array_to_length, tuplify +from ...utils.iterables import make_even, resize_array, stretch_array_to_length, tuplify from ...utils.space_ops import rotate_vector, shoelace_direction # TODO @@ -599,6 +599,27 @@ def set_points(self, points): self.points = np.array(points) return self + def resize_points( + self, + new_length: int, + resize_func: Callable[[np.ndarray, int], np.ndarray] = resize_array, + ): + """Resize the array of anchor points and handles to have + the specified size. + + Parameters + ---------- + new_length + The new (total) number of points. + resize_func + A function mapping a Numpy array (the points) and an integer + (the target size) to a Numpy array. The default implementation + is based on Numpy's ``resize`` function. + """ + if new_length != len(self.points): + self.points = resize_func(self.points, new_length) + return self + def set_anchors_and_handles( self, anchors1: Sequence[float], @@ -644,7 +665,12 @@ def append_points(self, new_points): return self def start_new_path(self, point): - # TODO, make sure that len(self.points) % 4 == 0? + if len(self.points) % 4 != 0: + # close the open path by appending the last + # start anchor sufficiently often + last_anchor = self.get_start_anchors()[-1] + for _ in range(4 - (len(self.points) % 4)): + self.append_points([last_anchor]) self.append_points([point]) return self diff --git a/manim/utils/iterables.py b/manim/utils/iterables.py index 1d8c0a5367..cc432d9e06 100644 --- a/manim/utils/iterables.py +++ b/manim/utils/iterables.py @@ -261,21 +261,16 @@ def resize_array(nparray: np.ndarray, length: int) -> np.ndarray: -------- Normal usage:: - nparray = np.array([[1, 2], - [3, 4]]) - - resize_array(nparray, 1) - # np.array([[1, 2]]) - - resize_array(nparray, 3) - # np.array([[1, 2], - # [3, 4], - # [1, 2]]) - - nparray = np.array([[[1, 2],[3, 4]]]) - resize_array(nparray, 2) - # np.array([[[1, 2], [3, 4]], - # [[1, 2], [3, 4]]]) + >>> points = np.array([[1, 2], [3, 4]]) + >>> resize_array(points, 1) + array([[1, 2]]) + >>> resize_array(points, 3) + array([[1, 2], + [3, 4], + [1, 2]]) + >>> resize_array(points, 2) + array([[1, 2], + [3, 4]]) """ if len(nparray) == length: return nparray diff --git a/tests/test_graphical_units/control_data/img_and_svg/path_multiple_moves.npz b/tests/test_graphical_units/control_data/img_and_svg/path_multiple_moves.npz new file mode 100644 index 0000000000000000000000000000000000000000..9f8839930d957741f256c7921f235848a79448ff GIT binary patch literal 12363 zcmeHudpy+H|Nm55K5bi861ncO8zrpG{n~C}LkTe%W2OipG#G<1w71;Z$}QJQ$Yo|i zjN6#q&86H%Zet8%bB$pp%q267-+A}>ejne*_mAK2uiu{^J-V3Q*K^M6d3zmKoc4Wo z32jPtSjdyYIkL3;N~mu|3PwZ#0Jszxr^rI(w+_vt{F`Q^SPc zj_j39zN>kmHT!PNE|0Z~tv~q?9~d@s_TdbQL%AL>$i(s96i3o+@I0Pn$U{9-_U*!p z9h)^gRhwIk>3gf+#|)+JlTpKbaQpSRn%OPUz5}}v9}I*u>v#WZ;~t+uixeeCm}|Qo zwm0c$)n?W%fjZ=tc4YhQhLgUb`HSxF1-OpQ;-mk5kN^DnpAq=~ zGy?La1R=AM|Mww-Y*gZo;GUIeDzaQgJ?3%LLJmClfUG(aapQLd$A`|}UldCB5a^dJ z*RIA1nSm-DVb;6bo8>YZ@h^;gJCle1lF>jS{Bt}UA6~Wy0*At=ef?+YNHIN8>K^P7 zyE$O$T$P%-VZ%lRz4Q8bvmbp++m>>x$#E3k~4lHu;_kA$H&<;C)^AH zw_J>4FK@JB!Eku1{0laEdv`}v-&w;`BYS-)vrKoc&0a8M8K&%O!bjm&9AbG%S*AtxDq(P<&d+JH z|E!BJVK1SlJP(BswkmA8HI7F9xko0O8nz>u+11wr&%~4*1mjjWzVJ%c_Dq}hjaP?F zYpY17D)KegTy)@432oOBkN&wsYq1>MFnF4Ag7K##wkzI~n*eTnzV@9iykl#zaF{>h zf{r9C2(3DI96L=0r@>Synccb08KM(I?7PDE+T95~Z7^Atc?!4yh<{7x&9jhh6(@vtlo_Bx+t#R>t6H zVogWBlL7qcVApZ)Gx)?kcT0HpRKj%dwyrMD{0NbST@{Xe{9IrjGU6hW)4yL4c_q@P zFto|5i<7Iwft@qHKNz^cLzYuF&;eIHjvPholvlDsg~*tJGRt2Hk5RD}+)aU4;8U&|qv zsMVVTM|l-QPX;xJKtGM5*k`F13lR%k4cJgyR3oLDy)o=$P#)9u z@REraggoxh>d4JsnhYURhmoG#4uCN9*)#+8OUZ+9+D_Br&g^swzDTcW;^|AU>;iXv z_E^7~ilk4!1S{8CG}U1A=9`B`qZMYhv%=di{yI=zD&<#}k9m3%jcyG+zQ+M8GYPCr zUp?p5w9`wi9Fmi*0o<1`0PZ)P-85j#Ktiy19XahC+UOyiQTzklLiKQE6GYRg3}OhW z<>bN`sG#kQzE*~Gz_3TP+}*|6xJ&*F+}HYCXHeG1b1jMCuyY(F09k+D{>xVDoniFp zn7Irmjf9WyVwSpEi#t zJ6(1qv_0k8rW*-~Uu*QB%+>el*Q|8RzZ|*TC$-$SfuGAT?L|?li$_qHE`>gnAGc+x zq?+~O)e%eQp?gYxU=SnAY1<11r(Eo^XY*%iA~rreXr-!hP-^)Zte|q3T@8w~qT=J< zb;63sEis4ev?CFbSK{YRKSqFc-PP<5kdoY5q9ln@SL`ZstF`5FrzRXc(hHwn_##7( zG8NIDuek5P7e8@iEia4JDU#fUAIJ#c@W$7M)hNjCwzG za8j9JE+N7m^Paz?oQ`N8b)(PhN=5Y{5!KT&HmutX<$*&D{onUBZ~rCd)Yts^`&#gB zk#uWHMVzmyC%3h6go|-NfBr#KpWq9a_#S{8B8462 z!Pwm4CDK-{FK16^pu#2THFqOGxlG1!h&3dwZhJMxIym37vL-UmCz@HmWT#r{xP**b zE|*tDb6R1r$AO63bzQw|mC;s8FyKF;87XzgThK%Y549>|`|$^6$ffiKUt9M^!8TY9 zq?l=lgIldAZvAOKxar1Oa|iX<`OkVBNU2ja7uaJAmfB*SaO~!fn(q(|OK`tIWW{HNP#-Se%d01(Wd*Z?(``Z?zguSqg zka2dkA}Z#|ZEL8~&##>&?X`eDOVUVazHM#Degx2^%{md3j;f-Jv2P6ztT!L^MA0', + format="html", + ) + row += nodes.entry("", col1) + row += nodes.entry("", col2) + tbody += row + tgroup += tbody + + return [table] diff --git a/manim/utils/docbuild/manim_directive.py b/manim/utils/docbuild/manim_directive.py index e4df6dc531..5b744985ca 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)) diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 1d8fba6d3c..f24360cc75 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -44,7 +44,6 @@ from mapbox_earcut import triangulate_float32 as earcut from scipy.spatial.transform import Rotation -from .. import config from ..constants import DOWN, OUT, PI, RIGHT, TAU, UP, RendererType from ..utils.iterables import adjacent_pairs @@ -69,34 +68,19 @@ def quaternion_mult( Union[np.ndarray, List[Union[float, np.ndarray]]] Returns a list of product of two quaternions. """ - if config.renderer == RendererType.OPENGL: - if len(quats) == 0: - return [1, 0, 0, 0] - result = quats[0] - for next_quat in quats[1:]: - w1, x1, y1, z1 = result - w2, x2, y2, z2 = next_quat - result = [ - w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2, - w1 * x2 + x1 * w2 + y1 * z2 - z1 * y2, - w1 * y2 + y1 * w2 + z1 * x2 - x1 * z2, - w1 * z2 + z1 * w2 + x1 * y2 - y1 * x2, - ] - return result - elif config.renderer == RendererType.CAIRO: - q1 = quats[0] - q2 = quats[1] - - w1, x1, y1, z1 = q1 - w2, x2, y2, z2 = q2 - return np.array( - [ - w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2, - w1 * x2 + x1 * w2 + y1 * z2 - z1 * y2, - w1 * y2 + y1 * w2 + z1 * x2 - x1 * z2, - w1 * z2 + z1 * w2 + x1 * y2 - y1 * x2, - ], - ) + if len(quats) == 0: + return [1, 0, 0, 0] + result = quats[0] + for next_quat in quats[1:]: + w1, x1, y1, z1 = result + w2, x2, y2, z2 = next_quat + result = [ + w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2, + w1 * x2 + x1 * w2 + y1 * z2 - z1 * y2, + w1 * y2 + y1 * w2 + z1 * x2 - x1 * z2, + w1 * z2 + z1 * w2 + x1 * y2 - y1 * x2, + ] + return result def quaternion_from_angle_axis( @@ -122,12 +106,9 @@ def quaternion_from_angle_axis( List[float] Gives back a quaternion from the angle and axis """ - if config.renderer == RendererType.OPENGL: - if not axis_normalized: - axis = normalize(axis) - return [math.cos(angle / 2), *(math.sin(angle / 2) * axis)] - elif config.renderer == RendererType.CAIRO: - return np.append(np.cos(angle / 2), np.sin(angle / 2) * normalize(axis)) + if not axis_normalized: + axis = normalize(axis) + return [math.cos(angle / 2), *(math.sin(angle / 2) * axis)] def angle_axis_from_quaternion(quaternion: Sequence[float]) -> Sequence[float]: diff --git a/poetry.lock b/poetry.lock index c0c6614ac8..4b88834f90 100644 --- a/poetry.lock +++ b/poetry.lock @@ -39,13 +39,13 @@ files = [ [[package]] name = "anyio" -version = "3.7.0" +version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = true python-versions = ">=3.7" files = [ - {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, - {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, ] [package.dependencies] @@ -54,7 +54,7 @@ idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] +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)"] @@ -152,13 +152,13 @@ files = [ [[package]] name = "astroid" -version = "2.15.5" +version = "2.15.6" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.15.5-py3-none-any.whl", hash = "sha256:078e5212f9885fa85fbb0cf0101978a336190aadea6e13305409d099f71b2324"}, - {file = "astroid-2.15.5.tar.gz", hash = "sha256:1039262575027b441137ab4a62a793a9b43defb42c32d5670f38686207cd780f"}, + {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, + {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, ] [package.dependencies] @@ -249,36 +249,33 @@ lxml = ["lxml"] [[package]] name = "black" -version = "23.3.0" +version = "23.7.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, + {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"}, ] [package.dependencies] @@ -316,13 +313,13 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] @@ -414,97 +411,97 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] [[package]] name = "click" -version = "8.1.3" +version = "8.1.6" description = "Composable command line interface toolkit" 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"}, + {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, + {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, ] [package.dependencies] @@ -549,20 +546,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "colour" -version = "0.1.5" -description = "converts and manipulates various color representation (HSL, RVB, web, X11, ...)" -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"] - [[package]] name = "comm" version = "0.1.3" @@ -787,52 +770,69 @@ files = [ [[package]] name = "cython" -version = "0.29.35" -description = "The Cython compiler for writing C extensions for the Python language." -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "Cython-0.29.35-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fb8c11cd3e2d5ab7c2da78c5698e527ecbe469437326811562a3fbf4c5780ae4"}, - {file = "Cython-0.29.35-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9e54b4bee55fec952333126147b89c195ebe1d60e8e492ec778916ca5ca03151"}, - {file = "Cython-0.29.35-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba534e07543b44fb5ae37e56e61072ed1021b2d6ed643dbb92afa8239a04aa83"}, - {file = "Cython-0.29.35-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c1d7a9ff809fa9b4a9fe04df86c9f7f574ca31c2ad896462a97ea89523db286a"}, - {file = "Cython-0.29.35-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:247d585d8e49f002e522f3420751a4b3da0cf8532ef64d382e0bc9b4c840642c"}, - {file = "Cython-0.29.35-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ef2fc6f81aa8fb512535b01199fbe0d0ecafb8a29f261055e4b3f103c7bd6c75"}, - {file = "Cython-0.29.35-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:be7e1f98a359408186025f84d28d243e4527acb976f06b8ae8441dc5db204280"}, - {file = "Cython-0.29.35-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e1e5d62f15ea4fa4a8bc76e4fcc2ea313a8afe70488b7b870716bcfb12b8246"}, - {file = "Cython-0.29.35-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:75541567a2de1f893d247a7f9aa300dff5662fb33822a5fb75bc9621369b8ef0"}, - {file = "Cython-0.29.35-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:99477c1d4a105a562c05d43cc01905b6711f0a6a558d90f20c7aee0fb23d59d5"}, - {file = "Cython-0.29.35-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:c44bb47b314abc743705c7d038d351ffc3a34b95ab59b04b8cb27cf781b44ae8"}, - {file = "Cython-0.29.35-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:94859c3fd90767995b33d803edecad21e73749823db468d34f21e80451a11a99"}, - {file = "Cython-0.29.35-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a47974f3ebccf25702ffdd569904f7807ea1ef0830987c133877fabefdc4bab"}, - {file = "Cython-0.29.35-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:520c50d1875627c111900d7184fd658e32967a3ef807dc2fbc252e384839cbcf"}, - {file = "Cython-0.29.35-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:516abc754f15b84d6a8e71c8abd90e10346ea86001563480f0be1b349d09c6b8"}, - {file = "Cython-0.29.35-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:c38e2c1e94b596132454b29757536d5afa810011d8bcb86918cc6693d2302940"}, - {file = "Cython-0.29.35-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:511f3adfb2db4db2eb882f892525db18a3a21803830474d2fa8b7a1a0f406985"}, - {file = "Cython-0.29.35-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:445e092708c26b357c97b3c68ea3eab31846fc9c1360bb150225f340c20322ec"}, - {file = "Cython-0.29.35-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3da42ef5b71674e4864b6afbe1bcacba75807684e22b6337f753cf297ae4e2d2"}, - {file = "Cython-0.29.35-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:db695a19968a54b9ac53048c723234b4f0db7409def0a5c5517237202e7a9b92"}, - {file = "Cython-0.29.35-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:156ae92bedcd8261b5259724e2dc4d8eb12ac29159359e34c8358b65d24430ac"}, - {file = "Cython-0.29.35-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:ea1c166336188630cd3e48aea4bbe06ea1bab444624e31c78973fffcae1cf708"}, - {file = "Cython-0.29.35-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e7b1901b03c37a082ba405e2cf73a57091e835c7af35f664f9dd1d855a992ad5"}, - {file = "Cython-0.29.35-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:27f58d0dd53a8ffb614814c725d3ee3f136e53178611f7f769ff358f69e50502"}, - {file = "Cython-0.29.35-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c19e2ba027d2e9e2d88a08aa6007344be781ed99bc0924deb237ec52ca14c09"}, - {file = "Cython-0.29.35-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b63ea04db03190dc8b25d167598989be5c1fe9fc3121d7802c0aafc8a4ec383f"}, - {file = "Cython-0.29.35-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5cdd65f7d85e15f1662c75d85d837c20d5c68acdd1029bfd08fb44c4422d7d9b"}, - {file = "Cython-0.29.35-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:c17c876db737e1183d18d23db9cc31a9f565c113a32523c672af72f6497e382f"}, - {file = "Cython-0.29.35-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:2a2f2fb9b1c0a4a3890713127fba55a38d2cf1619b2570c43c92a93fee80111a"}, - {file = "Cython-0.29.35-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:a1ad51612ff6cfe05cd58f584f01373d64906bb0c860a067c6441359ff10464f"}, - {file = "Cython-0.29.35-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3cd717eee52072be8244bb07f0e4126f893214d2dfd1ba8b38b533e1ffec4f8a"}, - {file = "Cython-0.29.35-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:acab11c834cbe8fb7b71f9f7b4c4655afd82ffadb1be93d5354a67702fcee69d"}, - {file = "Cython-0.29.35-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8841158f274896702afe732571d37be22868a301275f952f6280547b25280538"}, - {file = "Cython-0.29.35-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:0a9334d137bd42fca34b6b413063e19c194ba760846f34804ea1fb477cbe9a88"}, - {file = "Cython-0.29.35-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c4cd7de707938b8385cd1f88e1446228fbfe09af7822fa13877a4374c4881198"}, - {file = "Cython-0.29.35-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:05b7ede0b0eb1c6b9bd748fa67c5ebf3c3560d04d7c8a1486183ddd099de5a00"}, - {file = "Cython-0.29.35-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:537bc1e0ed9bf7289c80f39a9a9359f5649068647631996313f77ba57afde40b"}, - {file = "Cython-0.29.35-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:402307ad6fd209816cf539680035ef79cce171288cb98f81f3f11ea8ef3afd99"}, - {file = "Cython-0.29.35-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:563a02ea675ed6321d6257df067c89f17b89a63487ef8b9ce0d598e88e7ff0bd"}, - {file = "Cython-0.29.35-py2.py3-none-any.whl", hash = "sha256:417703dc67c447089258ab4b3d217f9c03894574e4a0d6c50648a208bc8352bb"}, - {file = "Cython-0.29.35.tar.gz", hash = "sha256:6e381fa0bf08b3c26ec2f616b19ae852c06f5750f4290118bf986b6f85c8c527"}, +version = "3.0.0" +description = "The Cython compiler for writing C extensions in the Python language." +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"}, ] [[package]] @@ -944,13 +944,13 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] [[package]] name = "dill" -version = "0.3.6" -description = "serialize all of python" +version = "0.3.7" +description = "serialize all of Python" 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"}, + {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, + {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, ] [package.extras] @@ -958,13 +958,13 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "distlib" -version = "0.3.6" +version = "0.3.7" description = "Distribution utilities" 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"}, + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, ] [[package]] @@ -978,15 +978,26 @@ 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." +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.1" +version = "1.1.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, ] [package.extras] @@ -994,17 +1005,17 @@ test = ["pytest (>=6)"] [[package]] name = "execnet" -version = "1.9.0" +version = "2.0.2" description = "execnet: rapid multi-Python deployment" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" files = [ - {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, - {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, + {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, + {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, ] [package.extras] -testing = ["pre-commit"] +testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "executing" @@ -1022,13 +1033,13 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] [[package]] name = "fastjsonschema" -version = "2.17.1" +version = "2.18.0" description = "Fastest Python implementation of JSON schema" optional = true python-versions = "*" files = [ - {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, - {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, + {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, + {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, ] [package.extras] @@ -1102,13 +1113,13 @@ test = ["coverage", "coveralls", "mock", "pytest", "pytest-cov"] [[package]] name = "flake8-comprehensions" -version = "3.12.0" +version = "3.14.0" description = "A flake8 plugin to help you write better list/set/dict comprehensions." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "flake8_comprehensions-3.12.0-py3-none-any.whl", hash = "sha256:013234637ec7dfcb7cd2900578fb53c512f81db909cefe371c019232695c362d"}, - {file = "flake8_comprehensions-3.12.0.tar.gz", hash = "sha256:419ef1a6e8de929203791a5e8ff5e3906caeba13eb3290eebdbf88a9078d502e"}, + {file = "flake8_comprehensions-3.14.0-py3-none-any.whl", hash = "sha256:7b9d07d94aa88e62099a6d1931ddf16c344d4157deedf90fe0d8ee2846f30e97"}, + {file = "flake8_comprehensions-3.14.0.tar.gz", hash = "sha256:81768c61bfc064e1a06222df08a2580d97de10cb388694becaf987c331c6c0cf"}, ] [package.dependencies] @@ -1131,13 +1142,13 @@ pydocstyle = ">=2.1" [[package]] name = "flake8-plugin-utils" -version = "1.3.2" +version = "1.3.3" description = "The package provides base classes and utils for flake8 plugin writing" 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"}, + {file = "flake8-plugin-utils-1.3.3.tar.gz", hash = "sha256:39f6f338d038b301c6fd344b06f2e81e382b68fa03c0560dff0d9b1791a11a2c"}, + {file = "flake8_plugin_utils-1.3.3-py3-none-any.whl", hash = "sha256:e4848c57d9d50f19100c2d75fa794b72df068666a9041b4b0409be923356a3ed"}, ] [[package]] @@ -1187,45 +1198,45 @@ flake8 = ">=3.7" [[package]] name = "fonttools" -version = "4.40.0" +version = "4.41.1" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.40.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b802dcbf9bcff74672f292b2466f6589ab8736ce4dcf36f48eb994c2847c4b30"}, - {file = "fonttools-4.40.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f6e3fa3da923063c286320e728ba2270e49c73386e3a711aa680f4b0747d692"}, - {file = "fonttools-4.40.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdf60f8a5c6bcce7d024a33f7e4bc7921f5b74e8ea13bccd204f2c8b86f3470"}, - {file = "fonttools-4.40.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91784e21a1a085fac07c6a407564f4a77feb471b5954c9ee55a4f9165151f6c1"}, - {file = "fonttools-4.40.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:05171f3c546f64d78569f10adc0de72561882352cac39ec7439af12304d8d8c0"}, - {file = "fonttools-4.40.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7449e5e306f3a930a8944c85d0cbc8429cba13503372a1a40f23124d6fb09b58"}, - {file = "fonttools-4.40.0-cp310-cp310-win32.whl", hash = "sha256:bae8c13abbc2511e9a855d2142c0ab01178dd66b1a665798f357da0d06253e0d"}, - {file = "fonttools-4.40.0-cp310-cp310-win_amd64.whl", hash = "sha256:425b74a608427499b0e45e433c34ddc350820b6f25b7c8761963a08145157a66"}, - {file = "fonttools-4.40.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:00ab569b2a3e591e00425023ade87e8fef90380c1dde61be7691cb524ca5f743"}, - {file = "fonttools-4.40.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:18ea64ac43e94c9e0c23d7a9475f1026be0e25b10dda8f236fc956188761df97"}, - {file = "fonttools-4.40.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:022c4a16b412293e7f1ce21b8bab7a6f9d12c4ffdf171fdc67122baddb973069"}, - {file = "fonttools-4.40.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530c5d35109f3e0cea2535742d6a3bc99c0786cf0cbd7bb2dc9212387f0d908c"}, - {file = "fonttools-4.40.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5e00334c66f4e83535384cb5339526d01d02d77f142c23b2f97bd6a4f585497a"}, - {file = "fonttools-4.40.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb52c10fda31159c22c7ed85074e05f8b97da8773ea461706c273e31bcbea836"}, - {file = "fonttools-4.40.0-cp311-cp311-win32.whl", hash = "sha256:6a8d71b9a5c884c72741868e845c0e563c5d83dcaf10bb0ceeec3b4b2eb14c67"}, - {file = "fonttools-4.40.0-cp311-cp311-win_amd64.whl", hash = "sha256:15abb3d055c1b2dff9ce376b6c3db10777cb74b37b52b78f61657634fd348a0d"}, - {file = "fonttools-4.40.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14037c31138fbd21847ad5e5441dfdde003e0a8f3feb5812a1a21fd1c255ffbd"}, - {file = "fonttools-4.40.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:94c915f6716589f78bc00fbc14c5b8de65cfd11ee335d32504f1ef234524cb24"}, - {file = "fonttools-4.40.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37467cee0f32cada2ec08bc16c9c31f9b53ea54b2f5604bf25a1246b5f50593a"}, - {file = "fonttools-4.40.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56d4d85f5374b45b08d2f928517d1e313ea71b4847240398decd0ab3ebbca885"}, - {file = "fonttools-4.40.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8c4305b171b61040b1ee75d18f9baafe58bd3b798d1670078efe2c92436bfb63"}, - {file = "fonttools-4.40.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a954b90d1473c85a22ecf305761d9fd89da93bbd31dae86e7dea436ad2cb5dc9"}, - {file = "fonttools-4.40.0-cp38-cp38-win32.whl", hash = "sha256:1bc4c5b147be8dbc5df9cc8ac5e93ee914ad030fe2a201cc8f02f499db71011d"}, - {file = "fonttools-4.40.0-cp38-cp38-win_amd64.whl", hash = "sha256:8a917828dbfdb1cbe50cf40eeae6fbf9c41aef9e535649ed8f4982b2ef65c091"}, - {file = "fonttools-4.40.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:882983279bf39afe4e945109772c2ffad2be2c90983d6559af8b75c19845a80a"}, - {file = "fonttools-4.40.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c55f1b4109dbc3aeb496677b3e636d55ef46dc078c2a5e3f3db4e90f1c6d2907"}, - {file = "fonttools-4.40.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec468c022d09f1817c691cf884feb1030ef6f1e93e3ea6831b0d8144c06480d1"}, - {file = "fonttools-4.40.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d5adf4ba114f028fc3f5317a221fd8b0f4ef7a2e5524a2b1e0fd891b093791a"}, - {file = "fonttools-4.40.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa83b3f151bc63970f39b2b42a06097c5a22fd7ed9f7ba008e618de4503d3895"}, - {file = "fonttools-4.40.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97d95b8301b62bdece1af943b88bcb3680fd385f88346a4a899ee145913b414a"}, - {file = "fonttools-4.40.0-cp39-cp39-win32.whl", hash = "sha256:1a003608400dd1cca3e089e8c94973c6b51a4fb1ef00ff6d7641617b9242e637"}, - {file = "fonttools-4.40.0-cp39-cp39-win_amd64.whl", hash = "sha256:7961575221e3da0841c75da53833272c520000d76f7f71274dbf43370f8a1065"}, - {file = "fonttools-4.40.0-py3-none-any.whl", hash = "sha256:200729d12461e2038700d31f0d49ad5a7b55855dec7525074979a06b46f88505"}, - {file = "fonttools-4.40.0.tar.gz", hash = "sha256:337b6e83d7ee73c40ea62407f2ce03b07c3459e213b6f332b94a69923b9e1cb9"}, + {file = "fonttools-4.41.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a7bbb290d13c6dd718ec2c3db46fe6c5f6811e7ea1e07f145fd8468176398224"}, + {file = "fonttools-4.41.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ec453a45778524f925a8f20fd26a3326f398bfc55d534e37bab470c5e415caa1"}, + {file = "fonttools-4.41.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2071267deaa6d93cb16288613419679c77220543551cbe61da02c93d92df72f"}, + {file = "fonttools-4.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e3334d51f0e37e2c6056e67141b2adabc92613a968797e2571ca8a03bd64773"}, + {file = "fonttools-4.41.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cac73bbef7734e78c60949da11c4903ee5837168e58772371bd42a75872f4f82"}, + {file = "fonttools-4.41.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:edee0900cf0eedb29d17c7876102d6e5a91ee333882b1f5abc83e85b934cadb5"}, + {file = "fonttools-4.41.1-cp310-cp310-win32.whl", hash = "sha256:2a22b2c425c698dcd5d6b0ff0b566e8e9663172118db6fd5f1941f9b8063da9b"}, + {file = "fonttools-4.41.1-cp310-cp310-win_amd64.whl", hash = "sha256:547ab36a799dded58a46fa647266c24d0ed43a66028cd1cd4370b246ad426cac"}, + {file = "fonttools-4.41.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:849ec722bbf7d3501a0e879e57dec1fc54919d31bff3f690af30bb87970f9784"}, + {file = "fonttools-4.41.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38cdecd8f1fd4bf4daae7fed1b3170dfc1b523388d6664b2204b351820aa78a7"}, + {file = "fonttools-4.41.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ae64303ba670f8959fdaaa30ba0c2dabe75364fdec1caeee596c45d51ca3425"}, + {file = "fonttools-4.41.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14f3ccea4cc7dd1b277385adf3c3bf18f9860f87eab9c2fb650b0af16800f55"}, + {file = "fonttools-4.41.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:33191f062549e6bb1a4782c22a04ebd37009c09360e2d6686ac5083774d06d95"}, + {file = "fonttools-4.41.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:704bccd69b0abb6fab9f5e4d2b75896afa48b427caa2c7988792a2ffce35b441"}, + {file = "fonttools-4.41.1-cp311-cp311-win32.whl", hash = "sha256:4edc795533421e98f60acee7d28fc8d941ff5ac10f44668c9c3635ad72ae9045"}, + {file = "fonttools-4.41.1-cp311-cp311-win_amd64.whl", hash = "sha256:aaaef294d8e411f0ecb778a0aefd11bb5884c9b8333cc1011bdaf3b58ca4bd75"}, + {file = "fonttools-4.41.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3d1f9471134affc1e3b1b806db6e3e2ad3fa99439e332f1881a474c825101096"}, + {file = "fonttools-4.41.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59eba8b2e749a1de85760da22333f3d17c42b66e03758855a12a2a542723c6e7"}, + {file = "fonttools-4.41.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9b3cc10dc9e0834b6665fd63ae0c6964c6bc3d7166e9bc84772e0edd09f9fa2"}, + {file = "fonttools-4.41.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2c2964bdc827ba6b8a91dc6de792620be4da3922c4cf0599f36a488c07e2b2"}, + {file = "fonttools-4.41.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7763316111df7b5165529f4183a334aa24c13cdb5375ffa1dc8ce309c8bf4e5c"}, + {file = "fonttools-4.41.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b2d1ee95be42b80d1f002d1ee0a51d7a435ea90d36f1a5ae331be9962ee5a3f1"}, + {file = "fonttools-4.41.1-cp38-cp38-win32.whl", hash = "sha256:f48602c0b3fd79cd83a34c40af565fe6db7ac9085c8823b552e6e751e3a5b8be"}, + {file = "fonttools-4.41.1-cp38-cp38-win_amd64.whl", hash = "sha256:b0938ebbeccf7c80bb9a15e31645cf831572c3a33d5cc69abe436e7000c61b14"}, + {file = "fonttools-4.41.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e5c2b0a95a221838991e2f0e455dec1ca3a8cc9cd54febd68cc64d40fdb83669"}, + {file = "fonttools-4.41.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891cfc5a83b0307688f78b9bb446f03a7a1ad981690ac8362f50518bc6153975"}, + {file = "fonttools-4.41.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73ef0bb5d60eb02ba4d3a7d23ada32184bd86007cb2de3657cfcb1175325fc83"}, + {file = "fonttools-4.41.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f240d9adf0583ac8fc1646afe7f4ac039022b6f8fa4f1575a2cfa53675360b69"}, + {file = "fonttools-4.41.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bdd729744ae7ecd7f7311ad25d99da4999003dcfe43b436cf3c333d4e68de73d"}, + {file = "fonttools-4.41.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b927e5f466d99c03e6e20961946314b81d6e3490d95865ef88061144d9f62e38"}, + {file = "fonttools-4.41.1-cp39-cp39-win32.whl", hash = "sha256:afce2aeb80be72b4da7dd114f10f04873ff512793d13ce0b19d12b2a4c44c0f0"}, + {file = "fonttools-4.41.1-cp39-cp39-win_amd64.whl", hash = "sha256:1df1b6f4c7c4bc8201eb47f3b268adbf2539943aa43c400f84556557e3e109c0"}, + {file = "fonttools-4.41.1-py3-none-any.whl", hash = "sha256:952cb405f78734cf6466252fec42e206450d1a6715746013f64df9cbd4f896fa"}, + {file = "fonttools-4.41.1.tar.gz", hash = "sha256:e16a9449f21a93909c5be2f5ed5246420f2316e94195dbfccb5238aaa38f9751"}, ] [package.extras] @@ -1286,13 +1297,13 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.31" +version = "3.1.32" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, - {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, + {file = "GitPython-3.1.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, + {file = "GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, ] [package.dependencies] @@ -1300,72 +1311,81 @@ gitdb = ">=4.0.1,<5" [[package]] name = "glcontext" -version = "2.3.7" +version = "2.4.0" description = "Portable OpenGL Context" 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"}, + {file = "glcontext-2.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d8a5901447e5a99b085b3e8c54dcf9012c88d9d75c7ea657ec4294b8b4e4fb"}, + {file = "glcontext-2.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c90c53fb56ecebeecae2d113f95d4a699fcde7924132e0195569118f80349c5a"}, + {file = "glcontext-2.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95d065ad2fbfb395966559aceb4359250243e6fb07a3ca5becdddeba8e8f428d"}, + {file = "glcontext-2.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:33edb364c96a4081d93e428c55d337995f42cd58e7d2b44ea593b662bdb8b50e"}, + {file = "glcontext-2.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5b52eff82377469514818c90c4a16a04a39d01d3adfcd7dcadd558ed02dc7cef"}, + {file = "glcontext-2.4.0-cp310-cp310-win32.whl", hash = "sha256:5f3c6744c77ade16e715b5a8636384cf11ac3ee365493bdb38091d9c1f87eda8"}, + {file = "glcontext-2.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:21b5ac40463a711bdb6ba59751693b4f5f765cc807adeface62ce292813460ac"}, + {file = "glcontext-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4313d59451db04ebbb26232beefb5a850fbb79bb9e72b3c4e7783da3c146517b"}, + {file = "glcontext-2.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2088f15d4c5d42f1eef77b45d9ff985d8e14d3989d5d9298e2433075f5f1f15a"}, + {file = "glcontext-2.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9450f7c7b5923c17a627e1d4e965f208e28ce7b547f5fd1f756f7701c23e3c88"}, + {file = "glcontext-2.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d52ea6dc8e064f7f4cc7423943885ddecec321a5dfcce66d71a0892834334430"}, + {file = "glcontext-2.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5060eea43ec7bc2d3cf03582d56abf10938a188947f86aa5b558d197baec2753"}, + {file = "glcontext-2.4.0-cp311-cp311-win32.whl", hash = "sha256:c8b9de7f50650443a5192d42c170fa561c0b241bb1b49664ae67a22fdcf6baa4"}, + {file = "glcontext-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:d60c684983a091408e06ee5826813926cd7e84069f1bd7760397edfe0e33aad5"}, + {file = "glcontext-2.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6bf0fa5f40769e79c74f50f71f6c82acf118081f153e3f84533e1969febaae04"}, + {file = "glcontext-2.4.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:642a004a0c940dd109e8d6942a4d795c1f3b3673edd2e6556320a542ea44fc5d"}, + {file = "glcontext-2.4.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1674950eb6118f32c6418f6319f4e06a997ce170b04f9dc465ffb99a7b6d93c3"}, + {file = "glcontext-2.4.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:b66bc3a66658c3b92b2282c2197dfce639a693df525aa10e3d6402731a1e985a"}, + {file = "glcontext-2.4.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5c2710dddac0844b88cd3c61c67aa70fcf35f738a6bd8f0e557474313ef2324f"}, + {file = "glcontext-2.4.0-cp36-cp36m-win32.whl", hash = "sha256:3e51fd5ea6241774cf0636039e641b70321e9ad9bc8c082d24a9be058817a310"}, + {file = "glcontext-2.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:0fc19a523736f4178c720060c3589db8c8072744985007e20859e086a6c981f6"}, + {file = "glcontext-2.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7c05a675644e3552f7aa8bc0d6a3bf189645c06610f5b13a1850f4bbdd82cd54"}, + {file = "glcontext-2.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:987c7db3350f3ecb06c328d2b4ca06008b0d950ca248ef9a76859442293177b3"}, + {file = "glcontext-2.4.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1359528fd707e6ef051240940a6d5d4944d277306a41a05183ee90fd1f36fc"}, + {file = "glcontext-2.4.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:27a3e1284b8209ecd7daef59767c0ecfa13dbf902c61998290aab63a8ca5213e"}, + {file = "glcontext-2.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:28d5622bb14e09e754af1155f97256a892b7d2f52902375d48c47864e0e70a5d"}, + {file = "glcontext-2.4.0-cp37-cp37m-win32.whl", hash = "sha256:5498f06564e14557a8bf3192455ad0622a47fa344cd556a0bb57b215df4ad847"}, + {file = "glcontext-2.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:935a6b161b2854f89f1800cea1d44862d59f6e965f396d67c0daf8fd9378e42d"}, + {file = "glcontext-2.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9519706f150a074b318dd6ed97c438d846f81f306e957002e261262ba81a77a"}, + {file = "glcontext-2.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b957b13b11c77bfd792575eb12d6c40549f78c502bff742c8c9a93344af77d80"}, + {file = "glcontext-2.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b1be984bc6a1d443b504cdff155743be94f545663e7229a9e972c7a38211542"}, + {file = "glcontext-2.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2786764c8482e2c79bf6b88249be84aacbd97950718987463b95bc9563e37356"}, + {file = "glcontext-2.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e1e51269b4d77f3591fc7b19c68dc4215f2cf1b922fb2c1960b8b4c71e6de5f6"}, + {file = "glcontext-2.4.0-cp38-cp38-win32.whl", hash = "sha256:580d40a3226daf70d3debef01f1ea068070bea8bbfa17e2fd2df017caec7fcb9"}, + {file = "glcontext-2.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:f2c25ccdd7272ca3b20033cfc38c0b7172279ff8f14801bb2797a367f0515b6c"}, + {file = "glcontext-2.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:634adf8cc697532af2335bf58f565a59b059db64de337f9012c8352be8c2b7cd"}, + {file = "glcontext-2.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d70c436ccfe603fb82913e21eedc4fcbd2792af386cc2698cc62b732e64fc624"}, + {file = "glcontext-2.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b26961c0a8de4e4fbca0becc85b163a0eee2716e2450db3fb6fce95252a508b"}, + {file = "glcontext-2.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0538bfaeb3865bb7dd8282571838cf9b5c5fb07b08fac80c0f5f612436d46f04"}, + {file = "glcontext-2.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:027bf468fa86118c58a70ca0e008a9e74372eee0e10456a96f7e7dc5224ebca5"}, + {file = "glcontext-2.4.0-cp39-cp39-win32.whl", hash = "sha256:1fb59784c2ba33a9a1e5d829bd5f7cd524451b4d89d9c18565d5a72951ba5259"}, + {file = "glcontext-2.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:b21e2ec7b5f470ac576f8284371547e1f73711b106c2c3292732aace88813135"}, + {file = "glcontext-2.4.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4f1de7a32278333f8edaed8f51180b929aaf975a453a8bcde4d553f9d2d5db81"}, + {file = "glcontext-2.4.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a98f62495d5a89d79ce182f9698ef84154f257917007d2ef35807c4dfb24834e"}, + {file = "glcontext-2.4.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d36b623331b4e9c09f78bd57ac372b77ce8078e751c31825ce5f687f19514e2"}, + {file = "glcontext-2.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:74ec128d03f6e715fc1554047958c4581b78653eeaf08aeac4f110fba1b00c64"}, + {file = "glcontext-2.4.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6dde4e7afbfa336d323f1b5a3d9164e0484a08ec969c2b69048de840c45a5051"}, + {file = "glcontext-2.4.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18bec7f9f0a9ad90bd3e25ab0e6b9db909dfaa10a0f3b5e5ef588d3c7f565fea"}, + {file = "glcontext-2.4.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71c54b085869b3d22f15138bd5cf4dfbbf4e7c431bb7e778788e6481bb6cc452"}, + {file = "glcontext-2.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:faa80ddadb513b6475a68dad288ec690b0a7dd7e37582ac49b724e234695d12e"}, + {file = "glcontext-2.4.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a76833aea7e50682d7266ca24886e9eb1dc76744ec64ec6187f5dfd200397d3e"}, + {file = "glcontext-2.4.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d91a3f80d013f9b4073881e8578e49a1de6dda881d093f7d07aed81374cd340b"}, + {file = "glcontext-2.4.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0916c3cc03228c2512be6e283032026c2730a78c5a90ce49a427e5ca18d9b961"}, + {file = "glcontext-2.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:193c5798da864db316195b80c26da194b69e1c746a72d2d5923036e746c1a470"}, + {file = "glcontext-2.4.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9c4ac06ebdb57ef1376af4f5a788cfddf828867c4c925a4a7ac26a011ce691be"}, + {file = "glcontext-2.4.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35842c53aa4975f51c1f1fa8e619867d4734dbf0f79c5cbeb78e42633a2ef09e"}, + {file = "glcontext-2.4.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec85163231e1aa410a1e05d7f5a8e0e7dcf9e3c0ad8e679888bfdb8384dbcca3"}, + {file = "glcontext-2.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1bb56f2d8ffacb5693c2762c59bb288896b179f2ab5dc905637f6d6f5aeb7b47"}, + {file = "glcontext-2.4.0.tar.gz", hash = "sha256:50d7aad961d4f0374a38592194c59f740192e4d00549df48ac81a40942a6beb9"}, ] [[package]] name = "identify" -version = "2.5.24" +version = "2.5.26" description = "File identification library for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, - {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, + {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, + {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, ] [package.extras] @@ -1395,13 +1415,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.6.0" +version = "6.8.0" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, - {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, ] [package.dependencies] @@ -1410,25 +1430,25 @@ zipp = ">=0.5" [package.extras] 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)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "importlib-resources" -version = "5.12.0" +version = "6.0.0" description = "Read resources from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, - {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, + {file = "importlib_resources-6.0.0-py3-none-any.whl", hash = "sha256:d952faee11004c045f785bb5636e8f885bed30dc3c940d5d42798a2a4541c185"}, + {file = "importlib_resources-6.0.0.tar.gz", hash = "sha256:4cf94875a8368bd89531a756df9a9ebe1f150e0f885030b461237bc7f2d905f2"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +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"] [[package]] name = "iniconfig" @@ -1443,13 +1463,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.23.2" +version = "6.25.0" description = "IPython Kernel for Jupyter" optional = true python-versions = ">=3.8" files = [ - {file = "ipykernel-6.23.2-py3-none-any.whl", hash = "sha256:7ccb6e2d32fd958c21453db494c914f3474908a2fdefd99ab548a5375b548d1f"}, - {file = "ipykernel-6.23.2.tar.gz", hash = "sha256:fcfb67c5b504aa1bfcda1c5b3716636239e0f7b9290958f1c558c79b4c0e7ed5"}, + {file = "ipykernel-6.25.0-py3-none-any.whl", hash = "sha256:f0042e867ac3f6bca1679e6a88cbd6a58ed93a44f9d0866aecde6efe8de76659"}, + {file = "ipykernel-6.25.0.tar.gz", hash = "sha256:e342ce84712861be4b248c4a73472be4702c1b0dd77448bfd6bcfb3af9d5ddf9"}, ] [package.dependencies] @@ -1571,21 +1591,21 @@ numpy = "*" [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." 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"}, + {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, + {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, ] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] @@ -1621,37 +1641,39 @@ dev = ["hypothesis"] [[package]] name = "jsonpointer" -version = "2.3" +version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ - {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"}, - {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"}, + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] [[package]] name = "jsonschema" -version = "4.17.3" +version = "4.18.4" description = "An implementation of JSON Schema validation for Python" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, + {file = "jsonschema-4.18.4-py3-none-any.whl", hash = "sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe"}, + {file = "jsonschema-4.18.4.tar.gz", hash = "sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d"}, ] [package.dependencies] -attrs = ">=17.4.0" +attrs = ">=22.2.0" fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +jsonschema-specifications = ">=2023.03.6" pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} @@ -1659,38 +1681,54 @@ webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-n format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] + +[package.dependencies] +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +referencing = ">=0.28.0" + [[package]] name = "jupyter-client" -version = "8.2.0" +version = "7.4.9" description = "Jupyter protocol implementation and client libraries" optional = true -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "jupyter_client-8.2.0-py3-none-any.whl", hash = "sha256:b18219aa695d39e2ad570533e0d71fb7881d35a873051054a84ee2a17c4b7389"}, - {file = "jupyter_client-8.2.0.tar.gz", hash = "sha256:9fe233834edd0e6c0aa5f05ca2ab4bdea1842bfd2d8a932878212fc5301ddaf0"}, + {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, + {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, ] [package.dependencies] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +entrypoints = "*" +jupyter-core = ">=4.9.2" +nest-asyncio = ">=1.5.4" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" -traitlets = ">=5.3" +traitlets = "*" [package.extras] -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"] +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"] [[package]] name = "jupyter-core" -version = "5.3.0" +version = "5.3.1" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.3.0-py3-none-any.whl", hash = "sha256:d4201af84559bc8c70cead287e1ab94aeef3c512848dde077b7684b54d67730d"}, - {file = "jupyter_core-5.3.0.tar.gz", hash = "sha256:6db75be0c83edbf1b7c9f91ec266a9a24ef945da630f3120e1a0046dc13713fc"}, + {file = "jupyter_core-5.3.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"}, + {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"}, ] [package.dependencies] @@ -1704,19 +1742,20 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.6.3" +version = "0.7.0" description = "Jupyter Event System library" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, - {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, + {file = "jupyter_events-0.7.0-py3-none-any.whl", hash = "sha256:4753da434c13a37c3f3c89b500afa0c0a6241633441421f6adafe2fb2e2b924e"}, + {file = "jupyter_events-0.7.0.tar.gz", hash = "sha256:7be27f54b8388c03eefea123a4f79247c5b9381c49fb1cd48615ee191eb12615"}, ] [package.dependencies] -jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} python-json-logger = ">=2.0.4" pyyaml = ">=5.3" +referencing = "*" rfc3339-validator = "*" rfc3986-validator = ">=0.1.1" traitlets = ">=5.3" @@ -1724,17 +1763,17 @@ traitlets = ">=5.3" [package.extras] cli = ["click", "rich"] docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] -test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] [[package]] name = "jupyter-server" -version = "2.6.0" +version = "2.7.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.6.0-py3-none-any.whl", hash = "sha256:19525a1515b5999618a91b3e99ec9f6869aa8c5ba73e0b6279fcda918b54ba36"}, - {file = "jupyter_server-2.6.0.tar.gz", hash = "sha256:ae4af349f030ed08dd78cb7ac1a03a92d886000380c9ea6283f3c542a81f4b06"}, + {file = "jupyter_server-2.7.0-py3-none-any.whl", hash = "sha256:6a77912aff643e53fa14bdb2634884b52b784a4be77ce8e93f7283faed0f0849"}, + {file = "jupyter_server-2.7.0.tar.gz", hash = "sha256:36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f"}, ] [package.dependencies] @@ -1760,7 +1799,7 @@ websocket-client = "*" [package.extras] docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] -test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] [[package]] name = "jupyter-server-fileid" @@ -1821,32 +1860,32 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes [[package]] name = "jupyter-ydoc" -version = "0.2.4" +version = "0.2.5" description = "Document structures for collaborative editing using Ypy" optional = true python-versions = ">=3.7" files = [ - {file = "jupyter_ydoc-0.2.4-py3-none-any.whl", hash = "sha256:d1a51c73ead6f6417bec0450f53c577a66abe8d43e9c2d8a1acaf7a17259f843"}, - {file = "jupyter_ydoc-0.2.4.tar.gz", hash = "sha256:a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e"}, + {file = "jupyter_ydoc-0.2.5-py3-none-any.whl", hash = "sha256:5759170f112c70320a84217dd98d287699076ae65a7f88d458d57940a9f2b882"}, + {file = "jupyter_ydoc-0.2.5.tar.gz", hash = "sha256:5a02ca7449f0d875f73e8cb8efdf695dddef15a8e71378b1f4eda6b7c90f5382"}, ] [package.dependencies] importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -y-py = ">=0.5.3,<0.6.0" +y-py = ">=0.6.0,<0.7.0" [package.extras] dev = ["click", "jupyter-releaser"] -test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] +test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.8.4,<0.9.0)"] [[package]] name = "jupyterlab" -version = "3.6.4" +version = "3.6.5" description = "JupyterLab computational environment" optional = true python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.6.4-py3-none-any.whl", hash = "sha256:8a4e495a096ae2315af2b07acaac9d38917b6927ebd891834ddf83b28f53e881"}, - {file = "jupyterlab-3.6.4.tar.gz", hash = "sha256:862fb4a06c759a9b0a12de6bf434a8681a42e52fff0593c120e3fbad6847889f"}, + {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, + {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, ] [package.dependencies] @@ -1879,13 +1918,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.23.0" +version = "2.24.0" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = true python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, - {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, + {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, + {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, ] [package.dependencies] @@ -1901,7 +1940,7 @@ requests = ">=2.28" [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.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +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"] [[package]] name = "kiwisolver" @@ -2209,52 +2248,52 @@ files = [ [[package]] name = "matplotlib" -version = "3.7.1" +version = "3.7.2" description = "Python plotting package" optional = false python-versions = ">=3.8" files = [ - {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:95cbc13c1fc6844ab8812a525bbc237fa1470863ff3dace7352e910519e194b1"}, - {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:08308bae9e91aca1ec6fd6dda66237eef9f6294ddb17f0d0b3c863169bf82353"}, - {file = "matplotlib-3.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:544764ba51900da4639c0f983b323d288f94f65f4024dc40ecb1542d74dc0500"}, - {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d94989191de3fcc4e002f93f7f1be5da476385dde410ddafbb70686acf00ea"}, - {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99bc9e65901bb9a7ce5e7bb24af03675cbd7c70b30ac670aa263240635999a4"}, - {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb7d248c34a341cd4c31a06fd34d64306624c8cd8d0def7abb08792a5abfd556"}, - {file = "matplotlib-3.7.1-cp310-cp310-win32.whl", hash = "sha256:ce463ce590f3825b52e9fe5c19a3c6a69fd7675a39d589e8b5fbe772272b3a24"}, - {file = "matplotlib-3.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:3d7bc90727351fb841e4d8ae620d2d86d8ed92b50473cd2b42ce9186104ecbba"}, - {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:770a205966d641627fd5cf9d3cb4b6280a716522cd36b8b284a8eb1581310f61"}, - {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f67bfdb83a8232cb7a92b869f9355d677bce24485c460b19d01970b64b2ed476"}, - {file = "matplotlib-3.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2bf092f9210e105f414a043b92af583c98f50050559616930d884387d0772aba"}, - {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89768d84187f31717349c6bfadc0e0d8c321e8eb34522acec8a67b1236a66332"}, - {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83111e6388dec67822e2534e13b243cc644c7494a4bb60584edbff91585a83c6"}, - {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a867bf73a7eb808ef2afbca03bcdb785dae09595fbe550e1bab0cd023eba3de0"}, - {file = "matplotlib-3.7.1-cp311-cp311-win32.whl", hash = "sha256:fbdeeb58c0cf0595efe89c05c224e0a502d1aa6a8696e68a73c3efc6bc354304"}, - {file = "matplotlib-3.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:c0bd19c72ae53e6ab979f0ac6a3fafceb02d2ecafa023c5cca47acd934d10be7"}, - {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:6eb88d87cb2c49af00d3bbc33a003f89fd9f78d318848da029383bfc08ecfbfb"}, - {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:cf0e4f727534b7b1457898c4f4ae838af1ef87c359b76dcd5330fa31893a3ac7"}, - {file = "matplotlib-3.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:46a561d23b91f30bccfd25429c3c706afe7d73a5cc64ef2dfaf2b2ac47c1a5dc"}, - {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8704726d33e9aa8a6d5215044b8d00804561971163563e6e6591f9dcf64340cc"}, - {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4cf327e98ecf08fcbb82685acaf1939d3338548620ab8dfa02828706402c34de"}, - {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:617f14ae9d53292ece33f45cba8503494ee199a75b44de7717964f70637a36aa"}, - {file = "matplotlib-3.7.1-cp38-cp38-win32.whl", hash = "sha256:7c9a4b2da6fac77bcc41b1ea95fadb314e92508bf5493ceff058e727e7ecf5b0"}, - {file = "matplotlib-3.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:14645aad967684e92fc349493fa10c08a6da514b3d03a5931a1bac26e6792bd1"}, - {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:81a6b377ea444336538638d31fdb39af6be1a043ca5e343fe18d0f17e098770b"}, - {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:28506a03bd7f3fe59cd3cd4ceb2a8d8a2b1db41afede01f66c42561b9be7b4b7"}, - {file = "matplotlib-3.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8c587963b85ce41e0a8af53b9b2de8dddbf5ece4c34553f7bd9d066148dc719c"}, - {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8bf26ade3ff0f27668989d98c8435ce9327d24cffb7f07d24ef609e33d582439"}, - {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:def58098f96a05f90af7e92fd127d21a287068202aa43b2a93476170ebd99e87"}, - {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f883a22a56a84dba3b588696a2b8a1ab0d2c3d41be53264115c71b0a942d8fdb"}, - {file = "matplotlib-3.7.1-cp39-cp39-win32.whl", hash = "sha256:4f99e1b234c30c1e9714610eb0c6d2f11809c9c78c984a613ae539ea2ad2eb4b"}, - {file = "matplotlib-3.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:3ba2af245e36990facf67fde840a760128ddd71210b2ab6406e640188d69d136"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3032884084f541163f295db8a6536e0abb0db464008fadca6c98aaf84ccf4717"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a2cb34336110e0ed8bb4f650e817eed61fa064acbefeb3591f1b33e3a84fd96"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b867e2f952ed592237a1828f027d332d8ee219ad722345b79a001f49df0936eb"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:57bfb8c8ea253be947ccb2bc2d1bb3862c2bccc662ad1b4626e1f5e004557042"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:438196cdf5dc8d39b50a45cb6e3f6274edbcf2254f85fa9b895bf85851c3a613"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21e9cff1a58d42e74d01153360de92b326708fb205250150018a52c70f43c290"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d4725d70b7c03e082bbb8a34639ede17f333d7247f56caceb3801cb6ff703d"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:97cc368a7268141afb5690760921765ed34867ffb9655dd325ed207af85c7529"}, - {file = "matplotlib-3.7.1.tar.gz", hash = "sha256:7b73305f25eab4541bd7ee0b96d87e53ae9c9f1823be5659b806cd85786fe882"}, + {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"}, ] [package.dependencies] @@ -2266,7 +2305,7 @@ kiwisolver = ">=1.0.1" numpy = ">=1.20" packaging = ">=20.0" pillow = ">=6.2.0" -pyparsing = ">=2.3.1" +pyparsing = ">=2.3.1,<3.1" python-dateutil = ">=2.7" [[package]] @@ -2326,13 +2365,13 @@ files = [ [[package]] name = "mistune" -version = "2.0.5" -description = "A sane Markdown parser with useful plugins and renderers" +version = "3.0.1" +description = "A sane and fast Markdown parser with useful plugins and renderers" optional = true -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "mistune-2.0.5-py2.py3-none-any.whl", hash = "sha256:bad7f5d431886fcbaf5f758118ecff70d31f75231b34024a1341120340a65ce8"}, - {file = "mistune-2.0.5.tar.gz", hash = "sha256:0246113cb2492db875c6be56974a7c893333bf26cd92891c85f63151cee09d34"}, + {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, + {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, ] [[package]] @@ -2427,19 +2466,15 @@ trimesh = ["scipy (>=1.3.2)", "trimesh (>=3.2.6,<4)"] [[package]] name = "multipledispatch" -version = "0.6.0" +version = "1.0.0" description = "Multiple dispatch" 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"}, + {file = "multipledispatch-1.0.0-py3-none-any.whl", hash = "sha256:0c53cd8b077546da4e48869f49b13164bebafd0c2a5afceb6bb6a316e7fb46e4"}, + {file = "multipledispatch-1.0.0.tar.gz", hash = "sha256:5c839915465c68206c3e9c473357908216c28383b425361e5d144594bf85a7e0"}, ] -[package.dependencies] -six = "*" - [[package]] name = "mypy" version = "0.931" @@ -2574,13 +2609,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.5.0" +version = "7.7.3" description = "Converting Jupyter Notebooks" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "nbconvert-7.5.0-py3-none-any.whl", hash = "sha256:852e44392d5650ef217a5ce3a8050747051d4e6ba75f0574cb5435049ee6c0d9"}, - {file = "nbconvert-7.5.0.tar.gz", hash = "sha256:f78fd22fd2410b960d5d9bcecf3e1d6c7bdc5fec2c865964c84aa4e74e6e88da"}, + {file = "nbconvert-7.7.3-py3-none-any.whl", hash = "sha256:3022adadff3f86578a47fab7c2228bb3ca9c56a24345642a22f917f6168b48fc"}, + {file = "nbconvert-7.7.3.tar.gz", hash = "sha256:4a5996bf5f3cd16aa0431897ba1aa4c64842c2079f434b3dc6b8c4b252ef3355"}, ] [package.dependencies] @@ -2592,7 +2627,7 @@ jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" markupsafe = ">=2.0" -mistune = ">=2.0.3,<3" +mistune = ">=2.0.3,<4" nbclient = ">=0.5.0" nbformat = ">=5.7" packaging = "*" @@ -2607,18 +2642,18 @@ 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", "pytest", "pytest-dependency"] -webpdf = ["pyppeteer (>=1,<1.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.9.0" +version = "5.9.2" description = "The Jupyter Notebook format" optional = true python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.0-py3-none-any.whl", hash = "sha256:8c8fa16d6d05062c26177754bfbfac22de644888e2ef69d27ad2a334cf2576e5"}, - {file = "nbformat-5.9.0.tar.gz", hash = "sha256:e98ebb6120c3efbafdee2a40af2a140cadee90bb06dd69a2a63d9551fcc7f976"}, + {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, + {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, ] [package.dependencies] @@ -2633,13 +2668,13 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.6" +version = "1.5.7" description = "Patch asyncio to allow nested event loops" 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"}, + {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, + {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, ] [[package]] @@ -2676,13 +2711,13 @@ setuptools = "*" [[package]] name = "notebook" -version = "6.5.4" +version = "6.5.5" description = "A web-based notebook environment for interactive computing" optional = true python-versions = ">=3.7" files = [ - {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, - {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, + {file = "notebook-6.5.5-py3-none-any.whl", hash = "sha256:171039245a5b1a8f8233165091210632c21250ce2a652daed38fe8f94389984f"}, + {file = "notebook-6.5.5.tar.gz", hash = "sha256:457caa1fa1c647395420945b2b7559f603eedbc9aeb2a59a0c286c8029e31efa"}, ] [package.dependencies] @@ -2690,14 +2725,14 @@ argon2-cffi = "*" ipykernel = "*" ipython-genutils = "*" jinja2 = "*" -jupyter-client = ">=5.3.4" +jupyter-client = ">=5.3.4,<8" jupyter-core = ">=4.6.1" nbclassic = ">=0.4.7" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" prometheus-client = "*" -pyzmq = ">=17" +pyzmq = ">=17,<25" Send2Trash = ">=1.8.0" terminado = ">=0.8.3" tornado = ">=6.1" @@ -2727,39 +2762,39 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "1.24.3" +version = "1.24.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.8" files = [ - {file = "numpy-1.24.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570"}, - {file = "numpy-1.24.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7"}, - {file = "numpy-1.24.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463"}, - {file = "numpy-1.24.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6"}, - {file = "numpy-1.24.3-cp310-cp310-win32.whl", hash = "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b"}, - {file = "numpy-1.24.3-cp310-cp310-win_amd64.whl", hash = "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7"}, - {file = "numpy-1.24.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3"}, - {file = "numpy-1.24.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf"}, - {file = "numpy-1.24.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385"}, - {file = "numpy-1.24.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950"}, - {file = "numpy-1.24.3-cp311-cp311-win32.whl", hash = "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096"}, - {file = "numpy-1.24.3-cp311-cp311-win_amd64.whl", hash = "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80"}, - {file = "numpy-1.24.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078"}, - {file = "numpy-1.24.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c"}, - {file = "numpy-1.24.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c"}, - {file = "numpy-1.24.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f"}, - {file = "numpy-1.24.3-cp38-cp38-win32.whl", hash = "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4"}, - {file = "numpy-1.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289"}, - {file = "numpy-1.24.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4"}, - {file = "numpy-1.24.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187"}, - {file = "numpy-1.24.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02"}, - {file = "numpy-1.24.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4"}, - {file = "numpy-1.24.3-cp39-cp39-win32.whl", hash = "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c"}, - {file = "numpy-1.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4"}, - {file = "numpy-1.24.3.tar.gz", hash = "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155"}, + {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, + {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, + {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, + {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, + {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, + {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, + {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, + {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, + {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, + {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, + {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, ] [[package]] @@ -2812,13 +2847,13 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [[package]] @@ -2938,28 +2973,28 @@ files = [ [[package]] name = "platformdirs" -version = "3.5.3" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.5.3-py3-none-any.whl", hash = "sha256:0ade98a4895e87dc51d47151f7d2ec290365a585151d97b4d8d6312ed6132fed"}, - {file = "platformdirs-3.5.3.tar.gz", hash = "sha256:e48fabd87db8f3a7df7150a4a5ea22c546ee8bc39bc2473244730d4b56d2cc4e"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] [package.extras] @@ -2986,13 +3021,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.17.0" +version = "0.17.1" description = "Python client for the Prometheus monitoring system." optional = true python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, - {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, ] [package.extras] @@ -3000,13 +3035,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.38" +version = "3.0.39" description = "Library for building powerful interactive command lines in Python" optional = true python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, - {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, ] [package.dependencies] @@ -3101,22 +3136,22 @@ files = [ [[package]] name = "pycairo" -version = "1.23.0" +version = "1.24.0" description = "Python interface for cairo" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" 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"}, + {file = "pycairo-1.24.0-cp310-cp310-win32.whl", hash = "sha256:031f5ef2c80792673f2c54ee285f2a31779a44d7521a27a7f82e4a5ecfafc26e"}, + {file = "pycairo-1.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:afccac552386ab628e8ae658185fa363e8d15a5afe96d1de43f97027dd78bdd6"}, + {file = "pycairo-1.24.0-cp311-cp311-win32.whl", hash = "sha256:4631ed794a3376ec314ce47826c3e51940b54695f4ef7d5b3245b203037ae760"}, + {file = "pycairo-1.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed0622a0ccffb873ffe7fee1699d60779f1260fba143390e5366d55f1d1739f5"}, + {file = "pycairo-1.24.0-cp312-cp312-win32.whl", hash = "sha256:220742f187d3940d695c1af1a0c1646e26dc2199d65b7bafaa527e15c3520fd3"}, + {file = "pycairo-1.24.0-cp312-cp312-win_amd64.whl", hash = "sha256:3199d6a0538d6482c71efb816bd330515e98bb06f182e23572c77d92be98f536"}, + {file = "pycairo-1.24.0-cp38-cp38-win32.whl", hash = "sha256:c7c79e748ec849811241d29553184c3ad93c857558dbe9954a49327680b8d356"}, + {file = "pycairo-1.24.0-cp38-cp38-win_amd64.whl", hash = "sha256:6ad5c3425408ebb0dfaad2cca4a80e7524d7a309305acdb2569638b5cc988fe7"}, + {file = "pycairo-1.24.0-cp39-cp39-win32.whl", hash = "sha256:c5f6efdd86fe13d36a6b004c64d8e97cde9854d599cf6cca962afb1966fe533d"}, + {file = "pycairo-1.24.0-cp39-cp39-win_amd64.whl", hash = "sha256:26fe2c32ba24caae524d855f26f3ee1a0c1ea3291da2a19604264ed29f64d834"}, + {file = "pycairo-1.24.0.tar.gz", hash = "sha256:1444d52f1bb4cc79a4a0c0fe2ccec4bd78ff885ab01ebe1c0f637d8392bcafb6"}, ] [[package]] @@ -3182,13 +3217,13 @@ files = [ [[package]] name = "pygithub" -version = "1.58.2" +version = "1.59.0" description = "Use the full Github API v3" optional = false python-versions = ">=3.7" files = [ - {file = "PyGithub-1.58.2-py3-none-any.whl", hash = "sha256:f435884af617c6debaa76cbc355372d1027445a56fbc39972a3b9ed4968badc8"}, - {file = "PyGithub-1.58.2.tar.gz", hash = "sha256:1e6b1b7afe31f75151fb81f7ab6b984a7188a852bdb123dbb9ae90023c3ce60f"}, + {file = "PyGithub-1.59.0-py3-none-any.whl", hash = "sha256:126bdbae72087d8d038b113aab6b059b4553cb59348e3024bb1a1cae406ace9e"}, + {file = "PyGithub-1.59.0.tar.gz", hash = "sha256:6e05ff49bac3caa7d1d6177a10c6e55a3e20c85b92424cc198571fd0cf786690"}, ] [package.dependencies] @@ -3199,13 +3234,13 @@ requests = ">=2.14.0" [[package]] name = "pyglet" -version = "2.0.7" +version = "2.0.9" description = "Cross-platform windowing and multimedia library" optional = false python-versions = "*" files = [ - {file = "pyglet-2.0.7-py3-none-any.whl", hash = "sha256:a442acca40613b793c70a68c86be35fafff87691f7ac967daf0283329d3d5b36"}, - {file = "pyglet-2.0.7.zip", hash = "sha256:9282f9497c1c0cdcb2cc39d8c05090cf686dedb9ebbef4a8de49af22a0ae0e8f"}, + {file = "pyglet-2.0.9-py3-none-any.whl", hash = "sha256:8520b22dde75f47167e1fedeed58ac0bb0c890c0dca17d8528427d6b318cd9cc"}, + {file = "pyglet-2.0.9.zip", hash = "sha256:a0922e42f2d258505678e2f4a355c5476c1a6352c3f3a37754042ddb7e7cf72f"}, ] [[package]] @@ -3224,13 +3259,13 @@ plugins = ["importlib-metadata"] [[package]] name = "pyjwt" -version = "2.7.0" +version = "2.8.0" description = "JSON Web Token implementation in Python" optional = false python-versions = ">=3.7" files = [ - {file = "PyJWT-2.7.0-py3-none-any.whl", hash = "sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1"}, - {file = "PyJWT-2.7.0.tar.gz", hash = "sha256:bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074"}, + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, ] [package.dependencies] @@ -3244,17 +3279,17 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "2.17.4" +version = "2.17.5" description = "python code static checker" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.17.4-py3-none-any.whl", hash = "sha256:7a1145fb08c251bdb5cca11739722ce64a63db479283d10ce718b2460e54123c"}, - {file = "pylint-2.17.4.tar.gz", hash = "sha256:5dcf1d9e19f41f38e4e85d10f511e5b9c35e1aa74251bf95cdd8cb23584e2db1"}, + {file = "pylint-2.17.5-py3-none-any.whl", hash = "sha256:73995fb8216d3bed149c8d51bba25b2c52a8251a2c8ac846ec668ce38fab5413"}, + {file = "pylint-2.17.5.tar.gz", hash = "sha256:f7b601cbc06fef7e62a754e2b41294c2aa31f1cb659624b9a85bcba29eaf8252"}, ] [package.dependencies] -astroid = ">=2.15.4,<=2.17.0-dev0" +astroid = ">=2.15.6,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -3363,51 +3398,15 @@ files = [ multipledispatch = "*" numpy = "*" -[[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -optional = true -python-versions = ">=3.7" -files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, -] - [[package]] name = "pytest" -version = "7.3.2" +version = "7.4.0" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.3.2-py3-none-any.whl", hash = "sha256:cdcbd012c9312258922f8cd3f1b62a6580fdced17db6014896053d47cddf9295"}, - {file = "pytest-7.3.2.tar.gz", hash = "sha256:ee990a3cc55ba808b80795a79944756f315c67c12b56abd3ac993a7b8c17030b"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] @@ -3536,156 +3535,153 @@ files = [ [[package]] name = "pywinpty" -version = "2.0.10" +version = "2.0.11" description = "Pseudo terminal support for Windows from Python." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, - {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, - {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, - {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, - {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, - {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, + {file = "pywinpty-2.0.11-cp310-none-win_amd64.whl", hash = "sha256:452f10ac9ff8ab9151aa8cea9e491a9612a12250b1899278c6a56bc184afb47f"}, + {file = "pywinpty-2.0.11-cp311-none-win_amd64.whl", hash = "sha256:6701867d42aec1239bc0fedf49a336570eb60eb886e81763db77ea2b6c533cc3"}, + {file = "pywinpty-2.0.11-cp38-none-win_amd64.whl", hash = "sha256:0ffd287751ad871141dc9724de70ea21f7fc2ff1af50861e0d232cf70739d8c4"}, + {file = "pywinpty-2.0.11-cp39-none-win_amd64.whl", hash = "sha256:e4e7f023c28ca7aa8e1313e53ba80a4d10171fe27857b7e02f99882dfe3e8638"}, + {file = "pywinpty-2.0.11.tar.gz", hash = "sha256:e244cffe29a894876e2cd251306efd0d8d64abd5ada0a46150a4a71c0b9ad5c5"}, ] [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" 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"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] name = "pyzmq" -version = "25.1.0" +version = "24.0.1" description = "Python bindings for 0MQ" optional = true python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, + {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\""} +py = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "recommonmark" @@ -3703,6 +3699,21 @@ commonmark = ">=0.8.1" docutils = ">=0.11" sphinx = ">=1.3.1" +[[package]] +name = "referencing" +version = "0.30.0" +description = "JSON Referencing + Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "referencing-0.30.0-py3-none-any.whl", hash = "sha256:c257b08a399b6c2f5a3510a50d28ab5dbc7bbde049bcaf954d43c446f83ab548"}, + {file = "referencing-0.30.0.tar.gz", hash = "sha256:47237742e990457f7512c7d27486394a9aadaf876cbfaa4be65b27b4f4d47c6b"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + [[package]] name = "requests" version = "2.31.0" @@ -3764,13 +3775,13 @@ files = [ [[package]] name = "rich" -version = "13.4.2" +version = "13.5.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.4.2-py3-none-any.whl", hash = "sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec"}, - {file = "rich-13.4.2.tar.gz", hash = "sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898"}, + {file = "rich-13.5.1-py3-none-any.whl", hash = "sha256:b97381b204a206e1be618f5e1215a57174a1a7732490b3bf6668cf41d30bc72d"}, + {file = "rich-13.5.1.tar.gz", hash = "sha256:881653ee7037803559d8eae98f145e0a4c4b0ec3ff0300d2cc8d479c71fc6819"}, ] [package.dependencies] @@ -3781,6 +3792,112 @@ typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9 [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] +[[package]] +name = "rpds-py" +version = "0.9.2" +description = "Python bindings to Rust's persistent data structures (rpds)" +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"}, +] + [[package]] name = "scipy" version = "1.10.1" @@ -3852,13 +3969,13 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "67.8.0" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, - {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras] @@ -4013,13 +4130,13 @@ test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] [[package]] name = "sphinx-basic-ng" -version = "1.0.0b1" +version = "1.0.0b2" description = "A modern skeleton for Sphinx themes." 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"}, + {file = "sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b"}, + {file = "sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9"}, ] [package.dependencies] @@ -4255,13 +4372,13 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.8" +version = "0.12.1" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, - {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, + {file = "tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"}, + {file = "tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"}, ] [[package]] @@ -4365,13 +4482,13 @@ files = [ [[package]] name = "types-pygments" -version = "2.15.0.1" +version = "2.15.0.2" description = "Typing stubs for Pygments" optional = false python-versions = "*" files = [ - {file = "types-Pygments-2.15.0.1.tar.gz", hash = "sha256:4fef924a4be98e4b0a3701f2822c33186cacd7dc317267853eaf451c3f361a97"}, - {file = "types_Pygments-2.15.0.1-py3-none-any.whl", hash = "sha256:3a356cef78d667f55d3a27f5f73aa82994187dc93fcd93d970ba7479ed3f8534"}, + {file = "types-Pygments-2.15.0.2.tar.gz", hash = "sha256:a1b56b792aa1015f6cecd092af00c71ecb12d9d5dd0a30313f9cb3839044389a"}, + {file = "types_Pygments-2.15.0.2-py3-none-any.whl", hash = "sha256:60fc96777722942eafd4e7cd248568861aa8696246e3b1effcddabd51001a977"}, ] [package.dependencies] @@ -4380,13 +4497,13 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.31.0.1" +version = "2.31.0.2" description = "Typing stubs for requests" optional = false python-versions = "*" files = [ - {file = "types-requests-2.31.0.1.tar.gz", hash = "sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac"}, - {file = "types_requests-2.31.0.1-py3-none-any.whl", hash = "sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3"}, + {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"}, ] [package.dependencies] @@ -4405,49 +4522,49 @@ files = [ [[package]] name = "types-urllib3" -version = "1.26.25.13" +version = "1.26.25.14" description = "Typing stubs for urllib3" optional = false python-versions = "*" files = [ - {file = "types-urllib3-1.26.25.13.tar.gz", hash = "sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5"}, - {file = "types_urllib3-1.26.25.13-py3-none-any.whl", hash = "sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c"}, + {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, + {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, ] [[package]] name = "typing-extensions" -version = "4.6.3" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, - {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, ] [[package]] name = "uri-template" -version = "1.2.0" +version = "1.3.0" description = "RFC 6570 URI Template Processor" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" 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"}, + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, ] [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"] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] [[package]] name = "urllib3" -version = "2.0.3" +version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, - {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, ] [package.extras] @@ -4458,23 +4575,23 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.23.0" +version = "20.24.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.23.0-py3-none-any.whl", hash = "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e"}, - {file = "virtualenv-20.23.0.tar.gz", hash = "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924"}, + {file = "virtualenv-20.24.2-py3-none-any.whl", hash = "sha256:43a3052be36080548bdee0b42919c88072037d50d56c28bd3f853cbe92b953ff"}, + {file = "virtualenv-20.24.2.tar.gz", hash = "sha256:fd8a78f46f6b99a67b7ec5cf73f92357891a7b3a40fd97637c27f854aae3b9e0"}, ] [package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.11,<4" -platformdirs = ">=3.2,<4" +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<4" [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.7.1)", "time-machine (>=2.9)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "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" @@ -4555,13 +4672,13 @@ files = [ [[package]] name = "websocket-client" -version = "1.5.3" +version = "1.6.1" description = "WebSocket client for Python with low level API options" optional = true python-versions = ">=3.7" files = [ - {file = "websocket-client-1.5.3.tar.gz", hash = "sha256:b96f3bce3e54e3486ebe6504bc22bd4c140392bd2eb71764db29be8f2639aa65"}, - {file = "websocket_client-1.5.3-py3-none-any.whl", hash = "sha256:3566f8467cd350874c4913816355642a4942f6c1ed1e9406e3d42fae6d6c072a"}, + {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, + {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, ] [package.extras] @@ -4655,112 +4772,112 @@ files = [ [[package]] name = "y-py" -version = "0.5.9" +version = "0.6.0" description = "Python bindings for the Y-CRDT built from yrs (Rust)" optional = true python-versions = "*" files = [ - {file = "y_py-0.5.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:afa9a11aa2880dd8689894f3269b653e6d3bd1956963d5329be9a5bf021dab62"}, - {file = "y_py-0.5.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e370ce076781adea161b04d2f666e8b4f89bc7e8927ef842fbb0283d3bfa73e0"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67dad339f9b6701f74ff7a6e901c7909eca4eea02cf955b28d87a42650bd1be"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae82a6d9cbaff8cb7505e81b5b7f9cd7756bb7e7110aef7914375fe56b012a90"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7ca64a2a97f708569dcabd55865915943e30267bf6d26c4d212d005951efe62"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55098440e32339c2dc3d652fb36bb77a4927dee5fd4ab0cb1fe12fdd163fd4f5"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9"}, - {file = "y_py-0.5.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95d13b38c9055d607565b77cbae12e2bf0c1671c5cb8f2ee2e1230d41d2d6d34"}, - {file = "y_py-0.5.9-cp310-none-win32.whl", hash = "sha256:5dbd8d177ec7b9fef4a7b6d22eb2f8d5606fd5aac31cf2eab0dc18f0b3504c7c"}, - {file = "y_py-0.5.9-cp310-none-win_amd64.whl", hash = "sha256:d373c6bb8e21d5f7ec0833b76fa1ab480086ada602ef5bbf4724a25a21a00b6a"}, - {file = "y_py-0.5.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f8f238144a302f17eb26b122cad9382fcff5ec6653b8a562130b9a5e44010098"}, - {file = "y_py-0.5.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:25637e3d011ca6f877a24f3083ff2549d1d619406d7e8a1455c445527205046c"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffebe5e62cbfee6e24593927dedba77dc13ac4cfb9c822074ab566b1fb63d59"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0ed760e6aa5316227a0ba2d5d29634a4ef2d72c8bc55169ac01664e17e4b536"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91be189fae8ba242528333e266e38d65cae3d9a09fe45867fab8578a3ddf2ea2"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3ae6d22b7cc599220a26b06da6ead9fd582eea5fdb6273b06fa3f060d0a26a7"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:065f90501cf008375d70be6ce72dd41745e09d088f0b545f5f914d2c3f04f7ae"}, - {file = "y_py-0.5.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742c486d5b792c4ad76e09426161302edddca85efe826fa01dcee50907326cd7"}, - {file = "y_py-0.5.9-cp311-none-win32.whl", hash = "sha256:2692c808bf28f797f8d693f45dc86563ac3b1626579f67ce9546dca69644d687"}, - {file = "y_py-0.5.9-cp311-none-win_amd64.whl", hash = "sha256:c1f5f287cc7ae127ed6a2fb1546e631b316a41d087d7d2db9caa3e5f59906dcf"}, - {file = "y_py-0.5.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9a59603cf42c20d02ee5add2e3d0ce48e89c480a2a02f642fb77f142c4f37958"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b44473bb32217c78e18db66f497f6c8be33e339bab5f52398bb2468c904d5140"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1906f13e8d5ebfbd9c7948f57bc6f6f53b451b19c99350f42a0f648147a8acfe"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:202b2a3e42e0a1eaedee26f8a3bc73cd9f994c4c2b15511ea56b9838178eb380"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13b9d2959d9a26536b6ad118fb026ff19bd79da52e4addf6f3a562e7c01d516e"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3ddedaa95284f4f22a92b362f658f3d92f272d8c0fa009051bd5490c4d5a04"}, - {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85585e669d7679126e4a04e4bc0a063a641175a74eecfe47539e8da3e5b1da6e"}, - {file = "y_py-0.5.9-cp37-none-win32.whl", hash = "sha256:caf9b1feb69379d424a1d3d7c899b8e0389a3fb3131d39c3c03dcc3d4a93dbdc"}, - {file = "y_py-0.5.9-cp37-none-win_amd64.whl", hash = "sha256:7353af0e9c1f42fbf0ab340e253eeb333d58c890fa91d3eadb1b9adaf9336732"}, - {file = "y_py-0.5.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ed0fd5265905cc7e23709479bc152d69f4972dec32fa322d20cb77f749707e78"}, - {file = "y_py-0.5.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:db1ac7f2d1862eb4c448cf76183399d555a63dbe2452bafecb1c2f691e36d687"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa685f7e43ce490dfb1e392ac48f584b75cd21f05dc526c160d15308236ce8a0"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c42f3a6cd20153925b00c49af855a3277989d411bb8ea849095be943ee160821"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:753aaae817d658a1e9d271663439d8e83d9d8effa45590ecdcadc600c7cf77e3"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8e5f38842a4b043c9592bfa9a740147ddb8fac2d7a5b7bf6d52466c090ec23"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd3cb0d13ac92e7b9235d1024dba9af0788161246f12dcf1f635d634ccb206a"}, - {file = "y_py-0.5.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9983e99e3a61452b39ffce98206c7e4c6d260f4e917c8fe53fb54aaf25df89a3"}, - {file = "y_py-0.5.9-cp38-none-win32.whl", hash = "sha256:63ef8e5b76cd54578a7fd5f72d8c698d9ccd7c555c7900ebfd38a24d397c3b15"}, - {file = "y_py-0.5.9-cp38-none-win_amd64.whl", hash = "sha256:fe70d0134fe2115c08866f0cac0eb5c0788093872b5026eb438a74e1ebafd659"}, - {file = "y_py-0.5.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:05f805b58422d5d7c8e7e8e2141d1c3cac4daaa4557ae6a9b84b141fe8d6289e"}, - {file = "y_py-0.5.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a7977eeaceaeb0dfffcc5643c985c337ebc33a0b1d792ae0a9b1331cdd97366f"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:800e73d2110b97a74c52db2c8ce03a78e96f0d66a7e0c87d8254170a67c2db0e"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add793f5f5c7c7a3eb1b09ffc771bdaae10a0bd482a370bf696b83f8dee8d1b4"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8b67ae37af8aac6160fda66c0f73bcdf65c06da9022eb76192c3fc45cfab994"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2532ea5aefb223fd688c93860199d348a7601d814aac9e8784d816314588ddeb"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df78a0409dca11554a4b6442d7a8e61f762c3cfc78d55d98352392869a6b9ae0"}, - {file = "y_py-0.5.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2da2a9e28dceab4832945a745cad507579f52b4d0c9e2f54ae156eb56875861"}, - {file = "y_py-0.5.9-cp39-none-win32.whl", hash = "sha256:fdafb93bfd5532b13a53c4090675bcd31724160017ecc73e492dc1211bc0377a"}, - {file = "y_py-0.5.9-cp39-none-win_amd64.whl", hash = "sha256:73200c59bb253b880825466717941ac57267f2f685b053e183183cb6fe82874d"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af6df5ec1d66ee2d962026635d60e84ad35fc01b2a1e36b993360c0ce60ae349"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0c0e333c20b0a6ce4a5851203d45898ab93f16426c342420b931e190c5b71d3d"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7434c77cd23592973ed63341b8d337e6aebaba5ed40d7f22e2d43dfd0c3a56e"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e30fe2491d095c6d695a2c96257967fd3e2497f0f777030c8492d03c18d46e2a"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a57d81260e048caacf43a2f851766687f53e8a8356df6947fb0eee7336a7e2de"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4dfc276f988175baaa4ab321c3321a16ce33db3356c9bc5f4dea0db3de55aa"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb68445414940efe547291340e91604c7b8379b60822678ef29f4fc2a0e11c62"}, - {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd6f373dbf592ad83aaf95c16abebc8678928e49bd509ebd593259e1908345ae"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76b3480e7037ac9390c450e2aff9e46e2c9e61520c0d88afe228110ec728adc5"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9484a3fc33f812234e58a5ee834b42bb0a628054d61b5c06c323aa56c12e557d"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d87d0c2e87990bc00c049742d36a5dbbb1510949459af17198728890ee748a"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fce5feb57f6231376eb10d1fb68c60da106ffa0b520b3129471c466eff0304cc"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c1e9a866146d250e9e16d99fe22a40c82f5b592ab85da97e5679fc3841c7ce"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d722d6a27230c1f395535da5cee6a9a16497c6343afd262c846090075c083009"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f54625b9ed4e787872c45d3044dcfd04c0da4258d9914f3d32308830b35246c"}, - {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9513ae81fcc805671ae134c4c7421ca322acf92ce8b33817e1775ea8c0176973"}, - {file = "y_py-0.5.9.tar.gz", hash = "sha256:50cfa0532bcee27edb8c64743b49570e28bb76a00cd384ead1d84b6f052d9368"}, + {file = "y_py-0.6.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ebbebc4f6a9e0c89c7b57035f91043b038e804dd1953845d8a66066f4526c853"}, + {file = "y_py-0.6.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2c230bc01b96081550b7583b77d00404fd39825657f4064b919a10515f660cdf"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f5975c1a8c2ca99980571b8811d151db8590de9cc96346572a81e0f6f1e30e"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f89cf9ef1daf12f438a075415a02f227594e4b0494c78d3b83cb83651631f5"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb3225b58dc67152c004da3c26ae5bad0afebbb3c7509d853bdd87eaa655137"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaaec9718f8a23924c95294d41d87829b113bc9a606a3667dfb995afc45c9920"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb03947937b0fcb09eb2b94eb08d8e8030ef0ed70af777684ab670bd369bc3c"}, + {file = "y_py-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f79ef7303e332e91d738e66e9bb7fce0243d0407a02631a58ebc0bf2fb8743d0"}, + {file = "y_py-0.6.0-cp310-none-win32.whl", hash = "sha256:1667b8a67ace756c04f03778e86fc359028c98905212f8686afb48c26c252bda"}, + {file = "y_py-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:cca539c3804a580992304b18a33f1980282d9097a723f0bd01971477cb365b28"}, + {file = "y_py-0.6.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:5743e94c982585f05e02d9a3345dd9b1f28d90fa128df9f60b0eb357a76d2c32"}, + {file = "y_py-0.6.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:281535bb4f18fe09e5517a63b8206dd6f26ad6fb7e7c25c62bf785e594adab4d"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e05e01594e99c934562124b159720533b7ad887dde7762d460916aac47a8e4"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a752ba8875ed2038dfc7d62738536cb22b4e308951cb925a7fe8fef782c6db08"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea7d796bb55d08dd1a60736beb724004f2cbdc207592b5f301a5ff314b17137"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5126786f914ff53ea2f04f9da790db168db172521cc4f114d5501badd2f6b96"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b71cd495d322da25a53a6a830b591a2c0c46db22bb0b3556fca0bbdb1d45a18e"}, + {file = "y_py-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0624a5adf29d29330a336eecdf15874871f559d50944d542012665e1c3a18265"}, + {file = "y_py-0.6.0-cp311-none-win32.whl", hash = "sha256:374ffef1939c42286ea18e2a413c9974430226227f8f1480bbee469933aa675b"}, + {file = "y_py-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:9242f3a5c6293e634817d9984c60523ffb34cf5b41501c5958681a75745946e6"}, + {file = "y_py-0.6.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9dad6af2d83a2b0618ba3c1a2fc6657c5303cf4e9f1a65cc3fea40ffbcc552e2"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d5ebb5f9ef0c4c1f7bdd9ab5e53b9d8be4c7464905f39761b22b6ce0d327d3"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a027c39296c925f0b81e28a0fefab8c5964a0ea2b50fa05cbddf5e5ab167a380"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49adf7e25c3b3bac9f19bee181ef5253659ebe5747a7141860692015222b2007"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47b3604c874d25616a097adaaabcad6e77729e23c5d029092b8149af1a08b2a5"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5a882591c8e1b1d6fbdb7ab43884907cef2b6a18e36c7ae85589e5f55371e5"}, + {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b9337e4f3d541879a8187af121be1bd42ea110372a21895a1a3f800a6bd1c3"}, + {file = "y_py-0.6.0-cp37-none-win32.whl", hash = "sha256:ef0f08edb2094869e4d12346ee68d5154cb3d23bc3b1e7679222fae12228261c"}, + {file = "y_py-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:391a232c328c2be1de4cb152ed3e9427826e4cbd9d645feacb3dbb344b122e10"}, + {file = "y_py-0.6.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:eb60fe68774117378efdbd368ef83cf1417e61d4bc39c6be8e7f4ee91fb7428a"}, + {file = "y_py-0.6.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4f025c50301d9ddbbc2384f98d3ff1dbfe43606146b747e23a17774a02faffe9"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4181b28f736cae3bb4517090ae5eeca318c075c0106466f13a4ed6682265fc8a"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6273d84605ee55b3ac52742018f94602dab9b0457f29e6f787021c473b02fed"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eefb6371cd6e072cf467b897f85bd0d7575f3a3e944fb8675f84fb59aedd071"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75c2199a125ef8926f3216fb324c3bcd8b1b4b6c0b428888cc753ee4c85f81f"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035ba7ce31bb87bd7b5977eee71ee2ff71e54d347a35e2079362b1c23731dccd"}, + {file = "y_py-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:418aaa796a22b0102de09b36b6c6294d0a485f04bc8866c3b28f17e7022c44ba"}, + {file = "y_py-0.6.0-cp38-none-win32.whl", hash = "sha256:fc48db294d327a5cc10ee49f73f1fa1478240cc827c9029e0871106e327353ac"}, + {file = "y_py-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:d1301bfeaa26f78f4b0e5f96e0f22761b38cc407713f70550a1be490945fd6d7"}, + {file = "y_py-0.6.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e48b5b30242c7d517be85b48246b21e4e26540505a1ffe4fe473e239a8ec56d3"}, + {file = "y_py-0.6.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:479da40ef1205de52d87209534bf8e713a782e01eeed3df8dff44d21085e3f63"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7c3eaf65b162e59486a48bea5dd2035937952f15e008a14813e8cb7c24d7b"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20a4d10c8f0ee2b6df265d182d0be0ecd2ba7348c0a20b9df7d4d39df895801"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:304e88a3deaff9906faa7ba514cf82f4ca4bad1ea88728206ff906e66179abd3"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6377e3cbab8f5b8b918130e9f924358f98ca1bea12a8096d3fadea191f7137f1"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44fdd64598e9ed4008158e5e60be5e1e2daeed6fae0ab2bf0002461e960709d"}, + {file = "y_py-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51f1997dae6d77b12b50502871c7a9aae22e84048e83b64fe6d4f18dec2e4700"}, + {file = "y_py-0.6.0-cp39-none-win32.whl", hash = "sha256:9f56888aeb07ca76a5cd552581bb3735fcd2d8c18165b946fdb6e4507b10e76c"}, + {file = "y_py-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:11345294820908d5b8af9c6616ea908dda8b3e554ee6f6d50be6a2e15940f63e"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4c16d50d0728abd915bd9e2e0c3ce982005ba78b60e4b6666aadc592d9982c79"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:eccf67d09a4df42a7be2a5427c1b2e0b89bec862f519ded754bd452df516b380"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:513a2fe1318c247fc3b3c3ad208488e870a216784f2a3e6dbe2688c92f671c86"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76e2b14004cadb237499a8a068fd7a8b805b5c1fd0508530473e087c7dd25163"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c276a7eb3ae3360f5a2fc503f1e4535d4a2f1c8cfc22af4595ad752e9a94fd77"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71f7689c25bd7608e1e7a76a13138cb202455fac165018693a3e8e5675f54b82"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0505e2ca36408b754774a2bb20d93b5c7def3873406c13e1855de6f007f8a94"}, + {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f143fdcda7a6a89bf96d9b359142a7ca3315e8a9018aa46b0abbdeb47d7192e"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9a920bf096d1eecb0f30afc38ee56bfcb9e2c863c33db96fc9d30d4ac0dbee58"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:97812f9443fd846012d60ecacffa2a11992d02ad9f8618d4faae8e596736c646"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83115cbbd4f6d3b38ebe06d80b1d0dbf1b10e53947f71df16f6145a4f0d14716"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cac9259839b32706336b3f521cacfd16fc7cefee609bd9c2b5123099328d696"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e76be7258010ce8cbb93a841f78f52901bba1253a51213d3535972d13aa4e89e"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b488be17d83173acb7f07c7e3430d2c66d0bd55b821683089311699562b58b"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b9f24b00972e5685d0b9bbd01413d9c33d124145343fb92667f0e076f040ad"}, + {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95083c4cdbd593497a695e841b2ad050c0b9a8a9e374f8496aa478cebfcf9cc9"}, + {file = "y_py-0.6.0.tar.gz", hash = "sha256:46836169f7dc2957df8513cfe4bc2009175b3a473e630af421a8e75ee1c48f98"}, ] [[package]] name = "ypy-websocket" -version = "0.8.2" +version = "0.8.4" description = "WebSocket connector for Ypy" optional = true python-versions = ">=3.7" files = [ - {file = "ypy_websocket-0.8.2-py3-none-any.whl", hash = "sha256:9049d5a7d61c26c2b5a39757c9ffcbe2274bf3553adeea8de7fe1c04671d4145"}, - {file = "ypy_websocket-0.8.2.tar.gz", hash = "sha256:491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46"}, + {file = "ypy_websocket-0.8.4-py3-none-any.whl", hash = "sha256:b1ba0dfcc9762f0ca168d2378062d3ca1299d39076b0f145d961359121042be5"}, + {file = "ypy_websocket-0.8.4.tar.gz", hash = "sha256:43a001473f5c8abcf182f603049cf305cbc855ad8deaa9dfa0f3b5a7cea9d0ff"}, ] [package.dependencies] aiofiles = ">=22.1.0,<23" aiosqlite = ">=0.17.0,<1" -y-py = ">=0.5.3,<0.6.0" +y-py = ">=0.6.0,<0.7.0" [package.extras] test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] [[package]] name = "zipp" -version = "3.15.0" +version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, + {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "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)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-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] gui = ["dearpygui"] @@ -4769,4 +4886,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "28a396c4e162aaa239599929f59ea1a96a5cee669ce7dbe0c9c23e22a42488f6" +content-hash = "436481c423edda9580a9b510f32c7a20f7256eb8de17e1e270825b0c5eb89199" diff --git a/pyproject.toml b/pyproject.toml index ddbc9c1698..a611a3d967 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,6 @@ packages = [ python = ">=3.8,<3.12" click = ">=7.2,<=9.0" click-default-group = "^1.2.2" -colour = "^0.1.5" numpy = "^1.19" Pillow = ">=9.1,<10.0" scipy = "^1.7.3" diff --git a/tests/module/mobject/svg/test_svg_mobject.py b/tests/module/mobject/svg/test_svg_mobject.py index 4568b51b2d..eba36fb3ab 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,7 +53,7 @@ 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 def test_single_path_turns_into_sequence_of_points(): diff --git a/tests/module/mobject/text/test_numbers.py b/tests/module/mobject/text/test_numbers.py index a9f16fde1b..9482dd728f 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..048ae883a1 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 @@ -13,11 +11,3 @@ def test_font_size(): assert round(text_string.font_size, 5) == 14.4 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).""" - - 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..7935caa6da 100644 --- a/tests/module/mobject/types/vectorized_mobject/test_stroke.py +++ b/tests/module/mobject/types/vectorized_mobject/test_stroke.py @@ -1,14 +1,12 @@ from __future__ import annotations -from colour import Color - import manim.utils.color as C from manim import VMobject 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 +15,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 +23,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/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/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) + ) 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..d5eff1ac71 100644 --- a/tests/opengl/test_stroke_opengl.py +++ b/tests/opengl/test_stroke_opengl.py @@ -1,14 +1,12 @@ from __future__ import annotations -from colour import Color - import manim.utils.color as C from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject 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 +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 == Color(C.ORANGE) + assert m.stroke_color.to_hex() == C.ORANGE.to_hex() 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 d7939fc0f9..21649222be 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="Sans") markup_text = MarkupText("test_color_inheritance", font="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 88836df8ab1ea153ed57848a74a694c517962163 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 9 Aug 2023 19:44:17 +0200 Subject: [PATCH 268/555] [pre-commit.ci] pre-commit autoupdate (#3308) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/asottile/pyupgrade: v3.9.0 → v3.10.1](https://github.com/asottile/pyupgrade/compare/v3.9.0...v3.10.1) - [github.com/PyCQA/flake8: 6.0.0 → 6.1.0](https://github.com/PyCQA/flake8/compare/6.0.0...6.1.0) * fixed flake8 E721 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Tristan Schulz Co-authored-by: Benjamin Hackl --- .pre-commit-config.yaml | 4 ++-- manim/mobject/opengl/opengl_image_mobject.py | 2 +- manim/mobject/opengl/opengl_surface.py | 2 +- manim/mobject/svg/svg_mobject.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8f4cdd49fb..225996766b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v3.9.0 + rev: v3.10.1 hooks: - id: pyupgrade name: Update code to new python versions @@ -44,7 +44,7 @@ repos: - id: blacken-docs additional_dependencies: [black==22.3.0] - repo: https://github.com/PyCQA/flake8 - rev: 6.0.0 + rev: 6.1.0 hooks: - id: flake8 additional_dependencies: diff --git a/manim/mobject/opengl/opengl_image_mobject.py b/manim/mobject/opengl/opengl_image_mobject.py index 96d69e4a18..7f2828712f 100644 --- a/manim/mobject/opengl/opengl_image_mobject.py +++ b/manim/mobject/opengl/opengl_image_mobject.py @@ -29,7 +29,7 @@ def __init__( ): self.image = filename_or_array self.resampling_algorithm = resampling_algorithm - if type(filename_or_array) == np.ndarray: + if isinstance(filename_or_array, np.ndarray): self.size = self.image.shape[1::-1] elif isinstance(filename_or_array, (str, Path)): path = get_full_raster_image_path(filename_or_array) diff --git a/manim/mobject/opengl/opengl_surface.py b/manim/mobject/opengl/opengl_surface.py index 6a1672b59b..adb4fe2d6d 100644 --- a/manim/mobject/opengl/opengl_surface.py +++ b/manim/mobject/opengl/opengl_surface.py @@ -380,7 +380,7 @@ def __init__( if not isinstance(uv_surface, OpenGLSurface): raise Exception("uv_surface must be of type OpenGLSurface") - if type(image_file) == np.ndarray: + if isinstance(image_file, np.ndarray): image_file = change_to_rgba_array(image_file) # Set texture information diff --git a/manim/mobject/svg/svg_mobject.py b/manim/mobject/svg/svg_mobject.py index 8793275b6d..18d0a54aa9 100644 --- a/manim/mobject/svg/svg_mobject.py +++ b/manim/mobject/svg/svg_mobject.py @@ -280,7 +280,7 @@ def get_mobjects_from(self, svg: se.SVG) -> list[VMobject]: mob = self.polyline_to_mobject(shape) elif isinstance(shape, se.Text): mob = self.text_to_mobject(shape) - elif isinstance(shape, se.Use) or type(shape) == se.SVGElement: + elif isinstance(shape, se.Use) or type(shape) is se.SVGElement: continue else: logger.warning(f"Unsupported element type: {type(shape)}") From eac99e89a8b31e0f561fda9107648679b6817bf2 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 1 Sep 2023 15:06:16 +0200 Subject: [PATCH 269/555] added missing dependency typing-extensions (#3350) --- poetry.lock | 245 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 241 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4b88834f90..31d8058480 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 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 = [ @@ -15,6 +16,7 @@ files = [ name = "aiosqlite" version = "0.19.0" description = "asyncio bridge to the standard sqlite3 module" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -30,6 +32,7 @@ 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 = [ @@ -41,6 +44,7 @@ files = [ name = "anyio" version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -62,6 +66,7 @@ trio = ["trio (<0.22)"] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" +category = "main" optional = true python-versions = "*" files = [ @@ -73,6 +78,7 @@ files = [ name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -92,6 +98,7 @@ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -129,6 +136,7 @@ tests = ["pytest"] name = "arrow" version = "1.2.3" description = "Better dates & times for Python" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -143,6 +151,7 @@ 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 = [ @@ -154,6 +163,7 @@ 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 = [ @@ -173,6 +183,7 @@ wrapt = [ name = "asttokens" version = "2.2.1" description = "Annotate AST trees with source code positions" +category = "main" optional = true python-versions = "*" files = [ @@ -190,6 +201,7 @@ test = ["astroid", "pytest"] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -208,6 +220,7 @@ 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 = [ @@ -222,6 +235,7 @@ 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 = [ @@ -233,6 +247,7 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" +category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -251,6 +266,7 @@ lxml = ["lxml"] name = "black" version = "23.7.0" description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -297,6 +313,7 @@ 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 = [ @@ -315,6 +332,7 @@ 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 = [ @@ -326,6 +344,7 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." +category = "main" optional = false python-versions = "*" files = [ @@ -402,6 +421,7 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -413,6 +433,7 @@ files = [ 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 = [ @@ -497,6 +518,7 @@ files = [ name = "click" version = "8.1.6" description = "Composable command line interface toolkit" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -511,6 +533,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-default-group" version = "1.2.2" description = "Extends click.Group to invoke a command without explicit subcommand name" +category = "main" optional = false python-versions = "*" files = [ @@ -524,6 +547,7 @@ click = "*" 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 = [ @@ -539,6 +563,7 @@ 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 = [ @@ -550,6 +575,7 @@ files = [ name = "comm" version = "0.1.3" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -569,6 +595,7 @@ 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 = [ @@ -583,6 +610,7 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] name = "contourpy" version = "1.1.0" description = "Python library for calculating contours of 2D quadrilateral grids" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -641,6 +669,7 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -716,6 +745,7 @@ toml = ["tomli"] name = "cryptography" version = "41.0.2" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -761,6 +791,7 @@ test-randomorder = ["pytest-randomly"] name = "cycler" version = "0.11.0" description = "Composable style cycles" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -772,6 +803,7 @@ files = [ name = "cython" version = "3.0.0" 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 = [ @@ -839,6 +871,7 @@ files = [ 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 = [ @@ -853,6 +886,7 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", name = "dearpygui" version = "1.9.1" description = "DearPyGui: A simple Python GUI Toolkit" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -880,6 +914,7 @@ files = [ name = "debugpy" version = "1.6.7" description = "An implementation of the Debug Adapter Protocol for Python" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -907,6 +942,7 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -918,6 +954,7 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -929,6 +966,7 @@ files = [ name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -946,6 +984,7 @@ 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 = [ @@ -960,6 +999,7 @@ graph = ["objgraph (>=1.7.2)"] name = "distlib" version = "0.3.7" description = "Distribution utilities" +category = "dev" optional = false python-versions = "*" files = [ @@ -971,6 +1011,7 @@ 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 = [ @@ -982,6 +1023,7 @@ files = [ name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -993,6 +1035,7 @@ files = [ name = "exceptiongroup" version = "1.1.2" description = "Backport of PEP 654 (exception groups)" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1007,6 +1050,7 @@ test = ["pytest (>=6)"] name = "execnet" version = "2.0.2" description = "execnet: rapid multi-Python deployment" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1021,6 +1065,7 @@ 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 = [ @@ -1035,6 +1080,7 @@ 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 = [ @@ -1049,6 +1095,7 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "filelock" version = "3.12.2" description = "A platform independent file lock." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1064,6 +1111,7 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p 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 = [ @@ -1080,6 +1128,7 @@ 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 = [ @@ -1098,6 +1147,7 @@ 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 = [ @@ -1115,6 +1165,7 @@ 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 = [ @@ -1129,6 +1180,7 @@ flake8 = ">=3.0,<3.2.0 || >3.2.0" name = "flake8-docstrings" version = "1.7.0" description = "Extension for flake8 which uses pydocstyle to check docstrings" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1144,6 +1196,7 @@ pydocstyle = ">=2.1" name = "flake8-plugin-utils" version = "1.3.3" description = "The package provides base classes and utils for flake8 plugin writing" +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1155,6 +1208,7 @@ files = [ name = "flake8-pytest-style" version = "1.7.2" description = "A flake8 plugin checking common style issues or inconsistencies with pytest-based tests." +category = "dev" optional = false python-versions = ">=3.7.2,<4.0.0" files = [ @@ -1169,6 +1223,7 @@ 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 = [ @@ -1185,6 +1240,7 @@ 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 = [ @@ -1200,6 +1256,7 @@ flake8 = ">=3.7" name = "fonttools" version = "4.41.1" description = "Tools to manipulate font files" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1257,6 +1314,7 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +category = "main" optional = true python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -1268,6 +1326,7 @@ files = [ name = "furo" version = "2022.9.29" description = "A clean customisable Sphinx documentation theme." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1285,6 +1344,7 @@ sphinx-basic-ng = "*" name = "gitdb" version = "4.0.10" description = "Git Object Database" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1299,6 +1359,7 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.32" description = "GitPython is a Python library used to interact with Git repositories" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1313,6 +1374,7 @@ gitdb = ">=4.0.1,<5" name = "glcontext" version = "2.4.0" description = "Portable OpenGL Context" +category = "main" optional = false python-versions = "*" files = [ @@ -1381,6 +1443,7 @@ files = [ name = "identify" version = "2.5.26" description = "File identification library for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1395,6 +1458,7 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1406,6 +1470,7 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1417,6 +1482,7 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1436,6 +1502,7 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "importlib-resources" version = "6.0.0" description = "Read resources from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1454,6 +1521,7 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1465,6 +1533,7 @@ files = [ name = "ipykernel" version = "6.25.0" description = "IPython Kernel for Jupyter" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1478,7 +1547,7 @@ comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" @@ -1498,6 +1567,7 @@ 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 = [ @@ -1537,6 +1607,7 @@ 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 = [ @@ -1548,6 +1619,7 @@ files = [ name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1562,6 +1634,7 @@ 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 = [ @@ -1579,6 +1652,7 @@ 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 = [ @@ -1593,6 +1667,7 @@ 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 = [ @@ -1612,6 +1687,7 @@ 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 = [ @@ -1629,6 +1705,7 @@ 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 = [ @@ -1643,6 +1720,7 @@ 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 = [ @@ -1654,6 +1732,7 @@ files = [ name = "jsonschema" version = "4.18.4" description = "An implementation of JSON Schema validation for Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1685,6 +1764,7 @@ 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 = [ @@ -1700,6 +1780,7 @@ referencing = ">=0.28.0" name = "jupyter-client" version = "7.4.9" description = "Jupyter protocol implementation and client libraries" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1724,6 +1805,7 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com 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 = [ @@ -1744,6 +1826,7 @@ 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 = [ @@ -1769,6 +1852,7 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p name = "jupyter-server" version = "2.7.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1781,7 +1865,7 @@ anyio = ">=3.1.0" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" jupyter-events = ">=0.6.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" @@ -1805,6 +1889,7 @@ 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 = [ @@ -1824,6 +1909,7 @@ 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 = [ @@ -1843,6 +1929,7 @@ 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 = [ @@ -1862,6 +1949,7 @@ 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 = [ @@ -1881,6 +1969,7 @@ 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 = [ @@ -1909,6 +1998,7 @@ 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 = [ @@ -1920,6 +2010,7 @@ files = [ name = "jupyterlab-server" version = "2.24.0" description = "A set of server components for JupyterLab and JupyterLab like applications." +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1946,6 +2037,7 @@ test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-valida name = "kiwisolver" version = "1.4.4" description = "A fast implementation of the Cassowary constraint solver" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2023,6 +2115,7 @@ files = [ 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 = [ @@ -2068,6 +2161,7 @@ files = [ name = "manimpango" version = "0.4.3" description = "Bindings for Pango for using with Manim." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2093,6 +2187,7 @@ files = [ name = "mapbox-earcut" version = "1.0.1" description = "Python bindings for the mapbox earcut C++ polygon triangulation library." +category = "main" optional = false python-versions = "*" files = [ @@ -2167,6 +2262,7 @@ 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 = [ @@ -2191,6 +2287,7 @@ 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 = [ @@ -2250,6 +2347,7 @@ files = [ name = "matplotlib" version = "3.7.2" description = "Python plotting package" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2312,6 +2410,7 @@ python-dateutil = ">=2.7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" +category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2326,6 +2425,7 @@ traitlets = "*" name = "mccabe" version = "0.6.1" description = "McCabe checker, plugin for flake8" +category = "dev" optional = false python-versions = "*" files = [ @@ -2337,6 +2437,7 @@ 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 = [ @@ -2356,6 +2457,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2367,6 +2469,7 @@ 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 = [ @@ -2378,6 +2481,7 @@ files = [ name = "moderngl" version = "5.8.2" description = "ModernGL: High performance rendering for Python 3" +category = "main" optional = false python-versions = "*" files = [ @@ -2440,6 +2544,7 @@ 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 = [ @@ -2468,6 +2573,7 @@ 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 = [ @@ -2479,6 +2585,7 @@ files = [ name = "mypy" version = "0.931" description = "Optional static typing for Python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2517,6 +2624,7 @@ python2 = ["typed-ast (>=1.4.0,<2)"] 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 = [ @@ -2528,6 +2636,7 @@ 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 = [ @@ -2554,6 +2663,7 @@ 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 = [ @@ -2589,6 +2699,7 @@ 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 = [ @@ -2598,7 +2709,7 @@ files = [ [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" nbformat = ">=5.1" traitlets = ">=5.4" @@ -2611,6 +2722,7 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= name = "nbconvert" version = "7.7.3" description = "Converting Jupyter Notebooks" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2649,6 +2761,7 @@ webpdf = ["playwright"] name = "nbformat" version = "5.9.2" description = "The Jupyter Notebook format" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2670,6 +2783,7 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.5.7" description = "Patch asyncio to allow nested event loops" +category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2681,6 +2795,7 @@ files = [ 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 = [ @@ -2699,6 +2814,7 @@ 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 = [ @@ -2713,6 +2829,7 @@ setuptools = "*" name = "notebook" version = "6.5.5" description = "A web-based notebook environment for interactive computing" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2747,6 +2864,7 @@ 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 = [ @@ -2764,6 +2882,7 @@ 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 = [ @@ -2801,6 +2920,7 @@ files = [ name = "overrides" version = "7.3.1" description = "A decorator to automatically detect mismatch when overriding a method." +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2812,6 +2932,7 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2823,6 +2944,7 @@ 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 = [ @@ -2834,6 +2956,7 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2849,6 +2972,7 @@ 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 = [ @@ -2860,6 +2984,7 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." +category = "main" optional = true python-versions = "*" files = [ @@ -2874,6 +2999,7 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" +category = "main" optional = true python-versions = "*" files = [ @@ -2885,6 +3011,7 @@ files = [ name = "pillow" version = "9.5.0" description = "Python Imaging Library (Fork)" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2964,6 +3091,7 @@ 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 = [ @@ -2975,6 +3103,7 @@ 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 = [ @@ -2990,6 +3119,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3005,6 +3135,7 @@ 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 = [ @@ -3023,6 +3154,7 @@ 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 = [ @@ -3037,6 +3169,7 @@ 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 = [ @@ -3051,6 +3184,7 @@ 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 = [ @@ -3077,6 +3211,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "psutil-wheels" version = "5.8.0" description = "Cross-platform lib for process and system monitoring in Python." +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3102,6 +3237,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "unittest2", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" +category = "main" optional = true python-versions = "*" files = [ @@ -3113,6 +3249,7 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" +category = "main" optional = true python-versions = "*" files = [ @@ -3127,6 +3264,7 @@ 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 = [ @@ -3138,6 +3276,7 @@ files = [ name = "pycairo" version = "1.24.0" description = "Python interface for cairo" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3158,6 +3297,7 @@ 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 = [ @@ -3169,6 +3309,7 @@ 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 = [ @@ -3180,6 +3321,7 @@ files = [ name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3197,6 +3339,7 @@ toml = ["tomli (>=1.2.3)"] name = "pydub" version = "0.25.1" description = "Manipulate audio with an simple and easy high level interface" +category = "main" optional = false python-versions = "*" files = [ @@ -3208,6 +3351,7 @@ 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 = [ @@ -3219,6 +3363,7 @@ files = [ name = "pygithub" version = "1.59.0" description = "Use the full Github API v3" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3236,6 +3381,7 @@ requests = ">=2.14.0" name = "pyglet" version = "2.0.9" description = "Cross-platform windowing and multimedia library" +category = "main" optional = false python-versions = "*" files = [ @@ -3247,6 +3393,7 @@ files = [ name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3261,6 +3408,7 @@ 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 = [ @@ -3281,6 +3429,7 @@ 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 = [ @@ -3310,6 +3459,7 @@ 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 = [ @@ -3336,6 +3486,7 @@ 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 = [ @@ -3353,6 +3504,7 @@ 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 = [ @@ -3373,6 +3525,7 @@ pyobjc-core = ">=9.2" name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "dev" optional = false python-versions = ">=3.6.8" files = [ @@ -3387,6 +3540,7 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyrr" version = "0.10.3" description = "3D mathematical functions using NumPy" +category = "main" optional = false python-versions = "*" files = [ @@ -3402,6 +3556,7 @@ numpy = "*" name = "pytest" version = "7.4.0" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3424,6 +3579,7 @@ 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 = [ @@ -3442,6 +3598,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-forked" version = "1.6.0" description = "run tests in isolated forked subprocesses" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3457,6 +3614,7 @@ pytest = ">=3.10" name = "pytest-xdist" version = "2.5.0" description = "pytest xdist plugin for distributed testing and loop-on-failing modes" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3478,6 +3636,7 @@ 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 = [ @@ -3492,6 +3651,7 @@ six = ">=1.5" name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3503,6 +3663,7 @@ files = [ name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" +category = "main" optional = false python-versions = "*" files = [ @@ -3514,6 +3675,7 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" +category = "main" optional = true python-versions = "*" files = [ @@ -3537,6 +3699,7 @@ files = [ name = "pywinpty" version = "2.0.11" description = "Pseudo terminal support for Windows from Python." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3551,6 +3714,7 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3559,6 +3723,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -3566,8 +3731,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -3584,6 +3756,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -3591,6 +3764,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -3600,6 +3774,7 @@ files = [ name = "pyzmq" version = "24.0.1" description = "Python bindings for 0MQ" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3687,6 +3862,7 @@ py = {version = "*", markers = "implementation_name == \"pypy\""} 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 = [ @@ -3703,6 +3879,7 @@ sphinx = ">=1.3.1" name = "referencing" version = "0.30.0" description = "JSON Referencing + Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3718,6 +3895,7 @@ rpds-py = ">=0.7.0" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3739,6 +3917,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "restructuredtext-lint" version = "1.4.0" description = "reStructuredText linter" +category = "dev" optional = false python-versions = "*" files = [ @@ -3752,6 +3931,7 @@ docutils = ">=0.11,<1.0" name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3766,6 +3946,7 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3777,6 +3958,7 @@ files = [ name = "rich" version = "13.5.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -3796,6 +3978,7 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "rpds-py" version = "0.9.2" description = "Python bindings to Rust's persistent data structures (rpds)" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3902,6 +4085,7 @@ files = [ 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 = [ @@ -3940,6 +4124,7 @@ 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 = [ @@ -3955,6 +4140,7 @@ 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 = [ @@ -3971,6 +4157,7 @@ win32 = ["pywin32"] name = "setuptools" version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3987,6 +4174,7 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( 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 = [ @@ -3998,6 +4186,7 @@ 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 = [ @@ -4053,6 +4242,7 @@ testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4064,6 +4254,7 @@ files = [ 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 = [ @@ -4075,6 +4266,7 @@ 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 = [ @@ -4086,6 +4278,7 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4097,6 +4290,7 @@ files = [ name = "sphinx" version = "4.5.0" description = "Python documentation generator" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4132,6 +4326,7 @@ 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 = [ @@ -4149,6 +4344,7 @@ 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 = [ @@ -4167,6 +4363,7 @@ 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 = [ @@ -4182,6 +4379,7 @@ 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 = [ @@ -4197,6 +4395,7 @@ 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 = [ @@ -4212,6 +4411,7 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -4226,6 +4426,7 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-programoutput" version = "0.17" description = "Sphinx extension to include program output" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" files = [ @@ -4240,6 +4441,7 @@ 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 = [ @@ -4255,6 +4457,7 @@ 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 = [ @@ -4270,6 +4473,7 @@ 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 = [ @@ -4285,6 +4489,7 @@ sphinx = ">=4.0" name = "srt" version = "3.5.3" description = "A tiny library for parsing, modifying, and composing SRT files." +category = "main" optional = false python-versions = ">=2.7" files = [ @@ -4295,6 +4500,7 @@ 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 = [ @@ -4314,6 +4520,7 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "svgelements" version = "1.9.5" description = "Svg Elements Parsing" +category = "main" optional = false python-versions = "*" files = [ @@ -4325,6 +4532,7 @@ files = [ 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 = [ @@ -4345,6 +4553,7 @@ 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 = [ @@ -4363,6 +4572,7 @@ test = ["flake8", "isort", "pytest"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4374,6 +4584,7 @@ files = [ name = "tomlkit" version = "0.12.1" description = "Style preserving TOML library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4385,6 +4596,7 @@ files = [ name = "tornado" version = "6.3.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "main" optional = true python-versions = ">= 3.8" files = [ @@ -4405,6 +4617,7 @@ files = [ name = "tqdm" version = "4.65.0" description = "Fast, Extensible Progress Meter" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4425,6 +4638,7 @@ telegram = ["requests"] name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4440,6 +4654,7 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "types-decorator" version = "0.1.7" description = "Typing stubs for decorator" +category = "dev" optional = false python-versions = "*" files = [ @@ -4451,6 +4666,7 @@ files = [ name = "types-docutils" version = "0.20.0.1" description = "Typing stubs for docutils" +category = "dev" optional = false python-versions = "*" files = [ @@ -4462,6 +4678,7 @@ files = [ name = "types-pillow" version = "8.3.11" description = "Typing stubs for Pillow" +category = "dev" optional = false python-versions = "*" files = [ @@ -4473,6 +4690,7 @@ files = [ name = "types-protobuf" version = "3.20.4.6" description = "Typing stubs for protobuf" +category = "dev" optional = false python-versions = "*" files = [ @@ -4484,6 +4702,7 @@ files = [ name = "types-pygments" version = "2.15.0.2" description = "Typing stubs for Pygments" +category = "dev" optional = false python-versions = "*" files = [ @@ -4499,6 +4718,7 @@ types-setuptools = "*" name = "types-requests" version = "2.31.0.2" description = "Typing stubs for requests" +category = "dev" optional = false python-versions = "*" files = [ @@ -4513,6 +4733,7 @@ types-urllib3 = "*" name = "types-setuptools" version = "57.4.18" description = "Typing stubs for setuptools" +category = "dev" optional = false python-versions = "*" files = [ @@ -4524,6 +4745,7 @@ files = [ name = "types-urllib3" version = "1.26.25.14" description = "Typing stubs for urllib3" +category = "dev" optional = false python-versions = "*" files = [ @@ -4535,6 +4757,7 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4546,6 +4769,7 @@ files = [ name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4560,6 +4784,7 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "urllib3" version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4577,6 +4802,7 @@ zstd = ["zstandard (>=0.18.0)"] name = "virtualenv" version = "20.24.2" description = "Virtual Python Environment builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4597,6 +4823,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "watchdog" version = "2.3.1" description = "Filesystem events monitoring" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -4637,6 +4864,7 @@ 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 = [ @@ -4648,6 +4876,7 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4663,6 +4892,7 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" +category = "main" optional = true python-versions = "*" files = [ @@ -4674,6 +4904,7 @@ files = [ name = "websocket-client" version = "1.6.1" description = "WebSocket client for Python with low level API options" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4690,6 +4921,7 @@ 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 = [ @@ -4774,6 +5006,7 @@ 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 = [ @@ -4849,6 +5082,7 @@ files = [ name = "ypy-websocket" version = "0.8.4" description = "WebSocket connector for Ypy" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4868,6 +5102,7 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] name = "zipp" version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4886,4 +5121,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "436481c423edda9580a9b510f32c7a20f7256eb8de17e1e270825b0c5eb89199" +content-hash = "4599b550efe5d668ee87521ebfb4d39f8329153c119c40cf1dad302498d25e55" diff --git a/pyproject.toml b/pyproject.toml index a611a3d967..a7bf1b3081 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,6 +56,7 @@ screeninfo = "^0.8" Pygments = "^2.10.0" "backports.cached-property" = { version = "^1.0.1", python = "<3.8" } svgelements = "^1.8.0" +typing-extensions = "^4.7.1" [tool.poetry.extras] jupyterlab = ["jupyterlab", "notebook"] From 3b4fca2c75f606bdfa4a428a1a8474d6551a4a5c Mon Sep 17 00:00:00 2001 From: Uwe Zimmermann Date: Fri, 1 Sep 2023 16:55:11 +0200 Subject: [PATCH 270/555] fix: return value of TexTemplate.add_to... (#3343) Unlike similar methods on other objects .add_to_preamble and .add_to_document do not return the TexTemplate object itself. This does not allow for stacking these methods. Just added the `return self` for both methods Co-authored-by: Uwe Zimmermann --- manim/utils/tex.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manim/utils/tex.py b/manim/utils/tex.py index d8751e091f..cd0944dcdc 100644 --- a/manim/utils/tex.py +++ b/manim/utils/tex.py @@ -139,6 +139,7 @@ def add_to_preamble(self, txt: str, prepend: bool = False): else: self.preamble += "\n" + txt self._rebuild() + return self def add_to_document(self, txt: str): """Adds txt to the TeX template just after \\begin{document}, e.g. ``\\boldmath`` @@ -150,6 +151,7 @@ def add_to_document(self, txt: str): """ self.post_doc_commands += "\n" + txt + "\n" self._rebuild() + return self def get_texcode_for_expression(self, expression: str): """Inserts expression verbatim into TeX template. From 50d663eb8b3b3ddb43fb20cce1943348abf9cc59 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 2 Sep 2023 18:23:58 +0200 Subject: [PATCH 271/555] Added docstring to `Mobject.center` (#3353) --- manim/mobject/mobject.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index bd356f0884..72faf99ea1 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1381,6 +1381,13 @@ def pose_at_angle(self, **kwargs): # Positioning methods def center(self): + """Moves the center of the mobject to the center of the scene. + + Returns + ------- + :class:`.Mobject` + The centered mobject. + """ self.shift(-self.get_center()) return self From bff2ea4442035479a5b1765dba1b67bdfb720e57 Mon Sep 17 00:00:00 2001 From: Uwe Zimmermann Date: Sat, 9 Sep 2023 14:27:33 +0200 Subject: [PATCH 272/555] feat: adding three new rate_functions based on the SmoothStep function. These have the added benefits of zero derivatives at the endpoints. (#3361) --- manim/utils/rate_functions.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/manim/utils/rate_functions.py b/manim/utils/rate_functions.py index 261199b524..dec8579692 100644 --- a/manim/utils/rate_functions.py +++ b/manim/utils/rate_functions.py @@ -89,6 +89,9 @@ def construct(self): __all__ = [ "linear", "smooth", + "smoothstep", + "smootherstep", + "smoothererstep", "rush_into", "rush_from", "slow_into", @@ -155,6 +158,36 @@ def smooth(t: float, inflection: float = 10.0) -> float: ) +def smoothstep(t: float) -> float: + """Implementation of the 1st order SmoothStep sigmoid function. + The 1st derivative (speed) is zero at the endpoints. + https://en.wikipedia.org/wiki/Smoothstep + """ + return 0 if t <= 0 else 3 * t**2 - 2 * t**3 if t < 1 else 1 + + +def smootherstep(t: float) -> float: + """Implementation of the 2nd order SmoothStep sigmoid function. + The 1st and 2nd derivatives (speed and acceleration) are zero at the endpoints. + https://en.wikipedia.org/wiki/Smoothstep + """ + return 0 if t <= 0 else 6 * t**5 - 15 * t**4 + 10 * t**3 if t < 1 else 1 + + +def smoothererstep(t: float) -> float: + """Implementation of the 3rd order SmoothStep sigmoid function. + The 1st, 2nd and 3rd derivatives (speed, acceleration and jerk) are zero at the endpoints. + https://en.wikipedia.org/wiki/Smoothstep + """ + return ( + 0 + if t <= 0 + else 35 * t**4 - 84 * t**5 + 70 * t**6 - 20 * t**7 + if t < 1 + else 1 + ) + + @unit_interval def rush_into(t: float, inflection: float = 10.0) -> float: return 2 * smooth(t / 2.0, inflection) From c6450b21c7d37d97c27beaf39faf2758da03bf8e Mon Sep 17 00:00:00 2001 From: Holly and Prosper <45610532+rongpenl@users.noreply.github.com> Date: Sat, 23 Sep 2023 14:49:27 -0700 Subject: [PATCH 273/555] fix a typo in deep_dive.rst (#3377) --- docs/source/guides/deep_dive.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/guides/deep_dive.rst b/docs/source/guides/deep_dive.rst index feef87d2e3..3ff34f6720 100644 --- a/docs/source/guides/deep_dive.rst +++ b/docs/source/guides/deep_dive.rst @@ -211,7 +211,7 @@ is imported and Python has read and defined the ``ToyExample`` class (but, read carefully: *no instance of this class has been created yet*). At this point, the interpreter is about to enter the ``tempconfig`` context -manager. Even if you have not seen Manim's ``tempconfig`` before, it's name +manager. Even if you have not seen Manim's ``tempconfig`` before, its name already suggests what it does: it creates a copy of the current state of the configuration, applies the changes to the key-value pairs in the passed dictionary, and upon leaving the context the original version of the From 73e30cea8907576492c19dd3155e2714354538e9 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Mon, 9 Oct 2023 20:38:20 +0200 Subject: [PATCH 274/555] Several GitHub actions updates (#3397) * Bump docker/login-action from 2 to 3 Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Bump docker/setup-buildx-action from 2 to 3 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Bump docker/build-push-action from 4 to 5 Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4 to 5. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v4...v5) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Bump docker/setup-qemu-action from 2 to 3 Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/cffconvert.yml | 2 +- .github/workflows/ci.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/publish-docker.yml | 16 ++++++++-------- .github/workflows/python-publish.yml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/cffconvert.yml b/.github/workflows/cffconvert.yml index 6851c52d38..7144363717 100644 --- a/.github/workflows/cffconvert.yml +++ b/.github/workflows/cffconvert.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out a copy of the repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Check whether the citation metadata from CITATION.cff is valid uses: citation-file-format/cffconvert-github-action@2.0.0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c234a6e885..1a3ec07c37 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: steps: - name: Checkout the repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Poetry run: | diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 85d892800d..057d471a24 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Initialize CodeQL uses: github/codeql-action/init@v2 diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml index fdd67c2a77..c9c7c2cbb2 100644 --- a/.github/workflows/publish-docker.yml +++ b/.github/workflows/publish-docker.yml @@ -13,19 +13,19 @@ jobs: if: github.event_name != 'release' steps: - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to DockerHub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: platforms: linux/arm64,linux/amd64 push: true @@ -38,13 +38,13 @@ jobs: if: github.event_name == 'release' steps: - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to DockerHub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} @@ -61,7 +61,7 @@ jobs: print(f"tag_name={ref_tag}", file=f) - name: Build and push - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: platforms: linux/arm64,linux/amd64 push: true diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 42763dae49..e1e3d79c05 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -8,7 +8,7 @@ jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python 3.8 uses: actions/setup-python@v4 From 571f79be2cf0eff8819aa5d0492d3542b76e5ab3 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Tue, 10 Oct 2023 00:11:37 +0530 Subject: [PATCH 275/555] rtd: enable htmlzip build (#3355) also, bump python to 3.11 fixes https://github.com/ManimCommunity/manim/issues/3342 --- .readthedocs.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 836b4eb423..3c93ef3d97 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,9 +1,13 @@ version: 2 + +formats: + - htmlzip + build: os: ubuntu-22.04 tools: - python: "3.10" + python: "3.11" apt_packages: - libpango1.0-dev From 684014a861e8ccf00b565eb9e25f4960870eeb73 Mon Sep 17 00:00:00 2001 From: Anousheh Moonen <141789878+u7481690@users.noreply.github.com> Date: Tue, 10 Oct 2023 21:29:03 +1100 Subject: [PATCH 276/555] fix(docs): Remove extra curly bracket in LaTeX math expression to fix issue #3330 (#3389) --- docs/source/guides/using_text.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/guides/using_text.rst b/docs/source/guides/using_text.rst index 80393aa608..8e4471d08e 100644 --- a/docs/source/guides/using_text.rst +++ b/docs/source/guides/using_text.rst @@ -378,7 +378,7 @@ we have to add it manually. myTemplate = TexTemplate() myTemplate.add_to_preamble(r"\usepackage{mathrsfs}") tex = Tex( - r"$\mathscr{H} \rightarrow \mathbb{H}$}", + r"$\mathscr{H} \rightarrow \mathbb{H}$", tex_template=myTemplate, font_size=144, ) From 7fab9cdbf9a28f4445a3c92fad9bcdf063f6b47c Mon Sep 17 00:00:00 2001 From: Narahari Rao Date: Thu, 12 Oct 2023 01:28:43 -0500 Subject: [PATCH 277/555] Bug fix: Use np.isclose for float equality in number line elongated ticks (#3392) * use np.isclose for float equality in number line elongated ticks * use offsets relative to x_min to tell if we need to elongate a tick * forgot to subtract to create list of offsets * add test for elongated ticks float equality * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Remove unused import --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/graphing/number_line.py | 3 ++- tests/module/mobject/graphing/test_ticks.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index 08f6ef48fa..aec3bfb533 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -277,9 +277,10 @@ def add_ticks(self): via ``self.ticks``.""" ticks = VGroup() elongated_tick_size = self.tick_size * self.longer_tick_multiple + elongated_tick_offsets = self.numbers_with_elongated_ticks - self.x_min for x in self.get_tick_range(): size = self.tick_size - if x in self.numbers_with_elongated_ticks: + if np.any(np.isclose(x - self.x_min, elongated_tick_offsets)): size = elongated_tick_size ticks.add(self.get_tick(x, size)) self.add(ticks) diff --git a/tests/module/mobject/graphing/test_ticks.py b/tests/module/mobject/graphing/test_ticks.py index eeac2ac0a1..5bc5eb1604 100644 --- a/tests/module/mobject/graphing/test_ticks.py +++ b/tests/module/mobject/graphing/test_ticks.py @@ -13,6 +13,27 @@ def test_duplicate_ticks_removed_for_axes(): assert np.unique(ticks).size == ticks.size +def test_elongated_ticks_float_equality(): + nline = NumberLine( + x_range=[1 + 1e-5, 1 + 2e-5, 1e-6], + numbers_with_elongated_ticks=[ + 1 + 12e-6, + 1 + 17e-6, + ], # Elongate the 3rd and 8th tick + include_ticks=True, + ) + + tick_heights = {tick.height for tick in nline.ticks} + default_tick_height, elongated_tick_height = min(tick_heights), max(tick_heights) + + assert all( + tick.height == elongated_tick_height + if ind in [2, 7] + else tick.height == default_tick_height + for ind, tick in enumerate(nline.ticks) + ) + + def test_ticks_not_generated_on_origin_for_axes(): axes = Axes( x_range=[-10, 10], From 94df2c44d87ff66e0fe16f8d64a383d7859776cf Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sun, 22 Oct 2023 20:05:38 +0200 Subject: [PATCH 278/555] Updated several dependencies (#3399) * updated lockfile * ran poetry update again --- poetry.lock | 2315 +++++++++++++++++++++++++++------------------------ 1 file changed, 1218 insertions(+), 1097 deletions(-) diff --git a/poetry.lock b/poetry.lock index 31d8058480..9bde1773e7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -42,25 +42,25 @@ 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" @@ -76,23 +76,24 @@ files = [ [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." +version = "23.1.0" +description = "Argon2 for Python" category = "main" 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" @@ -134,18 +135,23 @@ tests = ["pytest"] [[package]] name = "arrow" -version = "1.2.3" +version = "1.3.0" description = "Better dates & times for Python" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, ] [package.dependencies] python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] [[package]] name = "astor" @@ -161,14 +167,14 @@ files = [ [[package]] name = "astroid" -version = "2.15.6" +version = "2.15.8" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, - {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, + {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, + {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, ] [package.dependencies] @@ -181,18 +187,18 @@ 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"] @@ -218,19 +224,22 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte [[package]] name = "babel" -version = "2.12.1" +version = "2.13.0" description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.13.0-py3-none-any.whl", hash = "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec"}, + {file = "Babel-2.13.0.tar.gz", hash = "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210"}, ] [package.dependencies] pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "backcall" version = "0.2.0" @@ -264,34 +273,30 @@ lxml = ["lxml"] [[package]] name = "black" -version = "23.7.0" +version = "23.10.0" 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.10.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:f8dc7d50d94063cdfd13c82368afd8588bac4ce360e4224ac399e769d6704e98"}, + {file = "black-23.10.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:f20ff03f3fdd2fd4460b4f631663813e57dc277e37fb216463f3b907aa5a9bdd"}, + {file = "black-23.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3d9129ce05b0829730323bdcb00f928a448a124af5acf90aa94d9aba6969604"}, + {file = "black-23.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:960c21555be135c4b37b7018d63d6248bdae8514e5c55b71e994ad37407f45b8"}, + {file = "black-23.10.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:30b78ac9b54cf87bcb9910ee3d499d2bc893afd52495066c49d9ee6b21eee06e"}, + {file = "black-23.10.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:0e232f24a337fed7a82c1185ae46c56c4a6167fb0fe37411b43e876892c76699"}, + {file = "black-23.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31946ec6f9c54ed7ba431c38bc81d758970dd734b96b8e8c2b17a367d7908171"}, + {file = "black-23.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:c870bee76ad5f7a5ea7bd01dc646028d05568d33b0b09b7ecfc8ec0da3f3f39c"}, + {file = "black-23.10.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:6901631b937acbee93c75537e74f69463adaf34379a04eef32425b88aca88a23"}, + {file = "black-23.10.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:481167c60cd3e6b1cb8ef2aac0f76165843a374346aeeaa9d86765fe0dd0318b"}, + {file = "black-23.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74892b4b836e5162aa0452393112a574dac85e13902c57dfbaaf388e4eda37c"}, + {file = "black-23.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:47c4510f70ec2e8f9135ba490811c071419c115e46f143e4dce2ac45afdcf4c9"}, + {file = "black-23.10.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:76baba9281e5e5b230c9b7f83a96daf67a95e919c2dfc240d9e6295eab7b9204"}, + {file = "black-23.10.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:a3c2ddb35f71976a4cfeca558848c2f2f89abc86b06e8dd89b5a65c1e6c0f22a"}, + {file = "black-23.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db451a3363b1e765c172c3fd86213a4ce63fb8524c938ebd82919bf2a6e28c6a"}, + {file = "black-23.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:7fb5fc36bb65160df21498d5a3dd330af8b6401be3f25af60c6ebfe23753f747"}, + {file = "black-23.10.0-py3-none-any.whl", hash = "sha256:e223b731a0e025f8ef427dd79d8cd69c167da807f5710add30cdf131f13dd62e"}, + {file = "black-23.10.0.tar.gz", hash = "sha256:31b9f87b277a68d0e99d2905edae08807c007973eaa609da5f0c62def6b7c0bd"}, ] [package.dependencies] @@ -301,7 +306,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)"] @@ -311,14 +316,14 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bleach" -version = "6.0.0" +version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, - {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, ] [package.dependencies] @@ -326,7 +331,7 @@ six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] +css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "certifi" @@ -342,76 +347,64 @@ files = [ [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.8" 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"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -419,111 +412,126 @@ 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" +version = "3.3.1" 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 = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.1.tar.gz", hash = "sha256:d9137a876020661972ca6eec0766d81aef8a5627df628b664b234b73396e727e"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8aee051c89e13565c6bd366813c386939f8e928af93c29fda4af86d25b73d8f8"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:352a88c3df0d1fa886562384b86f9a9e27563d4704ee0e9d56ec6fcd270ea690"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:223b4d54561c01048f657fa6ce41461d5ad8ff128b9678cfe8b2ecd951e3f8a2"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f861d94c2a450b974b86093c6c027888627b8082f1299dfd5a4bae8e2292821"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1171ef1fc5ab4693c5d151ae0fdad7f7349920eabbaca6271f95969fa0756c2d"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28f512b9a33235545fbbdac6a330a510b63be278a50071a336afc1b78781b147"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0e842112fe3f1a4ffcf64b06dc4c61a88441c2f02f373367f7b4c1aa9be2ad5"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f9bc2ce123637a60ebe819f9fccc614da1bcc05798bbbaf2dd4ec91f3e08846"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f194cce575e59ffe442c10a360182a986535fd90b57f7debfaa5c845c409ecc3"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9a74041ba0bfa9bc9b9bb2cd3238a6ab3b7618e759b41bd15b5f6ad958d17605"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b578cbe580e3b41ad17b1c428f382c814b32a6ce90f2d8e39e2e635d49e498d1"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6db3cfb9b4fcecb4390db154e75b49578c87a3b9979b40cdf90d7e4b945656e1"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:debb633f3f7856f95ad957d9b9c781f8e2c6303ef21724ec94bea2ce2fcbd056"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-win32.whl", hash = "sha256:87071618d3d8ec8b186d53cb6e66955ef2a0e4fa63ccd3709c0c90ac5a43520f"}, + {file = "charset_normalizer-3.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:e372d7dfd154009142631de2d316adad3cc1c36c32a38b16a4751ba78da2a397"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae4070f741f8d809075ef697877fd350ecf0b7c5837ed68738607ee0a2c572cf"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58e875eb7016fd014c0eea46c6fa92b87b62c0cb31b9feae25cbbe62c919f54d"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dbd95e300367aa0827496fe75a1766d198d34385a58f97683fe6e07f89ca3e3c"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de0b4caa1c8a21394e8ce971997614a17648f94e1cd0640fbd6b4d14cab13a72"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:985c7965f62f6f32bf432e2681173db41336a9c2611693247069288bcb0c7f8b"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a15c1fe6d26e83fd2e5972425a772cca158eae58b05d4a25a4e474c221053e2d"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae55d592b02c4349525b6ed8f74c692509e5adffa842e582c0f861751701a673"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be4d9c2770044a59715eb57c1144dedea7c5d5ae80c68fb9959515037cde2008"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:851cf693fb3aaef71031237cd68699dded198657ec1e76a76eb8be58c03a5d1f"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:31bbaba7218904d2eabecf4feec0d07469284e952a27400f23b6628439439fa7"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:871d045d6ccc181fd863a3cd66ee8e395523ebfbc57f85f91f035f50cee8e3d4"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:501adc5eb6cd5f40a6f77fbd90e5ab915c8fd6e8c614af2db5561e16c600d6f3"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f5fb672c396d826ca16a022ac04c9dce74e00a1c344f6ad1a0fdc1ba1f332213"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-win32.whl", hash = "sha256:bb06098d019766ca16fc915ecaa455c1f1cd594204e7f840cd6258237b5079a8"}, + {file = "charset_normalizer-3.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8af5a8917b8af42295e86b64903156b4f110a30dca5f3b5aedea123fbd638bff"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7ae8e5142dcc7a49168f4055255dbcced01dc1714a90a21f87448dc8d90617d1"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5b70bab78accbc672f50e878a5b73ca692f45f5b5e25c8066d748c09405e6a55"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ceca5876032362ae73b83347be8b5dbd2d1faf3358deb38c9c88776779b2e2f"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34d95638ff3613849f473afc33f65c401a89f3b9528d0d213c7037c398a51296"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edbe6a5bf8b56a4a84533ba2b2f489d0046e755c29616ef8830f9e7d9cf5728"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6a02a3c7950cafaadcd46a226ad9e12fc9744652cc69f9e5534f98b47f3bbcf"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10b8dd31e10f32410751b3430996f9807fc4d1587ca69772e2aa940a82ab571a"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edc0202099ea1d82844316604e17d2b175044f9bcb6b398aab781eba957224bd"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b891a2f68e09c5ef989007fac11476ed33c5c9994449a4e2c3386529d703dc8b"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:71ef3b9be10070360f289aea4838c784f8b851be3ba58cf796262b57775c2f14"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:55602981b2dbf8184c098bc10287e8c245e351cd4fdcad050bd7199d5a8bf514"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:46fb9970aa5eeca547d7aa0de5d4b124a288b42eaefac677bde805013c95725c"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:520b7a142d2524f999447b3a0cf95115df81c4f33003c51a6ab637cbda9d0bf4"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-win32.whl", hash = "sha256:8ec8ef42c6cd5856a7613dcd1eaf21e5573b2185263d87d27c8edcae33b62a61"}, + {file = "charset_normalizer-3.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:baec8148d6b8bd5cee1ae138ba658c71f5b03e0d69d5907703e3e1df96db5e41"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63a6f59e2d01310f754c270e4a257426fe5a591dc487f1983b3bbe793cf6bac6"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d6bfc32a68bc0933819cfdfe45f9abc3cae3877e1d90aac7259d57e6e0f85b1"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f3100d86dcd03c03f7e9c3fdb23d92e32abbca07e7c13ebd7ddfbcb06f5991f"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39b70a6f88eebe239fa775190796d55a33cfb6d36b9ffdd37843f7c4c1b5dc67"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e12f8ee80aa35e746230a2af83e81bd6b52daa92a8afaef4fea4a2ce9b9f4fa"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b6cefa579e1237ce198619b76eaa148b71894fb0d6bcf9024460f9bf30fd228"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:61f1e3fb621f5420523abb71f5771a204b33c21d31e7d9d86881b2cffe92c47c"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4f6e2a839f83a6a76854d12dbebde50e4b1afa63e27761549d006fa53e9aa80e"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:1ec937546cad86d0dce5396748bf392bb7b62a9eeb8c66efac60e947697f0e58"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:82ca51ff0fc5b641a2d4e1cc8c5ff108699b7a56d7f3ad6f6da9dbb6f0145b48"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:633968254f8d421e70f91c6ebe71ed0ab140220469cf87a9857e21c16687c034"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-win32.whl", hash = "sha256:c0c72d34e7de5604df0fde3644cc079feee5e55464967d10b24b1de268deceb9"}, + {file = "charset_normalizer-3.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:63accd11149c0f9a99e3bc095bbdb5a464862d77a7e309ad5938fbc8721235ae"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5a3580a4fdc4ac05f9e53c57f965e3594b2f99796231380adb2baaab96e22761"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2465aa50c9299d615d757c1c888bc6fef384b7c4aec81c05a0172b4400f98557"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb7cd68814308aade9d0c93c5bd2ade9f9441666f8ba5aa9c2d4b389cb5e2a45"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91e43805ccafa0a91831f9cd5443aa34528c0c3f2cc48c4cb3d9a7721053874b"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:854cc74367180beb327ab9d00f964f6d91da06450b0855cbbb09187bcdb02de5"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c15070ebf11b8b7fd1bfff7217e9324963c82dbdf6182ff7050519e350e7ad9f"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4c99f98fc3a1835af8179dcc9013f93594d0670e2fa80c83aa36346ee763d2"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fb765362688821404ad6cf86772fc54993ec11577cd5a92ac44b4c2ba52155b"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dced27917823df984fe0c80a5c4ad75cf58df0fbfae890bc08004cd3888922a2"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a66bcdf19c1a523e41b8e9d53d0cedbfbac2e93c649a2e9502cb26c014d0980c"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ecd26be9f112c4f96718290c10f4caea6cc798459a3a76636b817a0ed7874e42"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f70fd716855cd3b855316b226a1ac8bdb3caf4f7ea96edcccc6f484217c9597"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:17a866d61259c7de1bdadef418a37755050ddb4b922df8b356503234fff7932c"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-win32.whl", hash = "sha256:548eefad783ed787b38cb6f9a574bd8664468cc76d1538215d510a3cd41406cb"}, + {file = "charset_normalizer-3.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:45f053a0ece92c734d874861ffe6e3cc92150e32136dd59ab1fb070575189c97"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bc791ec3fd0c4309a753f95bb6c749ef0d8ea3aea91f07ee1cf06b7b02118f2f"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0c8c61fb505c7dad1d251c284e712d4e0372cef3b067f7ddf82a7fa82e1e9a93"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2c092be3885a1b7899cd85ce24acedc1034199d6fca1483fa2c3a35c86e43041"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2000c54c395d9e5e44c99dc7c20a64dc371f777faf8bae4919ad3e99ce5253e"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4cb50a0335382aac15c31b61d8531bc9bb657cfd848b1d7158009472189f3d62"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c30187840d36d0ba2893bc3271a36a517a717f9fd383a98e2697ee890a37c273"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe81b35c33772e56f4b6cf62cf4aedc1762ef7162a31e6ac7fe5e40d0149eb67"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0bf89afcbcf4d1bb2652f6580e5e55a840fdf87384f6063c4a4f0c95e378656"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:06cf46bdff72f58645434d467bf5228080801298fbba19fe268a01b4534467f5"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3c66df3f41abee950d6638adc7eac4730a306b022570f71dd0bd6ba53503ab57"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd805513198304026bd379d1d516afbf6c3c13f4382134a2c526b8b854da1c2e"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:9505dc359edb6a330efcd2be825fdb73ee3e628d9010597aa1aee5aa63442e97"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:31445f38053476a0c4e6d12b047b08ced81e2c7c712e5a1ad97bc913256f91b2"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-win32.whl", hash = "sha256:bd28b31730f0e982ace8663d108e01199098432a30a4c410d06fe08fdb9e93f4"}, + {file = "charset_normalizer-3.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:555fe186da0068d3354cdf4bbcbc609b0ecae4d04c921cc13e209eece7720727"}, + {file = "charset_normalizer-3.3.1-py3-none-any.whl", hash = "sha256:800561453acdecedaac137bf09cd719c7a440b6800ec182f077bb8e7025fb708"}, ] [[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] @@ -531,18 +539,22 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "click-default-group" -version = "1.2.2" -description = "Extends click.Group to invoke a command without explicit subcommand name" +version = "1.2.4" +description = "click_default_group" category = "main" optional = false -python-versions = "*" +python-versions = ">=2.7" files = [ - {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, + {file = "click_default_group-1.2.4-py2.py3-none-any.whl", hash = "sha256:9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f"}, + {file = "click_default_group-1.2.4.tar.gz", hash = "sha256:eb3f3c99ec0d456ca6cd2a7f08f7d4e91771bef51b01bdd9580cc6450fe1251e"}, ] [package.dependencies] click = "*" +[package.extras] +test = ["pytest"] + [[package]] name = "cloup" version = "0.13.1" @@ -573,18 +585,18 @@ files = [ [[package]] name = "comm" -version = "0.1.3" +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 = [ - {file = "comm-0.1.3-py3-none-any.whl", hash = "sha256:16613c6211e20223f215fc6d3b266a247b6e2641bf4e0a3ad34cb1aff2aa3f37"}, - {file = "comm-0.1.3.tar.gz", hash = "sha256:a61efa9daffcfbe66fd643ba966f846a624e4e6d6767eda9cf6e993aadaab93e"}, + {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"}, + {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"}, ] [package.dependencies] -traitlets = ">=5.3" +traitlets = ">=4" [package.extras] lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] @@ -608,131 +620,136 @@ 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.2" 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.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, + {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, + {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, + {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, + {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, + {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, + {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, + {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, + {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, + {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, + {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, + {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, + {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, ] [package.dependencies] @@ -743,35 +760,35 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.2" +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.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711"}, - {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83"}, - {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5"}, - {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58"}, - {file = "cryptography-41.0.2-cp37-abi3-win32.whl", hash = "sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76"}, - {file = "cryptography-41.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0"}, - {file = "cryptography-41.0.2.tar.gz", hash = "sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c"}, + {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] @@ -789,82 +806,86 @@ test-randomorder = ["pytest-randomly"] [[package]] name = "cycler" -version = "0.11.0" +version = "0.12.1" description = "Composable style cycles" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, ] +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "cython" -version = "3.0.0" +version = "3.0.4" 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.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:096cb461bf8d913a4327d93ea38d18bc3dbc577a71d805be04754e4b2cc2c45d"}, + {file = "Cython-3.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf671d712816b48fa2731799017ed68e5e440922d0c7e13dc825c226639ff766"}, + {file = "Cython-3.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beb367fd88fc6ba8c204786f680229106d99da72a60f5906c85fc8d73640b01a"}, + {file = "Cython-3.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6619264ed43d8d8819d4f1cdb8a62ab66f87e92f06f3ff3e2533fd95a9945e59"}, + {file = "Cython-3.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c0fb9e7cf9db38918f19a803fab9bc7b2ed3f33a9e8319c616c464a0a8501b8d"}, + {file = "Cython-3.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c214f6e88ecdc8ff5d13f0914890445fdaad21bddc34a90cd14aeb3ad5e55e2e"}, + {file = "Cython-3.0.4-cp310-cp310-win32.whl", hash = "sha256:c9b1322f0d8ce5445fcc3a625b966f10c4182190026713e217d6f38d29930cb1"}, + {file = "Cython-3.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:146bfaab567157f4aa34114a37e3f98a3d9c4527ee99d4fd730cab56482bd3cf"}, + {file = "Cython-3.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8e0f98d950987b0f9d5e10c41236bef5cb4fba701c6e680af0b9734faa3a85e"}, + {file = "Cython-3.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fe227d6d8e2ea030e82abc8a3e361e31447b66849f8c069caa783999e54a8f2"}, + {file = "Cython-3.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6da74000a672eac0d7cf02adc140b2f9c7d54eae6c196e615a1b5deb694d9203"}, + {file = "Cython-3.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48cda82eb82ad2014d2ad194442ed3c46156366be98e4e02f3e29742cdbf94a0"}, + {file = "Cython-3.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4355a2cb03b257773c0d2bb6af9818c72e836a9b09986e28f52e323d87b1fc67"}, + {file = "Cython-3.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:10b426adc3027d66303f5c7aa8b254d10ed80827ff5cce9e892d550b708dc044"}, + {file = "Cython-3.0.4-cp311-cp311-win32.whl", hash = "sha256:28de18f0d07eb34e2dd7b022ac30beab0fdd277846d07b7a08e69e6294f0762b"}, + {file = "Cython-3.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:9d31d76ed777a8a85be3f8f7f1cfef09b3bc33f6ec4abee1067dcef107f49778"}, + {file = "Cython-3.0.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d5a55749509c7f9f8a33bf9cc02cf76fd6564fcb38f486e43d2858145d735953"}, + {file = "Cython-3.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58cdfdd942cf5ffcee974aabfe9b9e26c0c1538fd31c1b03596d40405f7f4d40"}, + {file = "Cython-3.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b906997e7b98d7d29b84d10a5318993eba1aaff82ff7e1a0ac00254307913d7"}, + {file = "Cython-3.0.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f24114e1777604a28ae1c7a56a2c9964655f1031edecc448ad51e5abb19a279b"}, + {file = "Cython-3.0.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:07d0e69959f267b79ffd18ece8599711ad2f3d3ed1eddd0d4812d2a97de2b912"}, + {file = "Cython-3.0.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f7fcd93d15deceb2747b10266a39deccd94f257d610f3bbd52a7e16bc5908eda"}, + {file = "Cython-3.0.4-cp312-cp312-win32.whl", hash = "sha256:0aa2a6bb3ff67794d8d1dafaed22913adcbb327e96eca3ac44e2f3ba4a0ae446"}, + {file = "Cython-3.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:0021350f6d7022a37f598320460b84b2c0daccf6bb65641bbdbc8b990bdf4ad2"}, + {file = "Cython-3.0.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b72c426df1586f967b1c61d2f8236702d75c6bbf34abdc258a59e09155a16414"}, + {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a9262408f05eef039981479b38b38252d5b853992e5bc54a2d2dd05a2a0178e"}, + {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28af4e7dff1742cb0f0a4823102c89c62a2d94115b68f718145fcfe0763c6e21"}, + {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e8c144e2c5814e46868d1f81e2f4265ca1f314a8187d0420cd76e9563294cf8"}, + {file = "Cython-3.0.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:19a64bf2591272348ab08bcd4a5f884259cc3186f008c9038b8ec7d01f847fd5"}, + {file = "Cython-3.0.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fc96efa617184b8581a02663e261b41c13a605da8ef4ba1ed735bf46184f815e"}, + {file = "Cython-3.0.4-cp36-cp36m-win32.whl", hash = "sha256:15d52f7f9d08b264c042aa508bf457f53654b55f533e0262e146002b1c15d1cd"}, + {file = "Cython-3.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:0650460b5fd6f16da4186e0a769b47db5532601e306f3b5d17941283d5e36d24"}, + {file = "Cython-3.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b3ddfc6f05410095ec11491dde05f50973e501567d21cbfcf5832d95f141878a"}, + {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a0b92adfcac68dcf549daddec83c87a86995caa6f87bfb6f72de4797e1a6ad6"}, + {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ada3659608795bb36930d9a206b8dd6b865d85e2999a02ce8b34f3195d88301"}, + {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:061dec1be8d8b601b160582609a78eb08324a4ccf21bee0d04853a3e9dfcbefd"}, + {file = "Cython-3.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bc42004f181373cd3b39bbacfb71a5b0606ed6e4c199c940cca2212ba0f79525"}, + {file = "Cython-3.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f124ac9ee41e1bfdfb16f53f1db85de296cd2144a4e8fdee8c3560a8fe9b6d5d"}, + {file = "Cython-3.0.4-cp37-cp37m-win32.whl", hash = "sha256:48b35ab009227ee6188991b5666aae1936b82a944f707c042cef267709de12b5"}, + {file = "Cython-3.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:861979428f749faa9883dc4e11e8c3fc2c29bd0031cf49661604459b53ea7c66"}, + {file = "Cython-3.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c7a7dd7c50d07718a5ac2bdea166085565f7217cf1e030cc07c22a8b80a406a7"}, + {file = "Cython-3.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d40d4135f76fb0ed4caa2d422fdb4231616615698709d3c421ecc733f1ac7ca0"}, + {file = "Cython-3.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:207f53893ca22d8c8f5db533f38382eb7ddc2d0b4ab51699bf052423a6febdad"}, + {file = "Cython-3.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0422a40a58dcfbb54c8b4e125461d741031ff046bc678475cc7a6c801d2a7721"}, + {file = "Cython-3.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ef4b144c5b29b4ea0b40c401458b86df8d75382b2e5d03e9f67f607c05b516a9"}, + {file = "Cython-3.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0612439f810cc281e51fead69de0545c4d9772a1e82149c119d1aafc1f6210ba"}, + {file = "Cython-3.0.4-cp38-cp38-win32.whl", hash = "sha256:b86871862bd65806ba0d0aa2b9c77fcdcc6cbd8d36196688f4896a34bb626334"}, + {file = "Cython-3.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:6603a287188dcbc36358a73a7be43e8a2ecf0c6a06835bdfdd1b113943afdd6f"}, + {file = "Cython-3.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0fc9e974419cc0393072b1e9a669f71c3b34209636d2005ff8620687daa82b8c"}, + {file = "Cython-3.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e84988d384dfba678387ea7e4f68786c3703543018d473605d9299c69a07f197"}, + {file = "Cython-3.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36299ffd5663203c25d3a76980f077e23b6d4f574d142f0f43943f57be445639"}, + {file = "Cython-3.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8529cf09919263a6826adc04c5dde9f1406dd7920929b16be19ee9848110e353"}, + {file = "Cython-3.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8692249732d62e049df3884fa601b70fad3358703e137aceeb581e5860e7d9b7"}, + {file = "Cython-3.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f234bc46043856d118ebd94b13ea29df674503bc94ced3d81ca46a1ad5b5b9ae"}, + {file = "Cython-3.0.4-cp39-cp39-win32.whl", hash = "sha256:c2215f436ce3cce49e6e318cb8f7253cfc4d3bea690777c2a5dd52ae93342504"}, + {file = "Cython-3.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:003ccc40e0867770db0018274977d1874e4df64983d5e3e36937f107e0b2fdf6"}, + {file = "Cython-3.0.4-py2.py3-none-any.whl", hash = "sha256:e5e2859f97e9cceb8e70b0934c56157038b8b083245898593008162a70536d7e"}, + {file = "Cython-3.0.4.tar.gz", hash = "sha256:2e379b491ee985d31e5faaf050f79f4a8f59f482835906efe4477b33b4fbe9ff"}, ] [[package]] @@ -884,58 +905,58 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", [[package]] name = "dearpygui" -version = "1.9.1" +version = "1.10.1" 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.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:ef1f1a8dbbd2dac9ea4fbf9d37e7812741e9a33de03ce385e398258750966a85"}, + {file = "dearpygui-1.10.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:7dc32b229d89b10ec4f647414738783afc2d6aa09c28c9f7384b07023b6ee261"}, + {file = "dearpygui-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:8047f4ac06fb774c1335a98d3dbb47337b07e17629a85789740298a61e6ae999"}, + {file = "dearpygui-1.10.1-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:e87016bdd388d0e33080cd2033047f6c58df7808e1c3e14a1b0d736b2184e1ce"}, + {file = "dearpygui-1.10.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:ac4e1cb01cd53490df20365645fbd0296bac093b8a415c805c18cad0aa85cac6"}, + {file = "dearpygui-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:1711a5cc991eaa6bc8a7a3cadb3845236c16b6753dc46b2fd1f4285db57d998e"}, + {file = "dearpygui-1.10.1-cp312-cp312-macosx_10_6_x86_64.whl", hash = "sha256:e506507ee5344bb8d059d333c4dd77cd61bb4850f66fc4b5508ffa4f456f5a98"}, + {file = "dearpygui-1.10.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ed0d58e057636c4b79aee14d09b78042b122f42a6bef08d9901239de3361449d"}, + {file = "dearpygui-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:5350d2a03da789684fcd384d7ee9e0ea029ecf134bef30d134c439d35c9d60b4"}, + {file = "dearpygui-1.10.1-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:d36b16afd0dd22674a59195e2ba37b787ea18bfb4ca96c460d6b7795f2c56980"}, + {file = "dearpygui-1.10.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2d94b23bed91e121ad4556b811fe164598c5b4dc94a19e3195bb70a4ff632759"}, + {file = "dearpygui-1.10.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d1b877a147971e062d3c006027e880fd2b88dad9d198620f12b8407dddb1f795"}, + {file = "dearpygui-1.10.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:0e30634f1f8c13994ec59c58048e97103e672f792145a57aab4a7c39c6445e5e"}, + {file = "dearpygui-1.10.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:d2cb73d22ec6c186c039c60c22efa5fc94f0562793bf20996d9eeae5ee601d55"}, + {file = "dearpygui-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:2a8a1305ad6bfbc6f46968067b7f02d8404f2df21a13627e8c93cdabbb30f37b"}, + {file = "dearpygui-1.10.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:a2e722e5b1fb8ab8d25e3ed82a790778849c1c66a522a327a73e25e218f98873"}, + {file = "dearpygui-1.10.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:358a221d5f53b584e7bbc76e2ad7ca012991debdd74ea3a6cfc8e2ed0ea51c92"}, + {file = "dearpygui-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:5ccb75b5377e5d4fcd6358ac2164418301b2747a78fee55422e3995d167d364a"}, ] [[package]] name = "debugpy" -version = "1.6.7" +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-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, + {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]] @@ -1033,14 +1054,14 @@ files = [ [[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] @@ -1063,29 +1084,29 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "executing" -version = "1.2.0" +version = "2.0.0" description = "Get the currently executing AST node of a frame, and other information" 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"}, + {file = "executing-2.0.0-py2.py3-none-any.whl", hash = "sha256:06df6183df67389625f4e763921c6cf978944721abf3e714000200aab95b0657"}, + {file = "executing-2.0.0.tar.gz", hash = "sha256:0ff053696fdeef426cda5bd18eacd94f82c91f49823a2e9090124212ceea9b08"}, ] [package.extras] -tests = ["asttokens", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] [[package]] name = "fastjsonschema" -version = "2.18.0" +version = "2.18.1" description = "Fastest Python implementation of JSON schema" category = "main" optional = true python-versions = "*" files = [ - {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, - {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, + {file = "fastjsonschema-2.18.1-py3-none-any.whl", hash = "sha256:aec6a19e9f66e9810ab371cc913ad5f4e9e479b63a7072a2cd060a9369e329a8"}, + {file = "fastjsonschema-2.18.1.tar.gz", hash = "sha256:06dc8680d937628e993fa0cd278f196d20449a1adc087640710846b324d422ea"}, ] [package.extras] @@ -1093,19 +1114,20 @@ 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" @@ -1254,46 +1276,54 @@ flake8 = ">=3.7" [[package]] name = "fonttools" -version = "4.41.1" +version = "4.43.1" description = "Tools to manipulate font files" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.41.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a7bbb290d13c6dd718ec2c3db46fe6c5f6811e7ea1e07f145fd8468176398224"}, - {file = "fonttools-4.41.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ec453a45778524f925a8f20fd26a3326f398bfc55d534e37bab470c5e415caa1"}, - {file = "fonttools-4.41.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2071267deaa6d93cb16288613419679c77220543551cbe61da02c93d92df72f"}, - {file = "fonttools-4.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e3334d51f0e37e2c6056e67141b2adabc92613a968797e2571ca8a03bd64773"}, - {file = "fonttools-4.41.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cac73bbef7734e78c60949da11c4903ee5837168e58772371bd42a75872f4f82"}, - {file = "fonttools-4.41.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:edee0900cf0eedb29d17c7876102d6e5a91ee333882b1f5abc83e85b934cadb5"}, - {file = "fonttools-4.41.1-cp310-cp310-win32.whl", hash = "sha256:2a22b2c425c698dcd5d6b0ff0b566e8e9663172118db6fd5f1941f9b8063da9b"}, - {file = "fonttools-4.41.1-cp310-cp310-win_amd64.whl", hash = "sha256:547ab36a799dded58a46fa647266c24d0ed43a66028cd1cd4370b246ad426cac"}, - {file = "fonttools-4.41.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:849ec722bbf7d3501a0e879e57dec1fc54919d31bff3f690af30bb87970f9784"}, - {file = "fonttools-4.41.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38cdecd8f1fd4bf4daae7fed1b3170dfc1b523388d6664b2204b351820aa78a7"}, - {file = "fonttools-4.41.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ae64303ba670f8959fdaaa30ba0c2dabe75364fdec1caeee596c45d51ca3425"}, - {file = "fonttools-4.41.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14f3ccea4cc7dd1b277385adf3c3bf18f9860f87eab9c2fb650b0af16800f55"}, - {file = "fonttools-4.41.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:33191f062549e6bb1a4782c22a04ebd37009c09360e2d6686ac5083774d06d95"}, - {file = "fonttools-4.41.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:704bccd69b0abb6fab9f5e4d2b75896afa48b427caa2c7988792a2ffce35b441"}, - {file = "fonttools-4.41.1-cp311-cp311-win32.whl", hash = "sha256:4edc795533421e98f60acee7d28fc8d941ff5ac10f44668c9c3635ad72ae9045"}, - {file = "fonttools-4.41.1-cp311-cp311-win_amd64.whl", hash = "sha256:aaaef294d8e411f0ecb778a0aefd11bb5884c9b8333cc1011bdaf3b58ca4bd75"}, - {file = "fonttools-4.41.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3d1f9471134affc1e3b1b806db6e3e2ad3fa99439e332f1881a474c825101096"}, - {file = "fonttools-4.41.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59eba8b2e749a1de85760da22333f3d17c42b66e03758855a12a2a542723c6e7"}, - {file = "fonttools-4.41.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9b3cc10dc9e0834b6665fd63ae0c6964c6bc3d7166e9bc84772e0edd09f9fa2"}, - {file = "fonttools-4.41.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2c2964bdc827ba6b8a91dc6de792620be4da3922c4cf0599f36a488c07e2b2"}, - {file = "fonttools-4.41.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7763316111df7b5165529f4183a334aa24c13cdb5375ffa1dc8ce309c8bf4e5c"}, - {file = "fonttools-4.41.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b2d1ee95be42b80d1f002d1ee0a51d7a435ea90d36f1a5ae331be9962ee5a3f1"}, - {file = "fonttools-4.41.1-cp38-cp38-win32.whl", hash = "sha256:f48602c0b3fd79cd83a34c40af565fe6db7ac9085c8823b552e6e751e3a5b8be"}, - {file = "fonttools-4.41.1-cp38-cp38-win_amd64.whl", hash = "sha256:b0938ebbeccf7c80bb9a15e31645cf831572c3a33d5cc69abe436e7000c61b14"}, - {file = "fonttools-4.41.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e5c2b0a95a221838991e2f0e455dec1ca3a8cc9cd54febd68cc64d40fdb83669"}, - {file = "fonttools-4.41.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891cfc5a83b0307688f78b9bb446f03a7a1ad981690ac8362f50518bc6153975"}, - {file = "fonttools-4.41.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73ef0bb5d60eb02ba4d3a7d23ada32184bd86007cb2de3657cfcb1175325fc83"}, - {file = "fonttools-4.41.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f240d9adf0583ac8fc1646afe7f4ac039022b6f8fa4f1575a2cfa53675360b69"}, - {file = "fonttools-4.41.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bdd729744ae7ecd7f7311ad25d99da4999003dcfe43b436cf3c333d4e68de73d"}, - {file = "fonttools-4.41.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b927e5f466d99c03e6e20961946314b81d6e3490d95865ef88061144d9f62e38"}, - {file = "fonttools-4.41.1-cp39-cp39-win32.whl", hash = "sha256:afce2aeb80be72b4da7dd114f10f04873ff512793d13ce0b19d12b2a4c44c0f0"}, - {file = "fonttools-4.41.1-cp39-cp39-win_amd64.whl", hash = "sha256:1df1b6f4c7c4bc8201eb47f3b268adbf2539943aa43c400f84556557e3e109c0"}, - {file = "fonttools-4.41.1-py3-none-any.whl", hash = "sha256:952cb405f78734cf6466252fec42e206450d1a6715746013f64df9cbd4f896fa"}, - {file = "fonttools-4.41.1.tar.gz", hash = "sha256:e16a9449f21a93909c5be2f5ed5246420f2316e94195dbfccb5238aaa38f9751"}, + {file = "fonttools-4.43.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf11e2cca121df35e295bd34b309046c29476ee739753bc6bc9d5050de319273"}, + {file = "fonttools-4.43.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10b3922875ffcba636674f406f9ab9a559564fdbaa253d66222019d569db869c"}, + {file = "fonttools-4.43.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f727c3e3d08fd25352ed76cc3cb61486f8ed3f46109edf39e5a60fc9fecf6ca"}, + {file = "fonttools-4.43.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad0b3f6342cfa14be996971ea2b28b125ad681c6277c4cd0fbdb50340220dfb6"}, + {file = "fonttools-4.43.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b7ad05b2beeebafb86aa01982e9768d61c2232f16470f9d0d8e385798e37184"}, + {file = "fonttools-4.43.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c54466f642d2116686268c3e5f35ebb10e49b0d48d41a847f0e171c785f7ac7"}, + {file = "fonttools-4.43.1-cp310-cp310-win32.whl", hash = "sha256:1e09da7e8519e336239fbd375156488a4c4945f11c4c5792ee086dd84f784d02"}, + {file = "fonttools-4.43.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cf9e974f63b1080b1d2686180fc1fbfd3bfcfa3e1128695b5de337eb9075cef"}, + {file = "fonttools-4.43.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5db46659cfe4e321158de74c6f71617e65dc92e54980086823a207f1c1c0e24b"}, + {file = "fonttools-4.43.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1952c89a45caceedf2ab2506d9a95756e12b235c7182a7a0fff4f5e52227204f"}, + {file = "fonttools-4.43.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c36da88422e0270fbc7fd959dc9749d31a958506c1d000e16703c2fce43e3d0"}, + {file = "fonttools-4.43.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bbbf8174501285049e64d174e29f9578495e1b3b16c07c31910d55ad57683d8"}, + {file = "fonttools-4.43.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d4071bd1c183b8d0b368cc9ed3c07a0f6eb1bdfc4941c4c024c49a35429ac7cd"}, + {file = "fonttools-4.43.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d21099b411e2006d3c3e1f9aaf339e12037dbf7bf9337faf0e93ec915991f43b"}, + {file = "fonttools-4.43.1-cp311-cp311-win32.whl", hash = "sha256:b84a1c00f832feb9d0585ca8432fba104c819e42ff685fcce83537e2e7e91204"}, + {file = "fonttools-4.43.1-cp311-cp311-win_amd64.whl", hash = "sha256:9a2f0aa6ca7c9bc1058a9d0b35483d4216e0c1bbe3962bc62ce112749954c7b8"}, + {file = "fonttools-4.43.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4d9740e3783c748521e77d3c397dc0662062c88fd93600a3c2087d3d627cd5e5"}, + {file = "fonttools-4.43.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:884ef38a5a2fd47b0c1291647b15f4e88b9de5338ffa24ee52c77d52b4dfd09c"}, + {file = "fonttools-4.43.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9648518ef687ba818db3fcc5d9aae27a369253ac09a81ed25c3867e8657a0680"}, + {file = "fonttools-4.43.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95e974d70238fc2be5f444fa91f6347191d0e914d5d8ae002c9aa189572cc215"}, + {file = "fonttools-4.43.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:34f713dad41aa21c637b4e04fe507c36b986a40f7179dcc86402237e2d39dcd3"}, + {file = "fonttools-4.43.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:360201d46165fc0753229afe785900bc9596ee6974833124f4e5e9f98d0f592b"}, + {file = "fonttools-4.43.1-cp312-cp312-win32.whl", hash = "sha256:bb6d2f8ef81ea076877d76acfb6f9534a9c5f31dc94ba70ad001267ac3a8e56f"}, + {file = "fonttools-4.43.1-cp312-cp312-win_amd64.whl", hash = "sha256:25d3da8a01442cbc1106490eddb6d31d7dffb38c1edbfabbcc8db371b3386d72"}, + {file = "fonttools-4.43.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8da417431bfc9885a505e86ba706f03f598c85f5a9c54f67d63e84b9948ce590"}, + {file = "fonttools-4.43.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:51669b60ee2a4ad6c7fc17539a43ffffc8ef69fd5dbed186a38a79c0ac1f5db7"}, + {file = "fonttools-4.43.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748015d6f28f704e7d95cd3c808b483c5fb87fd3eefe172a9da54746ad56bfb6"}, + {file = "fonttools-4.43.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a58eb5e736d7cf198eee94844b81c9573102ae5989ebcaa1d1a37acd04b33d"}, + {file = "fonttools-4.43.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6bb5ea9076e0e39defa2c325fc086593ae582088e91c0746bee7a5a197be3da0"}, + {file = "fonttools-4.43.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5f37e31291bf99a63328668bb83b0669f2688f329c4c0d80643acee6e63cd933"}, + {file = "fonttools-4.43.1-cp38-cp38-win32.whl", hash = "sha256:9c60ecfa62839f7184f741d0509b5c039d391c3aff71dc5bc57b87cc305cff3b"}, + {file = "fonttools-4.43.1-cp38-cp38-win_amd64.whl", hash = "sha256:fe9b1ec799b6086460a7480e0f55c447b1aca0a4eecc53e444f639e967348896"}, + {file = "fonttools-4.43.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13a9a185259ed144def3682f74fdcf6596f2294e56fe62dfd2be736674500dba"}, + {file = "fonttools-4.43.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2adca1b46d69dce4a37eecc096fe01a65d81a2f5c13b25ad54d5430ae430b13"}, + {file = "fonttools-4.43.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18eefac1b247049a3a44bcd6e8c8fd8b97f3cad6f728173b5d81dced12d6c477"}, + {file = "fonttools-4.43.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2062542a7565091cea4cc14dd99feff473268b5b8afdee564f7067dd9fff5860"}, + {file = "fonttools-4.43.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18a2477c62a728f4d6e88c45ee9ee0229405e7267d7d79ce1f5ce0f3e9f8ab86"}, + {file = "fonttools-4.43.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a7a06f8d95b7496e53af80d974d63516ffb263a468e614978f3899a6df52d4b3"}, + {file = "fonttools-4.43.1-cp39-cp39-win32.whl", hash = "sha256:10003ebd81fec0192c889e63a9c8c63f88c7d72ae0460b7ba0cd2a1db246e5ad"}, + {file = "fonttools-4.43.1-cp39-cp39-win_amd64.whl", hash = "sha256:e117a92b07407a061cde48158c03587ab97e74e7d73cb65e6aadb17af191162a"}, + {file = "fonttools-4.43.1-py3-none-any.whl", hash = "sha256:4f88cae635bfe4bbbdc29d479a297bb525a94889184bb69fa9560c2d4834ddb9"}, + {file = "fonttools-4.43.1.tar.gz", hash = "sha256:17dbc2eeafb38d5d0e865dcce16e313c58265a6d2d20081c435f84dc5a9d8212"}, ] [package.extras] @@ -1342,14 +1372,14 @@ sphinx-basic-ng = "*" [[package]] name = "gitdb" -version = "4.0.10" +version = "4.0.11" 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"}, + {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, + {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, ] [package.dependencies] @@ -1357,98 +1387,108 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.32" +version = "3.1.40" 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.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, + {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" +[package.extras] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] + [[package]] name = "glcontext" -version = "2.4.0" +version = "2.5.0" description = "Portable OpenGL Context" category = "main" optional = false python-versions = "*" files = [ - {file = "glcontext-2.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d8a5901447e5a99b085b3e8c54dcf9012c88d9d75c7ea657ec4294b8b4e4fb"}, - {file = "glcontext-2.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c90c53fb56ecebeecae2d113f95d4a699fcde7924132e0195569118f80349c5a"}, - {file = "glcontext-2.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95d065ad2fbfb395966559aceb4359250243e6fb07a3ca5becdddeba8e8f428d"}, - {file = "glcontext-2.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:33edb364c96a4081d93e428c55d337995f42cd58e7d2b44ea593b662bdb8b50e"}, - {file = "glcontext-2.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5b52eff82377469514818c90c4a16a04a39d01d3adfcd7dcadd558ed02dc7cef"}, - {file = "glcontext-2.4.0-cp310-cp310-win32.whl", hash = "sha256:5f3c6744c77ade16e715b5a8636384cf11ac3ee365493bdb38091d9c1f87eda8"}, - {file = "glcontext-2.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:21b5ac40463a711bdb6ba59751693b4f5f765cc807adeface62ce292813460ac"}, - {file = "glcontext-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4313d59451db04ebbb26232beefb5a850fbb79bb9e72b3c4e7783da3c146517b"}, - {file = "glcontext-2.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2088f15d4c5d42f1eef77b45d9ff985d8e14d3989d5d9298e2433075f5f1f15a"}, - {file = "glcontext-2.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9450f7c7b5923c17a627e1d4e965f208e28ce7b547f5fd1f756f7701c23e3c88"}, - {file = "glcontext-2.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d52ea6dc8e064f7f4cc7423943885ddecec321a5dfcce66d71a0892834334430"}, - {file = "glcontext-2.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5060eea43ec7bc2d3cf03582d56abf10938a188947f86aa5b558d197baec2753"}, - {file = "glcontext-2.4.0-cp311-cp311-win32.whl", hash = "sha256:c8b9de7f50650443a5192d42c170fa561c0b241bb1b49664ae67a22fdcf6baa4"}, - {file = "glcontext-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:d60c684983a091408e06ee5826813926cd7e84069f1bd7760397edfe0e33aad5"}, - {file = "glcontext-2.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6bf0fa5f40769e79c74f50f71f6c82acf118081f153e3f84533e1969febaae04"}, - {file = "glcontext-2.4.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:642a004a0c940dd109e8d6942a4d795c1f3b3673edd2e6556320a542ea44fc5d"}, - {file = "glcontext-2.4.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1674950eb6118f32c6418f6319f4e06a997ce170b04f9dc465ffb99a7b6d93c3"}, - {file = "glcontext-2.4.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:b66bc3a66658c3b92b2282c2197dfce639a693df525aa10e3d6402731a1e985a"}, - {file = "glcontext-2.4.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5c2710dddac0844b88cd3c61c67aa70fcf35f738a6bd8f0e557474313ef2324f"}, - {file = "glcontext-2.4.0-cp36-cp36m-win32.whl", hash = "sha256:3e51fd5ea6241774cf0636039e641b70321e9ad9bc8c082d24a9be058817a310"}, - {file = "glcontext-2.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:0fc19a523736f4178c720060c3589db8c8072744985007e20859e086a6c981f6"}, - {file = "glcontext-2.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7c05a675644e3552f7aa8bc0d6a3bf189645c06610f5b13a1850f4bbdd82cd54"}, - {file = "glcontext-2.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:987c7db3350f3ecb06c328d2b4ca06008b0d950ca248ef9a76859442293177b3"}, - {file = "glcontext-2.4.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1359528fd707e6ef051240940a6d5d4944d277306a41a05183ee90fd1f36fc"}, - {file = "glcontext-2.4.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:27a3e1284b8209ecd7daef59767c0ecfa13dbf902c61998290aab63a8ca5213e"}, - {file = "glcontext-2.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:28d5622bb14e09e754af1155f97256a892b7d2f52902375d48c47864e0e70a5d"}, - {file = "glcontext-2.4.0-cp37-cp37m-win32.whl", hash = "sha256:5498f06564e14557a8bf3192455ad0622a47fa344cd556a0bb57b215df4ad847"}, - {file = "glcontext-2.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:935a6b161b2854f89f1800cea1d44862d59f6e965f396d67c0daf8fd9378e42d"}, - {file = "glcontext-2.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9519706f150a074b318dd6ed97c438d846f81f306e957002e261262ba81a77a"}, - {file = "glcontext-2.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b957b13b11c77bfd792575eb12d6c40549f78c502bff742c8c9a93344af77d80"}, - {file = "glcontext-2.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b1be984bc6a1d443b504cdff155743be94f545663e7229a9e972c7a38211542"}, - {file = "glcontext-2.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2786764c8482e2c79bf6b88249be84aacbd97950718987463b95bc9563e37356"}, - {file = "glcontext-2.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e1e51269b4d77f3591fc7b19c68dc4215f2cf1b922fb2c1960b8b4c71e6de5f6"}, - {file = "glcontext-2.4.0-cp38-cp38-win32.whl", hash = "sha256:580d40a3226daf70d3debef01f1ea068070bea8bbfa17e2fd2df017caec7fcb9"}, - {file = "glcontext-2.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:f2c25ccdd7272ca3b20033cfc38c0b7172279ff8f14801bb2797a367f0515b6c"}, - {file = "glcontext-2.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:634adf8cc697532af2335bf58f565a59b059db64de337f9012c8352be8c2b7cd"}, - {file = "glcontext-2.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d70c436ccfe603fb82913e21eedc4fcbd2792af386cc2698cc62b732e64fc624"}, - {file = "glcontext-2.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b26961c0a8de4e4fbca0becc85b163a0eee2716e2450db3fb6fce95252a508b"}, - {file = "glcontext-2.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0538bfaeb3865bb7dd8282571838cf9b5c5fb07b08fac80c0f5f612436d46f04"}, - {file = "glcontext-2.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:027bf468fa86118c58a70ca0e008a9e74372eee0e10456a96f7e7dc5224ebca5"}, - {file = "glcontext-2.4.0-cp39-cp39-win32.whl", hash = "sha256:1fb59784c2ba33a9a1e5d829bd5f7cd524451b4d89d9c18565d5a72951ba5259"}, - {file = "glcontext-2.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:b21e2ec7b5f470ac576f8284371547e1f73711b106c2c3292732aace88813135"}, - {file = "glcontext-2.4.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4f1de7a32278333f8edaed8f51180b929aaf975a453a8bcde4d553f9d2d5db81"}, - {file = "glcontext-2.4.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a98f62495d5a89d79ce182f9698ef84154f257917007d2ef35807c4dfb24834e"}, - {file = "glcontext-2.4.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d36b623331b4e9c09f78bd57ac372b77ce8078e751c31825ce5f687f19514e2"}, - {file = "glcontext-2.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:74ec128d03f6e715fc1554047958c4581b78653eeaf08aeac4f110fba1b00c64"}, - {file = "glcontext-2.4.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6dde4e7afbfa336d323f1b5a3d9164e0484a08ec969c2b69048de840c45a5051"}, - {file = "glcontext-2.4.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18bec7f9f0a9ad90bd3e25ab0e6b9db909dfaa10a0f3b5e5ef588d3c7f565fea"}, - {file = "glcontext-2.4.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71c54b085869b3d22f15138bd5cf4dfbbf4e7c431bb7e778788e6481bb6cc452"}, - {file = "glcontext-2.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:faa80ddadb513b6475a68dad288ec690b0a7dd7e37582ac49b724e234695d12e"}, - {file = "glcontext-2.4.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a76833aea7e50682d7266ca24886e9eb1dc76744ec64ec6187f5dfd200397d3e"}, - {file = "glcontext-2.4.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d91a3f80d013f9b4073881e8578e49a1de6dda881d093f7d07aed81374cd340b"}, - {file = "glcontext-2.4.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0916c3cc03228c2512be6e283032026c2730a78c5a90ce49a427e5ca18d9b961"}, - {file = "glcontext-2.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:193c5798da864db316195b80c26da194b69e1c746a72d2d5923036e746c1a470"}, - {file = "glcontext-2.4.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9c4ac06ebdb57ef1376af4f5a788cfddf828867c4c925a4a7ac26a011ce691be"}, - {file = "glcontext-2.4.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35842c53aa4975f51c1f1fa8e619867d4734dbf0f79c5cbeb78e42633a2ef09e"}, - {file = "glcontext-2.4.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec85163231e1aa410a1e05d7f5a8e0e7dcf9e3c0ad8e679888bfdb8384dbcca3"}, - {file = "glcontext-2.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1bb56f2d8ffacb5693c2762c59bb288896b179f2ab5dc905637f6d6f5aeb7b47"}, - {file = "glcontext-2.4.0.tar.gz", hash = "sha256:50d7aad961d4f0374a38592194c59f740192e4d00549df48ac81a40942a6beb9"}, + {file = "glcontext-2.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3e0f3fbbe483f3e671ae04698a2d38234cb9a5682d2edd49d5bce08a32d48ff1"}, + {file = "glcontext-2.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837ae9ed985dc8185b7f7ac62bc2727d58806f1eb125b3766f576a3957aa078b"}, + {file = "glcontext-2.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c056bfbc4af86337837fbea0899b1c439673b9e2bf9aaaf78862cb68ccaeb41"}, + {file = "glcontext-2.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:198d6f80a271668995f595492b7cde0e7f354e927398d85c20976a7eaf18742b"}, + {file = "glcontext-2.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f435118eabef929e5281bf609eeaae343a0d3f7e34c2a4b0f026451f63a8baab"}, + {file = "glcontext-2.5.0-cp310-cp310-win32.whl", hash = "sha256:9ac01ea37deb27cc53a15eb9a8ec30389cd5421c668842e0197360a502448e11"}, + {file = "glcontext-2.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:194b2657f46310cd86662d946d85162710b43e4abbef800c83a61f44b09352ad"}, + {file = "glcontext-2.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:798bc74604e306386f858be11aa1fe47c88296ac6fb9b5718a1c5a4cfb24416c"}, + {file = "glcontext-2.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36383ef0f21a179cfd7d6907eb04d7736b724a231a7199edec194528c986b0c"}, + {file = "glcontext-2.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25da4a8a8707f88e66d1597c5f03be31b354b6d6186907ad06b4735f981aa25e"}, + {file = "glcontext-2.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6abae09cadd947c9b3e39c424517eb76e4d6caeca9415c44b290f3425ffb51da"}, + {file = "glcontext-2.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:be62e4ce64c7f72730fccbb09efb37b3aad4e54b6f547b18161233c2a9bf9fc2"}, + {file = "glcontext-2.5.0-cp311-cp311-win32.whl", hash = "sha256:a4441744dadf811f923ab2aff52ba2dc175b6f99bcc208e362399461c96c085f"}, + {file = "glcontext-2.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:7d50c62fae0af1b19daa95571d52a5c56f3f1537483f105b4d092be5eb160c9d"}, + {file = "glcontext-2.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc2a13791007d18b71fc9eccd3423be0a3d5c16b8d1ac4410767665a9824cc21"}, + {file = "glcontext-2.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cbe2684a689cc77e659e90254dcd897af773ddda43308196c7db889d8558f9d1"}, + {file = "glcontext-2.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd0f159c01dfaab990fedb9672f4be040ae7fe066afb2ce7413c63afa9475f38"}, + {file = "glcontext-2.5.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7669583276cc2b4e38b1f62f5d10afdde518ffd5ff6ccfabf22157e081a0abe6"}, + {file = "glcontext-2.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:74530549706fabbaecab437102c9d490adba8e27e4ca01bb9ce0050b0d558ff9"}, + {file = "glcontext-2.5.0-cp312-cp312-win32.whl", hash = "sha256:762ee1231f1c5896c527ce29c76921e4868a9f21b0f305b048516a479fe500bf"}, + {file = "glcontext-2.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:942486de098c035dad9165e4cb6ad6342edb8c98b11ee5cdfe97088c7c6840aa"}, + {file = "glcontext-2.5.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9519f31c464cf1ab1232411e8700829d5bad1fb79470fde99d0aa25296cd4ec7"}, + {file = "glcontext-2.5.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb33a0e3d2d7a1c3f51652489ed4d1ad16fa71ca1452bf4f983f14446d062592"}, + {file = "glcontext-2.5.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab8dd3d2ea53ce6735dd9915d69572b7dd001f7fe2d35d362182e69b923193e4"}, + {file = "glcontext-2.5.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:ec64bc8a6cdfb51c91c601b0d82744bfa85637fe6259f3587f73d67b5d124937"}, + {file = "glcontext-2.5.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9c890c0fee8ff5c5ec356b0382093e8519a8bdf99ba5ced9f2ac641a37d4ec"}, + {file = "glcontext-2.5.0-cp36-cp36m-win32.whl", hash = "sha256:41a3fa100962ac8733835dd15163e102d165bf65d9247b98e5bcbaa90e94666d"}, + {file = "glcontext-2.5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:73828d76e764f9d22704dd0304f27ec6af18cb075de0df201a23f1456d2b502e"}, + {file = "glcontext-2.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f10a15975c1798bbe4f2d783e1b9c0e32f0dbdc7829a73dce21efb3ee1e24867"}, + {file = "glcontext-2.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23700a43c3ced889d8ac18cb7902a76096634761f87d8139ca956bcadc3feabd"}, + {file = "glcontext-2.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95675cd7c16249fde2ea9690c8b2bd39a551b67e9929eeecfdbcbc82d9c6fc4"}, + {file = "glcontext-2.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:efc8a1ec7f6cdc205515e2e4e6ba0a02c2f7207a1340cce80960d63002785405"}, + {file = "glcontext-2.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:464f2296474ec07318466f2381748c8259c8a587c5fcd6485ad53bbe1702363b"}, + {file = "glcontext-2.5.0-cp37-cp37m-win32.whl", hash = "sha256:352cf17ade6ea429bd548384ea715024124bb83fdbf3ea06f69f53b6a9e3111f"}, + {file = "glcontext-2.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9cacc6b068f74f789729dc0512611b6889a95cf6f2ff4c90aea1f741010e0d7a"}, + {file = "glcontext-2.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1204fe22c96d9b36299fac20de7d9319e018e80770964e3d71375853d1b5373d"}, + {file = "glcontext-2.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54e9f848ad21a471e970a0e1eedd3b85025821a0d3c4d63d09d2b97f1a7280b8"}, + {file = "glcontext-2.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a8e3022da94316a4bb44e064d85e4b05c13f9eef6e68f6395644122a362ec0"}, + {file = "glcontext-2.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:73c289fdfce7e8b736034f75e206be8bcc6144d132e910c816e33d2419b984b7"}, + {file = "glcontext-2.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:47dc72cb63f35523f0fa6a27fcb819c3aa19e96c01a2ee8594132ffa834fab18"}, + {file = "glcontext-2.5.0-cp38-cp38-win32.whl", hash = "sha256:2f71d800e8d720fa52aeeebf22d066c17528d756234e586d48b8c82b2fd65372"}, + {file = "glcontext-2.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:3ba303e28a54491cd49caa6f0626b3f1992160ca1d82c2347ce30c50a16ee9b6"}, + {file = "glcontext-2.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bf968a827c04d5210afc2a84d825719fa3025fd9def4aea4820e75a607d09ccf"}, + {file = "glcontext-2.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:586778f6d476f34b8ddbb99d77b65cb7126cd3f501a2cb1e6e12f0bc997ca9b8"}, + {file = "glcontext-2.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675091975c2bf8b59e9c41d1daa6684006162c3cf3d9e2a1acda31b35181d9d2"}, + {file = "glcontext-2.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:cf928dfbed4fceb3a816452828e8745e46b8348869c0fdda312f6c73f0796906"}, + {file = "glcontext-2.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1aee2105c66d1a5470d2c2de7d80977c67ee2b2cf4db6fa2b3dcbd586b888b51"}, + {file = "glcontext-2.5.0-cp39-cp39-win32.whl", hash = "sha256:b1200d841b7a1ef1051fafe6aad6a472c784bc4fb906375160b0efa7d7acae71"}, + {file = "glcontext-2.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:7a7962f89350966966a4a5628fd4861a81dc4f76014571567a54db4c1573e04d"}, + {file = "glcontext-2.5.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9eee5426fad207fb1c572ee7e4b8341ee8f6529189f06cbd32b132ee4de31a8e"}, + {file = "glcontext-2.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:433e14a9c3d368c51940a480d4f548b671ad339d5efa0604bd0d5236fae4e564"}, + {file = "glcontext-2.5.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2342642732609c7cb3d681771e096fe769df58e49bdb3348bfc9f5732103c444"}, + {file = "glcontext-2.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:16057bf3736f38005a7f700188a50de597cd86650d6718a115bd835d69ba554b"}, + {file = "glcontext-2.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8ba64f9c14009132625b7b1f1b8545298c6ddd1d3abc78618b0f9553c219d053"}, + {file = "glcontext-2.5.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811276496f46f3f9b204e43a9d35c6213f1f0a8e58d8da203d477e21e8367fc0"}, + {file = "glcontext-2.5.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe0be5cf5a9598379e994d7d96d84ce506e6a7680a098c1f1112de7aaa036ebd"}, + {file = "glcontext-2.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1914d44374d7ee94df779681218639324ab79b3b8e27e8fb6154a8db55e3928e"}, + {file = "glcontext-2.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:916fa56a544f57ff3d53cc60d3d1f0da66c67e6cf5092e3d7ef8bbaedd47a266"}, + {file = "glcontext-2.5.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1abdc499c59e4a1dd59e321151171ecb583f3fac07af428c47a8b8e3ce5ff5bf"}, + {file = "glcontext-2.5.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c73882865f3daf8a02fae1486c933146dc2f1bb8de3be26907b145523df4afc1"}, + {file = "glcontext-2.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:136ab0d4f966adc7a2f397e8f17debf3da18afb4b5b8684db59ea9c9452fe2f6"}, + {file = "glcontext-2.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:95e6805475552254d9e1a65c2433c150e364da0081dcc6fa79d90bf74665384b"}, + {file = "glcontext-2.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:60343a07fd30c024c6889687d10524c4b9f321c3991666e6c23eb0e695f60ae1"}, + {file = "glcontext-2.5.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e7db3961200f3cf607ac68eb0df0640e5d538f1c029c6d9433722ee04f37960"}, + {file = "glcontext-2.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7017ac46784adce071cdcda5e3ce07523bbc10186c0c9cc3120aba91f0633817"}, + {file = "glcontext-2.5.0.tar.gz", hash = "sha256:0f70d4be0cdd2b532a16da76c8f786b6367754a4086aaadffdbf3e37badbad02"}, ] [[package]] name = "identify" -version = "2.5.26" +version = "2.5.30" 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.30-py2.py3-none-any.whl", hash = "sha256:afe67f26ae29bab007ec21b03d4114f41316ab9dd15aa8736a167481e108da54"}, + {file = "identify-2.5.30.tar.gz", hash = "sha256:f302a4256a15c849b91cfcdcec052a8ce914634b2f77ae87dad29cd749f2d88d"}, ] [package.extras] @@ -1500,22 +1540,22 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.0.0" +version = "6.1.0" description = "Read resources from Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.0-py3-none-any.whl", hash = "sha256:d952faee11004c045f785bb5636e8f885bed30dc3c940d5d42798a2a4541c185"}, - {file = "importlib_resources-6.0.0.tar.gz", hash = "sha256:4cf94875a8368bd89531a756df9a9ebe1f150e0f885030b461237bc7f2d905f2"}, + {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" @@ -1531,14 +1571,14 @@ files = [ [[package]] name = "ipykernel" -version = "6.25.0" +version = "6.25.2" description = "IPython Kernel for Jupyter" category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "ipykernel-6.25.0-py3-none-any.whl", hash = "sha256:f0042e867ac3f6bca1679e6a88cbd6a58ed93a44f9d0866aecde6efe8de76659"}, - {file = "ipykernel-6.25.0.tar.gz", hash = "sha256:e342ce84712861be4b248c4a73472be4702c1b0dd77448bfd6bcfb3af9d5ddf9"}, + {file = "ipykernel-6.25.2-py3-none-any.whl", hash = "sha256:2e2ee359baba19f10251b99415bb39de1e97d04e1fab385646f24f0596510b77"}, + {file = "ipykernel-6.25.2.tar.gz", hash = "sha256:f468ddd1f17acb48c8ce67fcfa49ba6d46d4f9ac0438c1f441be7c3d1372230b"}, ] [package.dependencies] @@ -1565,14 +1605,14 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" [[package]] name = "ipython" -version = "8.12.2" +version = "8.12.3" description = "IPython: Productive Interactive Computing" category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "ipython-8.12.2-py3-none-any.whl", hash = "sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc"}, - {file = "ipython-8.12.2.tar.gz", hash = "sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea"}, + {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"}, + {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"}, ] [package.dependencies] @@ -1665,14 +1705,14 @@ numpy = "*" [[package]] name = "jedi" -version = "0.19.0" +version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." category = "main" optional = true python-versions = ">=3.6" files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] [package.dependencies] @@ -1681,7 +1721,7 @@ parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" @@ -1730,14 +1770,14 @@ files = [ [[package]] name = "jsonschema" -version = "4.18.4" +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.18.4-py3-none-any.whl", hash = "sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe"}, - {file = "jsonschema-4.18.4.tar.gz", hash = "sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d"}, + {file = "jsonschema-4.19.1-py3-none-any.whl", hash = "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e"}, + {file = "jsonschema-4.19.1.tar.gz", hash = "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf"}, ] [package.dependencies] @@ -1803,14 +1843,14 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com [[package]] name = "jupyter-core" -version = "5.3.1" +version = "5.4.0" 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.3.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"}, - {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"}, + {file = "jupyter_core-5.4.0-py3-none-any.whl", hash = "sha256:66e252f675ac04dcf2feb6ed4afb3cd7f68cf92f483607522dc251f32d471571"}, + {file = "jupyter_core-5.4.0.tar.gz", hash = "sha256:e4b98344bb94ee2e3e6c4519a97d001656009f9cb2b7f2baf15b3c205770011d"}, ] [package.dependencies] @@ -1824,14 +1864,14 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.7.0" +version = "0.8.0" description = "Jupyter Event System library" category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.7.0-py3-none-any.whl", hash = "sha256:4753da434c13a37c3f3c89b500afa0c0a6241633441421f6adafe2fb2e2b924e"}, - {file = "jupyter_events-0.7.0.tar.gz", hash = "sha256:7be27f54b8388c03eefea123a4f79247c5b9381c49fb1cd48615ee191eb12615"}, + {file = "jupyter_events-0.8.0-py3-none-any.whl", hash = "sha256:81f07375c7673ff298bfb9302b4a981864ec64edaed75ca0fe6f850b9b045525"}, + {file = "jupyter_events-0.8.0.tar.gz", hash = "sha256:fda08f0defce5e16930542ce60634ba48e010830d50073c3dfd235759cee77bf"}, ] [package.dependencies] @@ -1850,14 +1890,14 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p [[package]] name = "jupyter-server" -version = "2.7.0" +version = "2.8.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.7.0-py3-none-any.whl", hash = "sha256:6a77912aff643e53fa14bdb2634884b52b784a4be77ce8e93f7283faed0f0849"}, - {file = "jupyter_server-2.7.0.tar.gz", hash = "sha256:36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f"}, + {file = "jupyter_server-2.8.0-py3-none-any.whl", hash = "sha256:c57270faa6530393ae69783a2d2f1874c718b9f109080581ea076b05713249fa"}, + {file = "jupyter_server-2.8.0.tar.gz", hash = "sha256:b11e2ba80667c75f55630faf8ac3d5809f8734f9006d65cce117c46a0a516ab8"}, ] [package.dependencies] @@ -1875,7 +1915,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" @@ -1967,14 +2007,14 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we [[package]] name = "jupyterlab" -version = "3.6.5" +version = "3.6.6" description = "JupyterLab computational environment" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, - {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, + {file = "jupyterlab-3.6.6-py3-none-any.whl", hash = "sha256:2c1309e77135670233f1146aef88e2101002ff0dc5b9147c2b987807efbbca07"}, + {file = "jupyterlab-3.6.6.tar.gz", hash = "sha256:0a47d7adb28bd5659d727783f4113537e54f8c66e0d6322d1d8f9edb081dc926"}, ] [package.dependencies] @@ -2008,14 +2048,14 @@ 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] @@ -2023,92 +2063,128 @@ 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]] @@ -2159,28 +2235,28 @@ files = [ [[package]] name = "manimpango" -version = "0.4.3" +version = "0.4.4" description = "Bindings for Pango for using with Manim." category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" 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"}, + {file = "ManimPango-0.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4eadd960fb01ca9a18b00e54e4a9f5f8631c939a607cdf0765502e0f3cb43de7"}, + {file = "ManimPango-0.4.4-cp310-cp310-win32.whl", hash = "sha256:a31aa72a1451b1ef762e02845fa08cef10bba89708c449648db1f83e9f1b5715"}, + {file = "ManimPango-0.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:7192ec39ff8d59546b9e0dc21a00042ab507944291a662c5526a4bf1b3639705"}, + {file = "ManimPango-0.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:19ab9c2be4b44f99fc3bb87ce7e8685940a9c8812f2250e0f84acccee13cd1f8"}, + {file = "ManimPango-0.4.4-cp311-cp311-win32.whl", hash = "sha256:077c22deccc8b07cf490e66dbe5511a8748156d002f9135df9e4a2ebae38140d"}, + {file = "ManimPango-0.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:0ac7e5da4b21267d7e07273ca79bb15260e9494e80d0b50414dfbe78b3e274b7"}, + {file = "ManimPango-0.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b76a337b1d7226a1b0b418c556e4cfcdb8ba38e0ddc13e8f4c5b8c7d27422b3a"}, + {file = "ManimPango-0.4.4-cp312-cp312-win32.whl", hash = "sha256:f17e566e97b3eba8158caaefcc8fb3188376acd8a8e1bc7b7201f26019e0860b"}, + {file = "ManimPango-0.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:9e8c907876f3a5bb99d28d49aeb93b29a80e72f66300f7f0f0cf82ccba53473b"}, + {file = "ManimPango-0.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5e0a9b13631acf01c0c61e6f5c7042ec9c43f5fbdae28791bf34755e6bba4659"}, + {file = "ManimPango-0.4.4-cp38-cp38-win32.whl", hash = "sha256:443edb608b8ce0171763044e4ee50ca44b2aebed8f32d5c1c3f90c7d2f809481"}, + {file = "ManimPango-0.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:4a7787c5135381dd1ad8a0a5c671e8c0c88bcd3f93967b775e3389de75e70198"}, + {file = "ManimPango-0.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b130d577d1aa4865730568d84fcb64100b704e296b68deccbc2963dd421bfa1"}, + {file = "ManimPango-0.4.4-cp39-cp39-win32.whl", hash = "sha256:ca6dda74fa306a2f96dac943ca23aee4be0ba2c15d99a4789c088913eb61d78e"}, + {file = "ManimPango-0.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:d3efaeb07cf212fba0d39ccd8314ea3f5e7e8384d7c54b11bc0f683dabb64959"}, + {file = "ManimPango-0.4.4.tar.gz", hash = "sha256:d4dfb55e8c8a62d6b56b6bacea314369f25dda59e2ed4f4c0e6867512d93828c"}, ] [[package]] @@ -2345,53 +2421,59 @@ 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] @@ -2400,11 +2482,12 @@ 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" @@ -2467,14 +2550,14 @@ files = [ [[package]] name = "mistune" -version = "3.0.1" +version = "3.0.2" description = "A sane and fast Markdown parser with useful plugins and renderers" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, - {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, ] [[package]] @@ -2720,14 +2803,14 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.7.3" +version = "7.9.2" 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.9.2-py3-none-any.whl", hash = "sha256:39fe4b8bdd1b0104fdd86fc8a43a9077ba64c720bda4c6132690d917a0a154ee"}, + {file = "nbconvert-7.9.2.tar.gz", hash = "sha256:e56cc7588acc4f93e2bb5a34ec69028e4941797b2bfaf6462f18a41d1cc258c9"}, ] [package.dependencies] @@ -2754,7 +2837,7 @@ docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sp qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pytest", "pytest-dependency"] webpdf = ["playwright"] [[package]] @@ -2781,14 +2864,14 @@ 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]] @@ -2827,14 +2910,14 @@ setuptools = "*" [[package]] name = "notebook" -version = "6.5.5" +version = "6.5.6" 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.6-py3-none-any.whl", hash = "sha256:c1e2eb2e3b6079a0552a04974883a48d04c3c05792170d64a4b23d707d453181"}, + {file = "notebook-6.5.6.tar.gz", hash = "sha256:b4625a4b7a597839dd3156b140d5ba2c7123761f98245a3290f67a8b8ee048d9"}, ] [package.dependencies] @@ -2918,26 +3001,26 @@ files = [ [[package]] name = "overrides" -version = "7.3.1" +version = "7.4.0" description = "A decorator to automatically detect mismatch when overriding a method." category = "main" optional = true python-versions = ">=3.6" files = [ - {file = "overrides-7.3.1-py3-none-any.whl", hash = "sha256:6187d8710a935d09b0bcef8238301d6ee2569d2ac1ae0ec39a8c7924e27f58ca"}, - {file = "overrides-7.3.1.tar.gz", hash = "sha256:8b97c6c1e1681b78cbc9424b138d880f0803c2254c5ebaabdde57bb6c62093f2"}, + {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"}, + {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"}, ] [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -3101,14 +3184,14 @@ files = [ [[package]] name = "platformdirs" -version = "3.10.0" +version = "3.11.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 = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, ] [package.extras] @@ -3117,14 +3200,14 @@ 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] @@ -3182,26 +3265,28 @@ wcwidth = "*" [[package]] name = "psutil" -version = "5.9.5" +version = "5.9.6" 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.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, - {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, - {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, - {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, - {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, - {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, - {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, - {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, + {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"}, + {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"}, + {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"}, + {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"}, + {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"}, + {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"}, + {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"}, + {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"}, + {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"}, + {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"}, ] [package.extras] @@ -3274,23 +3359,27 @@ files = [ [[package]] name = "pycairo" -version = "1.24.0" +version = "1.25.1" description = "Python interface for cairo" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "pycairo-1.24.0-cp310-cp310-win32.whl", hash = "sha256:031f5ef2c80792673f2c54ee285f2a31779a44d7521a27a7f82e4a5ecfafc26e"}, - {file = "pycairo-1.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:afccac552386ab628e8ae658185fa363e8d15a5afe96d1de43f97027dd78bdd6"}, - {file = "pycairo-1.24.0-cp311-cp311-win32.whl", hash = "sha256:4631ed794a3376ec314ce47826c3e51940b54695f4ef7d5b3245b203037ae760"}, - {file = "pycairo-1.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed0622a0ccffb873ffe7fee1699d60779f1260fba143390e5366d55f1d1739f5"}, - {file = "pycairo-1.24.0-cp312-cp312-win32.whl", hash = "sha256:220742f187d3940d695c1af1a0c1646e26dc2199d65b7bafaa527e15c3520fd3"}, - {file = "pycairo-1.24.0-cp312-cp312-win_amd64.whl", hash = "sha256:3199d6a0538d6482c71efb816bd330515e98bb06f182e23572c77d92be98f536"}, - {file = "pycairo-1.24.0-cp38-cp38-win32.whl", hash = "sha256:c7c79e748ec849811241d29553184c3ad93c857558dbe9954a49327680b8d356"}, - {file = "pycairo-1.24.0-cp38-cp38-win_amd64.whl", hash = "sha256:6ad5c3425408ebb0dfaad2cca4a80e7524d7a309305acdb2569638b5cc988fe7"}, - {file = "pycairo-1.24.0-cp39-cp39-win32.whl", hash = "sha256:c5f6efdd86fe13d36a6b004c64d8e97cde9854d599cf6cca962afb1966fe533d"}, - {file = "pycairo-1.24.0-cp39-cp39-win_amd64.whl", hash = "sha256:26fe2c32ba24caae524d855f26f3ee1a0c1ea3291da2a19604264ed29f64d834"}, - {file = "pycairo-1.24.0.tar.gz", hash = "sha256:1444d52f1bb4cc79a4a0c0fe2ccec4bd78ff885ab01ebe1c0f637d8392bcafb6"}, + {file = "pycairo-1.25.1-cp310-cp310-win32.whl", hash = "sha256:cacb5c2abbfdfc79c728ab261ff791511e4957b606c660f9b380975b678b728f"}, + {file = "pycairo-1.25.1-cp310-cp310-win_amd64.whl", hash = "sha256:109ebbeb5bbc510b726fc31251071264dec241e5084d0668f846d7e17e5af8e0"}, + {file = "pycairo-1.25.1-cp310-cp310-win_arm64.whl", hash = "sha256:b19269a8bf9ab5e3c617f2699bed00977fd02ff304339a233654456c0236f7c6"}, + {file = "pycairo-1.25.1-cp311-cp311-win32.whl", hash = "sha256:b10e58a3ce41e487aae15050b630742e880d4135cee7a69cee2c0ea2a0b4bd0a"}, + {file = "pycairo-1.25.1-cp311-cp311-win_amd64.whl", hash = "sha256:fcf5511b05a652a0ef87f626bf26bfc1b796a67f0d1bd40781c62986fb41c356"}, + {file = "pycairo-1.25.1-cp311-cp311-win_arm64.whl", hash = "sha256:4133ba3ef6d875aa1b16643dc0801846f463b8e78750f5308c41902dfeac5b9a"}, + {file = "pycairo-1.25.1-cp312-cp312-win32.whl", hash = "sha256:56fee2837a07ecd914f4fbf78ff59445f78becd658fe36125101925dd489eb94"}, + {file = "pycairo-1.25.1-cp312-cp312-win_amd64.whl", hash = "sha256:fb31eec2c41ec74e23dc0fc9feb4007b4c37f78ec76220ed92530b342e09821a"}, + {file = "pycairo-1.25.1-cp312-cp312-win_arm64.whl", hash = "sha256:27011d822952d7817130fc17f490de94328590bc8d45bdbca9ec4a47039fca22"}, + {file = "pycairo-1.25.1-cp38-cp38-win32.whl", hash = "sha256:9a7c5ed92fe87f60e9796777d5255f2df2deeb8ab1e3c296e67a1d8c9790808c"}, + {file = "pycairo-1.25.1-cp38-cp38-win_amd64.whl", hash = "sha256:48603ad31616140ad6fa097f13086d0ce8f29ead35ad6a215962f3b0496a5a70"}, + {file = "pycairo-1.25.1-cp39-cp39-win32.whl", hash = "sha256:97666c084e9eb1c08c7fd6d306d153767acdf03c0d80349ec55863cecd4138e0"}, + {file = "pycairo-1.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:ac5437d140eccd97af12a618cc1ace0d9a85f1269f29e963751949f132828b21"}, + {file = "pycairo-1.25.1-cp39-cp39-win_arm64.whl", hash = "sha256:bda5d10adbf1f5eba6b524b5a70ccf7f659680b77e691ff94b312f25a6fcc91f"}, + {file = "pycairo-1.25.1.tar.gz", hash = "sha256:7e2be4fbc3b4536f16db7a11982cbf713e75069a4d73d44fe5a49b68423f5c0c"}, ] [[package]] @@ -3361,14 +3450,14 @@ files = [ [[package]] name = "pygithub" -version = "1.59.0" +version = "1.59.1" description = "Use the full Github API v3" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "PyGithub-1.59.0-py3-none-any.whl", hash = "sha256:126bdbae72087d8d038b113aab6b059b4553cb59348e3024bb1a1cae406ace9e"}, - {file = "PyGithub-1.59.0.tar.gz", hash = "sha256:6e05ff49bac3caa7d1d6177a10c6e55a3e20c85b92424cc198571fd0cf786690"}, + {file = "PyGithub-1.59.1-py3-none-any.whl", hash = "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9"}, + {file = "PyGithub-1.59.1.tar.gz", hash = "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217"}, ] [package.dependencies] @@ -3391,14 +3480,14 @@ files = [ [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -3427,18 +3516,18 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "2.17.5" +version = "2.17.7" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.17.5-py3-none-any.whl", hash = "sha256:73995fb8216d3bed149c8d51bba25b2c52a8251a2c8ac846ec668ce38fab5413"}, - {file = "pylint-2.17.5.tar.gz", hash = "sha256:f7b601cbc06fef7e62a754e2b41294c2aa31f1cb659624b9a85bcba29eaf8252"}, + {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, + {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, ] [package.dependencies] -astroid = ">=2.15.6,<=2.17.0-dev0" +astroid = ">=2.15.8,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -3484,53 +3573,51 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] [[package]] name = "pyobjc-core" -version = "9.2" +version = "10.0" description = "Python<->ObjC Interoperability Module" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pyobjc-core-9.2.tar.gz", hash = "sha256:d734b9291fec91ff4e3ae38b9c6839debf02b79c07314476e87da8e90b2c68c3"}, - {file = "pyobjc_core-9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fa674a39949f5cde8e5c7bbcd24496446bfc67592b028aedbec7f81dc5fc4daa"}, - {file = "pyobjc_core-9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bbc8de304ee322a1ee530b4d2daca135a49b4a49aa3cedc6b2c26c43885f4842"}, - {file = "pyobjc_core-9.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0fa950f092673883b8bd28bc18397415cabb457bf410920762109b411789ade9"}, - {file = "pyobjc_core-9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:586e4cae966282eaa61b21cae66ccdcee9d69c036979def26eebdc08ddebe20f"}, - {file = "pyobjc_core-9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41189c2c680931c0395a55691763c481fc681f454f21bb4f1644f98c24a45954"}, - {file = "pyobjc_core-9.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:2d23ee539f2ba5e9f5653d75a13f575c7e36586fc0086792739e69e4c2617eda"}, - {file = "pyobjc_core-9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b9809cf96678797acb72a758f34932fe8e2602d5ab7abec15c5ac68ddb481720"}, + {file = "pyobjc-core-10.0.tar.gz", hash = "sha256:3dd0a7b3acd7e0b8ffd3f5331b29a3aaebe79a03323e61efeece38627a6020b3"}, + {file = "pyobjc_core-10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:61ea5112a672d21b5b0ed945778707c655b17c400672aef144705674c4b95499"}, + {file = "pyobjc_core-10.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:99b72cda4593e0c66037b25a178f2bcc6efffb6d5d9dcd477ecca859a1f9ae8e"}, + {file = "pyobjc_core-10.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:2843ca32e86a01ccee67d7ad82a325ddd72d754929d1f2c0d96bc8741dc9af09"}, + {file = "pyobjc_core-10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a886b9d2a93210cab4ae72601ab005ca6f627fa2f0cc62c43c03ef1405067a11"}, + {file = "pyobjc_core-10.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:166666b5c380a49e8aa1ad1dda978c581e29a00703d82203216f3c65a3f397a4"}, + {file = "pyobjc_core-10.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:198a0360f64e4c0148eed07b42d1de0545f56c498c356d1d5524422bb3352907"}, ] [[package]] name = "pyobjc-framework-cocoa" -version = "9.2" +version = "10.0" description = "Wrappers for the Cocoa frameworks on macOS" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pyobjc-framework-Cocoa-9.2.tar.gz", hash = "sha256:efd78080872d8c8de6c2b97e0e4eac99d6203a5d1637aa135d071d464eb2db53"}, - {file = "pyobjc_framework_Cocoa-9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9e02d8a7cc4eb7685377c50ba4f17345701acf4c05b1e7480d421bff9e2f62a4"}, - {file = "pyobjc_framework_Cocoa-9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3b1e6287b3149e4c6679cdbccd8e9ef6557a4e492a892e80a77df143f40026d2"}, - {file = "pyobjc_framework_Cocoa-9.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:312977ce2e3989073c6b324c69ba24283de206fe7acd6dbbbaf3e29238a22537"}, - {file = "pyobjc_framework_Cocoa-9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aae7841cf40c26dd915f4dd828f91c6616e6b7998630b72e704750c09e00f334"}, - {file = "pyobjc_framework_Cocoa-9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:739a421e14382a46cbeb9a883f192dceff368ad28ec34d895c48c0ad34cf2c1d"}, - {file = "pyobjc_framework_Cocoa-9.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:32d9ac1033fac1b821ddee8c68f972a7074ad8c50bec0bea9a719034c1c2fb94"}, - {file = "pyobjc_framework_Cocoa-9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b236bb965e41aeb2e215d4e98a5a230d4b63252c6d26e00924ea2e69540a59d6"}, + {file = "pyobjc-framework-Cocoa-10.0.tar.gz", hash = "sha256:723421eff4f59e4ca9a9bb8ec6dafbc0f778141236fa85a49fdd86732d58a74c"}, + {file = "pyobjc_framework_Cocoa-10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:80c22a8fc7f085746d9cd222adeca8fe6790e3e6ad7eed5fc70b32aa87c10adb"}, + {file = "pyobjc_framework_Cocoa-10.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0187cba228976a45f41116c74aab079b64bacb3ffc3c886a4bd8e472bf9be581"}, + {file = "pyobjc_framework_Cocoa-10.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a81dabdc40268591e3196087388e680c6570fed1b521df9b04733cb3ece0414e"}, + {file = "pyobjc_framework_Cocoa-10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0a23db9ab99e338e1d8a268d873cc15408f78cec9946308393ca2241820c18b8"}, + {file = "pyobjc_framework_Cocoa-10.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:a3c66fe56a5156a818fbf056c589f8140a5fdb1dcb1f1075cb34d3755474d900"}, + {file = "pyobjc_framework_Cocoa-10.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bf9020e85ead569021b15272dcd90207aab6c754093f520b11d4210a2efbdd06"}, ] [package.dependencies] -pyobjc-core = ">=9.2" +pyobjc-core = ">=10.0" [[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] @@ -3554,14 +3641,14 @@ 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] @@ -3661,14 +3748,14 @@ 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]] @@ -3697,17 +3784,18 @@ files = [ [[package]] name = "pywinpty" -version = "2.0.11" +version = "2.0.12" description = "Pseudo terminal support for Windows from Python." category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "pywinpty-2.0.11-cp310-none-win_amd64.whl", hash = "sha256:452f10ac9ff8ab9151aa8cea9e491a9612a12250b1899278c6a56bc184afb47f"}, - {file = "pywinpty-2.0.11-cp311-none-win_amd64.whl", hash = "sha256:6701867d42aec1239bc0fedf49a336570eb60eb886e81763db77ea2b6c533cc3"}, - {file = "pywinpty-2.0.11-cp38-none-win_amd64.whl", hash = "sha256:0ffd287751ad871141dc9724de70ea21f7fc2ff1af50861e0d232cf70739d8c4"}, - {file = "pywinpty-2.0.11-cp39-none-win_amd64.whl", hash = "sha256:e4e7f023c28ca7aa8e1313e53ba80a4d10171fe27857b7e02f99882dfe3e8638"}, - {file = "pywinpty-2.0.11.tar.gz", hash = "sha256:e244cffe29a894876e2cd251306efd0d8d64abd5ada0a46150a4a71c0b9ad5c5"}, + {file = "pywinpty-2.0.12-cp310-none-win_amd64.whl", hash = "sha256:21319cd1d7c8844fb2c970fb3a55a3db5543f112ff9cfcd623746b9c47501575"}, + {file = "pywinpty-2.0.12-cp311-none-win_amd64.whl", hash = "sha256:853985a8f48f4731a716653170cd735da36ffbdc79dcb4c7b7140bce11d8c722"}, + {file = "pywinpty-2.0.12-cp312-none-win_amd64.whl", hash = "sha256:1617b729999eb6713590e17665052b1a6ae0ad76ee31e60b444147c5b6a35dca"}, + {file = "pywinpty-2.0.12-cp38-none-win_amd64.whl", hash = "sha256:189380469ca143d06e19e19ff3fba0fcefe8b4a8cc942140a6b863aed7eebb2d"}, + {file = "pywinpty-2.0.12-cp39-none-win_amd64.whl", hash = "sha256:7520575b6546db23e693cbd865db2764097bd6d4ef5dc18c92555904cd62c3d4"}, + {file = "pywinpty-2.0.12.tar.gz", hash = "sha256:8197de460ae8ebb7f5d1701dfa1b5df45b157bb832e92acba316305e18ca00dd"}, ] [[package]] @@ -3877,14 +3965,14 @@ sphinx = ">=1.3.1" [[package]] name = "referencing" -version = "0.30.0" +version = "0.30.2" description = "JSON Referencing + Python" category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "referencing-0.30.0-py3-none-any.whl", hash = "sha256:c257b08a399b6c2f5a3510a50d28ab5dbc7bbde049bcaf954d43c446f83ab548"}, - {file = "referencing-0.30.0.tar.gz", hash = "sha256:47237742e990457f7512c7d27486394a9aadaf876cbfaa4be65b27b4f4d47c6b"}, + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, ] [package.dependencies] @@ -3956,14 +4044,14 @@ files = [ [[package]] name = "rich" -version = "13.5.1" +version = "13.6.0" 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.1-py3-none-any.whl", hash = "sha256:b97381b204a206e1be618f5e1215a57174a1a7732490b3bf6668cf41d30bc72d"}, - {file = "rich-13.5.1.tar.gz", hash = "sha256:881653ee7037803559d8eae98f145e0a4c4b0ec3ff0300d2cc8d479c71fc6819"}, + {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, + {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, ] [package.dependencies] @@ -3976,109 +4064,111 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.9.2" +version = "0.10.6" 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.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6"}, + {file = "rpds_py-0.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063"}, + {file = "rpds_py-0.10.6-cp310-none-win32.whl", hash = "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad"}, + {file = "rpds_py-0.10.6-cp310-none-win_amd64.whl", hash = "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7"}, + {file = "rpds_py-0.10.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069"}, + {file = "rpds_py-0.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281"}, + {file = "rpds_py-0.10.6-cp311-none-win32.whl", hash = "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116"}, + {file = "rpds_py-0.10.6-cp311-none-win_amd64.whl", hash = "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57"}, + {file = "rpds_py-0.10.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6"}, + {file = "rpds_py-0.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586"}, + {file = "rpds_py-0.10.6-cp312-none-win32.whl", hash = "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02"}, + {file = "rpds_py-0.10.6-cp312-none-win_amd64.whl", hash = "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2"}, + {file = "rpds_py-0.10.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53"}, + {file = "rpds_py-0.10.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801"}, + {file = "rpds_py-0.10.6-cp38-none-win32.whl", hash = "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1"}, + {file = "rpds_py-0.10.6-cp38-none-win_amd64.whl", hash = "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf"}, + {file = "rpds_py-0.10.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5"}, + {file = "rpds_py-0.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3"}, + {file = "rpds_py-0.10.6-cp39-none-win32.whl", hash = "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d"}, + {file = "rpds_py-0.10.6-cp39-none-win_amd64.whl", hash = "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971"}, + {file = "rpds_py-0.10.6.tar.gz", hash = "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50"}, ] [[package]] @@ -4155,20 +4245,43 @@ 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.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {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)", "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 = ["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.4" +description = "the blessed package to manage your versions by scm tags" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-scm-8.0.4.tar.gz", hash = "sha256:b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"}, + {file = "setuptools_scm-8.0.4-py3-none-any.whl", hash = "sha256:b47844cd2a84b83b3187a5782c71128c28b4c94cad8bfb871da2784a5cb54c4f"}, +] + +[package.dependencies] +packaging = ">=20" +setuptools = "*" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} +typing-extensions = "*" + +[package.extras] +docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] +rich = ["rich"] +test = ["build", "pytest", "rich", "wheel"] [[package]] name = "six" @@ -4240,14 +4353,14 @@ 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]] @@ -4276,14 +4389,14 @@ 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]] @@ -4498,14 +4611,14 @@ files = [ [[package]] name = "stack-data" -version = "0.6.2" +version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" 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"}, + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, ] [package.dependencies] @@ -4518,14 +4631,14 @@ 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]] @@ -4594,61 +4707,61 @@ 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.65.0" +version = "4.66.1" description = "Fast, Extensible Progress Meter" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, - {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] [[package]] name = "traitlets" -version = "5.9.0" +version = "5.11.2" 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.11.2-py3-none-any.whl", hash = "sha256:98277f247f18b2c5cabaf4af369187754f4fb0e85911d473f72329db8a7f4fae"}, + {file = "traitlets-5.11.2.tar.gz", hash = "sha256:7564b5bf8d38c40fa45498072bf4dc5e8346eb087bbf1e2ae2d8774f6a0f078e"}, ] [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" @@ -4664,14 +4777,14 @@ 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]] @@ -4700,34 +4813,46 @@ files = [ [[package]] name = "types-pygments" -version = "2.15.0.2" +version = "2.16.0.0" description = "Typing stubs for Pygments" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-Pygments-2.15.0.2.tar.gz", hash = "sha256:a1b56b792aa1015f6cecd092af00c71ecb12d9d5dd0a30313f9cb3839044389a"}, - {file = "types_Pygments-2.15.0.2-py3-none-any.whl", hash = "sha256:60fc96777722942eafd4e7cd248568861aa8696246e3b1effcddabd51001a977"}, + {file = "types-Pygments-2.16.0.0.tar.gz", hash = "sha256:aa93e4664e2d6cfea7570cde156e3966bf939f9c7d736cd179c4c8e94f7600b2"}, + {file = "types_Pygments-2.16.0.0-py3-none-any.whl", hash = "sha256:4624a547d5ba73c971fac5d6fd327141e85e65f6123448bee76f0c8557652a71"}, ] [package.dependencies] types-docutils = "*" types-setuptools = "*" +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] + [[package]] name = "types-requests" -version = "2.31.0.2" +version = "2.31.0.10" description = "Typing stubs for requests" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.7" 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.10.tar.gz", hash = "sha256:dc5852a76f1eaf60eafa81a2e50aefa3d1f015c34cf0cba130930866b1b22a92"}, + {file = "types_requests-2.31.0.10-py3-none-any.whl", hash = "sha256:b32b9a86beffa876c0c3ac99a4cd3b8b51e973fb8e3bd4e0a6bb32c7efad80fc"}, ] [package.dependencies] -types-urllib3 = "*" +urllib3 = ">=2" [[package]] name = "types-setuptools" @@ -4741,28 +4866,16 @@ files = [ {file = "types_setuptools-57.4.18-py3-none-any.whl", hash = "sha256:9660b8774b12cd61b448e2fd87a667c02e7ec13ce9f15171f1d49a4654c4df6a"}, ] -[[package]] -name = "types-urllib3" -version = "1.26.25.14" -description = "Typing stubs for urllib3" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, - {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, -] - [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" category = "main" 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]] @@ -4782,14 +4895,14 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.0.4" +version = "2.0.7" 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.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, ] [package.extras] @@ -4800,14 +4913,14 @@ 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] @@ -4816,7 +4929,7 @@ 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]] @@ -4862,14 +4975,14 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.8" description = "Measures the displayed width of unicode strings in a terminal" category = "main" optional = true python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.8-py2.py3-none-any.whl", hash = "sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704"}, + {file = "wcwidth-0.2.8.tar.gz", hash = "sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4"}, ] [[package]] @@ -4902,18 +5015,18 @@ files = [ [[package]] name = "websocket-client" -version = "1.6.1" +version = "1.6.4" 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.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"}, + {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"}, ] [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"] @@ -5004,78 +5117,86 @@ files = [ [[package]] name = "y-py" -version = "0.6.0" +version = "0.6.2" description = "Python bindings for the Y-CRDT built from yrs (Rust)" category = "main" optional = true python-versions = "*" files = [ - {file = "y_py-0.6.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ebbebc4f6a9e0c89c7b57035f91043b038e804dd1953845d8a66066f4526c853"}, - {file = "y_py-0.6.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2c230bc01b96081550b7583b77d00404fd39825657f4064b919a10515f660cdf"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f5975c1a8c2ca99980571b8811d151db8590de9cc96346572a81e0f6f1e30e"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f89cf9ef1daf12f438a075415a02f227594e4b0494c78d3b83cb83651631f5"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb3225b58dc67152c004da3c26ae5bad0afebbb3c7509d853bdd87eaa655137"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaaec9718f8a23924c95294d41d87829b113bc9a606a3667dfb995afc45c9920"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb03947937b0fcb09eb2b94eb08d8e8030ef0ed70af777684ab670bd369bc3c"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f79ef7303e332e91d738e66e9bb7fce0243d0407a02631a58ebc0bf2fb8743d0"}, - {file = "y_py-0.6.0-cp310-none-win32.whl", hash = "sha256:1667b8a67ace756c04f03778e86fc359028c98905212f8686afb48c26c252bda"}, - {file = "y_py-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:cca539c3804a580992304b18a33f1980282d9097a723f0bd01971477cb365b28"}, - {file = "y_py-0.6.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:5743e94c982585f05e02d9a3345dd9b1f28d90fa128df9f60b0eb357a76d2c32"}, - {file = "y_py-0.6.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:281535bb4f18fe09e5517a63b8206dd6f26ad6fb7e7c25c62bf785e594adab4d"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e05e01594e99c934562124b159720533b7ad887dde7762d460916aac47a8e4"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a752ba8875ed2038dfc7d62738536cb22b4e308951cb925a7fe8fef782c6db08"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea7d796bb55d08dd1a60736beb724004f2cbdc207592b5f301a5ff314b17137"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5126786f914ff53ea2f04f9da790db168db172521cc4f114d5501badd2f6b96"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b71cd495d322da25a53a6a830b591a2c0c46db22bb0b3556fca0bbdb1d45a18e"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0624a5adf29d29330a336eecdf15874871f559d50944d542012665e1c3a18265"}, - {file = "y_py-0.6.0-cp311-none-win32.whl", hash = "sha256:374ffef1939c42286ea18e2a413c9974430226227f8f1480bbee469933aa675b"}, - {file = "y_py-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:9242f3a5c6293e634817d9984c60523ffb34cf5b41501c5958681a75745946e6"}, - {file = "y_py-0.6.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9dad6af2d83a2b0618ba3c1a2fc6657c5303cf4e9f1a65cc3fea40ffbcc552e2"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d5ebb5f9ef0c4c1f7bdd9ab5e53b9d8be4c7464905f39761b22b6ce0d327d3"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a027c39296c925f0b81e28a0fefab8c5964a0ea2b50fa05cbddf5e5ab167a380"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49adf7e25c3b3bac9f19bee181ef5253659ebe5747a7141860692015222b2007"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47b3604c874d25616a097adaaabcad6e77729e23c5d029092b8149af1a08b2a5"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5a882591c8e1b1d6fbdb7ab43884907cef2b6a18e36c7ae85589e5f55371e5"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b9337e4f3d541879a8187af121be1bd42ea110372a21895a1a3f800a6bd1c3"}, - {file = "y_py-0.6.0-cp37-none-win32.whl", hash = "sha256:ef0f08edb2094869e4d12346ee68d5154cb3d23bc3b1e7679222fae12228261c"}, - {file = "y_py-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:391a232c328c2be1de4cb152ed3e9427826e4cbd9d645feacb3dbb344b122e10"}, - {file = "y_py-0.6.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:eb60fe68774117378efdbd368ef83cf1417e61d4bc39c6be8e7f4ee91fb7428a"}, - {file = "y_py-0.6.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4f025c50301d9ddbbc2384f98d3ff1dbfe43606146b747e23a17774a02faffe9"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4181b28f736cae3bb4517090ae5eeca318c075c0106466f13a4ed6682265fc8a"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6273d84605ee55b3ac52742018f94602dab9b0457f29e6f787021c473b02fed"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eefb6371cd6e072cf467b897f85bd0d7575f3a3e944fb8675f84fb59aedd071"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75c2199a125ef8926f3216fb324c3bcd8b1b4b6c0b428888cc753ee4c85f81f"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035ba7ce31bb87bd7b5977eee71ee2ff71e54d347a35e2079362b1c23731dccd"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:418aaa796a22b0102de09b36b6c6294d0a485f04bc8866c3b28f17e7022c44ba"}, - {file = "y_py-0.6.0-cp38-none-win32.whl", hash = "sha256:fc48db294d327a5cc10ee49f73f1fa1478240cc827c9029e0871106e327353ac"}, - {file = "y_py-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:d1301bfeaa26f78f4b0e5f96e0f22761b38cc407713f70550a1be490945fd6d7"}, - {file = "y_py-0.6.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e48b5b30242c7d517be85b48246b21e4e26540505a1ffe4fe473e239a8ec56d3"}, - {file = "y_py-0.6.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:479da40ef1205de52d87209534bf8e713a782e01eeed3df8dff44d21085e3f63"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7c3eaf65b162e59486a48bea5dd2035937952f15e008a14813e8cb7c24d7b"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20a4d10c8f0ee2b6df265d182d0be0ecd2ba7348c0a20b9df7d4d39df895801"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:304e88a3deaff9906faa7ba514cf82f4ca4bad1ea88728206ff906e66179abd3"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6377e3cbab8f5b8b918130e9f924358f98ca1bea12a8096d3fadea191f7137f1"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44fdd64598e9ed4008158e5e60be5e1e2daeed6fae0ab2bf0002461e960709d"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51f1997dae6d77b12b50502871c7a9aae22e84048e83b64fe6d4f18dec2e4700"}, - {file = "y_py-0.6.0-cp39-none-win32.whl", hash = "sha256:9f56888aeb07ca76a5cd552581bb3735fcd2d8c18165b946fdb6e4507b10e76c"}, - {file = "y_py-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:11345294820908d5b8af9c6616ea908dda8b3e554ee6f6d50be6a2e15940f63e"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4c16d50d0728abd915bd9e2e0c3ce982005ba78b60e4b6666aadc592d9982c79"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:eccf67d09a4df42a7be2a5427c1b2e0b89bec862f519ded754bd452df516b380"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:513a2fe1318c247fc3b3c3ad208488e870a216784f2a3e6dbe2688c92f671c86"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76e2b14004cadb237499a8a068fd7a8b805b5c1fd0508530473e087c7dd25163"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c276a7eb3ae3360f5a2fc503f1e4535d4a2f1c8cfc22af4595ad752e9a94fd77"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71f7689c25bd7608e1e7a76a13138cb202455fac165018693a3e8e5675f54b82"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0505e2ca36408b754774a2bb20d93b5c7def3873406c13e1855de6f007f8a94"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f143fdcda7a6a89bf96d9b359142a7ca3315e8a9018aa46b0abbdeb47d7192e"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9a920bf096d1eecb0f30afc38ee56bfcb9e2c863c33db96fc9d30d4ac0dbee58"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:97812f9443fd846012d60ecacffa2a11992d02ad9f8618d4faae8e596736c646"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83115cbbd4f6d3b38ebe06d80b1d0dbf1b10e53947f71df16f6145a4f0d14716"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cac9259839b32706336b3f521cacfd16fc7cefee609bd9c2b5123099328d696"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e76be7258010ce8cbb93a841f78f52901bba1253a51213d3535972d13aa4e89e"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b488be17d83173acb7f07c7e3430d2c66d0bd55b821683089311699562b58b"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b9f24b00972e5685d0b9bbd01413d9c33d124145343fb92667f0e076f040ad"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95083c4cdbd593497a695e841b2ad050c0b9a8a9e374f8496aa478cebfcf9cc9"}, - {file = "y_py-0.6.0.tar.gz", hash = "sha256:46836169f7dc2957df8513cfe4bc2009175b3a473e630af421a8e75ee1c48f98"}, + {file = "y_py-0.6.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c26bada6cd109095139237a46f50fc4308f861f0d304bc9e70acbc6c4503d158"}, + {file = "y_py-0.6.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:bae1b1ad8d2b8cf938a60313f8f7461de609621c5dcae491b6e54975f76f83c5"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e794e44fa260300b8850246c6371d94014753c73528f97f6ccb42f5e7ce698ae"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2686d7d8ca31531458a48e08b0344a8eec6c402405446ce7d838e2a7e43355a"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d917f5bc27b85611ceee4eb85f0e4088b0a03b4eed22c472409933a94ee953cf"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f6071328aad06fdcc0a4acc2dc4839396d645f5916de07584af807eb7c08407"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:266ec46ab9f9cb40fbb5e649f55c329fc4620fa0b1a8117bdeefe91595e182dc"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce15a842c2a0bf46180ae136743b561fa276300dd7fa61fe76daf00ec7dc0c2d"}, + {file = "y_py-0.6.2-cp310-none-win32.whl", hash = "sha256:1d5b544e79ace93fdbd0b36ed329c86e346898153ac7ba2ec62bc9b4c6b745c9"}, + {file = "y_py-0.6.2-cp310-none-win_amd64.whl", hash = "sha256:80a827e173372682959a57e6b8cc4f6468b1a4495b4bc7a775ef6ca05ae3e8e8"}, + {file = "y_py-0.6.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:a21148b8ea09a631b752d975f9410ee2a31c0e16796fdc113422a6d244be10e5"}, + {file = "y_py-0.6.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:898fede446ca1926b8406bdd711617c2aebba8227ee8ec1f0c2f8568047116f7"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce7c20b9395696d3b5425dccf2706d374e61ccf8f3656bff9423093a6df488f5"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a3932f53418b408fa03bd002e6dc573a74075c2c092926dde80657c39aa2e054"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:df35ea436592eb7e30e59c5403ec08ec3a5e7759e270cf226df73c47b3e739f5"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26cb1307c3ca9e21a3e307ab2c2099677e071ae9c26ec10ddffb3faceddd76b3"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:863e175ce5585f9ff3eba2aa16626928387e2a576157f02c8eb247a218ecdeae"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:35fcb9def6ce137540fdc0e91b08729677548b9c393c0151a6359fd199da3bd7"}, + {file = "y_py-0.6.2-cp311-none-win32.whl", hash = "sha256:86422c6090f34906c062fd3e4fdfdccf3934f2922021e979573ae315050b4288"}, + {file = "y_py-0.6.2-cp311-none-win_amd64.whl", hash = "sha256:6c2f2831c5733b404d2f2da4bfd02bb4612ae18d0822e14ae79b0b92436b816d"}, + {file = "y_py-0.6.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:7cbefd4f1060f05768227ddf83be126397b1d430b026c64e0eb25d3cf50c5734"}, + {file = "y_py-0.6.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:032365dfe932bfab8e80937ad6093b4c22e67d63ad880096b5fa8768f8d829ba"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a70aee572da3994238c974694767365f237fc5949a550bee78a650fe16f83184"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae80d505aee7b3172cdcc2620ca6e2f85586337371138bb2b71aa377d2c31e9a"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a497ebe617bec6a420fc47378856caae40ab0652e756f3ed40c5f1fe2a12220"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e8638355ae2f996356f7f281e03a3e3ce31f1259510f9d551465356532e0302c"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8448da4092265142662bbd3fc46cb8b0796b1e259189c020bc8f738899abd0b5"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:69cfbcbe0a05f43e780e6a198080ba28034bf2bb4804d7d28f71a0379bfd1b19"}, + {file = "y_py-0.6.2-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:1f798165158b76365a463a4f8aa2e3c2a12eb89b1fc092e7020e93713f2ad4dc"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92878cc05e844c8da937204bc34c2e6caf66709ce5936802fbfb35f04132892"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9b8822a5c0fd9a8cffcabfcc0cd7326bad537ee614fc3654e413a03137b6da1a"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e13cba03c7af8c8a846c4495875a09d64362cc4caeed495ada5390644411bbe7"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82f2e5b31678065e7a7fa089ed974af5a4f076673cf4f414219bdadfc3246a21"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1935d12e503780b859d343161a80df65205d23cad7b4f6c3df6e50321e188a3"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd302c6d46a3be57664571a5f0d4224646804be9890a01d73a0b294f2d3bbff1"}, + {file = "y_py-0.6.2-cp37-none-win32.whl", hash = "sha256:5415083f7f10eac25e1c434c87f07cb9bfa58909a6cad6649166fdad21119fc5"}, + {file = "y_py-0.6.2-cp37-none-win_amd64.whl", hash = "sha256:376c5cc0c177f03267340f36aec23e5eaf19520d41428d87605ca2ca3235d845"}, + {file = "y_py-0.6.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:3c011303eb2b360695d2bd4bd7ca85f42373ae89fcea48e7fa5b8dc6fc254a98"}, + {file = "y_py-0.6.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:c08311db17647a47d4898fc6f8d9c1f0e58b927752c894877ff0c38b3db0d6e1"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7cafbe946b4cafc1e5709957e6dd5c6259d241d48ed75713ded42a5e8a4663"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ba99d0bdbd9cabd65f914cd07b4fb2e939ce199b54ae5ace1639ce1edf8e0a2"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dab84c52f64e10adc79011a08673eb80286c159b14e8fb455524bf2994f0cb38"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72875641a907523d37f4619eb4b303611d17e0a76f2ffc423b62dd1ca67eef41"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c31240e30d5636ded02a54b7280aa129344fe8e964fd63885e85d9a8a83db206"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c28d977f516d4928f6bc0cd44561f6d0fdd661d76bac7cdc4b73e3c209441d9"}, + {file = "y_py-0.6.2-cp38-none-win32.whl", hash = "sha256:c011997f62d0c3b40a617e61b7faaaf6078e4eeff2e95ce4c45838db537816eb"}, + {file = "y_py-0.6.2-cp38-none-win_amd64.whl", hash = "sha256:ce0ae49879d10610cf3c40f4f376bb3cc425b18d939966ac63a2a9c73eb6f32a"}, + {file = "y_py-0.6.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:47fcc19158150dc4a6ae9a970c5bc12f40b0298a2b7d0c573a510a7b6bead3f3"}, + {file = "y_py-0.6.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2d2b054a1a5f4004967532a4b82c6d1a45421ef2a5b41d35b6a8d41c7142aabe"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0787e85645bb4986c27e271715bc5ce21bba428a17964e5ec527368ed64669bc"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:17bce637a89f6e75f0013be68becac3e38dc082e7aefaf38935e89215f0aa64a"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:beea5ad9bd9e56aa77a6583b6f4e347d66f1fe7b1a2cb196fff53b7634f9dc84"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1dca48687f41efd862355e58b0aa31150586219324901dbea2989a506e291d4"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17edd21eef863d230ea00004ebc6d582cc91d325e7132deb93f0a90eb368c855"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:de9cfafe97c75cd3ea052a24cd4aabf9fb0cfc3c0f9f810f00121cdf123db9e4"}, + {file = "y_py-0.6.2-cp39-none-win32.whl", hash = "sha256:82f5ca62bedbf35aaf5a75d1f53b4457a1d9b6ff033497ca346e2a0cedf13d14"}, + {file = "y_py-0.6.2-cp39-none-win_amd64.whl", hash = "sha256:7227f232f2daf130ba786f6834548f2cfcfa45b7ec4f0d449e72560ac298186c"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0649a41cd3c98e290c16592c082dbe42c7ffec747b596172eebcafb7fd8767b0"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:bf6020560584671e76375b7a0539e0d5388fc70fa183c99dc769895f7ef90233"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cf817a72ffec4295def5c5be615dd8f1e954cdf449d72ebac579ff427951328"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c7302619fc962e53093ba4a94559281491c045c925e5c4defec5dac358e0568"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cd6213c3cf2b9eee6f2c9867f198c39124c557f4b3b77d04a73f30fd1277a59"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b4fac4ea2ce27b86d173ae45765ced7f159120687d4410bb6d0846cbdb170a3"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:932abb560fe739416b50716a72ba6c6c20b219edded4389d1fc93266f3505d4b"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e42258f66ad9f16d9b62e9c9642742982acb1f30b90f5061522048c1cb99814f"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:cfc8381df1f0f873da8969729974f90111cfb61a725ef0a2e0e6215408fe1217"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:613f83713714972886e81d71685403098a83ffdacf616f12344b52bc73705107"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:316e5e1c40259d482883d1926fd33fa558dc87b2bd2ca53ce237a6fe8a34e473"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:015f7f6c1ce8a83d57955d1dc7ddd57cb633ae00576741a4fc9a0f72ed70007d"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff32548e45e45bf3280ac1d28b3148337a5c6714c28db23aeb0693e33eba257e"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0f2d881f0f8bf5674f8fe4774a438c545501e40fa27320c73be4f22463af4b05"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3bbe2f925cc587545c8d01587b4523177408edd252a32ce6d61b97113fe234d"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f5c14d25611b263b876e9ada1701415a13c3e9f02ea397224fbe4ca9703992b"}, + {file = "y_py-0.6.2.tar.gz", hash = "sha256:4757a82a50406a0b3a333aa0122019a331bd6f16e49fed67dca423f928b3fd4d"}, ] [[package]] @@ -5100,18 +5221,18 @@ 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] From 7ad7e99c9605719c75312d2bb8367475c358d9cd Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Sun, 22 Oct 2023 23:59:20 +0530 Subject: [PATCH 279/555] pyproject.toml: update manimpango version (#3405) Co-authored-by: Benjamin Hackl --- poetry.lock | 36 ++++++++++++++++++------------------ pyproject.toml | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9bde1773e7..e725139f51 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2235,28 +2235,28 @@ files = [ [[package]] name = "manimpango" -version = "0.4.4" +version = "0.5.0" description = "Bindings for Pango for using with Manim." category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "ManimPango-0.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4eadd960fb01ca9a18b00e54e4a9f5f8631c939a607cdf0765502e0f3cb43de7"}, - {file = "ManimPango-0.4.4-cp310-cp310-win32.whl", hash = "sha256:a31aa72a1451b1ef762e02845fa08cef10bba89708c449648db1f83e9f1b5715"}, - {file = "ManimPango-0.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:7192ec39ff8d59546b9e0dc21a00042ab507944291a662c5526a4bf1b3639705"}, - {file = "ManimPango-0.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:19ab9c2be4b44f99fc3bb87ce7e8685940a9c8812f2250e0f84acccee13cd1f8"}, - {file = "ManimPango-0.4.4-cp311-cp311-win32.whl", hash = "sha256:077c22deccc8b07cf490e66dbe5511a8748156d002f9135df9e4a2ebae38140d"}, - {file = "ManimPango-0.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:0ac7e5da4b21267d7e07273ca79bb15260e9494e80d0b50414dfbe78b3e274b7"}, - {file = "ManimPango-0.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b76a337b1d7226a1b0b418c556e4cfcdb8ba38e0ddc13e8f4c5b8c7d27422b3a"}, - {file = "ManimPango-0.4.4-cp312-cp312-win32.whl", hash = "sha256:f17e566e97b3eba8158caaefcc8fb3188376acd8a8e1bc7b7201f26019e0860b"}, - {file = "ManimPango-0.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:9e8c907876f3a5bb99d28d49aeb93b29a80e72f66300f7f0f0cf82ccba53473b"}, - {file = "ManimPango-0.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5e0a9b13631acf01c0c61e6f5c7042ec9c43f5fbdae28791bf34755e6bba4659"}, - {file = "ManimPango-0.4.4-cp38-cp38-win32.whl", hash = "sha256:443edb608b8ce0171763044e4ee50ca44b2aebed8f32d5c1c3f90c7d2f809481"}, - {file = "ManimPango-0.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:4a7787c5135381dd1ad8a0a5c671e8c0c88bcd3f93967b775e3389de75e70198"}, - {file = "ManimPango-0.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b130d577d1aa4865730568d84fcb64100b704e296b68deccbc2963dd421bfa1"}, - {file = "ManimPango-0.4.4-cp39-cp39-win32.whl", hash = "sha256:ca6dda74fa306a2f96dac943ca23aee4be0ba2c15d99a4789c088913eb61d78e"}, - {file = "ManimPango-0.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:d3efaeb07cf212fba0d39ccd8314ea3f5e7e8384d7c54b11bc0f683dabb64959"}, - {file = "ManimPango-0.4.4.tar.gz", hash = "sha256:d4dfb55e8c8a62d6b56b6bacea314369f25dda59e2ed4f4c0e6867512d93828c"}, + {file = "ManimPango-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b3309536038e11a4020bf5422d36b691e5583d38f616311c75527faa853fa948"}, + {file = "ManimPango-0.5.0-cp310-cp310-win32.whl", hash = "sha256:7e301f0d2ceeb05b82dbb5ddd1e2397b6de7ef4ab556d04c0765eb29f18be981"}, + {file = "ManimPango-0.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:26053a59e352c11e33fa224be6fde095a08c9db2665895ada7689fdeb225064c"}, + {file = "ManimPango-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8a866a03c8a569dfaf08035748aea5c56f5e729d12682aae5d25fbe837a6270"}, + {file = "ManimPango-0.5.0-cp311-cp311-win32.whl", hash = "sha256:5de05ac673b1ac597cc3e4e0e05756195b387f8f96b81cd03767a9f12f8af3f4"}, + {file = "ManimPango-0.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:86e68c085e455d4bd607c2f63fcce41d1496a873dde29c413a3fbd98ff99c258"}, + {file = "ManimPango-0.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bf4a09fe1989763ea041fcce044ce501d89678bcc14084949f6792fc3b204517"}, + {file = "ManimPango-0.5.0-cp312-cp312-win32.whl", hash = "sha256:0b5e47755cce7848fa268b5f77f17fc4fe363d30f5412fef845560df26dece82"}, + {file = "ManimPango-0.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:aef7151c210fce42518eff7a00e4b07d497a2516e13945d56b9b4a6427fae3f6"}, + {file = "ManimPango-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f1b614dc33b1cc012ef38a49b04def005e80a14592bdd389be91a9073a71be30"}, + {file = "ManimPango-0.5.0-cp38-cp38-win32.whl", hash = "sha256:d135fbc2049b3cb22fa941e7333c10a42b29aa080871dd4e80d169da2337b797"}, + {file = "ManimPango-0.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:9bb032625d5c663c4727bae61870e3c16696278c569c98a094b14953f22a70c8"}, + {file = "ManimPango-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5d58e736ccf2afb3398c42ad1d478b84176785ad19cb994dfc9575030bfd040f"}, + {file = "ManimPango-0.5.0-cp39-cp39-win32.whl", hash = "sha256:8c453e9511d5888c92aa1f7b120b7f3318fc21fd7a4862156c9b094986f2e17d"}, + {file = "ManimPango-0.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:b81d815b1a5e78376ae9b6aa2d7606d38cc19e31eb89480471462bbdf0fcd3c7"}, + {file = "ManimPango-0.5.0.tar.gz", hash = "sha256:299913bbccb0f15954b64401cf9df24607e1a01edda589ea77de1ed4cc2bc284"}, ] [[package]] @@ -5242,4 +5242,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "4599b550efe5d668ee87521ebfb4d39f8329153c119c40cf1dad302498d25e55" +content-hash = "3499f5d56322e6bb4c2d55e9e0a69be42e574d519edb7387feacbb3dd88da652" diff --git a/pyproject.toml b/pyproject.toml index a7bf1b3081..b7cbc99e4b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ tqdm = "^4.62.3" pydub = "^0.25.1" rich = ">=6.0,!=12.0.0" pycairo = "^1.21" -manimpango = "^0.4.0.post0" +manimpango = ">=0.5.0,<1.0.0" networkx = "^2.5" decorator = "^5.0.7" importlib-metadata = { version = "^4.10.0", python = "<3.8" } From 8320cdde8059dd9da28a8e78672b5ec85a48e492 Mon Sep 17 00:00:00 2001 From: Jason Grace <110117391+JasonGrace2282@users.noreply.github.com> Date: Mon, 23 Oct 2023 04:49:30 -0400 Subject: [PATCH 280/555] Added docs for functions in `mobject_update_utils` (#3325) * Added docs for functions in mobject_update_utils * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Updated docstring of always_shift Co-authored-by: Benjamin Hackl * Added period to sentence. Co-authored-by: Benjamin Hackl * Updated parameter description in always_redraw Co-authored-by: Benjamin Hackl * Update always_rotate description Co-authored-by: Benjamin Hackl * Finished parameters in always_redraw Co-authored-by: Benjamin Hackl * Changed comment in always_shift Co-authored-by: Benjamin Hackl * update always_shift description Co-authored-by: Benjamin Hackl * used normalize from manim.utils.space_ops * fixed indentation in always_redraw * added type-hints * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- .../updaters/mobject_update_utils.py | 116 +++++++++++++++--- 1 file changed, 98 insertions(+), 18 deletions(-) diff --git a/manim/animation/updaters/mobject_update_utils.py b/manim/animation/updaters/mobject_update_utils.py index 698dc03d56..dee27ff398 100644 --- a/manim/animation/updaters/mobject_update_utils.py +++ b/manim/animation/updaters/mobject_update_utils.py @@ -15,22 +15,26 @@ import inspect -from collections.abc import Callable +from typing import TYPE_CHECKING, Callable import numpy as np from manim.constants import DEGREES, RIGHT from manim.mobject.mobject import Mobject from manim.opengl import OpenGLMobject +from manim.utils.space_ops import normalize +if TYPE_CHECKING: + from manim.animation.animation import Animation -def assert_is_mobject_method(method): + +def assert_is_mobject_method(method: Callable) -> None: assert inspect.ismethod(method) mobject = method.__self__ assert isinstance(mobject, (Mobject, OpenGLMobject)) -def always(method, *args, **kwargs): +def always(method: Callable, *args, **kwargs) -> Mobject: assert_is_mobject_method(method) mobject = method.__self__ func = method.__func__ @@ -38,7 +42,7 @@ def always(method, *args, **kwargs): return mobject -def f_always(method, *arg_generators, **kwargs): +def f_always(method: Callable[[Mobject], None], *arg_generators, **kwargs) -> Mobject: """ More functional version of always, where instead of taking in args, it takes in functions which output @@ -80,16 +84,18 @@ def construct(self): sine = ax.plot(np.sin, color=RED) alpha = ValueTracker(0) point = always_redraw( - lambda: Dot( - sine.point_from_proportion(alpha.get_value()), - color=BLUE) + lambda: Dot( + sine.point_from_proportion(alpha.get_value()), + color=BLUE ) + ) tangent = always_redraw( lambda: TangentLine( sine, alpha=alpha.get_value(), color=YELLOW, - length=4) + length=4 + ) ) self.add(ax, sine, point, tangent) self.play(alpha.animate.set_value(1), rate_func=linear, run_time=2) @@ -99,36 +105,110 @@ def construct(self): return mob -def always_shift(mobject, direction=RIGHT, rate=0.1): - def normalize(v): - norm = np.linalg.norm(v) - if norm == 0: - return v - return v / norm +def always_shift( + mobject: Mobject, direction: np.ndarray[np.float64] = RIGHT, rate: float = 0.1 +) -> Mobject: + """A mobject which is continuously shifted along some direction + at a certain rate. + + Parameters + ---------- + mobject + The mobject to shift. + direction + The direction to shift. The vector is normalized, the specified magnitude + is not relevant. + rate + Length in Manim units which the mobject travels in one + second along the specified direction. + + Examples + -------- + + .. manim:: ShiftingSquare + + class ShiftingSquare(Scene): + def construct(self): + sq = Square().set_fill(opacity=1) + tri = Triangle() + VGroup(sq, tri).arrange(LEFT) + + # construct a square which is continuously + # shifted to the right + always_shift(sq, RIGHT, rate=5) + self.add(sq) + self.play(tri.animate.set_fill(opacity=1)) + """ mobject.add_updater(lambda m, dt: m.shift(dt * rate * normalize(direction))) return mobject -def always_rotate(mobject, rate=20 * DEGREES, **kwargs): +def always_rotate(mobject: Mobject, rate: float = 20 * DEGREES, **kwargs) -> Mobject: + """A mobject which is continuously rotated at a certain rate. + + Parameters + ---------- + mobject + The mobject to be rotated. + rate + The angle which the mobject is rotated by + over one second. + kwags + Further arguments to be passed to :meth:`.Mobject.rotate`. + + Examples + -------- + + .. manim:: SpinningTriangle + + class SpinningTriangle(Scene): + def construct(self): + tri = Triangle().set_fill(opacity=1).set_z_index(2) + sq = Square().to_edge(LEFT) + + # will keep spinning while there is an animation going on + always_rotate(tri, rate=2*PI, about_point=ORIGIN) + + self.add(tri, sq) + self.play(sq.animate.to_edge(RIGHT), rate_func=linear, run_time=1) + """ mobject.add_updater(lambda m, dt: m.rotate(dt * rate, **kwargs)) return mobject -def turn_animation_into_updater(animation, cycle=False, **kwargs): +def turn_animation_into_updater( + animation: Animation, cycle: bool = False, **kwargs +) -> Mobject: """ Add an updater to the animation's mobject which applies the interpolation and update functions of the animation If cycle is True, this repeats over and over. Otherwise, the updater will be popped upon completion + + Examples + -------- + + .. manim:: WelcomeToManim + + class WelcomeToManim(Scene): + def construct(self): + words = Text("Welcome to") + banner = ManimBanner().scale(0.5) + VGroup(words, banner).arrange(DOWN) + + turn_animation_into_updater(Write(words, run_time=0.9)) + self.add(words) + self.wait(0.5) + self.play(banner.expand(), run_time=0.5) """ mobject = animation.mobject animation.suspend_mobject_updating = False animation.begin() animation.total_time = 0 - def update(m, dt): + def update(m: Mobject, dt: float): run_time = animation.get_run_time() time_ratio = animation.total_time / run_time if cycle: @@ -147,5 +227,5 @@ def update(m, dt): return mobject -def cycle_animation(animation, **kwargs): +def cycle_animation(animation: Animation, **kwargs) -> Mobject: return turn_animation_into_updater(animation, cycle=True, **kwargs) From b04869579b63d23a072845d86585f254dec78e69 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Thu, 26 Oct 2023 01:24:45 +0530 Subject: [PATCH 281/555] Fix tests to run on Cairo 1.18.0 (#3416) * Add a script to build and install cairo * Update gui tests for cairo 1.18.0 * update script to set env vars * Make the script run with plain python * Prefer the recently built one in pkg-config * Skip the built if it's windows * CI: build and install latest cairo * CI: only run when cache is missed * Disable compiling tests while building cairo * update poetry lock file * Display the cairo version when running pytest * fixup * tests: skip graphical test when cairo is old * fix the path to find the pkgconfig files on linux * set the LD_LIBRARY_PATH too only then it'll work on linux * fixup * small fixup * Move the script inside `.github/scripts` folder * Make the minimum cairo version a constant * Seperate setting env vars to a sperate step this seem to have broken when cache is hit --- .github/scripts/ci_build_cairo.py | 209 ++++++++++++++++++ .github/workflows/ci.yml | 20 +- .gitignore | 3 + conftest.py | 2 + manim/utils/testing/frames_comparison.py | 9 + poetry.lock | 56 +++-- .../control_data/boolean_ops/difference.npz | Bin 9511 -> 9419 bytes .../control_data/boolean_ops/exclusion.npz | Bin 11305 -> 11214 bytes .../control_data/boolean_ops/intersection.npz | Bin 9204 -> 9122 bytes .../boolean_ops/intersection_3_mobjects.npz | Bin 9288 -> 9254 bytes .../control_data/boolean_ops/union.npz | Bin 8653 -> 8617 bytes .../control_data/brace/arcBrace.npz | Bin 4371 -> 4371 bytes .../control_data/brace/braceTip.npz | Bin 8708 -> 8708 bytes .../control_data/brace/brace_sharpness.npz | Bin 9270 -> 9270 bytes ...group_is_passing_remover_to_animations.npz | Bin 1845 -> 1845 bytes ...sing_remover_to_nested_animationgroups.npz | Bin 1845 -> 1845 bytes .../coordinate_system/implicit_graph.npz | Bin 9938 -> 9753 bytes .../coordinate_system/line_graph.npz | Bin 11642 -> 11642 bytes .../coordinate_system/number_plane.npz | Bin 10291 -> 10291 bytes .../coordinate_system/number_plane_log.npz | Bin 11956 -> 11956 bytes .../coordinate_system/plot_log_x_axis.npz | Bin 6666 -> 6668 bytes .../plot_log_x_axis_vectorized.npz | Bin 6666 -> 6668 bytes .../coordinate_system/plot_surface.npz | Bin 205738 -> 205863 bytes .../plot_surface_colorscale.npz | Bin 164268 -> 164343 bytes .../creation/DrawBorderThenFill.npz | Bin 7784 -> 7784 bytes .../control_data/creation/FadeIn.npz | Bin 5151 -> 5151 bytes .../control_data/creation/FadeOut.npz | Bin 5151 -> 5151 bytes .../control_data/creation/GrowFromCenter.npz | Bin 4070 -> 4070 bytes .../control_data/creation/GrowFromEdge.npz | Bin 4132 -> 4132 bytes .../control_data/creation/GrowFromPoint.npz | Bin 4162 -> 4162 bytes .../control_data/creation/ShrinkToCenter.npz | Bin 4068 -> 4068 bytes .../creation/SpinInFromNothing.npz | Bin 8139 -> 8170 bytes .../creation/bring_to_back_introducer.npz | Bin 9305 -> 9305 bytes .../control_data/creation/create.npz | Bin 4257 -> 4257 bytes .../control_data/creation/uncreate.npz | Bin 4256 -> 4256 bytes .../creation/uncreate_rate_func.npz | Bin 4129 -> 4129 bytes .../creation/z_index_introducer.npz | Bin 31972 -> 32041 bytes .../control_data/functions/FunctionGraph.npz | Bin 6410 -> 6386 bytes .../functions/ImplicitFunction.npz | Bin 14084 -> 13709 bytes .../control_data/geometry/Angle.npz | Bin 2311 -> 2290 bytes .../control_data/geometry/AngledArrowTip.npz | Bin 2300 -> 2300 bytes .../control_data/geometry/AnnotationDot.npz | Bin 2250 -> 2210 bytes .../control_data/geometry/AnnularSector.npz | Bin 3895 -> 3895 bytes .../control_data/geometry/Annulus.npz | Bin 9026 -> 9026 bytes .../control_data/geometry/Arc.npz | Bin 3028 -> 3022 bytes .../geometry/ArcBetweenPoints.npz | Bin 3041 -> 3035 bytes .../control_data/geometry/Arrange.npz | Bin 2767 -> 2767 bytes .../control_data/geometry/Circle.npz | Bin 6017 -> 5962 bytes .../control_data/geometry/CirclePoints.npz | Bin 8368 -> 8314 bytes .../control_data/geometry/Coordinates.npz | Bin 3948 -> 3948 bytes .../control_data/geometry/CurvedArrow.npz | Bin 2943 -> 2946 bytes .../geometry/CurvedArrowCustomTip.npz | Bin 5028 -> 5033 bytes .../geometry/CustomDoubleArrow.npz | Bin 2929 -> 2907 bytes .../control_data/geometry/DashedVMobject.npz | Bin 5933 -> 5958 bytes .../control_data/geometry/Dot.npz | Bin 1997 -> 1997 bytes .../control_data/geometry/DoubleArrow.npz | Bin 2057 -> 2057 bytes .../control_data/geometry/Elbow.npz | Bin 1915 -> 1915 bytes .../control_data/geometry/Ellipse.npz | Bin 4579 -> 4538 bytes .../control_data/geometry/LabeledArrow.npz | Bin 2884 -> 2884 bytes .../control_data/geometry/LabeledLine.npz | Bin 2669 -> 2669 bytes .../control_data/geometry/Line.npz | Bin 2049 -> 2049 bytes .../control_data/geometry/Polygon.npz | Bin 2794 -> 2794 bytes .../control_data/geometry/Polygram.npz | Bin 11918 -> 11927 bytes .../control_data/geometry/Rectangle.npz | Bin 2496 -> 2496 bytes .../control_data/geometry/RegularPolygram.npz | Bin 13693 -> 13655 bytes .../control_data/geometry/RightAngle.npz | Bin 1942 -> 1942 bytes .../geometry/RoundedRectangle.npz | Bin 4422 -> 4410 bytes .../control_data/geometry/Sector.npz | Bin 2577 -> 2577 bytes .../control_data/geometry/Star.npz | Bin 9023 -> 9012 bytes .../control_data/geometry/Vector.npz | Bin 2070 -> 2070 bytes .../control_data/geometry/ZIndex.npz | Bin 45161 -> 45174 bytes .../geometry/three_points_Angle.npz | Bin 7060 -> 7072 bytes .../control_data/img_and_svg/Arcs01.npz | Bin 7845 -> 7897 bytes .../control_data/img_and_svg/Arcs02.npz | Bin 26869 -> 26856 bytes .../img_and_svg/BrachistochroneCurve.npz | Bin 4174 -> 4179 bytes .../img_and_svg/ContiguousUSMap.npz | Bin 50524 -> 50458 bytes .../img_and_svg/CubicAndLineto.npz | Bin 2962 -> 2962 bytes .../control_data/img_and_svg/CubicPath.npz | Bin 3229 -> 3229 bytes .../control_data/img_and_svg/DesmosGraph1.npz | Bin 8570 -> 8592 bytes .../control_data/img_and_svg/HalfEllipse.npz | Bin 6412 -> 6395 bytes .../control_data/img_and_svg/Heart.npz | Bin 4327 -> 4327 bytes .../img_and_svg/ImageInterpolation.npz | Bin 28166 -> 28166 bytes .../control_data/img_and_svg/ImageMobject.npz | Bin 706260 -> 706260 bytes .../control_data/img_and_svg/Inheritance.npz | Bin 2718 -> 2718 bytes .../control_data/img_and_svg/Line.npz | Bin 2199 -> 2199 bytes .../control_data/img_and_svg/ManimLogo.npz | Bin 9433 -> 9437 bytes .../img_and_svg/MatrixTransform.npz | Bin 2452 -> 2452 bytes .../img_and_svg/MultiPartPath.npz | Bin 2385 -> 2385 bytes .../img_and_svg/MultipleTransform.npz | Bin 3131 -> 3132 bytes .../control_data/img_and_svg/Penrose.npz | Bin 6903 -> 6903 bytes .../img_and_svg/PixelizedText.npz | Bin 4378 -> 4378 bytes .../img_and_svg/QuadraticPath.npz | Bin 4679 -> 4679 bytes .../control_data/img_and_svg/Rhomboid.npz | Bin 5762 -> 5650 bytes .../img_and_svg/RotateTransform.npz | Bin 4289 -> 4289 bytes .../img_and_svg/ScaleTransform.npz | Bin 5899 -> 5899 bytes .../img_and_svg/SingleUSState.npz | Bin 4047 -> 4047 bytes .../img_and_svg/SkewXTransform.npz | Bin 3365 -> 3365 bytes .../img_and_svg/SkewYTransform.npz | Bin 2958 -> 2958 bytes .../control_data/img_and_svg/SmoothCurves.npz | Bin 5650 -> 5658 bytes .../img_and_svg/TranslateTransform.npz | Bin 2579 -> 2579 bytes .../control_data/img_and_svg/UKFlag.npz | Bin 8355 -> 8355 bytes .../img_and_svg/UseTagInheritance.npz | Bin 15729 -> 15758 bytes .../control_data/img_and_svg/VideoIcon.npz | Bin 3973 -> 3973 bytes .../img_and_svg/WatchTheDecimals.npz | Bin 1845 -> 1845 bytes .../control_data/img_and_svg/WeightSVG.npz | Bin 8054 -> 8035 bytes .../img_and_svg/path_multiple_moves.npz | Bin 12363 -> 12356 bytes .../control_data/indication/ApplyWave.npz | Bin 16196 -> 16111 bytes .../control_data/indication/Circumscribe.npz | Bin 10033 -> 10033 bytes .../control_data/indication/Flash.npz | Bin 5836 -> 5836 bytes .../control_data/indication/FocusOn.npz | Bin 16343 -> 16343 bytes .../control_data/indication/Indicate.npz | Bin 5522 -> 5522 bytes .../indication/ShowCreationThenFadeOut.npz | Bin 9879 -> 9879 bytes .../indication/ShowPassingFlash.npz | Bin 5184 -> 5184 bytes .../control_data/indication/Wiggle.npz | Bin 14527 -> 14587 bytes .../control_data/logo/banner.npz | Bin 41218 -> 41212 bytes .../control_data/mobjects/PointCloudDot.npz | Bin 5364 -> 5364 bytes .../control_data/mobjects/become.npz | Bin 6411 -> 6411 bytes .../control_data/mobjects/match_style.npz | Bin 9115 -> 9089 bytes .../mobjects/vmobject_joint_types.npz | Bin 2915 -> 2915 bytes .../modifier_methods/Gradient.npz | Bin 4959 -> 4955 bytes .../modifier_methods/GradientRotation.npz | Bin 4989 -> 4971 bytes .../control_data/movements/Homotopy.npz | Bin 16337 -> 16160 bytes .../control_data/movements/MoveAlongPath.npz | Bin 3520 -> 3520 bytes .../control_data/movements/MoveTo.npz | Bin 5484 -> 5484 bytes .../control_data/movements/PhaseFlow.npz | Bin 6092 -> 6092 bytes .../control_data/movements/Rotate.npz | Bin 12703 -> 12752 bytes .../control_data/movements/Shift.npz | Bin 5452 -> 5452 bytes .../numbers/set_value_with_updaters.npz | Bin 11759 -> 11759 bytes .../control_data/opengl/Circle.npz | Bin 6611 -> 6546 bytes .../control_data/opengl/FixedMobjects3D.npz | Bin 1845 -> 1845 bytes .../control_data/plot/axes.npz | Bin 4665 -> 4664 bytes .../plot/axis_tip_custom_width_height.npz | Bin 5795 -> 5795 bytes .../plot/axis_tip_default_width_height.npz | Bin 4925 -> 4923 bytes .../control_data/plot/custom_coordinates.npz | Bin 4128 -> 4128 bytes .../control_data/plot/get_area.npz | Bin 28752 -> 28750 bytes ...area_with_boundary_and_few_plot_points.npz | Bin 5393 -> 5395 bytes .../control_data/plot/get_axis_labels.npz | Bin 5385 -> 5381 bytes .../control_data/plot/get_graph_label.npz | Bin 12720 -> 12724 bytes .../control_data/plot/get_lines_to_point.npz | Bin 7092 -> 6993 bytes ...emann_rectangles_use_vectorized[False].npz | Bin 18863 -> 18817 bytes ...iemann_rectangles_use_vectorized[True].npz | Bin 18863 -> 18817 bytes .../control_data/plot/get_x_axis_label.npz | Bin 4465 -> 4461 bytes .../control_data/plot/get_y_axis_label.npz | Bin 4612 -> 4610 bytes .../control_data/plot/get_z_axis_label.npz | Bin 15244 -> 15240 bytes .../control_data/plot/log_scaling_graph.npz | Bin 14905 -> 14916 bytes ...derivative_graph_use_vectorized[False].npz | Bin 31734 -> 31795 bytes ..._derivative_graph_use_vectorized[True].npz | Bin 31734 -> 31795 bytes .../plot_functions_use_vectorized[False].npz | Bin 10390 -> 10414 bytes .../plot_functions_use_vectorized[True].npz | Bin 10390 -> 10414 bytes .../control_data/plot/plot_line_graph.npz | Bin 12889 -> 12768 bytes .../plot/plot_use_vectorized[False].npz | Bin 13525 -> 13544 bytes .../plot/plot_use_vectorized[True].npz | Bin 13525 -> 13544 bytes .../control_data/plot/polar_graph.npz | Bin 86651 -> 86593 bytes .../control_data/plot/t_label.npz | Bin 10115 -> 10347 bytes .../control_data/polyhedra/Dodecahedron.npz | Bin 8321 -> 8312 bytes .../control_data/polyhedra/Icosahedron.npz | Bin 7085 -> 7066 bytes .../control_data/polyhedra/Octahedron.npz | Bin 3434 -> 3438 bytes .../control_data/polyhedra/Tetrahedron.npz | Bin 3123 -> 3101 bytes .../probability/advanced_customization.npz | Bin 11762 -> 11762 bytes .../change_bar_values_negative.npz | Bin 9693 -> 9693 bytes .../change_bar_values_some_vals.npz | Bin 9336 -> 9336 bytes .../probability/default_chart.npz | Bin 12093 -> 12093 bytes .../probability/get_bar_labels.npz | Bin 12062 -> 12062 bytes .../probability/label_constructor.npz | Bin 13801 -> 13801 bytes .../probability/negative_values.npz | Bin 12419 -> 12419 bytes .../control_data/specialized/Broadcast.npz | Bin 28868 -> 28784 bytes .../control_data/speed/SpeedModifier.npz | Bin 19400 -> 19400 bytes .../control_data/tables/DecimalTable.npz | Bin 22313 -> 22313 bytes .../control_data/tables/IntegerTable.npz | Bin 15493 -> 15493 bytes .../control_data/tables/MathTable.npz | Bin 3927 -> 3927 bytes .../control_data/tables/MobjectTable.npz | Bin 7067 -> 6905 bytes .../control_data/tables/Table.npz | Bin 10467 -> 10467 bytes .../tex_mobject/color_inheritance.npz | Bin 10504 -> 10504 bytes .../tex_mobject/set_opacity_by_tex.npz | Bin 3526 -> 3526 bytes .../threed/AddFixedInFrameMobjects.npz | Bin 5396 -> 5396 bytes .../control_data/threed/AmbientCameraMove.npz | Bin 7582 -> 7582 bytes .../control_data/threed/Arrow3D.npz | Bin 2519 -> 2495 bytes .../control_data/threed/Axes.npz | Bin 3880 -> 3873 bytes .../control_data/threed/CameraMove.npz | Bin 5580 -> 5580 bytes .../control_data/threed/CameraMoveAxes.npz | Bin 17623 -> 17629 bytes .../control_data/threed/Cone.npz | Bin 25859 -> 25831 bytes .../control_data/threed/Cube.npz | Bin 3057 -> 3057 bytes .../control_data/threed/Cylinder.npz | Bin 5044 -> 5046 bytes .../control_data/threed/Dot3D.npz | Bin 2074 -> 2071 bytes .../control_data/threed/Line3D.npz | Bin 7371 -> 7359 bytes .../control_data/threed/MovingVertices.npz | Bin 8701 -> 8701 bytes .../control_data/threed/Sphere.npz | Bin 24809 -> 24819 bytes .../control_data/threed/SurfaceColorscale.npz | Bin 122822 -> 122747 bytes .../control_data/threed/Torus.npz | Bin 117615 -> 117528 bytes .../control_data/threed/Y_Direction.npz | Bin 88891 -> 88858 bytes .../transform/AnimationBuilder.npz | Bin 15077 -> 15014 bytes .../transform/ApplyComplexFunction.npz | Bin 5495 -> 5495 bytes .../control_data/transform/ApplyFunction.npz | Bin 3575 -> 3577 bytes .../control_data/transform/ApplyMatrix.npz | Bin 19542 -> 19578 bytes .../transform/ApplyPointwiseFunction.npz | Bin 10617 -> 10617 bytes .../transform/ClockwiseTransform.npz | Bin 16705 -> 16701 bytes .../transform/CounterclockwiseTransform.npz | Bin 13399 -> 13436 bytes .../control_data/transform/CyclicReplace.npz | Bin 18791 -> 18747 bytes .../control_data/transform/FadeInAndOut.npz | Bin 15750 -> 15750 bytes .../control_data/transform/FadeToColort.npz | Bin 5543 -> 5543 bytes .../control_data/transform/FadeTransform.npz | Bin 12969 -> 12961 bytes .../transform/FadeTransformPieces.npz | Bin 26755 -> 26702 bytes ...ransform_TargetIsEmpty_FadesOutInPlace.npz | Bin 4233 -> 4233 bytes .../control_data/transform/FullRotation.npz | Bin 30995 -> 30960 bytes .../transform/MatchPointsScene.npz | Bin 2504 -> 2504 bytes .../control_data/transform/MoveToTarget.npz | Bin 5494 -> 5494 bytes .../transform/ReplacementTransform.npz | Bin 23941 -> 24023 bytes .../control_data/transform/Restore.npz | Bin 40860 -> 40804 bytes .../control_data/transform/ScaleInPlace.npz | Bin 4315 -> 4315 bytes .../control_data/transform/ShrinkToCenter.npz | Bin 4068 -> 4068 bytes .../control_data/transform/Transform.npz | Bin 14882 -> 14896 bytes .../transform/TransformFromCopy.npz | Bin 14882 -> 14896 bytes .../TransformWithConflictingPaths.npz | Bin 4213 -> 4213 bytes .../transform/TransformWithPathArcCenters.npz | Bin 4253 -> 4253 bytes .../transform/TransformWithPathFunc.npz | Bin 4213 -> 4213 bytes .../TransformMatchingDisplaysCorrect.npz | Bin 32994 -> 32842 bytes .../TransformMatchingLeavesOneObject.npz | Bin 5687 -> 5610 bytes .../TransformMatchingTex.npz | Bin 8568 -> 8565 bytes ...ormMatchingTex_FadeTransformMismatches.npz | Bin 8570 -> 8572 bytes ..._FadeTransformMismatches_NothingToFade.npz | Bin 7046 -> 7046 bytes ...ansformMatchingTex_TransformMismatches.npz | Bin 8528 -> 8530 bytes .../updaters/LastFrameWhenCleared.npz | Bin 10533 -> 10533 bytes .../updaters/UpdateSceneDuringAnimation.npz | Bin 10857 -> 10839 bytes .../control_data/updaters/Updater.npz | Bin 6112 -> 6112 bytes .../control_data/updaters/ValueTracker.npz | Bin 2002 -> 2002 bytes .../utils/pixel_error_threshold.npz | Bin 32115 -> 1845 bytes .../vector_scene/vector_to_coords.npz | Bin 235257 -> 235273 bytes 227 files changed, 272 insertions(+), 27 deletions(-) create mode 100644 .github/scripts/ci_build_cairo.py diff --git a/.github/scripts/ci_build_cairo.py b/.github/scripts/ci_build_cairo.py new file mode 100644 index 0000000000..4a92b4e91f --- /dev/null +++ b/.github/scripts/ci_build_cairo.py @@ -0,0 +1,209 @@ +# Logic is as follows: +# 1. Download cairo source code: https://cairographics.org/releases/cairo-.tar.xz +# 2. Verify the downloaded file using the sha256sums file: https://cairographics.org/releases/cairo-.tar.xz.sha256sum +# 3. Extract the downloaded file. +# 4. Create a virtual environment and install meson and ninja. +# 5. Run meson build in the extracted directory. Also, set required prefix. +# 6. Run meson compile -C build. +# 7. Run meson install -C build. + +import hashlib +import logging +import os +import subprocess +import sys +import tarfile +import tempfile +import typing +import urllib.request +from contextlib import contextmanager +from pathlib import Path +from sys import stdout + +CAIRO_VERSION = "1.18.0" +CAIRO_URL = f"https://cairographics.org/releases/cairo-{CAIRO_VERSION}.tar.xz" +CAIRO_SHA256_URL = f"{CAIRO_URL}.sha256sum" + +VENV_NAME = "meson-venv" +BUILD_DIR = "build" +INSTALL_PREFIX = Path(__file__).parent.parent / "third_party" / "cairo" + +logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s") +logger = logging.getLogger(__name__) + + +def is_ci(): + return os.getenv("CI", None) is not None + + +def download_file(url, path): + logger.info(f"Downloading {url} to {path}") + block_size = 1024 * 1024 + with urllib.request.urlopen(url) as response, open(path, "wb") as file: + while True: + data = response.read(block_size) + if not data: + break + file.write(data) + + +def verify_sha256sum(path, sha256sum): + with open(path, "rb") as file: + file_hash = hashlib.sha256(file.read()).hexdigest() + if file_hash != sha256sum: + raise Exception("SHA256SUM does not match") + + +def extract_tar_xz(path, directory): + with tarfile.open(path) as file: + file.extractall(directory) + + +def run_command(command, cwd=None, env=None): + process = subprocess.Popen(command, cwd=cwd, env=env) + process.communicate() + if process.returncode != 0: + raise Exception("Command failed") + + +@contextmanager +def gha_group(title: str) -> typing.Generator: + if not is_ci(): + yield + return + print(f"\n::group::{title}") + stdout.flush() + try: + yield + finally: + print("::endgroup::") + stdout.flush() + + +def set_env_var_gha(name: str, value: str) -> None: + if not is_ci(): + return + env_file = os.getenv("GITHUB_ENV", None) + if env_file is None: + return + with open(env_file, "a") as file: + file.write(f"{name}={value}\n") + stdout.flush() + + +def get_ld_library_path(prefix: Path) -> str: + # given a prefix, the ld library path can be found at + # /lib/* or sometimes just /lib + # this function returns the path to the ld library path + + # first, check if the ld library path exists at /lib/* + ld_library_paths = list(prefix.glob("lib/*")) + if len(ld_library_paths) == 1: + return ld_library_paths[0].absolute().as_posix() + + # if the ld library path does not exist at /lib/*, + # return /lib + ld_library_path = prefix / "lib" + if ld_library_path.exists(): + return ld_library_path.absolute().as_posix() + return "" + + +def main(): + if sys.platform == "win32": + logger.info("Skipping build on windows") + return + + with tempfile.TemporaryDirectory() as tmpdir: + with gha_group("Downloading and Extracting Cairo"): + logger.info(f"Downloading cairo version {CAIRO_VERSION}") + download_file(CAIRO_URL, os.path.join(tmpdir, "cairo.tar.xz")) + + logger.info("Downloading cairo sha256sum") + download_file(CAIRO_SHA256_URL, os.path.join(tmpdir, "cairo.sha256sum")) + + logger.info("Verifying cairo sha256sum") + with open(os.path.join(tmpdir, "cairo.sha256sum")) as file: + sha256sum = file.read().split()[0] + verify_sha256sum(os.path.join(tmpdir, "cairo.tar.xz"), sha256sum) + + logger.info("Extracting cairo") + extract_tar_xz(os.path.join(tmpdir, "cairo.tar.xz"), tmpdir) + + with gha_group("Installing meson and ninja"): + logger.info("Creating virtual environment") + run_command([sys.executable, "-m", "venv", os.path.join(tmpdir, VENV_NAME)]) + + logger.info("Installing meson and ninja") + run_command( + [ + os.path.join(tmpdir, VENV_NAME, "bin", "pip"), + "install", + "meson", + "ninja", + ] + ) + + env_vars = { + # add the venv bin directory to PATH so that meson can find ninja + "PATH": f"{os.path.join(tmpdir, VENV_NAME, 'bin')}{os.pathsep}{os.environ['PATH']}", + } + + with gha_group("Building and Installing Cairo"): + logger.info("Running meson setup") + run_command( + [ + os.path.join(tmpdir, VENV_NAME, "bin", "meson"), + "setup", + BUILD_DIR, + f"--prefix={INSTALL_PREFIX.absolute().as_posix()}", + "--buildtype=release", + "-Dtests=disabled", + ], + cwd=os.path.join(tmpdir, f"cairo-{CAIRO_VERSION}"), + env=env_vars, + ) + + logger.info("Running meson compile") + run_command( + [ + os.path.join(tmpdir, VENV_NAME, "bin", "meson"), + "compile", + "-C", + BUILD_DIR, + ], + cwd=os.path.join(tmpdir, f"cairo-{CAIRO_VERSION}"), + env=env_vars, + ) + + logger.info("Running meson install") + run_command( + [ + os.path.join(tmpdir, VENV_NAME, "bin", "meson"), + "install", + "-C", + BUILD_DIR, + ], + cwd=os.path.join(tmpdir, f"cairo-{CAIRO_VERSION}"), + env=env_vars, + ) + + logger.info(f"Successfully built cairo and installed it to {INSTALL_PREFIX}") + + +if __name__ == "__main__": + if "--set-env-vars" in sys.argv: + with gha_group("Setting environment variables"): + # append the pkgconfig directory to PKG_CONFIG_PATH + set_env_var_gha( + "PKG_CONFIG_PATH", + f"{Path(get_ld_library_path(INSTALL_PREFIX), 'pkgconfig').as_posix()}{os.pathsep}" + f'{os.getenv("PKG_CONFIG_PATH", "")}', + ) + set_env_var_gha( + "LD_LIBRARY_PATH", + f"{get_ld_library_path(INSTALL_PREFIX)}{os.pathsep}" + f'{os.getenv("LD_LIBRARY_PATH", "")}', + ) + sys.exit(0) + main() diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a3ec07c37..61913fcea7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,6 +76,22 @@ jobs: # start xvfb in background sudo /usr/bin/Xvfb $DISPLAY -screen 0 1280x1024x24 & + - name: Setup Cairo Cache + uses: actions/cache@v3 + id: cache-cairo + if: runner.os == 'Linux' || runner.os == 'macOS' + with: + path: ${{ github.workspace }}/third_party + key: ${{ runner.os }}-dependencies-cairo-${{ hashFiles('.github/scripts/ci_build_cairo.py') }} + + - name: Build and install Cairo (Linux and macOS) + if: (runner.os == 'Linux' || runner.os == 'macOS') && steps.cache-cairo.outputs.cache-hit != 'true' + run: python .github/scripts/ci_build_cairo.py + + - name: Set env vars for Cairo (Linux and macOS) + if: runner.os == 'Linux' || runner.os == 'macOS' + run: python .github/scripts/ci_build_cairo.py --set-env-vars + - name: Setup macOS cache uses: actions/cache@v3 id: cache-macos @@ -103,10 +119,6 @@ jobs: export PATH="$oriPath" echo "Completed TinyTeX" - - name: Install cairo (MacOS) - if: runner.os == 'macOS' - run: brew install cairo - - name: Add macOS dependencies to PATH if: runner.os == 'macOS' shell: bash diff --git a/.gitignore b/.gitignore index 153717f347..abec5da495 100644 --- a/.gitignore +++ b/.gitignore @@ -131,3 +131,6 @@ dist/ /media_dir.txt # ^TODO: Remove the need for this with a proper config file + +# Ignore the built dependencies +third_party/* diff --git a/conftest.py b/conftest.py index da37e19ba5..dacb730a29 100644 --- a/conftest.py +++ b/conftest.py @@ -11,6 +11,7 @@ except ModuleNotFoundError: # windows pass +import cairo import moderngl # If it is running Doctest the current directory @@ -39,6 +40,7 @@ def pytest_report_header(config): info = ctx.info ctx.release() return ( + f"\nCairo Version: {cairo.cairo_version()}", "\nOpenGL information", "------------------", f"vendor: {info['GL_VENDOR'].strip()}", diff --git a/manim/utils/testing/frames_comparison.py b/manim/utils/testing/frames_comparison.py index e20e1a2a56..ea067b64fe 100644 --- a/manim/utils/testing/frames_comparison.py +++ b/manim/utils/testing/frames_comparison.py @@ -5,6 +5,8 @@ from pathlib import Path from typing import Callable +import cairo +import pytest from _pytest.fixtures import FixtureRequest from manim import Scene @@ -25,6 +27,7 @@ SCENE_PARAMETER_NAME = "scene" _tests_root_dir_path = Path(__file__).absolute().parents[2] PATH_CONTROL_DATA = _tests_root_dir_path / Path("control_data", "graphical_units_data") +MIN_CAIRO_VERSION = 11800 def frames_comparison( @@ -81,6 +84,12 @@ def decorator_maker(tested_scene_construct): @functools.wraps(tested_scene_construct) # The "request" parameter is meant to be used as a fixture by pytest. See below. def wrapper(*args, request: FixtureRequest, tmp_path, **kwargs): + # check for cairo version + if ( + renderer_class is CairoRenderer + and cairo.cairo_version() < MIN_CAIRO_VERSION + ): + pytest.skip("Cairo version is too old. Skipping cairo graphical tests.") # Wraps the test_function to a construct method, to "freeze" the eventual additional arguments (parametrizations fixtures). construct = functools.partial(tested_scene_construct, *args, **kwargs) diff --git a/poetry.lock b/poetry.lock index e725139f51..c930875781 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "aiofiles" @@ -273,30 +273,30 @@ lxml = ["lxml"] [[package]] name = "black" -version = "23.10.0" +version = "23.10.1" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "black-23.10.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:f8dc7d50d94063cdfd13c82368afd8588bac4ce360e4224ac399e769d6704e98"}, - {file = "black-23.10.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:f20ff03f3fdd2fd4460b4f631663813e57dc277e37fb216463f3b907aa5a9bdd"}, - {file = "black-23.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3d9129ce05b0829730323bdcb00f928a448a124af5acf90aa94d9aba6969604"}, - {file = "black-23.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:960c21555be135c4b37b7018d63d6248bdae8514e5c55b71e994ad37407f45b8"}, - {file = "black-23.10.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:30b78ac9b54cf87bcb9910ee3d499d2bc893afd52495066c49d9ee6b21eee06e"}, - {file = "black-23.10.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:0e232f24a337fed7a82c1185ae46c56c4a6167fb0fe37411b43e876892c76699"}, - {file = "black-23.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31946ec6f9c54ed7ba431c38bc81d758970dd734b96b8e8c2b17a367d7908171"}, - {file = "black-23.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:c870bee76ad5f7a5ea7bd01dc646028d05568d33b0b09b7ecfc8ec0da3f3f39c"}, - {file = "black-23.10.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:6901631b937acbee93c75537e74f69463adaf34379a04eef32425b88aca88a23"}, - {file = "black-23.10.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:481167c60cd3e6b1cb8ef2aac0f76165843a374346aeeaa9d86765fe0dd0318b"}, - {file = "black-23.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74892b4b836e5162aa0452393112a574dac85e13902c57dfbaaf388e4eda37c"}, - {file = "black-23.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:47c4510f70ec2e8f9135ba490811c071419c115e46f143e4dce2ac45afdcf4c9"}, - {file = "black-23.10.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:76baba9281e5e5b230c9b7f83a96daf67a95e919c2dfc240d9e6295eab7b9204"}, - {file = "black-23.10.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:a3c2ddb35f71976a4cfeca558848c2f2f89abc86b06e8dd89b5a65c1e6c0f22a"}, - {file = "black-23.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db451a3363b1e765c172c3fd86213a4ce63fb8524c938ebd82919bf2a6e28c6a"}, - {file = "black-23.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:7fb5fc36bb65160df21498d5a3dd330af8b6401be3f25af60c6ebfe23753f747"}, - {file = "black-23.10.0-py3-none-any.whl", hash = "sha256:e223b731a0e025f8ef427dd79d8cd69c167da807f5710add30cdf131f13dd62e"}, - {file = "black-23.10.0.tar.gz", hash = "sha256:31b9f87b277a68d0e99d2905edae08807c007973eaa609da5f0c62def6b7c0bd"}, + {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"}, + {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"}, + {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"}, + {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"}, + {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"}, + {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"}, + {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"}, + {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"}, + {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"}, + {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"}, + {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"}, + {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"}, ] [package.dependencies] @@ -2387,6 +2387,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"}, @@ -4913,14 +4923,14 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.24.5" +version = "20.24.6" description = "Virtual Python Environment builder" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.5-py3-none-any.whl", hash = "sha256:b80039f280f4919c77b30f1c23294ae357c4c8701042086e3fc005963e4e537b"}, - {file = "virtualenv-20.24.5.tar.gz", hash = "sha256:e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752"}, + {file = "virtualenv-20.24.6-py3-none-any.whl", hash = "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381"}, + {file = "virtualenv-20.24.6.tar.gz", hash = "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af"}, ] [package.dependencies] diff --git a/tests/test_graphical_units/control_data/boolean_ops/difference.npz b/tests/test_graphical_units/control_data/boolean_ops/difference.npz index 982144359ebb52d7413537465bb16fd46813400f..dcc11e639c4eb5751c6b024352347b1d76f9a156 100644 GIT binary patch literal 9419 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 Z|NB8C8;fnz2q?&) z43Q$B3_)ZFArLB~jIlrxgpkOX0+J8{Ng#yW9ql^5weDT_pL_p3WC2;p{@%U!`#taT zzVEX?7yFI>P=z4qYw&vjTIf6Bm3|0*2n^*L<$}-tsjJxry5V{qyrT zU?`*UpdS=sYE$?d#o0kl3*41 zp0I;kv?P_z$kkJsBv*Vn>D0_`kMHUw zRT!-K554<=s5SVmKzvYV<>xP(`|scXdf-1EcperoT)lO4gz?*fT&wuUqty5b{4K|I zcELiGl-eLeBnJcrw$z19gqsBnzGUmV@@wF*kNB^?caY+$g%P7x8|oAR$g+7IecM)ARgw(89N4lk0?*R+vr8 zi+@Xb(yE#`F3L3e#^Q(DeT3p(2a?b?ILKgW%pk4fx0wWq(`trf?P|U+swRL@;y{#S zpS*VA_F||0fS6g~LzGDkdW&JpuWrS}Dr8*!nvD8ypyv_y1ZN1oYcF4;+h%0tq3g1q zf##;X)38_Bc^g$*x)t$o-?w?Teq-J>U8R8;zr_-5j^nOZ)IVhM zt;!xLI{dbxla?1}+wjX4$p?~klaB~u_LN%8mf%Fwg#tM{Rw2(vQ6niS)PAkVA>XkC z+qHb9f0{KvRGLTok8jm^={Rn6u{33$swE;*(MU98Fgk6jhj{U5sfd!;vSYVh!a>W( zca14Y=@BSKg-_E$^ERVHEN&&*?k{G!7atvRJZgD1y@#T-I+aM5wPA}jNOx(0qi=3X z&Zo81d5>ZQK9%EE9$X9m3nw#H!`h6!U9r)LQLq!;^+##0HP^Z`CWpgpmS4FRPs2FO z>z{@y$Cg<>2*d`c`f{-j!`7N{S?gY1?4{_u5O=a6MN)n#na@75Ht}M2DsS&x$I3{R zlL~LA*4~n?=doMTuA!F6u`=>ZjjikheHzAOmc%%IAE5?)-+i(HpSh5RGZ9C*@%x^p zrTT3U@x9!VXD{vNKQr^MFz&Fphk1#Y&k?k5Ke*;k!Q8e~l5b+z{T^0yo>p*D(bQi_x`b^T6y5Ga=~ z727(JR*G%qM>KJhk0~itHFLu?fqPF}{+=&~ppPxf{#?VgCW?O1@;M~&U!-(|>ra6) zv&`Dyl2o%vA4}{nmO5V3y1M$1KUO8m3vu2NmCp(TxZn zO$t3_Yc4eVwpz8ord%tm9&4xphvCQC0ywys;!(@}IxSX2Z$*sba@Ce+WcfER@fuI= zA6z5rYT62-L%d3`e_3isnM_^M*sbr>BNuFeAk7Eyl!X#_=}E%%`Bq`X*eO5aW0*{` zVqt=bO(yk6hw;zPnEYz%Q~6z)L2I=x1D;~N_;dI=h+>R_x&eX`N-hanH67UK85yRi z&_dypVr?#|M3l_6r(EFSy88#l6E7V9oumQMl($(7M+7Rrgc8bZNohxt14drqpq(bG zGw^`FJ$2pTXC7WMZRK?i6)_sY(&fH+*6-C$;U>CM>*6k zJUg9K@0cx-kRJ#tZ5D5Ou;B1GL92LvBn{KFTpl_Fi-n-~d%?$qVe+;ntH2*pxdQjF zs5iu54j`af#_U4VYL3AUfsnj((fUkAoZUCZuY9tN+mDvkYKTx#j= zwtjZogk7QJT$v)Xi7>>nxvZY~(rWW`A3=GVO-=G^UDbEu0Pj;paV1VnxiAE4~_@^UtB}R_c2Rd2k zV70)qhK~0239C9x$5qrHdrRl^ANEz3-}R`v?il5iY51Yc6`<0?0FGi5pd6JMEDb3y z9bjV*t8aNA2nLzCG77gm{=Sqzbr@Ma!9rpj7guc8##AVDHQQlrxnbejH|(aT%p;I)CSwb6pV@(GYRD@=+2e&-%0gXTa9Nl zFcVP`bb^DXXSDtj|8aY;d?Ej7ZNzs*H0hPal^y%dCt(P{bY&L@;VOpDawn%Hec4ZC zw{IY$1-8N0cTqttn2Yn0iI`rYy2PfxeoqW18UVMsxz3f0jZ$Aotle}>4oigZ>!c*B z$eS8X-;PqR4>M^X17*g*NZYa`NC2D4XPyX#VB=cXGu`|^#|ZvJewc9nA}Y6)q$>Nz zDKT}h%8$Mzvd=iyNgzScb9cvArNfutaq|Y#`W7pv{G56S$5hq1)a#BHu1E(LSI#?B z1(oLiaCdVdk!VAmp&$4P`riB5#m_-Ui2qc5P&NhI^B__1?}F9hFl*rg2SEA#yT=Cy z=+1dTTIV6ilTNBX``Y7QWLqBgfsk!=l;S*LVN3>jFCO`-iGq19mI_}CVozT-?duOEMf%KAm>z} z1IsqL*X}f<@tVknmmm6bcg}-Q@viW0?57){>P^4gFEy_(ft8!{L$2jCZ0EB*+yX1? zg$W8MXP?%>>6UX4bm_sBxsuqYmWG{g6`wIoz1Tz4*ycSnJC$`UExe`9MwGsbf1&gZC{%ja~g_!4$>{y=7 z^Y>ad59Q=U$ILOy|6^Fn&fhq&Mh$eF5Cpp934?FzEPg6T>8dV|`Vu34M1uL>Zb;ka zV-s>U6|dlzZK6ns{q2$u67d$=m7aS&BM;mvymRvg%Du>c^Miw7G^hg8*fI{z1S7C5 zOcHDq`RP_RqT5@+Xg#N#tUQyL1~V53y7BZuXIyN}ZKqT`*LwLqOXbD2R_sJ|{h?Y# zMEjAaWVJT@rR9$Lh`GO6!I-ij;vI7c7j)aHbT=xVnA41ljBBm78TZwfM>$&y&xQAu zlR3|1(E#1Xz_gDK)wHwGNCRdnS$7?ldf#S0I#e5~ULEY34m>ihF(q{RT+aN+wPCl$sy<5to6z^qfB2iJ!D#O|Bo!t|wz$oa z7gq~yD6w2q+F46%4{#u1b!jVJ{7IM$80NSe82k3~*gTu(p?u}wTqYTz!A*&r&++%# zVIv+wcjB<@FgreGGXy0uhLE?fN=W`38;UcXEpzstu%cm8OlbvCrXjYkK#ZK?+(w6U z`f{z#M$|MGfi})VBYRuQ4HtytMMQdIdpq{b-THuACQP`AU!McrM!qzFA)W%>e%LH zUWfeHXcQw%?4*P?2!Hwuum~RmYLA4HO3F>g{c~mHL&tq{m!nz|RGjHP)X3m3-*(ad zNH4Dx%7^T@qw2R=_1DH;mrQ?9ugg!+jyh}+`x%K^%F+PfmPhxCa8Y;1-rklRHY7a%mOb?2W!29BT(r` zw1hv}X@$Vi4}b+Z0GOqt?G8~SCVocmKEsSovOai!9v-*XZAnEhvD4|wYUB@@v+dl3W7kk>48d;A6bgnn4a)?J`mSxdxyc)F z<6Um}?=`QxJ<#L$xuvb=9dwSjn$Okl{4qE<82HOBys<+Yf9#U_FLNMnFo(_6X}HM#U`T=3jO_$5N?8A z{==~|j(q%S_T)I(k@!e<`i5t;Aj{bJ{uJl{IvdKb1P#4D&?r_zARo&bYTYt@VsLuk zvKuqcQn$rkTg*D79vd>XFCUbk?2a>G!tx`ne2};GD%U#B>t7vqs~lEct^3@j3K~RC zSujErA2TwX6TR5k$u2F0AlSejRV;5X`K&7l1dk3H2ri*tVYKx0v-^Ct7eRJ zY>dLovnMI2T)E-WEIiuBKc|j3B%<3A{Q*OHzA2h)hHp|-tyLe=X#x=aybigztn>VK zA`)hM-#;VR49@Nd0N6ag-*)xSl(I(7_JDwZW_pac>ivQXXqG>fzoIPEM09|J41|J1 zvQ0c2Z4Gs9okCy`H`KN_CWQUYVdQ9fylfLUMmFE+`3;Va(WL^dp_!Hd+S<#Zj=gaS z*tt~L+1mE{JJ)!Zg*JkrxBhGKSV5}4SK%(!MmFeChMBf&Ew+;|diqh)w-;lr*QFCm z`Df$d9}U;Kf2>MtSfdSGpN1)CmTfamtdy-ZyPga!eKJfA)!{cO)~g%sjT%8lC7FUW z=**MwY!$dH3rrDM!AI!A<83}C$Fr95>^`Th`)3mczj18(>y+A1QSi0=Ko)6iEJ4R< zc%;hD*>DXyE}L=Lzp#9iPqLx=eVp0qgKQ2+Gl6k zBeQR}=s1itO(a{Dz2$rzJW{)Z%nrA=j8!&kQN$9>@okU`|H4y)(Gy{}QcIgEBmMUd zy#jq&r9!%s&o;jQ%R`2Ghca_dt8&Q!bs0ahxm}#MThw`fb=aq@ zk>`qnr_847ni%S|g}7VuaaaycABmev@1%>8?I`y!VGKAz7qdI1PRy-gdG8;t_IDKn z*B!Pi>`M!k}{m1o{3F+e6L;xCyIQBtz@^rNKkyK)Q2ghV_(`hrgpv5K3-0 zm8=heLSYMMUqI5hrZrG-@S_9SHu%WIL?a+qbp8wB36s8C%6s>@!!@qGzGFf*}f;nYqO99;$3@y#)#nd)!i+C~ehm?lx-5>Fa2eaI(wb z+=~EmE{1Qq(rbINA5RL5a;b;6znljw2xjMFKr8l(sNO2A*dY;)g=%{rdV_PXwAQ;K>>GGN<(yyQ=cgw;H>k{DdXBbfU z@7q~Lbcqp;Hd=jJA6J|4Olmnf>{G@T@yA*c^d){8+S#WYvlg= zJD|cHoDW1+jq$01odu8Y`qq zN|fEdNf_wcPSYJ`RpL#fy}*41~+a}yk*ZYy+b#LCC>@e+GTKjjOfNR<)(cf z6)jg~b>YPy{3Iog;nz-xFR1av;(faZRyguT$KKR!h%+25qDq5wJhA1j3T&^~ z#yeWrw$K|IW0DiQzT*4t(ScqLS=u)kr|!L%-yrH+0O2j%D3?tc#qI;LICqjKKWYK) zkB2`Ad4$Fi&3mK`AQkn(f^Z#tVSP;VU$^oEUgowQDlRC-?J%uG=}zW=v#tDB4Lxlk zk31UbwYc3oy5bdH!q*M7@;2}`Vcz6Q+fOxz#>z(IVqckfeoRDEME^1;s}U<|5p*etmW0XBQ1w`#%5*$s4!t^k{6rjjtvK1PsCtL=-cYfEDP&K_lBvP+dk z4=~ww(Nm*3s;v1$N!GZfIw;D5Ry99{b!cU-9a}ey(G$cx09-aO`P4v*lTVPgHGlAT zTu9ot`%BWe6j$L`YR?lO5_!KV<@@8bMShnaK*N>{EJ>BS;lZ52AZv42tO0(D4w5aB z*cH>7HotS8?)`cCBwac!NBzqS{zU_TfGGSc6z2{wlHJ3bVsQbgba3Qzvz zzMl`Ijsn5VtI~f0w|z=SgH33yrda3~nYDJ8swWt^8)_D)z3`DaF zJal)%z8TBeDOGOxn&APk{oZ^ercfF*Qfx;sZ2+m$)7kpX)sWMa*g2daKzxTbR#{kF zG?9Y&mN(gwC+jw$O|7EN03^I|<5T(wt zz0O5@bz!$Eb6riw6N8AL5pyJHux|(V$|CHLyNyUDFwpX`Wr#ARqAtigY1T0MaeYvE z7(`cV_Z*2-%oS&%qrLjS*eJ}%GFYyd|0juf!g6hf-G;X@P-k^};d`FHFI>GVo5;wn zOAyqfwPh4grgK<%gI}NbYeeua!Sb5ylfUnW zj|a~3U4@b%9rqXzk1hR&{mZOums!EZ}W(-m0#)s@?Ivf5K}k zR~Mk^`QG#lgSLocFk8N~ky&@+uUF0V&|KI7+~&|T0_}V+$C4;oqFkwR2EHm4tFaoCN4;g%t1lP8X-j-4{h6jV($wk`n{MT@ zWfwPdwZg>dJSVsQO3%Vg=A(jCnP+Zk6%J9to+u>+*w_WGg2_L+R5R;mTUsMztJR_E z@wfPUljnvl2s;;snu!zialyFXBHxeFMy{FtB6Wl$AW@@jDoZTXIaG=1XK(~nt+rcKt!Yj0&&)Yf*1uU z(xRdw2@okEln_P`A_|F0Z;8}MAcQ26LP&T|oZ0rn`~3?RF3NSmInQ&>x$pZ^?sM8{ z?Vn5_2>LVl+6BF}IrCukj}HxKD-?1$ATrqhV!)LE)2K`6HPB}0>bf1^KOxA@`0Edd zH}>rVMBl^xpAKoA+?BQQFK5=29$J_E1XA0#W=-~^tLwA9f`oy!eH-;Gu5UjRbV^uj z(Q(&2&3ye{H_kKfppxx1?xcmk@BQ!wX}e*Nwt4sCqJRA3w-hpN-1FJ~bA1)Vlm!Lj zJo{&_-l2HDg5T6Hi($wl_NVa4Z|_)Fz!!%!ed1nQbNs5M6T9!u#=oA%TXS#iQrwje z-q6M_Pu$S%YFV6!VPv%6sf#O4j0%}zuYtcbp3}b~Nxi%CBPqQ1zQc0H&NB#6&u_aF zwD+W9N4h5F)7mw^FYbTe|F;AG*A6^-MhF|Txq|fnZvDLXj+JO5lEgT{-aSa8gypU`SUJ%}um}S(x%MO8#=; zPF5=d;n4OepZ2`i3@q%0TT|WmKVGHYpog4F^w6jgbj^-81rcg|O8raUhVZ>tla1S2 z+vK6lKPk(eoAKxU=S8LK^>Q+HE!lkoLDQivVy%GAGuPVGLzADnR0@YzdRko#^>Se~ z1C_VJCFEcFjFNH=&3KwIZOJb9qs*fFV{K_cKaaVx{3%gmtx7rHVExAJn{RH?$@!1N z8q}%Mcs+1JUsgFf*jicl(Izh!UwX?GBqLSnPGody2X2>y>a|N{h7VZhP^)) z+1zZR;|Pam)SlnnbgePlMdM-X8Am;>$`zbnKnBB%yKs&9CDb>rnPOk|sCTF7eZ! z$0##D&_c>vh-8U7)iHkd<*(uvLaM26<8^g2>Y;M4ni*f~u9@zFwy}7&-VCEiCs8~< zG@qP~-(fFTvzPwZpBt}_vsWh6fBJ{|-#856FVNM%4^=_*Lm27ewt$asxQoOgl)Xq2 z?hKC>)!q&`hd>Bv78EXFe4OaE?|Lq>*-gwZ#p^!5vr|^gdF@&1hbmiI7_;?BUg{fv zmg`5zB2tBKjfX_&Ao|@+k?Ehu$b-4jlO4g5>OcdeLG(rs-&n-wJ|aeGzYaWFi$w8m ztrFd)w~1S94Vk;*e4372@5cT#R`JELTX$ai_9F$qsr+F{ktJyzrvaCK zy42%*^oEId-IS;*hQoN7xWqk#Rj!=&8d^!p>+>kzv0c8r*rpkp%#M9+K9(?m zZ${pIYfeg&ef;>$scnwb;)iUEyN*}PhYlq^ zWyheaGaj}i8~J=qmOa~jM9{ap)!}gIv?NezC8@o{7@W+M5IwsMVj>b2=6A?26@-UP z$1TiF=u|@NTz`OIqCH@;BSR()ii#C=9}QjVag&fvYgkX+TdY7O8&d@xIx;JeDfTyy zr*8|6xz~sVmE=jBAL7)&n8AF#YeGcFQ#(hgeHKnrPB!z=t2^6Q;vio%GrZf$;n};` z@4aqdpOewvxx@j+V$rIdJXa+F!D$D3DX-gF-@^P5g#AMgnn$ zU0`9l^Kya^PX2pz%O}zu>Eg)JLAbo7^-j=glhDtyda&ypsFaj*`YN zk1Y%H;FHJq^BnxvLGP{F?|JY>DkJ?$zK6>tRhkX1h|kgmpICq8sZZB>I&Nqr324qd z@|g(o_jH_rfl_3@dYI1!^}6-J0XJ0?v^U(2shztOBN5=RcCvT_=+U{S4B~KYxK@g# ztbQe*EkEb1%^q=0X`)TQwwwr!@$W)THh-BPs&Q#FZbo9Xf;_m65T7_a(FTh z-t4XP8>sg0WuzifCBl3B<_E{Uc-&bxTN=W`o^4)dgXae$9MTgb=NZ4M>2L3^^evFg zb?BfrMvl}uvq(ALGy0s5j!jvEApXV)&BFw;6*U}X9M6?pDmOd=r}55H7!t4%Rn9h# z;?GoOj9JgWY-?R!niIiIysG!0@#hIv@noFTCzuOg1JzzEt1L?5_w2F*_&vXzqS#>= zDj#}YoPM^pNg4;ZMlnoL(U^|4i&;+U|MS7;RHKC?`DhF?IC-cl$kA$bMU=&ibc*lX zn>!`&r9}CD?kNR$1?D|>pt8uD60Ws?7m8t7g5<=#_|&sYegas^YHmt^zl>e^ON)3Z3|L^It^aMH6!ahS=fkna5V&zy3n6yHE$x6k_6`ln1iTG7Kx zW4PA)gZbL*y^fn0lZ&!|wdsM8)E=6Ap}?0<-@Oo%#6olS;(N{t7*r#Dq6bMs&t_hs z9|}0dvj$R;S}af3&;QV2l7v@8xFX1qY%<8Ru}p8*Q4hJXYpij8siFI^bAjbJ$9@&f zN(Ja@CBx)o4hx$3G`SG(QR(xrJDIBlE8Nqa%+tkNrw<4UIE**qZ(Lx?vy@V)xMI|B zg*ob0llNNJczQUYl!Tc!mT~Bf*fLIaZ*Q5F7eZ@+Dq^g(kZ8-?DaBeS?5BLuu&iXQ z##_9tyy=y=%qT~ilKA;Mv`@$qzu;md)oqk+372T&uu2X#ZuRMo{u2N`TNM&EUJ;MM zMGB`nJLP|d-k&`(K#rl;MGALbX|d(KE@#Dat8%Y3-$vbO-(q1tgea&2WT?B*l2sPZ zXQ?XK5JxG&uEu}=A3WYvp*2+DJ@_)fLENP6m+)f-2(ji~p8*D0vZ`0A^#9Nv z->Q~0EszNpcY$fbk-k}zu*Kij%3xXFZrQg7-=;cWy~81=0B=YV%R%tJY5p6S;=S$w zL(M&IqqowXI8hm0l8I|5>@}oGPHiu0|4b5vhVW_6-VkYvH_WE+JFqS=?6Y~rMAMbo zk1K4`<}V+olGj1|*flr(F1u6b_O@@vW}EgN0Yfh49{U@PAIc&!zX zf@)^^5^c=zCyM1navOr^9=s}^DL~zP?2x*TZw4JRM{<#z1)g!M6P9>Xf}ir3$8m*ocqo!Du+q{ zXpP>~$X-=SyqfvFB6kfj!TqB1!Qw=2**q#RvIFqLz5JtKdEsxVT)=myEoKObS6t!! zmwWF?-6iwI?Gf}`_`pFlf~UZON{7cV-nO$UGq$)`?OJULewXv_(N#OLs^>%qH~LgU?reBB}g_w7mnr|k#_c0 z#H5hISpkYnT#b*#5t_OtpAAa(QJNs5T#@J9u4}vm#wPZq&9m)EeFvfImyBT#`1A18ljRWjfY*{3JLrSorjn^)8*!Z=2hxCS;KC^2LIjI0alHQ z?};mahIvdsXOX{G)94D+!tHg+*~7O7d-zKlH5`NYlO4X=qcNZL$N0}r56Bugr;0t_ zry$(jZ)*Ev%#m_d65ko_I{ji7a?;RV_LEprU>SKdi`_YckiZlMX?r59WVQ zO1wPt;2>#vA&)yXX&j$%8^w!Ro$KLf*ZL#-%R7gY7hkDmG0!xFe;!Vdj;Ged=qJrr zO$9;F{%toH#N{jVn^`L(hp&qI)|{$5jqVehC7XU>l{);md?aD<6Lm}`;uzvfF894B zSA~6evO)!HV~>FvSpNPieoG(Ls7>?Tm*&nr#9*euXheAfya^k?eZ(JDOL&)K^4KZY zw3G9~$D-c-B8TBMKM{bx09~bQwIMC{SGCm?a$7=No#2)m3OvRVx;|tqxX$%gw8b!C zxn!AwkF}SrJgDg?&(Jakqaz1j?n?iKTLnQ+-9J;qdF5qZeoMT`-tYIXztKgUNQ%ke zF|U8SMQG`2Gy8N(B^f5S_7S|xQ9jzq{V^rVpSMvfI)#ilPRw< zW|;seACM)Wl3UjzFM2=q*3r_^@~T)$7`@cCsgwQ~EU{>i~QC!GH1CtBCT!-gop^HTo#^f$Xwr#SeO<=Ia9TIk+c@YYHD?l3Bw z4GJwyW%Xeg3=%K@e1j8Q)tt2QV!Z@VuBgu8MDb8)7E}F(YynIKw_Pn@uY?E%V4Kgq zp>pF(i}QSw*qDgPxeb|c8kwp1Fwx)@VSqPpc$JJ^o-M7Z1A2_V2d}+BG=}4Mw(q7L z%}xB{?Gwk#aTf^>Dve3&b!oU1>w8QcTuz6GyzPncH-!Kwwlk*QK-$~S6 zVEdq}=Qcd_i1a#ixJj&>dgPFWOYfjl#0?(BmaueQfyHoL6oQ{}N7woX6p`?j71I7_ zGh1<{Un;M3Vu`CaQ&K@}DNA{Petu)GOQ&fCpix1$+wt5MDJs>{=F z%ZvJm9)|cWJ6kNnlcw%FR$IE4d)~*Kf}pak+~M$(6jNEODhVrvKNMF0hUXVYx7iVOcnJ=&$Qy`<=YqdcF8(m^O2A9>t&KLS63) zGdz+K*=rd+@tRt+X6^btU*{9AGmX6QmYCCxLHd7+R1dvjS;3{4U1~{D2;=rS=Rd&w zz9{J=jyWQGp9+6~@d44l^#{`b6+g-HLsve(rxpQH^2eqUD=QfzJ1iqSh0)+dPJ`g3 zl)8Z6N5Si&d8c&+70C;@ZOraK`QV*pHY(FY%Mh&v9UBMFX$)=sJU=Xd^~+@DAF+n> zOYqw^qH+V`4eZoB3+>eY44t+DC4**%IT^=OtQ5Na^Ir>0oA#&kK9;BrG--0(w;IL* z6M94GJ#^owgC+yn5nB7^_{r(N;bG3<7Yv2q^w_Rqy5%idYY{eF>Lu27S%zHVLi{C|2e{lRWh9IVe&E+ zac2KTzoigoA6p7?F!>GOrolX)#Mx(^oa-H=jN!mjlT~QZ%v8`f(8*_@5Z1=^d&}u8 zV3mP-_7dHfb-46My@ATV>1UWwMl=67l&_KISrg*?dzgQw8ufeP(0w(f_y=HBmZU~O zUWv{qP6hD1a=&JqKcZ?k&MuQ&71*Bk`}5wT`*y6==)$j?A1M1lCVlG*DwCH&Zdq>t zFyh_tP7)YpSoUMyKwAt<%t zyWP|zkBu7yV+I!C=U68Yz#vg2GT;S$z+wcPz`n>DR*M|7k!^qH6*OT>*ta?qJ4(Lb zQnLIV{|wJ&o2gIU*D8VqI)6xJ8^5p-B#{eTRlWcw?;I%&Ro?CUNlp9{yyJ3zp41N` z>|Gf>p5+pD#lIL-=<iLzsTV(bzo;dSH#{{7V5;nZkl=2iytG_>EBt9uEPBcQIWWwn`U}{wb?Y5HJhQ%l0+khpV4{)ycQJXNy9RX`JG(cL1 zpTszdht1Nx+@=smSqVY?ER}mXOcr6noV<0K&Ye4VUF8}KH4OM;lZ7fq(Ek992p*|Z zfp$g;|9Vg+j;w33hh|@#5V5VM#U~~D)j&sm^duk$0Gq#(1JM}XJm^Hq0>JKE%t26u z0l(HVu@1i!m!S;FkTMWlK~BMPNBjlnJ9U7yx6ePfuGv7dJWmeS>aXz5C8H%{@rHOj zI9k54S;8tPqNFI64?ZvZN*4g(9~<$wo;y>V?_0`N<=CXj(WMMN4_L~c3RmZ@4xE19 z9^_;`va)j+qgWbn$TjuNRB^OR6>k_tZ8;|1)uKwEBBmw*OZRUZpCHb+d^#J0#<&1`LME`pLqr z0TSehqaUzm4XyGqzbQNEzNTVJnjz+8ygvS!qh^$l96f$RdnVGu1E5@~N>AL~xg@T6 z%)w(*gys;mHGSqS(WWkPOR=@$>3pLizO)D&X;cwre)-#c$6zOvph3ACb#JX}h5kG6rjb9tf+X8rd|j{wjmrPfyh? z{(Uz2!^e(O(bg6I>=17qKta2QSq(9vVsNM`K~Sk>ed)p=@Fm0&pxn?xH1ylHhShGb*#465Bn>e+!akJuL`ZHRGw{zq&k7 zBL)qCofB;coLTj&=D zL?hc68z$vneuis4<2Fwutteq_{rL?zbLl`?P<#^mWkY{QpND@DmI3lJ@2mXlh@W_U zTgLW{ZrAFRZ-P$WIXi_o!%w!k&fyeh`VOF^pF1Brriwc`Pqy+*X)xrB4Fg>$w=cGa zjS!8dhd+a@_H0Q>7F)M~%y$5uL?+YQdXRYjzLr)1aQlbYcA%Pg>Ct-?>!JN8%7ldd z3qfQaN^(j${n|X7bkqSesXIXPuo7Hl9j~%vSWVtpsWEMs%A8W^+kG^ZjVo$-2-t}b z4o;E?O2HLGh2kGTs_UKCdR6!UxH1(48Co`YUxx9w#)O@z$WRG>{F3mUS?XF1tG~+r zCESS$ZJe5Z!e7x}bvu`8L_;oJ6O@RM3gBN}5?UYFOP)-kAIK7+l^9 zPuphxI3qJK(kE^xSQcsuj5pazcC{p(UkNLi6ad#n(kb5not{tIMM`TtSF4We&U@f1 zY4HkD0^!VbK5)x?Oh!y?6}Oj$#^`XY7_n8A8Q`R~TcpRu4}p07^Ok+5PQp`FC#{k} zFF~}-OElrqNAjBxl=RpW>~;S$dE0D{aFqMKq+%y;&TZe6bze*}yU6T?Ot5mIq9Lbk$_wzltzV4dSjpZn2m8!^9AvJ2f>pGt=4b)y-)p2HC!6=WF2;`N|ba|B}3U6grwMp|0h%1~{> z;Nkj9;q>?c!FvbI8yb3Ir5+GTtg{;j7<|Kps@n4Kut8vJ=NLy+$W)Hy@FdG=dJm&r z8>e5`4NPz=k7y>l{-|frg!e&Y2`Fg+-T4+?_CQ1K*mltK9){uc%2q_MqDNP{Nz}o6 z8s#84u-lTd2?fDd5~vUK-xpvwqFc_|g7$1e*l@j#z z)EXg+ieHD0!0jV0BqYD;vco4#)NX0}*5DvsQaRDw#AX&|;_MmiY^>B_XmsljwDx*S zF&n$OI2eSRRx|=K+;@SLDy0qk#*b;S&|94_YoPOlKx!OI=UQW&MoZogVxHn*czNC- zn=inhprV|Ef1_mwOn*!7-4Ro+IQlZgH2-^Ad!yxq?XfCaYvu0#>YDh);#fYbnL&jq zzVsa5;Sb{Hg(s;<(%-3;{E`806|lNh5Kc9YWp4;RO<@e>u{;kM8-$k2k4oNOD>y=H zr&kn^j)u+8}4DXDAiufGGv?#rL4&)N!E6lT`R|Lx2^{i+$qQ4s~P8+rU2=(NWHU+?6X zlko9jZooKpruaO^tHIL@^(sK|H_o<2eV0*9^!T`yd z4^>?G7#-lgN_+eyR?xfoj@-4qQAgm_;yL*;4!?S3=1ciZfJCg-twG4!%t7eZQM@<>Q;ssjb|r6j^{U$eb1i-+nDBiz~8%_vzBRaB~04w zxUa7h@kE=ke9{vhchM6N*h_C{MfuGrP@T3itOJkL*F4w6R?fb&l}qMur#9ltXOnat z2-3P*@`uKK9yIWTHXwzCDJ0(}%Tt9`=4f{QyQe>8wYs^&vT;~oP>p9gnGQw5mUFg& zr3Sj24!Bo|+p^nIZ-%75bjqOaphQ)tv5R2pK=Tc)s=V_YE z-Y>gohVF0jb*3M9Ojqe2*Cruha zJ7{ak<)*r{Bs;wpEOW61w5C(yxwm7(|3>XGU=|iPbFRFLMvQ+9Slia%xbe@WV%xta zg`gtv#p9p#$9@oSq)k$k05!qxh?!{6K@KO7#FL?`;@-}2oszp7=}QaWo!9chcrOoI zO+Rq^+6gj$y}S)Tv+H)dgiAu2*3YBHvgJ9FCaFc42xqA90BA52E@>a-i|XC7F1OTi zhaM-p6BPu)<8k}vt{Ao*adUAoxRHUGUo1b7$bP%r_b6;Zn$tS`qP)C|%Weie&{!c6 zzcOVQ0Gf)Opc7klB2l-k^878qV0EyQyPO0Z?cgn{eI6esRCEc8b>(@jxL2_9FV{Fp#hM690Pa*ovj{ym|sGqpsp&8-CWtU(74DY zlKRo^3xL>asB4>ciFdk;(P5R{fOD_NL~TH}o(A-NRxo4>41=g)oct zjEpu&qI`qe6}U;!9Ti*wW_P{_-Xfhy519S>_B`@#-`|gsTHtuI_Mi2r3!779 z@BD9~K-+e_`kkq|fqanO`b%k14lmmxYP3Frb^@ng#52^wo7_S7tkd?{Y}&FSyfjxq z3E`h?w`9%T!t2R5BNckUm`*C^4U8h!LRTAoyt6IQh_)rbG?FN@Kq`H!y2!#h$~1Z{ z=sL{2?j6;zmw2B=L9w6s>457-(_h!T!LXmY-8}H`R-kL&mhIv9kavR&I)r1iwdAJV z{T;XXQ81-+GN3(8Yy6$R@^ZgBM&l4%b1<`iJp{!z)EPwz2{Rv_I~TkM9l=8ve!F@J z@VZcu1@M~Qw_sQ2lgs124WCa39U@V5Bw~09aSQy~6Z7w1iOG>#?4?_)&a=17vpsgv zAjp|0CTEw_YNE9!)S>rBrV!IHZ-|@0DLq%+*qCAxK7b1mb2XMe@wt{D+^#<7G&a@V z2Dg%qzy`*iIfDZCXts~G;BH*~<;ZjQJrMLVKAeNN`w>2cfc`Zf1U>rYg_akb>uvm( z|LbVMzGJ?*p(WDx|d O0iS@~LYS}jasMA#GS$FA-Q2jYK2N>h$u)iWlombXfC<7 zskx$(qJmJaxuU7y3b|4)AdsLU_&wM?&-42J@H~IPjW3lKdX~>Q*SW6uaxU1f{nri% z1o9*J-V4bWlj@UoAdq|Oc0-gPJ0QMyyaRl^u6y70)(gCiT?6@f^)KLGA&UP}yk>_n z&paD44&TzbYya-Swx16FaUeeN=NB&f-u-ZH{MQ3zKYVEOIJWuf408A5tAECfEPc2a zaDHdwuSb1TrY(ZKD^FdO#z}mCKlIfA@pJ8O|BCVdbKSQ1sgQs#?Kh8}9L85q-_1f1 z=XKqN{aD5MUK!<6O>D{(KQ2AIzDuh@`iVvVR#ekrDyr?)??bNa4fn)#(ZXZ)l(AqP zl+VarN6j%Gu)ETOe3xZyr@0=XzO#J&<+RfTjPER+PUXMd+q+$|+vxge< z4LC?WVV7MVOtEWfn<=w<^!icP7y5f1jXZko`+)3dt?hrsRLkEwfX5A^iwy-NCrvBE zqiM!RaDFpyZ@2I$4}wTJ;Z|DN54x_wD{L8jj zRrAAYmM^?gIx)G&N?n%Ca7r7La#1* z1*`@xX+f{2cTB8A)F3Pvi_%uo!*5j1zX)<=@5ov^1F!cJR}+@~y^l&O29Q)sen|k+ zdtML~S&(lR^>;biVb}}wagh}rJ2Lcl_;tQH-aN`R{L|kfv8e*rV#7DcJfaYCjHLukq5pDYjX<6#_YIV}Z`!Y%f;d%{Ewv>>5(gTC0uyDD-{FK_@&x6|rpH*k#Xqi^w4>K@qv(2i;N1yCA zJhYt<`_FFmY22q=j+{O;BZ5_(#o67GYuMJts$>)Rx$dV=hbZeZt4g*Itmjj1&pt5l zzL2aQ&nopm&kh*%^z=Lk?l9Bxzzn0k7ljiekF+v>MAgi@^s)Cx7-w#0#Q4;gU3>0X z{chRH8O(i0mgF(tQKk4k?Pgcdi2P-E=h5)%#25%jQ94$jL=hT=JTc z#6Qu$j><0zu+<}0)dz|0r85->*4+I^((4QZX1S<*yOMG)kA}Pf`(Ylbqphu7`|f6U zZ8;0B>Qdx3|JBA?XS|OFW>0{UHQSe4ZFNHb5`V%x}H2|Qgt>D1o1%TRx3*6O7O?= zFhJX{NzsF^@=jC$mdsD^(hD$AySt^`Ig|fmSJP)j~Da@ zM4V_epAWV7VR>Sf}erTeF zv47vsfmA_bVNBlikB|$+=d6hXWe5Ei7oF-RySeyhCh0-Az9pMvKRO17>k&6F2}@X} ziK}L>xHpMV$tNzoRTJf>=zE5J&7K$LEyzFVM+hFz)a3NcBMZA;+eKyDCqGoSSw4n> zc{uH--Je)I3AvX9OMzwFX*trIh0?j(xe(+%k!~vrHy~Kf_uXzBUz@-xxUBou>{n_? zOIOy+AaoFu+uQgK3?rT$jOuo@&@J?&7^7A;XySg3SRT`i8V(uM#mb@&RvfH2Qc=WP z7}H!yDX+nAoW*Z}bTU;Yq1h++8W+lKL#Mv%#>URkeKmH3OkJj;`v&sa85WT%Rt1On zWI`I|zkXDeU%Dd*aD06xrbWyyvKTcCZcWlfb~BnAWW^D3Q5K70v&dhO^S#GE{@pyi z9&$nHoB?s590^@miL*Gs*b;H~eP3s3O*yXuHdBzLc16}qxxu0R`e1(g+#y=~L3UQv zmsgLchAEG#8vfXzkwOjB&Cba=WVtw=fR&Dk;&#D9UxvdVkoLkJVZK#0dP_mv%8hoq zGBU&F7GoTJD`qs}14orC(VBL}$>@=@-=$fO*m@cTqlFB zbt@LNY!=VfloJi{sD5r;m8EkwmPIaIN#xM>?Xe%qodfBcOk6y%p~IC zR!+^7S8vrtL|s=!Tn`5ixyLNNEX@A{YVja>QX`&wId_H~!il{3bs+@z+3CY#)Y&~(;>p1IF$)KiuE-LpQ?7-FxaPY3pI}Exjc5(E@E=eAKA}fTXr8mKot)lT|GgT+}2?&of*du z4m9A4reb>wU{P|JRExMBJY(WD-Vn``GI!yFRYIOjdWauYF+~~;@9e9PlJ8jlbvFruVH9OXyT6I z&m7?2ub2^yQm%8hV%2D_stK2VQO&9ti?w)|n-yVRU^~PW7m_;8v2z0&az*)}mf}9d z%V6#-XKXX%UfjEHL)hyK-pKt(&0(!Yo2c_0JkM<2YKN-)iw#CB#8I}Fsn(M({kmWK z7TzhTn?E4PxrC1C+aK2LI>2XCyg5cww)%EKE)q_(l4wow$lo|8=Dya-cW z-Y0vNng=;d{6*XbbpPJvuRVye6w6C#+#EI4tdMpi);KF}TAs~ot;k`!{oUI;!lUpz zR`4J(YY{cU!hMPl=5BvD8*hUVWA@KFL$w96fiE?}$~JX#(`GQG%D4a=PhVq2sJ}8Q zKfCEkOmuYg++3Zq-%2dMv^~{G2dlmY;`TTx)dExW%ys~SkE<(bDs8X8N{>_Cu6U;Drj5jC302z zi32oS%uIaIre6@~_5}l7x(mpO-rYG4{qq|5Zxv z*!?KceB{A)Au@v?Uu>2ZsrfVdDnSAkGTPEi^syP>!JxsDP*3xa&BUy`*NyGGi~}wS zE0SI})=M;VG@mxi(Di69P7CwF3%8{jWaqu^dbj(Sc_IDVvHi}Jfa&9+oEA<>OWLzKxwRz zu+ymYmb12vjfx||z|Vcy;QjgiAI;NBkPEj`b%=YqNbV6t1+ zfQ;PbqDi=t1e4uuc`zPu)X(7&zs^s$jiCE8(y0t=EG`tt3#LJ?_OcWjwSgn-wFIM@rrNeu|&|g0tq|P(l zUHb*Y89lPgv3m@SHE?quW<=A>B9ig1kduFanaCqPMYuYai{I?G1-ZI;@JdJOHqN85 z#tE+6f8^}xA{LgLk(}%~yjfCvBeT@NyY|6yIx%9tpm`7ixuBi8pBNU=F>{ny{n{5N z6em)0>dA9ME6W3Bprs+hG9i(2XQE{sf4O*%g|P-7w~K9S^(?vio6uSt7Nf43n-Ss`!G3%3bv$`3 zh@~ACM04*xy+w+mTAyXp?!XGE+Qn57L!G~!&T}5Ney?im|07s(C$`;0ei!m|$aGSJ zo`!hiddR}>U|>znW5%s{@?aid3}=Ew`Kl5Qv3dR`hlUTGEoYS-Cx}T|2l-idn9oW} z{rk&is76TUbpwatoq*3qXTXZgc~8MZ1J3uo`2yR+dD;+U8ERXdk_CVa&qz5>V)n;b z9=9O_2!nNpKrZR{!h2tr?IW!3q(HM@reL8@kVE>FN9L=(=A@Mg*`Z@G7rN@pem61J z*3l86g{aDrhvNZjAio!-V0#y=YlPJNY7B8a;PnEww~uX=b~y`L;Nmke4ECp4nlofH zPa!a@B-gptlA++{!5<(`-3&ze&KQmnqo5jAz3bvnVA>g#gL*N=_A7E(9ka-tB;2Xz zkwQhacskRie(6DHLIR)Mq({i&$r~WQW?!3xa&}v2r-iS8N*qsqoYMq$7R@oYc|04B zw==HR)5;9J24_FrYa1_ds6tL*2;||ARz{WuCQvAbK;B$#qfP-{S5_s7w#_+!+6BPC zNR?A2#%1RqMa${NUC%(;;$&eV430gBrC&(r%L|CK)QpunP5CiwI9M)iU-*0)!q+#L zuc_Yo4ZZHHCZ{%7(^S@Tv|=S>{M#AUgpGX6rmQTGGFve&I~7Ee0_q71iNK-s(Eqe= zY_{_W=A&YFXHq>+SkWT6?9kC5SAR}^Ob}wK3!p0MQNBy!!)rK+lf~>i>XS;Z+f&AC zAa5?UQE%1Nn)MG!XSPzb{yle?TKM&ygUU#>Kd1P^e2Qt%H8`^}NNlXLu3>?P-kWDD#p%9Z6c=mnZfGgcGar3wNyD3CZr!%pdGyNDHvY{?a(1kd0McF(=eJA*DnY|y1p&!%#@Nze&YglpsuWEjpY{4{I zqzU~w)#=7k-{E(mg3-b!^V2M?e_Cz%y3`zeuiI+FmE+NgundFXu!PLDLzO`YmyUkF ztc>r?z9kZI2Xzpjx0eW@fDEpKJUvx9=>jy6cY&ujYDc1V%+XWNlDD(gogdaZf%o5$ zYUt+(cg(WJ$CEcfevQ1=UZg$f?pL!TvDSPV?6x!9G5vlnZ*?6UvaGH2{rXD0SG)Za z|Hoj(wFxM!WATR9X9W#VA29Ow`n=cn;rK*biot$tR_C|Ui(g*cS88cp6eiQtsh$wX zksXG_u(9#iAmB}!HaoHPQZ+!pqAUfKM=Mahjg>FazZl)R4DWbzHX&ZJ(Lqx+QlTCs z8~V1TjL-f6`5k10-tBhyZ%Q3;$~WB1o}IyMV&Ff2b0+m!qwm)7O=2{x%=P^MWp!eI zf4pPfr{D^>oAA%*)qXAY{yf>2m(KqjS1pEx&g0n{XD#DOrAWq_j&w7_?{j~flhYV{ z4|1{}Bqeln#C}qhgzsdz4@84J{xPsEIO>tECRYsCP)if z{0bz^*CVba8f2qTY;RI4?eB*9H^U(}Z>#^ra`mdb?fpGGpQ4#-Akk?ssDziug$lSm z|0FL}Xk0b^4~7{xeH?$PyXnkJQiu8UYlAW$dm!Q13PZpVywFC?5BE8p3DbQS1wDHh zBm?gN4+``I&w9KXJzaKZr#?LWdtmH9?1}rIXlg5XwTs)`cf~k?0Ax{d(!tq3kp$0-{)o5_j^4l2T)#BiX{bAD5khcfm;$u z0LlLQDNQ&yL!B`|Eu7egAonhVggg(JPPlTDg-iC!E7;!20ct)+DMQsWZc)VL`pkdn z+P|6_BN&-hqT`O%i{s+~AX2jXu+VQarKB?IR7a|yc@V|}r$*Mq>Il4Kb?AJ`(`2K- zbPWI8Zw55!b}h%Y*0;sQj;jNLYF+L9iRKEQUpi~|Fj_pDKrT%;I!N1&6lGP9WkzZl z=V=Hupu?p%x?X)xPk_LLg~&mzuq6i$$CEcgeoX|J;gE!%Ku4haKFj}&7evZw8Cl^2 zPwuCABqzhej_6FsTJU~n>+j%F2taM|;S$}-wO6zHtypTlXA!5v;zVl!@A+{9tZJ*P z^Qd&r^|3X!vEWC<{^C-NI8bX3@OMRvhT}?~G$|7n>c(e59n3Qm=6}hb>H^be|A`>U z{&fD1-hx&*bdNh1FE%x9)JlJvY;yhM({a2rFLh~{gO?18MBI*yG^!Oiphhsb(JMPL z*r|2Qb^d69RRH5<|G-p(nkrr@ZfDm$ioz6r0)=d)&5+U75o0jRB6_WsvK|kx;Nx9} zV8Od=a}S{Ws&4t?V9drs#YWU_(!V}23`Y82sxW}i+}NT0bU)}Y1@;|2V{ln;*EYp& z2pUyMLU!16(S?g6i=9kkqW$< zRJmLE<2A9@F0TvUN)3Eko&o5gY-70!J#dmZ^QpJXLm=NDTg4v84yv|W8ULeytlYb3 zp#wT4PD*>&hzSjNVytVf_qg9dO9S?;w5!;YQW7>lRoE8JuQB;|Pkj1{e1;11!W%ul zIaL7)J97vNU8O0x8VT*)D61PD!qwg+AQ)W><(E}Sc?pM%Tl*Gx7|+OIG+O67k~@Kct9V*?pErgP2qWnwNLK!MfS%TtM|_}xUk7Yu ziC0;ZhAR5Fb-(b=E(KtTYXPu79LSYiZj74QajXRZlfT)IL+@A5{46i~{CaVz#(8$T zN4_A2|GszDj7iTACdI}mxVVl4$Pe}kL|7`oFAJJT!I?N=^LPMAY%02c!%o8@s7|*} z1b^;m9`w|!FrjTw{*v6p{UkeMEbTJ|xJp#k6eGgjI0CZ3_Cx1CDiT<5JXs+{zPk*E z_Lka)V%gsPR9Qd5FLL#G)u{P9;dGD)!E$=PtG@#ASHvQM<6`tYtFI%Anh-!KZs0U8a&^)aSxp2i)Zid!c`7i z4SStWZ3yQac#N8nCIYL3bxTd2Cu?xK=C7~-To+YM0yhH^V=t6zYi)7Ux$~v7>#WLG$=Kxqu^Bo;vtujq1(?AdF73|ll_9f&DYS=ulsM_bK)?dDjWKZR`aZa z&5cUmuT{RD^*B6sp3kwt4g-4X5KYa;Q$j{wx*GN4BD!CV)%M8o2@+fPc~^ne4X(8} zB7oEM%W`Ys{j!uddsNZVe>EYPg|5xgLJxlwF4rk5lfYACV>k+O@6xk<#OS5jPP1is z{r)nnEEU)TH5Qn2>|Fs}6{CZ>6+}c<6K%ydU~@=u%;}cWi%_Tv9Ec<{=K9pRQ*YnC z{hf`PxJqG07Zz?Va4BlB77ZYYKGUW-#U_BOolAtB4$>@e(Bv2{a!9udYuG;sV(=aq z;xRTcRcI#p$^DMM8lXpu<$Bb)+HskSLKg8_Sz?J8ZO;w0zLW75s&;k$Rr+TOWMfpw z!A`A!v#Tl{+#Gv~%}K^lS5SFRV(c{WCn(H86kUD2l3EItKTxgjp>wD6h5sx))Kd6y zfAjPv$c2_mpd8m^N^=}rxJy7X#R#o$+W#~b&f01yijYTr-GCc$d!kEo8UJhRVrp=l zjXZR5Ch;s4$cvuDQ*ad^l>Vr&xY8tq zE65LknoAtqe@0Z#vvd?fyANJfYAQzO#m0nYjeD)kdy$ZVAnwnn8S7#-E1+2_oYd6R z60B%)MxqeIb|&*XD=(NYB9B$aK%()1V2mxc+Wo`c%1d>_%BZMUB|& zNK8zGY$>uF$?|2%WPE~Vn1q)>)f{{kP^{9Q>%`;=LS^%;I$%zuQ!^ouqThf(+{GKN zo~(inOI?^{H!A!5SWh$)Bx94rEcIA6;ab6NRj}8gbZrfw?3a|Y(mr?s16}RnEi810#5rvA?QX2&ZPvJec@=dpc6Kn*U8%4`ifSe6|L85NUf*Og z-*0@io^^VK&wcueoH$&GM3KjP&2V&+n#5TZN#T%62yZa4F)d3RT^Z^GQ+0wsBnel zWz?toD~%WeNc{sR&FpR9m@)Hra61MO{}mTF;^pTgzfQ<;Yt3=^Ng;s1$&<(ZoAkUF zKS)`~;FAQbqE`C1HS5SgKH*kkg?DExs!f$l_U7l_^xpodT+h;(^aidnF) zFf1|u(RM9g{sk2__c2|kci{)fJL7Ci3>&Uc4iyr@vd;%CtewYp{bEDwVkhD_u)a3p zF+Z)C%I?j1e~{%#cB-lB5d)CWCZ%=_&LvINAVL8U1I*o<_Gtj8S1H-!&RMav2d$%` zj-;z5dqn_;P4E{U-3x{J@UJ9>;efoHP;r912bfruzRM|dxz2HUl0pv;ebk7C?J2U$ zoQC6&GPWzzwhj^HP{exJm&1=4v_K;48_4BPKt|DK6Z0)J!e>g4-ROKVK7TGi;Skd0 z^F&bub}YuEc5js0r>RlJa=mK+0&mu+8`Bd8BQMm7QYwGQyP z1XfX%;;O;&n2j7!W874}awbk=coHn=h3J-mz}{l!Zx)h`D~x)49jU1;pM0o3S0;F~ zpM)U=T9=sPg4^b9Pr~bJ4Q$u@GG-ij9IY7^#V;qPg1SIiATK;`D9?)F)??l;L)C{Qb{ zDEd%Lp)2W7TZRR>y=fOfI?tp-3NBVheR;pmLCS}rh{KcHB*$o_VmE<0(K^E-@h)z# zw(rZQZ2JoNFfd!6l6`<1+Fz5gar>bIL@$Ix>WL$k3!m@1x=+P!Q8j+hsz*6`8468w z0O5KrvI>e1YJaS_6?2v{yG?Hpb-5BX^=7W8%dpmcFm%Hdsa}#TpZ)l?pW+N|cx-k2 zrNTbM3)vK%Q=`-SNf2Oa{c=Y->LFaDPK`02us|A$cGoXqZL==B~Fz$i{Fq$AF-8n=z0z#vkRF`y=r8n0q)C zrpDI-@3664MP+2RI*iH+y_QFJ^^1ZN6Jy-NOU>$KadD=jf0Y1%dyXB>?=27k?_Nc( z=G&(dU_zHK^g$pmtb+?G9N^^vg2nd=&3FXdDflVN8qmpI5lh`!54)XgtlX7fWlvXt zD;z%Hj=>e6K6>@?P3VgbrqUS_S&F6KQ5cl=hU8m=<4`YuV50O}TnVa)3Q!kFFl?-! z>Fm4iGE7;Rc*gY|QUVC`6HOay9gE_;i{dmx1G2Eft!OUT zLv+fr?x#3#WIRmWb|*_g71qTd7GyHBA)Kh)TfV&L-TC6TgI2~6$Xmuxen0|D#Yw^& zuB!|ht38sNzOA@&H2OA>exm#`vA${ilL6CzArbW$@~DL;0PS829T?hng*;H$wqSV` zW+U;o#|v;X|&fK#5*V@VBUvC9F{8U=J?b=re z_j9+7gMUcxerfT|p(VYfwoA+s$4M#sd?F@yD)V;RA1hbbGDuTDSXc;R^n}Y#T1pLym~TJMxjdM8aNe=Cdmv2)UFd^b~w#MtOO)} zomH#ND|wWXoZ<|dcT(i3t%Fa>cpuDL9)&l4xbx&@%Z;_f!8E~6j=97S9;(=*QwoF*P*2arNc;_vAuV$Rhf#2HpgNAcm-dq@?vvOgtUA-=RAEQ2;|;WtMeAlfX!}cY}a{c`i>wN zrf7{QX5d~AM^B`MRvk+plOjqt5+6ZL?u792>`s9|j~Cw}rpAYgxwf-6o6w^AF#OWY z39SQoB)qk8kQUQX-F>!7p!O0;H?EN{z@U*cZ1*tk@rSU+w~_&sqO_wj`2USxVU_~>`> zz9(N67jN{ThP8*PNtC8z@n^I4OU^GJ0?fLVaXl5i(ztYyQywa+Ul6t!269~X_|*N5 zifkXttgO3@+QB_E|Ls68_j7J&Svy~qhitOpSDmN3J1lvCK+L`KMAc}kXc29uQ-JZc zPIy~B8JR^I>^jkmD}&!>uxju&KP=5LjpKb4m*tC7mly=7cNZ;unA+3RbI-2u%rnYb z&`V5YK@XJla1z?AzK{^T`{OyHU0IaXE0+^8ZlFjMpT_uF`z6H@?1gySsK!bgIDul- z2_5K;4O@71h_T9m#uoXeUyP19F z{ZEGjW&(KgVaEKScA-;FE)A>={bY&0OCdyexG4G$`-%>3PoNN!^ z-41$HC#+=&q$`po<|W?3A};xdc_|C)7u9~CeWLh^Mv>#urQ{5_El$^8wLpA5v?;$4 zHe07iDc;8uvIxVphh2eaq(x@MkOEN4%GxTpFOG^yzu&|~Ys zUN5Lv-P{4Ok%|dC9H-#e)6_bNGTMjj(`peqRm(m!FP2U~)YfUznIfY0v(tEIu-l7X zuQi|@MFHVE85^C1okJhY5w~!*;#YQI6 zK2W|_Z9s@+#{(j4SQX)U8F~C$M~+W|yT1r`_5GW6?(>Z3P9$CI>7(0ak|!dM>(Npm zSnD*QN+HmRiJ6MEC;#JxszwKN&fz@EQ`pIoTvUrtIxa9sR$%~k!haVWe$<#Kh`WA` zCwpp4dHn-Ea;!NC*l$;{dTt%aJ>x+&v(j~6C08}XC_3~|VU#tA7x{Skr4`Br3}t zSx0EXrm;O8x>xGrB75tP2KL;DNHd;aQ;XtuA1)h?XfTo6dF<18cw~J8HI$(U;$3qnF9eaUcSORC6dtoQtx(dvEB>`1WN5KsAe9V zpieRiRtB$d-Lo9A_IBcXcBcHcyS(gLDw0EJeFenhB+8wdEja4xb2lPnGlNF;YV9JUGVpb|(S|g@ z)w-gV0AzQhO2~zUhO+||`_j019A(g=yg2AfsGSZMv#NADc;W${Re_Vf zQ2=emgvwFQir+5Bk$}dsvLkY(`zo|Vp7HZZT>RaOK^Sd}_q%@GgD3RN>z~c5E^*8f8+zKC#s2I7{vZb9{IJByFxA#LO#j%0~S@QNuJ!sje1GGQnm8pCsrBzg! z4~-lu`B}Qbz$WSnxTEc^ekQ}I`b!uCAtBGyc`wb$GmE~qSmF6Bv0YGl>89v)fo<^5 zmny=5u*C-gO8NUfJOb0Pa!A=dMQ*2ilO-0kVb51Vb&A1~14*q>bJeV%NV|nU*0poj zYwUFYjE9etUY|XU8##U4WRMU(iIQbHkhM0xeuyt%2R(>*cpD%fo?{p_)k}`w*C);5H$r7AsuOVkeH(<@DA@M8N$yKw715m99Sv zHQFH^1c5$zob2~p$LB91+DgfXbWTpjib6w6pT_xLL%{8$Klj)rSBJ6;0f`kFiA%l< zC3&}O;EJUHuguh(#kL{-Uj!Dwy<(QdCMG8Fn;o+cJHY<7Hsb8=JQhdD_TXs_V#`h$ zx%Mf?nTF-{6~}J|4DIyy!4F-C8B8`lKLN8C=^BQe_?BT-^AK!S*Gpk~Wf`sdLux6R zdL%cG$+o}vAs6GjBahSIb)+*24bZRxESU@H$Xo>vK&oNZ;f@f2X_woxthA?#=uubm z$`KVt{Lz_q{oTF2@tY;&?;)#rvBTR(6K|yw)xfLU?evos^1C*7>qZB&C%T*ZVf-nF z)ocKW&b2DYVX`4PKkk*+es4+B5dDrh$M6JJfAq4rd;JmnFUxuOSS*!vN$=S94tfMW zd#Nl7|2B&odx4njOjETR5j!u}etw#k0hkL5nCts8svbaSSfdpiT%bo%y98zm9frsj zODhCMH!0>jF4sziLN&(yb9BfI>j7&tO=mY@Rr+ViI$a_KdyN7x0B5YPr3xMt1SzS9ziu4TtK+NvC6; zcsX$y>(j@3}Bi*mo<{FU$+pwN^PBG>Vmol}p0S8DUhQ&h?8=+OrW{r&xRgo$+9|4Al*e+O;R z&u4MWleL{;mZ|N6+3CIU{zW=_`d-9^goHGw@3F0ni>RB*o)o!tt!CtdmDE(}%OSqN zsk{8prjwJ>(wp=^o5W%#^;*Jc1FwWs8Rs82mUQ&jKW_Y$#Shj~muq4=s`Qkk(~PsL z`v9;PXtM%9;I4o4K6l7m%&`m~dhk~^KFRWo#EUQ7w6Dbmu3}2SkpO2}+~l^TRc;=z-1cQ@ho~-Mjkz-NJL~2}z#F**hVs_GnQ^4jwKmEG!J8h~p9!!yIRr3-e#A;RxgrDcLWZ zId0WW%)(%pWhD8^DgNx?hqMb-uNDT5G%kHSTn0r;u7sAIXLwY9SmnSws+n9an7|yz zBdz!LG5Za_WFP);l(eDOGq6rMlHc+TK78TRo3Td-Li^8!V@RZgJY97+fWsOGo$U%)L|Bz=S;uR@ zW*;8S9;r+Yl!yPIGg z?(x}+)i8YdF5HRtXQ&bnycO45mJ@Bp#<}i`Yz0j)g5Z13qhUXdyGL8ET^8vcOlK<)I z%$j`}_=bzGhn3(e^@5!}kQQy?M?NsU;05%iz>e&5Zf==CsrtonVws+I8_`Kx{gh6g z1fc0j^+Q9G0hA2_Lz+0ePNtzbb%T+M@53PUzR1&&WM)6vMx zNsjo|@U)K9&028=o_7K`PuUBalKYtq#ijs*&k`T+TFrC1#A z4s+~ATT?q7KEpmpi<}$orOdJ76cwUOx*}-9=G|N88>Q^9&1lK&#yrdLGhnv^J*)BA z5K4+m_D~Q|06|Um@9*5-fearWsgc&18Ex;7VJiM?txPsD*X#NM?E%94GswzIja&Wm zpo%C4dMMM3g2eH1hj#Acj7C4~Fe5A-7WEmONndt0JezY*>N&?J&jx;okL)h1o6g06 zC-N<=tc>uRK#z?aKX|n&_H*Et_9SjB(qDI1x_fU-EEW$oJ3Jebr^vYpIRftqnAcC= zZT8&=P^`#vBI;)h(dDr}`%EGirwrQm$=EkiK=?l zm|Oa$6N(@A6VuKt1tcWc=Skt_X-y$7 zxI?AX9L_0VNQ(+xoWO9eB_7k*H-_mkmgVK&-X>k_Fimm6E@lo&-RPc25~TBcjx@|x zhDD6;lqzc%-y4%1*MYvjz-u~GR=uo9LWwS_dx3a>8D%{Wz|yeFj~IgblJGUSs*qRk zR^cwhdMIK5HtlWR7X*|mV@38W!7x)7JK--EnlSN;wII+TS75CY!9rNB`Ax@64wR!V z!e9lyY`tao0cb%j@uaV5A9h8GQ^(2{QtW-R&==pD;Xa>$d_z;O2t;z3N=kzy>j)k( zFl#|eUrqIRom|J`Hv@g7D=})va7%Ds1}5Ur@y;0nF=CS`u@ROxY)y|WbEA8FQysn{ z2RQhS>jHKGt`H|C!IN6kbdB)jhQr>K`}I)@fD@Np8%xqnnAZV4e*69fC3U+HwX% zJ0k_OVmGuz?-=L?;c5PI$ChO*ciq8j?Ty? z@EpFuSR5p@BiqEAlXZ;x)FAHDzsHbj39@CA>FaxV(f!lljR-<~A=({iK)xISR{ezo z8$*z?C!udxx}B9;XrrYv@ z>GdE6p}?*w(IR$!WMNc*wc>0t^JmzrF;po$ARu5-1_G5h*+@KGeb?=fdR-N48JBx@ zYhw{W%V!v$n5c74U8Sm}{-&s_>_Em2g$EY^E#Dg<9%YFheLW=0k;-e%?0rgBF+Jq~bje_NzWmq8 z@`Z(i^eK^eE+BpL>Fyj?s@!R>#1NwVq@{sksu%Jf0z{$!&DmsB5Pkk7h2jE6G{mVQ zF$6OhO*UJ_nBOVtF0gHR@z7r{dGog!cFw?lUfqcvI~W)0FSqrT1Kp-luK}h+)538# zLzwQgI8C&>9A#-0nLh5@YL1&2{B?@JaUU1`n_Cd;U&|$+n;~#bF(+%YYTDKfQ_O~~ zoR6jN!XcESR-@5walGOp_Ervng8Hf@7xj-zbHi40yR|@tMF56I%kXSsb@ z&+_zIs5{B%(O#dCF@nEKJMv7Xk&CvMe|%sZz?C^YEpLsn>Nb7kW<)`ZC)F^t=kf8R zmHB_K(@OTP3JMggh$%RzQc^=p?A<-C(vK{-aK}Q7Sp!-)1udSB(DawNAD@Z9<2s14 zjhftw_CFdEHfl0I5viKI+3bcW?dDDZ4Q_ThKEdTZGDN5($wk~022Ld!16p2z162q{ zp2S+1Fn-&pGR7G$fA7`YstY$@t5wnzAXI`7fz?!M5NeM!`**HGD`HasCt4-vrr>eP zi7^sAT1MaiZz2su~FBr$_wYm{<&T4(OOA>sl7%NVfx&Z&&&t zEur796&))j#)ZLD*18brQsdyr(vmVe^HNK4U}#=h(=u6 zhT0f@<7`3*w!?KqbQvgp#+G_rbcoA+Ma@9Ytg3cKQaA9r%4)4n`8MoiMUMgiJO%(I zgKZ4c+D+6t3x$C|5&bQm! zJTX{ws()ib()9H7QLIvSZQ+d;0tJoX^&JI5BMj;(U^iyczXts@S~ zT*L&Qv7rqr9EVL*C2w&CbDDBT?e=33!q*GuQxtBD2w#0wWq2vT2t1syYe0`jJkF0c z;sQ9=x=Mq`X3YC%#ihO@rpVsoCQopFev7*~4t6^6qBj%Ge#W}<7RlCyE)2UL^#iJ> zbwQx_9tZkID{!gkDd@*baLM;<#xniD>7`%n z$zqiL$_AOa5HS%t9tsIX<7*PsvIZPbeae6;qS>`2C0S3t9&`g-Jj9>Bl&DwPI7G=e zvru+yOyf`)hnkVj7q>P2h)kfKUVd5FJ$HOBaGrC7zEN}<+P`!6G3)&6p9aG0MKrjz z)ksx>!+_i{^fCL4ujx)W3g~r=RqiXiwM8p^V{eM~nM%kL<+h*p2y>;CuQzZ&>|)<6kEt#!_E%~})C|9+!J n^RA5My&3Jl?Qmm_=8ymVe$6?@^&2$*T?2gE0iWkq-?8~W=Jxt` literal 9204 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 literal 9288 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 diff --git a/tests/test_graphical_units/control_data/boolean_ops/union.npz b/tests/test_graphical_units/control_data/boolean_ops/union.npz index 89679e6604c41ad18d3b3b2ea2c8e85535be594f..c55850d44113d4afae1378109a90d5d7dbb5d6fb 100644 GIT binary patch literal 8617 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 YK8oRFzhUF@tLuPoYv3<><>MIt2kJfD4*&oF diff --git a/tests/test_graphical_units/control_data/brace/arcBrace.npz b/tests/test_graphical_units/control_data/brace/arcBrace.npz index 8fd91fd1bca34888a17ae07b3e7b03ff7205d543..da144cd4a57fe15e39eb360f1b0bd7a0ca5fe6a6 100644 GIT binary patch delta 43 scmbQNG+9Y1z?+#xmw|zS1BewFqWX6@|A&H&QmX}+bs2OgpAhf{04G8Z@&Et; delta 43 xcmbQNG+9Y1z?+#xgn@y91BewFqWX6@HwrK?G_XoCY?N9pz%0TnGWmpnHvqIa2;l$# diff --git a/tests/test_graphical_units/control_data/brace/braceTip.npz b/tests/test_graphical_units/control_data/brace/braceTip.npz index d9018a2e0359313577c83621ddd0369b550eba64..009fa28b7f07baaf2e7ecef3162d103ce9be70b0 100644 GIT binary patch delta 43 scmZp1X>pMX@MdPwWnf_70AfXkts9l*{fB~$QgalUbs2Og?^N^#05e+pMX@MdNaVPIh30AfXkts9l*6)7?>G_XoCY?PX#$SlGvGI^(>HvqtB2~Pk3 diff --git a/tests/test_graphical_units/control_data/brace/brace_sharpness.npz b/tests/test_graphical_units/control_data/brace/brace_sharpness.npz index 59231e0ddda1c74c1faa558523a24fe7e325bf18..c32a1354ece722b919433392439afa92f2c0c9cf 100644 GIT binary patch delta 43 scmdnyvCTs&z?+#xmw|zS1BewFdcE^)|3kq>sdLKAx(vFLUn_e906A(9kN^Mx delta 43 xcmdnyvCTs&z?+#xgn@y91BewFdcE^)mnbtZG_XoCY?L~u%q+qzGWoT#Hvr0o3AF$K diff --git a/tests/test_graphical_units/control_data/composition/animationgroup_is_passing_remover_to_animations.npz b/tests/test_graphical_units/control_data/composition/animationgroup_is_passing_remover_to_animations.npz index f98436b2cc10565c8b4d06b9b3ce2ea5fe023147..204e542a8d79941394c85633be586d3d35554820 100644 GIT binary patch delta 43 scmdnWx0O#Sz?+#xmw|zS1BewF-W@*7`5y{4N}Xk6)@9J0{EE#R06Yp1*8l(j delta 43 xcmdnWx0O#Sz?+#xgn@y91BewF-W@*7xtNWCp@CJBVWZSpHf9lKk;$*vyaCGU3Eltz diff --git a/tests/test_graphical_units/control_data/composition/animationgroup_is_passing_remover_to_nested_animationgroups.npz b/tests/test_graphical_units/control_data/composition/animationgroup_is_passing_remover_to_nested_animationgroups.npz index f98436b2cc10565c8b4d06b9b3ce2ea5fe023147..204e542a8d79941394c85633be586d3d35554820 100644 GIT binary patch delta 43 scmdnWx0O#Sz?+#xmw|zS1BewF-W@*7`5y{4N}Xk6)@9J0{EE#R06Yp1*8l(j delta 43 xcmdnWx0O#Sz?+#xgn@y91BewF-W@*7xtNWCp@CJBVWZSpHf9lKk;$*vyaCGU3Eltz diff --git a/tests/test_graphical_units/control_data/coordinate_system/implicit_graph.npz b/tests/test_graphical_units/control_data/coordinate_system/implicit_graph.npz index ae64c0d05d5eed3a605f518554f18ab84342e7cb..45c14a54081ea8d2d6c12b8d6b78721e8a86ac9c 100644 GIT binary patch literal 9753 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 A8~^|S literal 9938 zcmd^ld03OzwtlQfX=~M52NV%b%TbOXP(&s%KnJ0UfEGg#A*rBD5fCB*2?4FA4h+Gn zfFOef0Zkw&B4P-Ewt&pU2q7{nQy_svAS6s7cYVR$bMF1!-{0rC&&7urviG<5UTd%6 zUGK_qr`3PifE8K1>Dd=+sTNtLtsWQbUw+?lVfab^ zJlZdGL%GhIE@6?sRC%gVzvQRPnV!Y@VvZnf)=RRCH#1gEt90I7xo`I_j;j>6?PPji zkaV07E?56F#NA~h>b0KH?0xz}=Xya4{+%FeN`>D~=ugU0&8P;Vltrrcc{|l&<&>|Z zl0Ure1vTT)ICEK8-KJ|J>O4_zeU0*FweEK-V*W3FJ-+pu>l=)Q8LLsK2d7%IY|3x3 zH^2@1ZCO0o^DNl#b?FBvlvQkrYZ+M~`4MdhLql#obXwA6PkAAgN}Y&Ug+d)jh@KhE zmq;We#uNWFDAa|C4Sn>LcQOC@Zi4y@dye}t3ial-b}+Lkdn;Ipl+?2_@11b=&(Sez z#LDPzKkpLbQq)`4?2^8JclAHtt#-Nie%|7r@9gI}24r_wmu<*i*(<<5shdt)zw%*V z2M!ag7O4A3o`M#n7wfk)(aYQjk~5QZ?QE4pcFRMi<06rPws;^pCu?yQWIK7p$Yf+i zJB=8)=aGhg&ucv+^%s%|IomilT(Ay>I&L10sBoz9_`mT~|1NE;>{~zj@Q%yT!kk#r z!d$&ww(WeQYe9)`eZkGm`UN@43ICtwq+vrZw#He64>t@-H|QL)BKLu^D8X~@-j28D zEMHuBl~#2(Mp&}XzzIJ);=r1=SWz>Y?-XxRWtpufp2rF(P3vr zKRNWo(9^*7S9=RHZ!0O_Xx;4(zPkEqji%SF(YCDnIx+8l@8I)O+9eCxQ@ z{R5O-Me&V+t%9IB>GG&$b$XRbDJ@Jf#BM7)oaDH3s(aAfp)(;f;tO+-_a9b{l6XVL zcN-7Av+u5m5N|ST$VQXn#Tltar&C8;((mkX&bWK<;6W`R`Lz%15ZHujh_!V^HP*|(EU`zDd@5mO+s)e91-T3DP zdnL}if!PsKET*!v*_d7QoO`%Z<2uf6+YaKah+jt*E^C6ivW+XoatE_FJ66=s6S-(? zubDKH*w%>i$7HXI>5mrXhsG`T)RBo}Hxys?H%GY=1s|bMvf|fQ)9vD7N%JFV8=KdL zCGm{Pd%wTAkMD*F$GA@E^u^4yj@N184^2=K$$BqzIs*%{QaLVQTVW2#I^LPhn%tL@ z*8NdKNf+yPMLq9ZQF4*==Y=Z|-RJyn%!E9V-i#7%r9?(sXz4c%y#Kp#Y<5 z%A#D>Cygx+l&E4WFNb{YAwDz#5=<(%tzk6@V%js zmhsW%JzMIZ_`6em`+~^HDAcWXp{;@?(^XCB&PGHY;zr6Rx&nW@ysC>JCQRO)i)&Dk@Nf1A7wLcD%q%1E-3^Hvv! z>wbnpjkylJNOIa~8B)Y#4(asamj*RU1^j_-BP`!5c78;oFAYulob*McH>|pk0sbYE zu%(@Xj^snr--RV#?Tr|D$zU1OnkM_=ck(t9M_U?kVDTqU^%lNyv|Bhq*`+MBQ||Sq z%<{X$O^>tS!esWcuY-#`O8!6_L010|Y&ENsiO1t@>f@4knC&5Zvl=nd1YFeHpENfd zGtlB*j|ticGJ12Pufc|P)mIMU;ON5w!~oIC?gYxjw+?IC4PwemE@XleM4Yr!TxhqFvNZJ1_fLJ~eM%%&;Y zGt3FShJb!kw-Mgpl_Kn{`Mc?n=63M1Cj!j5aEvtfdMw1B&c&d30k}58)B7Wyg*Rtl)CT8>b0LV z;IL*e&s)|pSeGECY(x7Ge2lv6{;8ni&`gWjY?&nYaKaNo$FX7BkS5xFCy&f1{{ZzM zJ?rADBjd26Z9tAeq;o4M#}ut7c4v5vTerhu@}KwbmgHA~rTGMtxoE}nY|&pDF#3B) zlVB`IAuHi{adyga*IDpmXJMO-v`DHs(NoTRZMWUxyobCZBgremCs&XwyaW+fS_3ZY z$Asfk`AhRNVnP>#!8i~h>XmfWHC2j za%`*t=Vo??-efb|;nsd_{m%I8#QsE`R`1Oyly>VqQ{PvoLphiteEIpV+YVIibWVYv zKGxhp<|8|sIL71UIr=jp?rzwsc+&qo%(o;YiQrjqEd4g8!2PdS^S0r}J7U4<;O?i5 zO2I1Bqs*;_?j6iC>1gsLImz=UFTMxwe%aK!nvMQU2ns<5ZEVB@{<-GVbIih&227GB z+H)t5%@VIdU7l&PG2y^Voz^U3NBTK2;qna6n_m2=Fq4!q{&pT)9X~<50Q@)CJ~;wm z5BB>)Ot%;We`ea7pOCOFhA}Gmnv^$jNs98+JBptgHJ5 zuFV@z>ZJc4|M)17n~ko^xX7nry2OEN%0A({9l~0xF=5Zgxskr#nj`~~C8JTOr^&xx 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 V<4$YVBA>2;e}~}z%j)l>{RbL)8J_?E diff --git a/tests/test_graphical_units/control_data/coordinate_system/line_graph.npz b/tests/test_graphical_units/control_data/coordinate_system/line_graph.npz index 077dbbd22a166de9098a1d3985111f4f0b7dab75..394ae680cd1996441fe2e3bfd7af94e063a7eaa3 100644 GIT binary patch delta 43 scmewr^(#s$z?+#xmw|zS1BewFE+y4}`ws;hrG#{ubs2Og>+5<00A+R%{Qv*} delta 26 fcmewr^(%@sz?+#xWU{`l_(mB4U1kwx5ZfC7a9jr5 diff --git a/tests/test_graphical_units/control_data/coordinate_system/number_plane.npz b/tests/test_graphical_units/control_data/coordinate_system/number_plane.npz index afb647aba4a1fcf0e1a4a2e522ef31126f939b64..e327fa76bf93a72a811ca17b542a48753db77715 100644 GIT binary patch delta 43 scmdlSusJ{~z?+#xmw|zS1BewFmMX=V{)d8%Qm56Kbs2OgzfkuE05?hyZ~y=R delta 43 xcmdlSusJ{~z?+#xgn@y91BewFmMX=VE>ve=Xke9O*eG>comqrgWbzAjZve=336=l= diff --git a/tests/test_graphical_units/control_data/coordinate_system/number_plane_log.npz b/tests/test_graphical_units/control_data/coordinate_system/number_plane_log.npz index b86dd3568eac177ce37bbd9e3c7d9cee74035ef6..facc8682820ad5c288cef1a0a690bf745dcd3489 100644 GIT binary patch delta 43 rcmdlIyCqgCz?+#xmw|zS1BewFbe*ym{fB~$Qa*ajx(vFLGxfXyH)jvO delta 43 xcmdlIyCqgCz?+#xgn@y91BewFbe*ymDd{mVG_XoCY?SiRV-{f+nVhNT4FJC@2yFlW diff --git a/tests/test_graphical_units/control_data/coordinate_system/plot_log_x_axis.npz b/tests/test_graphical_units/control_data/coordinate_system/plot_log_x_axis.npz index f215752d0d7be046e06f312d91990e2ca37c6399..a89bf909538ae94924abd06764894520f9765ab1 100644 GIT binary patch literal 6668 zcmeHMi$By`*Z*;joa&%XbRntJ^$;p_A(!q&A{rAKb5t(5CbyUw8&`GVceJy( zcL*V@Vqw`15o^~O)4;Hdit>x^vi2;)?e?#UyL7DIw69gSNkO%dT;KFMr<7Y$ttaO5 zv~(FeCDR)>;J1%|ln{wM>tjvHV`MRr*nUI2QBh<21Ieh;y=e-Wz`7yE597N+KRHLK z$ID0!{LlRru)n<|SjmP3c35ZYlnmy2%}n%H_kux>4hnWPUspGhb+d#2;$E{dgGM^k zcjn2$qoWn}n2ONh;@;fE#Kh13F!{vQSw59JFkpe}ezO2UQi$>t%r2?yo9Awrx-3vp z!)~&V)6+tbaGrjk-4`(z?W8Ya?oJk8#S-m?zlyzzBYYA2FsW%wyWlE^Afpa($zLW+ zOB}vEm7E*;I%7Id6GdxwXxZ0ieO0a8EUL2Iz%-HdcHHWeg^3zs=GX{x&T}&}Tyx52Jlr#{sqJuGvhmoPWYQF8v^Q{|#RbO* zIAXFEBpWbhj zq$ATdV{oieLrDW);DO=ol0jOp&}Ca~I?G9UxRRiVpqXx6vVg&2-QK#E=pzw}IN>ti z-DE99>X!zn)WE@8h&b{N0JCT zeR)9wPh`B{^vf%s^}a*$<#2NOaYiGhdJ~OIiD+bS$d^orEh?F6^|WB0V&(Y7g!&-i zCm9Re7mg4*g}Ef*RD@IF4qvCdBIEuCvF7Z8o#SuxVp)pFA`7gHcUK2tL?LP7<5gYP zL#sm0<`va;mT5a zIMbJw*V@|ZYP3m01d8&UD){{&x@RhnBHHYj=W1C9-pYDX;N4a@xPvLM zoO-DnwpC5v-TGzp8spH3s$?RsdbEH??jh^+hT(;+Z1Yaj$xo{hv-PTV4;Ax4=|KtI z#on&+6jMBzlNYo0P`v2rHnMoOk#s0}6>dsYx2yMFqv*Qv)Vt5o(FoGrh>36Zvm=p6 zg?^u2d3D#sak7g#5^Ixi- z2mf-P+UmmlT-_xijmJ^0Vt5zz&wqH<$frK2M35_014tLst*<_{E0A<;mw5UUK3HgL zWo)2t-JvcJ)X6P7b;B~ru;6%aGQp=WrK=(;YMe6Lx+re<(v^NM7IRdvr((Q0x!ne& z$#-X>T_8L!)_N`?OmgFDlZ=W2L`=)O+Y2scU%Avh-p#gWvESU$i#1&;i@Z4BzTksd zJ0tKlx>bxPn{0FXX;5X{2G}_)yBsGRBOYJQYwLEi$`&|zvgr!=GY$6-RFffymO~J| zQR^6u9K3&3r=}&_k^R|IVLWfRoFpuqA#BDm^odDPt3o#kAh;Lp!^&t^caHPNDH7sT zwl7J`G573|r}3fUC+~8M-0JStV^}6aFCJwvvO1D3Yg0|eXE}F|(BeW@A>l2J7&Fbl zz`%5RO-@71+=wsnlbQuv`3*TiYjQV&WT(@@Z>iD;z?EcU!RD_6@w)g`3@${mr3r+d zXTRp^bh(8~|DcERsyD{6WRZFY#)8BBH!XDL;|hXDI!2T2GkawacLki>1O3x4{%kam zkyl)Kn~0*Q$C#O4nx~){*u28+Ud-GO8fjA_of-^}np?kAf18YkW<7?D3&!#65ySz^ z&ot&$txctcO;>1apvWO91_3HJTBFIcpXxD8Vf)BU6pSi>@g9C(oJva$o9X|YhamYV z8%CqXS&YDecyvv3FrfeqReFKRug}6ik3%^(2kq+Q*|Bu`%)3gHzr~>5Hxf?bE_Owr zxE|f2%U=1ltCwshgi?Y$tgeo zCF7nAmzugSY6C?cN%@JfVAJnmqM0~`N7JL@Qfz+!wiL%A9}Yy%UM!9{_Hu6cv~X%D zmFCJyPLi$+OKcKPWSBfnCCIG0N_Vy;zw8eq9mEBI&J6GPxz~P&7*DEl7O_wxaGQoK#r8Wwijp z3pT&m@gG-gd(ec*ND6Y`g+Px4RNa4+ovj_%9MYSVfD&+_Uo+*fQ<$K;9;4@0cN9fZ z3`o|g?eO^#7x?Mg4k?mTfaIpU260P3b7Q&%8iv+7z*2QmaK{P;m(P@tP_t0=Ki@GW zhxJiw@9x-$#*B30YhC8<01RZI7AQ4RxDZ_jwuQ}3Hx{%2S9hgAfTqJH)6bRS86NK* zJELT7iUN*5Lv{eXeGO@`sB;uy*&{_h?b13xPc#hlkQ#;($|>}A?4$1T?^%bgyb>TM znu^DwQ)x?eo$jHYxByGILsnnP;6k#)NFk#W1;fEiH3pYO7W>bQ6+`{mhc%YWj-vr3 zMdAvnFx@ko-PE)WjfwT>0#?M2OVa78JJ0`$!f?0`+CrdAIdZ8=?;(8c8=tNw)yf_mhQfoqMs`Cm*jy(}6Zr^Tnd6BBlZ^5ccJI z)GBn*`x>IYL#eb?VbfjG4Ywc2)c5Tut;aYPdL5Zlrsw+R2V8+0D>=)*w@!-WIw0vA z%wy@`JVmv>Vg4wV#5C}kstNI8CJkCtH2&+M`BZM$TDj7eOWk_rmDJW<=(2QNi7SCW ztbjA{Zp}yCs1FV5fr5X@8>qVbGZh-*MGS6>qpviF`GaXEOeF%=KCCvrd^c)ZEtqz^ zoj6{bN`o|1W4BaW2H7gYjTDANkam7(Uw9A z;{d=gxH$U32Ac#)Xikg@=`o$o`0)EesaeWk7RN%jOqs!5h@akzdO8vO^|NpQFHvQ1 z?{?0*&W#a1{3gE_D}qfcwZIlEI2-)l?@%ALnTC}H_AkIluA0x&H37{~^x{wp9)bl` zCj4Sn1idxS&8nr?zgG(HAi&!WEguAXCojH8O6XQ}daRX6aT8{QED@riUB4U!Xw)%w z-3EJ2-Do?yhpz!oF@gP!>)T3#efy{uI>qb04L2A=+mlM8GsQD#6zHR?6ajzr7*p6p z(&UUPY&Yh=U&8Qsc|}D^>0dyfPuD*pfcG3c1x5V|Q1{V`dtjn&>8O+zRn&=hw>ahZLL>tVls zFk>uuG!GiuS|`$Eb3G=(DfHaj>?ba-@Sz5G-A?hv#R3DF@?QzoW zp5MVasepkN?KTLMKI&_olFi=)EycV9<{$K#y5MqY#hVAPH$V#yV!{!ols#0RWlvoa z<^3mWszpsB+X}`&rA2j zP7Jq~VDM|12Zd-8RyNUSVSi@e@ma4Cew`+;)R#| z5lH?0qKNSVvPA3!HgonV8Q=2mEEgG&;_z$HE^B51;vNIERNw8Gcxb~vny8=oQAqxz z*14%&(iNpq*D;>VFYOr*p>;=JhAOPnPA@MvDH$qk%Z1h!Gb_5jn^)z9c9e`!Hwr0e zyGzZj(bkH2sH>)X4=lsoO7gGU#hD)al&8nqt+%u5k0nlS&%$M{sct)aIIT$jL;Yb9 z@vwt}LSTx5+V=0Sk#r_Yk!ylVQ}Nfm3CjK-d#jZyp~;-`xO5XkFPF<{3=Q; zuVKHsrk3aEQ@sA})-wnDQWmd0c$PBLl#$B{o66%fWARDt0dFlixh}7BD>cZw+X_6f zX*qiNn_uTr$?0J_>$KqzBmX)Hvd`t7&p8}-~i z^N$tmRQCt7{HOT|(8veUn^+Ob(UG#$+DSHEBl&I6@cR|?J;&=v(D2xX>Z~*l4S3m^ zhs|-~WSENj2O;HEp=ZWM;S!Cfyn_zRFj7z_i62qftV`;*;0Sstl%xwazi>)ACh1vL z6cc+k9j7LmNiqtq^YHYn7??NCo>W-5^Kk<^i8zs_p6JNfW^zL-Nm1F@ zE45gb0+Me9QGW31GF`>&Tlh=&i`&{s{PwOO$!xD_#lWP^oJ4O@uv33QxWHhIYDw*A zSA_)|!^&}t33WwMM9}US7;+z_Njn2q2Cqg7&lk)Z{zk**C{o}sOSov-)dUC5p#%Wi zEaF20d=8EgIl@z6mJ^ZEng%yYLwC`qFD@^!7@GJ^iI_4m)=@@qvoaM0OkWf`*;ZNws4k{)Ip(aSm8ED)KXxZ5cBeobko`R;AlKzKx zzuktZLtE5()u}A>%eh}3sRysYty(=OW_HcJSI>xxSd`fBSpvLKUrs{_* zaOpYjT8t~plN0`QmMp3euZa}B^}E%EnYnWE-$zfh!YG`ZUyPRS|4|qv)k3+RRsbsC z82EE!?|M-A;xQQ%1+07mqnofDC(wqae@srZp}sq_H^q=MCm@jY7M|+B-+rh+Sky#F z=6(*j{5P&B`bTEEGb=s$68G#^RQrAuW_+rWm=J`4Z{~pys-Vh)O7nr z%qamRhSyty;*#&%tisM2Csp$(pEjYK{lA1Sl$cw=b*?@=o!)2*o3qvvm{W$k-VnuM zO=Gz3wZ0Qc=Y^HSqwLt=xMbMH?qv*yA^Pb5@>jreiM+LijI1{DukUWqw=(D(8pZzs cJ{$-@{_RbUwT0X~bW{eup;tl}Fb_fg3900AhX4Qo literal 6666 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 G|NaSz8DcE} diff --git a/tests/test_graphical_units/control_data/coordinate_system/plot_log_x_axis_vectorized.npz b/tests/test_graphical_units/control_data/coordinate_system/plot_log_x_axis_vectorized.npz index f215752d0d7be046e06f312d91990e2ca37c6399..a89bf909538ae94924abd06764894520f9765ab1 100644 GIT binary patch literal 6668 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 literal 6666 zcmeHMc{tQ--~Y)Yr&T>Ir%mcqgy=0>DKnj%QkICO35|JLM+n7aH_mC%sic)`GbC9i zqsTTGN+pUBh7f}i#u~;L#?14*r%t`s^Iq@&?{mG6uDbM{`@4O<>wS-nh2q~9Vi@)l z{9TQ0bP(0}F2%4ArKQ+hY$0~??2*$a$j6U(AJKL9^i#m*$v=Uk7&?W1`del_t~)U` zekNbZZ1vw>>Z-3guw;{9ubuuI^99o%uh6~j@XM9M>htUhEu9y1TmBTW-~6EO#^lFm zcD!1>N`2k!&1bLJsIQqHJ@XgEz1Oamh#Ev=UzmMKkJwmGLjq(dSTQxAeb>gk= zpkKsb>r~_ZpPjr<#jJ5R?uZB`hQ}C>O$1X!13tZB*;CU;2aKdmy&iee3QgkSfGOU` z;S928=cm+<(n(?Jf(%Jbo=iINph=;~TFqAw(yEB}pPl|i$u5ZZ$I`|RqU=^*exyM8q!*&={a8q;K8vni}YZ`{791h->?b^U9iCP37 zoe)%|3F?^{oM>KM-CD*h#Ar$1zO}h1z$cX%Yp;M|cLv+Cv?vDwl)GEUA63ZN#LJAC zXHP0&m<|0>Rhs;metPP+V_~j>Z^ue2Ouii}KFj@jtdNvMAyhpAX{~8B-xy?MuWz49 z@Ri><=FtvzzMY9-&izNfeU@%-5l7(ZAWL?**4k1C)HleM>gcDV_Jo!SH9cBi9bOH? zN)iq_I>rPI2Jp4tG-bPE(9JU^f@d$@5#aYT-Ux^lB=BaQ z*?-9Y?wAY}R~H3{KIviD3N7}`Eq8WbTXOUC`^T%_G+1mbx-)0x_AO#d4AZe9Duh;C zn6V)9d;?87!sv_js@jWNj_t6hA(SNC$gPd>;4F1;X<<_vyWb^d={V+GAZOTTsYBtA zhL7t?6xI{ws9 zXZ(!Cuj|%|UsoBo&B(j9wJ0Dm8hVz4o_=> z@^yYVNRv&@Y1O5v{DTvrONtIW2`0sZNyFWV;g_8JKZY4)ia4U8IjsZrjvjMzoAbRW zd9QW}@)fY7J)kZ&aJamY6EwMVV`a1f^IbFj%&VnIy$-Q7skoe?j9pFwQA3|@TVLAe z-=E!(InYvID)nnG0i#tV>lkyTc7TjsOmlX&Wr*9uiCe@^G@IMSsULzw2Zn{8KtM;nCE#U$Ay>X zR{PM(KFD?Cb7kXj=bNk;ceZA4Lk9UJcXgaGwL&WC!iSbs$f9KI*vS^ZuDB#VUO2J} z+p$hi^>FUfbNx;JvPUQE5B46$Pd0KhpPg5ZoGRQLFxFQS6gpScVQgx5*fIi}%%z*$ z#^a}9cPxl-)?O^EYDjmCgtXaEAd^mJ_0%R)0E9|icK3ZxTm<7(*h&-Q$)*O*;wq*9 zXP4%lemH+~LE9g*mIduws&~?IJdhu#bLesW{jNj^Ktyncx&Le|{&JzpJgLvHsJnBp zm&x6$5jUFC%&(@!WW&z;?c7iX{5^3#3I zH}h?wHk?>)=;mudHW7XBYJ@zMMu=8@mf^fUzpW9<>NCjvPuW^?Be;=diV4{+d7qW^ z@K4yhQmS@{BDK4EwRh92u;u(3V!^ro3a7v?FFmgld~}KfJ5?hXCI($1ha!Kf?=`=X z&+B9;hahEfgT7_kGGV+JJ7%45)1iUL)c+XZJ^2~8j9(Gi@y;p zA~wt*2_ccy8A@1uzW1UVHL+X0b`pyu!*9wd3YfDlN$G+9nT{9LgaFaN97fb#ea2h9KMVI7SWX-@KGg9sVVB2~g+%_i(d#q{3-;Ws> z7$k8Yvju6)TU%GWkAr~(T>`p_ehzv%YS9V=pe39i)=z9i1s|7IL z&l9xSij3u+LQM7tc50I$83fD>c{0cunJl)JH%~e>nYAy@cpb9jFp>uab{AKg z_6_0nk>JT1$Zs1xC+aoC>xBa?57z8nf#gAS2AeS0c>Uhl0JIzG9x5Oplh^ z3z+Zuig|)*s5%Do_w24}|8;H?sut;=?HBqW2y&-o4v^u*N3G1r~s4j0IOdzEfR)SOZ?0SC~ zvcrB*3@}XZ=R=D$C-HJU_{a?XT_A0wU4@ocM_`P<&_F3%y%4d!GgBi0=o^dl5$IO$ zAcu>-yjq^XbkA$Qgbb0hjwa)$G`)F7#p22zv^qQMi!A@XCuPVGxwLmGwDHnv0v9*w zCa+2`ltrUf9r3~<&F)sEN8nszc2%Z%=sFG z%mt5ubtZd(0x1ptR_HblcxoecYrUh^4UpDhb0CD zCk!yz-*WbiP69K>y(RiPgaGDn zDzggah}_lRzz!bNxh;`&uJMH2+RI>VpRj?fLZZT^Aup%Z;A&>1lRtnC9aawTJP21K z7gn%p0$yBh{ez|wJaoRApiN|1qVzHa503kMIAhkG7PkDq33FxTt9$e4CIOiMx*Sd% z($QWT8p+C*vV4lPQ343T*_&~GpQE5SUz_3N4Q2v7d)*5A&t0|v)&@(2dl1s{1NV*> zf6CiaICwGu%Tz#jTC+#734#wve3$N!4UIujWxG6&k-+Z7x`&srU3zMg-L*<1iD5AXf z{4W5Cl;KolPBL(N{}_S3!V+Y`K3d=g+eZRZ-I^YYLUtb7!m>x?Vw^V*rjWc-$VuCU zb#@8NmC$pMA&8mR_DorAHc1%6m&kKMxt6fQ;2ti>zdH>!7nIp;|6tEdnSSimHBFdu zUR_mk<8H8~r9IPtXxS2lgM2&!SQ*-yK{vFVROY4GOXc_~A~T+P@Noenl}4t-pf6X+ z2;-99!Cf6gxA*hdF7=P>5lmZ*PpJU<* zb%2sl0H{06hV9zhsswF?$QmkAfg4RwfzTF?RLM(9m85jwDr#h~y3HUN_zizT5Y|B$ z4aBg&FJTMl0R!@4K__o3&02hc<-iH_Lluv7M8A#Qs^`t)OUH7%%ZxwYJC-?Pf%hZ{&!H$Slg?=uelYRqv$iwqn58xCBDPTD=RoS~}kTpizc|Eg{U zXXxU_<3{{IuXCanABy$%FTagV@@2RHxMT=|7zrorBM4L4Lf6%&dbHX+A0IEjH53i6 z8=0Adc6N5R(bCo)oKZMz4%dU+%mJV0Gc+#fv7o4P$6e1#?}c`p(Rq{k$h6qDc(LvF zWiwL@bNRsmzE;g_s%zf#U0X#_n~v@7$@c87PFN(Pli1$nx}5QjzMEz%%hASL)3rb? zZ+N$V`^BF#Utaw=w2QZqCVtbH6zLQl7c|z`sEix>{Sk~wAIW{xwB#R+kjM5gy@pg13B4L2;k{bd0lv!Slxp`GbC_^bI$gAV{JAt zdJUQ$A2D@KdPpyx5DhZ=;db_6j8!mTjx)kMeNnx#2RV~FwL2T)o%_y(Gio5NTF-9J985*(vC$Y96Sj}Cs1I5GDR$|J~N=cCe>MYGYKy)V}wd0tWKC z;MRX-k@j%C}Gq3--r>FP^U zrn4uLh3j*H`^mpjQ=S49?#!3lsedjRQ~4?--OQ`NoV;I?v}<;T1&F+SL^iKfddlP| zqOuB8hfQonl4*BSdWVtjABrV1FAH79MoUw{n4`eNnmWw>ZT4iSTr8vBl=!9CHn+=` z`ztl`n?x|J*8h`?;h2^TtEV6+ME~{3%f2w2L^l)subBHe zef8}x4T&|Z8aw^}ak!#i%LF}87XvQV@Yt)*N`P}vuAN%}Q25pZ-oDutU1BI>ed|_& zKNNMm7+w&B=nIkm!#~w75;YqOg=q^F|F>^$ei$DDeq;agJ&uiq(sV>sfIqM+VR=i@ G|NaSz8DcE} diff --git a/tests/test_graphical_units/control_data/coordinate_system/plot_surface.npz b/tests/test_graphical_units/control_data/coordinate_system/plot_surface.npz index 9369d49d724567fb43275d40bd8dc6db6466f590..83697c1d58682382dcdf8491f4a2f43a97ff5b62 100644 GIT binary patch literal 205863 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 z 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 P;Eyo)dj$O6ojd;zH1#b7 literal 205738 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

    9oA4{&E-YS$ZrPSmo3#J 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 RyGMD!6As=}!S{H0{s&ast&{)& literal 164268 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උ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 diff --git a/tests/test_graphical_units/control_data/creation/DrawBorderThenFill.npz b/tests/test_graphical_units/control_data/creation/DrawBorderThenFill.npz index 3d74bcadf91b01e6111e7b4c832c08f098d2d944..60ddebc2b1a1e76fa04272203c7176029832ccfb 100644 GIT binary patch delta 42 rcmaE1^TI|dz?+#xmw|zS1BewFBsbsm`ws;RrR11(8FVMh%6S6-HH8nA delta 26 fcmaE1^TLKTz?+#xWU{QB_(qw3vdkjPAhtIEZNLW@ diff --git a/tests/test_graphical_units/control_data/creation/FadeIn.npz b/tests/test_graphical_units/control_data/creation/FadeIn.npz index fb6bf6a2b9663580d0fb28d03edf4a07193cb839..b04904520d0add9e9ec48f2cc8b09ce225b399b5 100644 GIT binary patch delta 43 scmbQQF<(O}z?+#xmw|zS1BewFawd4J{tpEkrM3$*>oVw0z9Q@m04|CUKL7v# delta 43 xcmbQQF<(O}z?+#xgn@y91BewFawd4J?iFTWa5$;Wuu*EeFtZ4=$mA=+-T=iR3DW=o diff --git a/tests/test_graphical_units/control_data/creation/FadeOut.npz b/tests/test_graphical_units/control_data/creation/FadeOut.npz index 299e80d1b0d7b3172f6a9c2183c991a4e774d847..6a2f3fe973fae09728853cdbbf54ab7bf71a5f6a 100644 GIT binary patch delta 43 scmbQQF<(O}z?+#xmw|zS1BewFOc>`|{)d8%Qrm@@bs2OgUlH~O02+}GT>t<8 delta 43 xcmbQQF<(O}z?+#xgn@y91BewFOc>`|_6jpFIGogG*eJDKm|28bWbzeZZve3<2=M>_ diff --git a/tests/test_graphical_units/control_data/creation/GrowFromCenter.npz b/tests/test_graphical_units/control_data/creation/GrowFromCenter.npz index b6fc1bbc44ee09d7cf6acbcc1c4fcfcb0ceb98a2..80ba71a0ebfd9addbc4f6fe2ddf469d3e5553b43 100644 GIT binary patch delta 43 scmaDR|4d#gz?+#xmw|zS1BewFIBP^+{fB~$Qg!^yx(vFLXY+dl05yUS)c^nh delta 43 xcmaDR|4d#gz?+#xgn@y91BewFIBP^+h43>lIGogG*eF%U&n&_$GI=(?Hvq?32`m5r diff --git a/tests/test_graphical_units/control_data/creation/GrowFromEdge.npz b/tests/test_graphical_units/control_data/creation/GrowFromEdge.npz index 601dd9cc4453bc1b3d3144e62333e39382e76211..0b198b22fd19d65500b49f4e99f7037518e1d373 100644 GIT binary patch delta 43 scmZ3YutY&Bz?+#xmw|zS1BewFcCK;s{SO5jrS|YM>oVw0zRB+m052a9KL7v# delta 43 xcmZ3YutY&Bz?+#xgn@y91BewFcCK;soy5<;;BZo#VWZR@er6G7k;ymty#d9}3Df`p diff --git a/tests/test_graphical_units/control_data/creation/GrowFromPoint.npz b/tests/test_graphical_units/control_data/creation/GrowFromPoint.npz index 5e8f653e6e102090835c03c2564188fae000da65..8912686f1a0dba4e378ea3dff543d39f361a6213 100644 GIT binary patch delta 43 scmX@4a7aNaz?+#xmw|zS1BewFm|q{A@*fH|O5NgT)@9J0{GHz$06;+z3jhEB delta 43 ycmX@4a7aNaz?+#xgn@y91BewFm|q{AvVot0!QrGf!$zrF{LCWEB9p)KdjkO3ND96H diff --git a/tests/test_graphical_units/control_data/creation/ShrinkToCenter.npz b/tests/test_graphical_units/control_data/creation/ShrinkToCenter.npz index 1deac9bfaa0c18a4cf09c2a3a87a01560bfee1b8..af49b48cfad5d21eee79dffe688dd778ebe93543 100644 GIT binary patch delta 43 scmaDN|3qFYz?+#xmw|zS1BewFN}}id{tpEkrE2(@bs2Og&*b+807&K#umAu6 delta 43 xcmaDN|3qFYz?+#xgn@y91BewFN}}id4&rBEa5$;Wuu-appIL-iWb#aYZvfhr3IzZF diff --git a/tests/test_graphical_units/control_data/creation/SpinInFromNothing.npz b/tests/test_graphical_units/control_data/creation/SpinInFromNothing.npz index 1c051cf5220475c17fdacb4f8c3c0d4b0d49d7fd..0023fb275765100551a18da7573de5aae210428e 100644 GIT binary patch literal 8170 zcmeHMXH=8f)_&1ZR7Ox4#SsWIqk>4a(n4VLDoRI0q$Er%pwgv=&_*dL1B_syCMqJ* z0@5KAhbV{&p@t69Aqgb`l0YE&&YPKUt$XjfKkmBguJwICgav_f-m}j+d++l+&pxlE z$;NNgAPCw5etv{FyN=?7e|$#>KDFxb=nIKVKL2WqEPE^^OjvW3YwjLT@2j-#CmF5tEzr4orR#NN2NBKw{qE&| z?&$09uO9d>dBAX`v$HcIMx$0cEljY|R1Ce1a~rDGQFW?C=Ap?aaeJVihdowra<8~# zwrqg(c2U>g`-HO`f1#`Xmlp8V%zx$q!@(Qt0YRr)wi><~fGEG0tC zp)7)+kDptbQmb;T<~=@f8jFei-P1@(@FIekGPGXuyY$)x2fh<8E%mM~v0fvj`)d zI%0=N710-vqXc7b&&-O(3j?moe(KQc-P~8P_|8`?V*gphzK;5LJYXra@A!@1ksF~k zt*)*v>`Z%RZ+E91^d<3%LB3tFA`DFYoC4^zg|6@Pj!XIWyPca;cIV{e)XN79?8Jnv zFMGY)X>@?P8B&7rW5CPTDJ zX4b746^Q;(*lu0Av>STNITMug1PrSKukUem_mqp`0hY$~57j>*@Ek74oM`fdyMbqW4_K1wan**oGPT?KqT)K~q{n_q0de9wWH+YYzEkKR^sahg$v4rj{2240tFw8O1c>^j)MGty(xzZX#!@Ix2+ z?cfi3jQld(S-Wz>$;QS8Zpoz6>4m_(g~2Oqrt2D>ZVD}&e?xqtj?Mu_yZ?&QzZ2B2 z&-}dyI+ctRLVTzDN?mVszP4hkLWTPmr>Ih_K>lnwWt}^$&=4mtTNN;m@E;E0j`u=8 zaIBcGL)TX$F*QMvTcs5vA|+&^@*T>f%u-KY4~rX)5z;EW$3$4@F<2GJ9l~ocOS>@& z{Lo_O=K42{2-${M*{9200Qc)Bn^P$-&cxKeJfB!JcdPy7dG;DKKAia!vkwur#-grO z0%#4*BM*ge2R|E;RRpGV7WBITYqb*?bYKf(rXcz z7{kf8?F_ahO~+2DRw&@x1q=p`#bV!vi(!c&obv(%WLX!B(APz-j3@fB$*5kmXEm!K zt19tVSN|c?!(%hgP?uq?uf4R^i060>eY_I}cuxb$yvhvBvoUk*zs-x0pis@q- zQtN!NAAQXE^A;6b(%R*K^bk((bKv%-V;d}WSXEZlmmcXFDWm$(1=Z}2SyhZLcctLr z>|`xZOod>TkvPTsN!Opb_v~+bcg|HYNQM5heG8wDQ4dhRF~l9e(fR`!(OK>}JZ|^# zIxWu*`|*)-lMiHxa1yR|Q^Xa5f6w*v&%KntEsGc$#Fm2|HGX)wpE4}ql#lCt%sd?} zIYN;#_%`3Z)R?d-oSmc>;KA!E2z`t+s(iP+hgF-`sRJE~56q{7*hyri``fcsCw6sT zTH}=0nGrUIv$fY2D8-A{aa9EzFrh7PL@F!^DGp6|3s$D0!IZkVxZ65Qt*49mdG_TV z=|~A^;s~C@Tu2>WQv_Y#>-ydZ9Ep?x`r}zJyR1xa4!e_^e=Z$ZevR%QEV}*)-q!mE zyRog$eim&D=g>b$LX(;Hk3%3a_I^)SGF4|PZGjplIEIsiK2CMnIyHCo%?%3$Tx?&- z%|FLD_OG))X+#&d=&HaEUF|8vR@(Q=7g)U?%XM161&+_7#?Q&eC~D;c3GmLT)}Nkg zSit+cPi>Re_WFe_H?gb0`aQ!Y8+L7}D_Kf+`WaZ-#CsX1&onW>=Z3g%zdw4w7W5z& z-sa(f&`E_i>)j|H5HY+y7trMM$Ydbvr@4HBE^v=@w?7d#nJj7)YRqj+f*Y;KWqcK< z6=UGyBDdZmx3FcA^NXn{J=m`Hm+(Bil+O6?<8~k<{T^hsfl&S|F!AYom$aRi3NY!g zR2uPNRqrbcjhtYc+BmuFaj6dK*H6vs=zA{bT1zI1&hONj_Rs@>A z!Q$s*Bh`y7Ca}})xsq*3j>*82%<|#Tk-Ji;Er6;-#^LbQg$Wl{83oasx9>YZ-C&3t zcX#K;Y7On3{G6O9S}O=USSzN=_h!YHI}&hiAV>S=kh7;t=4<)R-8s5`^hdCBAC{L6 zhVVJtfz0#C-}ZwMc&OC1JBmD4rSjX}BR}~vdye2$;cS&D#TL8bpo!< z*Kj50>x7}&><{}BUBsTv!9e-kwg6)npk`lk$Zfb*A2>n}J5nFHOd^}>FLy39$a;3B zBB7V8OpTBk>%mg*u?C@UH;k&Bo~!W(dP4<^#Ay6nrP2!i8^iSr{b*@L(+{h+KoSXO zNW2=JCty>*go*4d!ZsPFU~e|}oA6b4sy-K>iThyH3AetInX7|c0KkicLxChVKuHNB zdB2NnE)lutxOY8hvy|g2^>tH^tj)K|o^;z1yYGZC z${F%^2jH}RF`$M&M|P?pj|yX5cUuEcUh4&bU0fRRhJ2;FdY#kXTUlL!L2)b`4Th_6 zi`3wBB|_j&j<=f*HZ^WE6oeF!M{zY4{)_zFRd3zYyX zbqR?*svl^38!$o4H;wi0?n_gel!$5i1&2csG5Sw|3V(;957prJ>iN4>0B|pkd(gPH zvY6EOJDozistXx@$29J?1A9F0Rl~Qfx^>qi_KaT&TM~i0pJ_s%VlnM zm#YK419>CSlslUw>eF<5>SxP`5gt`DuQYGAzw~;)+cx6J)rN=>N_6zkcQ;20*7?z} zh(PEEMYN>rMFUgOKto3YRiLCG3#}Bo_m^q zg%`GBih!?Y_7+n*v#lxHwFY*8;&d+%B{J&O3-y|AJ%yS8tXjzd^IoI(m7>(qRS`gX zwgReX1zM#QXqEAKS;#LVC+9FD(L7!E@x=1z%DbL}?tLX&qY*(jXh#52J8I9o1e)f1 zWT4mHBUk=LJ8z5jvq?hYZqsaF{`Q$_Y1VaXdvONalyK0lJReh|%lJcHULll+<#@sz zt5M6lLQ4l}euJ~`jdhj;rP^T3xY2xkuBm4`eKjKZsy08q-yYnV>Ya8w!kL zEl{MWL7Jg^kjtIc#fZG@?5!DRV?XN7^tl!^qjKMqs=!I4fI}@yD{xXE0hKU520c3t zxZR6p!=JAUW2-*iLv_HwM-R|bN}Rl&GrB9!u6W$;uo^~5Z@zjF#r-hy<~;tekbpGGJaMb@ki+R++^%!!o5I_FlhZkh z6!6BHd@kA#%qt^Uf^krd9Wtx-Px!|?BF)FTx-A*p)9Q>qD?&xCf1>go>mJZ9?0t`B=hLYmd^5;_c7$?@i3h1-hBxiY+>-rlQct=kxMY`XlGqdRNuv%4Tk8P1o|kK1 za^oQqL>G|L$cq?tQFMLjoyrVQ-{ydXm@Nofcinr^?J~TtS4Qy&ET02JL}%pnPfsF$ z-6*aI&tZ;ay;}hK`ykay1{1Q})e2G>)&OS1wIP&`k5#}%Bw)sXWn?0p5_dOm-=DLCjt8@7RVtu7pmYY4cv9XOR~-~-(Eg&+eGACtBkX~wWo~`xNG42`*))Q zBAwPoWkl%%mr0DA(~>#|K>Cnj;Iy$t!*VV2=3tc{%|=|#%Mc7I^BSqw^k??Kp>6K2 z<&@^-ascMQS#n>Autmnv>t}eTN!elESsnnXV#cNH;){J976$U0r4VVbJslumC_q1@ zB8||2Gnr580b~>4j+ME9I$2u2!&A6peYu;WoRyX!>JV`26fmJH6XQB`(Ip(KQGqBj z1ptX+AYjDvo+KA?1Ah1~qu7Lz=S2E`pW3M^2s|JZz#tjCsa4BmaOmWSis6SpqD21vVc^S4{F z2tl{ttH6krgr#fDlCB}~xm$-JTGjfu&{6MmGfN~YH?}B0wr>7L+(LKer58x$>-vGy&!e4*VOI){18P$pV*=KD@&=IC z3SJUi+k&E-b`Y?LpPwJ?2+&7^P+YW<%6*&mm;Vt**m*jXhvXtr6w%eNpWnrpPp(VGfgdtHbj30$LX-UHdg_}(aqg09*J4s^LQY5)d8e_~D_O93{Q$!*o z*-|b;O)kv{nPd}2ZsRVO48{ybW*E2M`<;Hz?|07goZs`D=RD_+^G7_)%zD3Tz3;o$ zde`T(-f^&%|7HUOLEnMDZIE#$d(}(}f-LKFA!TR-?`swgb^FL`dN2UZN9i#mA@h9lv^4LYRy9Ab}1 zY};a@v%NikI}|e(dFM%%{LU=tR=S{vAcUK|~T=@7g^R`$z-*qQtu5M z@0KRzL)qQpnMG~des8j%vJ$;g9!xpAI8{j)Z!cyWS}^f~=HZlx)o0drT;Vbcg2OLnv#l@bzWw=2F^!y>wUZ_Yn%_LCSk4sl7tdL%o37%)2cdlu& zNnZ8>9m(LHyxtLfie{LOorylq{J4#8hH3y@jf?f&| zJ%l#2Y7%JK%9Gd=`KdL(lAr2rB&kJvne+(FOj$QQ7FA! zR6m`AUiK|TGbH__XuCAyn}rd}e3?yL;}N%mKX4r;g}kAyx5_qc$GbzZ+VrDTzn0`q8c*L=+jP4H`4-`yFr@h z4nEC_x1lLPs9s0A)B|-D+%lY3_*%>BMR~N`tU~CxKf%Ju+C%P6z0deFbLn3qrDtp~ z?H`<>w)?BuITK^L&>q3;=hK=%CHr2MOi*9&P^RLbmoz3*;p8RA1k;tdRGCp7r*JW> zQstBMSf+xqtCtPT2W~wqvrcxinvm(5D?OJz0dFo!N&N-t_t$sKIrO$Ur-m)FPnzT{ zms^~m$#oCqzxf5zynfLJBR7pxdRF*(1GH*qHKuE^wkqd&?T-*?4T-y^NPGI^dPw{Y zt@yhtTGjqZxlYy7kKso@ooT9QafD9Wm`Q;F2j7ewSUUG9VjLK-4A;$uKRzQT!w>yY z!h&B8Y+y~mgI2SH6}h>&u;jRrk&!2;5uSqX;x6vIr0oIparivC!0pv3j9l|0qc3s# zXM+0mnZNbGrQ`7y;?CwQYijc!ClW_opkJIf>APzT&4_yfqe;S7+HT~TnoQ?H_e|f` zCv^-t%gLE%C`6QlzK}171NCU>sK@?)mHs8!o?>*5gi)uV)%qk zy_Ot)pS%w(S{`joi$;Y@Z^Wo-dxsa}`5i^X+0mjaT`vs$yIZeJg{L ztnUFnR{bh(m3O8ffvOT|;p!%ljHU%fCEA;h2Um8~viJq1{n8@@0c)zFuJ-#X+RhN$ z$wV9SN{q#3kJZOzDn5GLta@#cGOZ8h4%r*qv&`}lP24Dw$a zQjK)^bYL63K>Ehg99V0TW=5>8)G^x3CX3iBtyp!FfCeFkBJT28ZN(~R1X+r1L2VfT zKrd!^Z50`1F@?;9(KNQAe);rWp*cUFahMe%NbvdQ(bXY*R%n3^KK>NBj75uBS-@O# zUK9%w!4Ns1a#qZ`pYZVPW1I#xEFbclJ=iAZLzw%aHtL(97%=zir%FgO$z7wU0lLIccFer8VeUO(E=-fSl^ z`D%=xE@d`tU zamPye1Z{1k=xot1hvw%BBhr!9uWoHN{I7f$#x9~VRIeTA#~Ma#!VSc>nL#>KW^tc? zPl+AaR!4!WT9fJUtr1vUULX*5KKBYKm}s_Av4idX+0!j#a8L)AW;0e#!gCX6YSe;@ zOBN-StKlgYq!1Cj1q3$)E$Iy&Y}n6{Jp^mb=jVo!$89}qU^Bn_v3!~yJ^+h)%W(wM z)ebfl!}*|Te(jP-49r~MLykP?5wgjQ_t33CfSUh!ogox7 zXIcTid#~2cq;CUdv1ecx=Vv`!Mr>JW80<-mTaU$+&Y}^s`klg66F{?MdqUC$6zO;l z`xTFt2FDK9;o|e@vcKezg62JZV2*uyf{)xIbKRf>c)uoGC!$)JRVj%VLb01F@w zbqfdC(b_<4(i>z|_9@vF79)rHBZ#g&uL0|FaCMd0omrlWKs)=fRFKnElP-6yHE>5{ zYrSpKpORPH2Ok=B<15GEjn@J9Y}xO9V_}x34ad1nV0AC2xDU=d)2Z^=FB5bN)!ak3 z5#z6RMXWBf6|~6f0U*iNDk>>iY;(jY6_$%^F10=V8J@sSI3SDe39Ph`C6jyMR@0zgQjGo2ovk1fLss_EGg*s57W-|C zs+C08Cwa=z(LIy@omXu<9O(L(#j)^m))0@bLU0~_cRP{Sn*`{nN%`u^;^0^o)gEMs zwDrZs_b@@tXC?1*-4rs}`9nXEmtF)8=eJy}{I}nK2TDuW^*VXWtse8$YN!v`sftBm z1Tznlf${|9)ILD~Xe_a8w&`GEr8RV5FTT$RFyQ<`z=>Bfgt4HzKjY-&r0;@=Selv6 z(puJ8Ag!@vcRW5CN4>@cOt$)oT^gzdyEw_fbVURrofrB^Q#ZZh&2}x2pekB6sLEZ$ zH=z^*aXUCMY*4ltv(Yoi^OJP%#?)}(K(MGzJG!(#O!t6q%Z`N_qv z(JPkj%0Sr}!?}6r&kQh)x8FK1LJge=0>KC-;$D*{Gs-9xPI+fCq~=tV^iqm}=V8$d zbSFY9q3ie4+U{7Bo{O{QfuPWv^n2GtRK0{b7LRa z3+TT^zpwBAu?Obwyt}Qg&4D1+Ea=T{XdVo?;E@4vr3j=z5qUv0T_vw_W2bHMjhl*U zQD(uTH~58>sFP{N`%b1F*nLY2je^1NA@1Fl!F!JO>tL!-t4VMh1NmeMpzbi>3tvE5 zDU#e-5l-4{c>YL-3Ct?2qLmxNE`cim7yTMas-f30xbSwk#;NHmO9mn$I(#q|bEnUi z24FjaXYe8TE8Q=5U+FC~M1o}YY|nKXd|r!Cgc%8;pXdVvM2eB$nX=JTzv_Ft9jn2a zW#3eD-+U}yV@uTcTYi*ErnIDDfjW~gg#Z=jaBaM%6`(PP8QzTvm4Q$j6>!gd3^PP< zE}0w0Q}w$4(vPdB0W!~}_F+)_KppCkf)ouKf!nWlP`lg>Sc0+)t!`YCY}j>_Z$jd$*m6{44*>yh~73q@0UNM@L80 zbFW(O^aJ>bwje<<*BguP@h`mzvypOfx8LB4_jFX-Mnv-}xJdrBWDb8wnM&>C*t<0fcA`b;p(=4Dn!QRW7GyuK!tZTQp!& zQD6!bD6BTYfaOG2t}aj21)n~bxXbQ^(GF{^@M~~^2h_uG@UAuD1TCv&h=Q5-v$14SB1A%KtgU^iAifyMN)q1fqK^ok)d-X<<1XXpbcuYkwuGy;O78Sv^; z@`%}lh&;`k7Pk1L#OGutD`&7=QimdC*WBx$Mf zajx+>o89!YFV`dDfBDBQl%gq0)fA;}ichvlJ4gs96EgWQiXLc8GvSCeCt9*?MSGLP z(deaZOOrlmm_)T`gnsnf(7p|`Wv+jb>hr(oIJST$&$VT>fPibK2Y@%Q<$7xxp^0^Mz!L)%T;CwJJ)|}}H?qKRbW`xoiJ{%g1 z=BeG?-9_hXVnNX0Mxw6cjt0K%XBfUywN|F12lXQsY(eNs1}KXcvF+g2Nfv6*x>OI< z#DTeAiUmDBSbUY7!VW-0eV?3s@Z+X^=k9^nw70cgz&c^E=}1K=d!fCMvN3=;{shcZ zU`<7IAztGO`@uz`PUAzf;A%i_6M(J4aDm@oI-&mr?8SX&i+(zpfwBN;#viDR=mZx4 z@HT`rl5ib*c^m^zJ_U#se6D2*7NAOcF3rz?4DSZqPW24k?E&m5($Y*Vd+b9NtYGN% z?nbm0#S}ggrNFfYGFG=okYKB~?n|llDcpkVCRk#7(@+8_%me9pq7<5AKvPy_@Wu7OIGfU(Qc zr{G+1Ju}xa#~#iEu;nd!l}jR6sc~DhMgqPa=8#C+?0s0~fu;Fcv_0$*^1^$MCT8x% z_sOtQ78SKsuk7P*vYAQ)`l_4K4>I^?o`E4i;H#$x*|L-imwsO7T5<&(ZWLU#2Vb_@ z%aW7~NUk#IfI!QDl3ksQBw}Qr z!~1`wnvJH&@&R~E3qhKE4oCNB+@`LuTCf;xI3aeOOj$1kr3)Sb#PNTQ1t<%_T^H|P zBys!kT_{DOJTj(*?|C(e9T2;1Z zwC1Mnm%gg-4Iy>7_1a{oAwM_81THqMAg}WicVTE6fDI+%+d-9QSKm}*gd-5(juD2^ z$*w6rw@@XpeCAjPx`Q4+AE^KO^QjVJa!u?;&#o62yZqp0suv(immgq&7Ck(jm8N-e zZD^(Aa2bAG%EiyfZ2fx3;r9> zvfs?1h3(-tfv<+pd)>=T`E8)Zj|Tky0`{P9%O3^-y=4ZM+nyR+8*4TQo&Gq<`1tz| z+h1@`ELX_gQNf}6Lc@2{ylyRC)*$raTn66q4$%Nba8bDp2m?R66C*2h`+e*?Ty2y0 zt^?hLWrq()-#Xg%Eu;Vd&RyI#FZsy6-Q0yE|CqLXmHxd4Y`9E3-vGFN@LRZ)c0av&a4?Z^kG!^__o?lDzU}{HUDym z=(cPrKd(P->^rKiZ;9C8FVyP}l@mR>6ioQ=PVtVy(KJ?^v3n#^r~9jk|8QSS zj0yqSyXnI4{^YKaLtoR$cp1=VPK@|teQmn*wZh-$&ws?Htx>Bg4z_Y@Hpu^fU%mg| dG9%^S_kaIIyo2r9Z(*q%_(g(OqU_7~{{~Pp(r5qx diff --git a/tests/test_graphical_units/control_data/creation/bring_to_back_introducer.npz b/tests/test_graphical_units/control_data/creation/bring_to_back_introducer.npz index 989a820e49ea17983b82250e6869dc8ce0311f28..596a4cdbb6f684545d634ffb9f3d1df77171cde2 100644 GIT binary patch delta 43 scmccVannO8z?+#xmw|zS1BewFS|{2)`40sfr9LV%>oVw0=2P(o08+LP(EtDd delta 26 fcmccVanpk}z?+#xWHO(M_(qxc%FH6nAhtIEYy<}P diff --git a/tests/test_graphical_units/control_data/creation/create.npz b/tests/test_graphical_units/control_data/creation/create.npz index 39e988076a77ddf5c424d743d166322f00283234..4154386aec57e5116bab9c2ceaa3fbbe1a8aa111 100644 GIT binary patch delta 43 scmZ3exKL3lz?+#xmw|zS1BewFzBWy%{tpEkr7Q)Qbs2OghY5HC05qEq$^ZZW delta 43 xcmZ3exKL3lz?+#xgn@y91BewFzBWy%<`-aKa5$;Wuu;lVfLVlDWOA5*HvqvQ2;Bex diff --git a/tests/test_graphical_units/control_data/creation/uncreate.npz b/tests/test_graphical_units/control_data/creation/uncreate.npz index 2b211311836d1cbc592d4f2c58acbfd156c0d575..da655fdfabc9e9346b852673d85423ec8314a5dc 100644 GIT binary patch delta 43 scmZ3WxIj@Vz?+#xmw|zS1BewFWDTbt`VR#gr7Q%Pbs2OghYEND03MtU+2loH~ diff --git a/tests/test_graphical_units/control_data/creation/uncreate_rate_func.npz b/tests/test_graphical_units/control_data/creation/uncreate_rate_func.npz index 3826c14faf4fae28782735ecf759566930eeabf7..95a5a85a8fc2ab42aa5ebbbb99a2cb4f9120945e 100644 GIT binary patch delta 43 scmZ3euuwrNz?+#xmw|zS1BewFtnTWY{D*>#QakyXbs2OgU*q=%03zZKx&QzG delta 43 xcmZ3euuwrNz?+#xgn@y91BewFtnTWY^z$UW1>JyLzZP*#J2*5(3it_lcj+>CBmiW^ zeg6f_jKqZIQ)7%!hjgkRXn9mmYzl1t)T-n?=bdZ*zDdgFTx;uNb(`wb9gi!v+myB)BAtA zb6NE~d^o+p z%Y^f|6c@>yFHDbnJXLYhEO8{p%9{|Mj=@wa^=9vfa&31~z{EeeQOQLJ~fUytTlKaKfxP z_I!Q(!0$7NHRSlj{eiIg<-VXFp08wHJL=Z{^sSWCE#Ag*>wi9#y6>4;BCy+z`n+S#XFMm+P76LeopP`tQq0P%xpwo$ zjRm(2mlO*;Vs06^9pdx|j}Z*lz9gS%_uXP8s!)YwQAcg^0~UU!)w>x72QFl9cxZX& z*s&HH+W?!{z0_wPQERT_gXNG?->p`t=8(wK)s5%x?&9deyK~THwZJ##!;X$}(P{Ru z!)9XFQoud<9zZ>W)m2);KXcr$O1m#@ujAu3#RSocdvD`}anVCm4hOQtQCT{V; z7WP5fVA`dZnR}i)jSvHW8K@{V@|t0mWRmSw1Ax`3jEdaHtjD+K!aG|hs(yGbI9y

    cVHwy;n^I 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

    )BN? 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 diff --git a/tests/test_graphical_units/control_data/functions/FunctionGraph.npz b/tests/test_graphical_units/control_data/functions/FunctionGraph.npz index d33b2a3cef41e3a891ae48da1f81dc9403f11006..84310cedb8b1e3304182805e24ee792c7fb08595 100644 GIT binary patch literal 6386 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 literal 6410 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 a|M?!{vaKBW;ueBrz|TqWw|3)Q#(x1NU!oEK diff --git a/tests/test_graphical_units/control_data/functions/ImplicitFunction.npz b/tests/test_graphical_units/control_data/functions/ImplicitFunction.npz index b9dbe9ec962579caaa4bcae40ecc1dbaeb033af6..fc7de179f1211eb97c59714e375d2ffc16a1624a 100644 GIT binary patch literal 13709 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 diff --git a/tests/test_graphical_units/control_data/geometry/Angle.npz b/tests/test_graphical_units/control_data/geometry/Angle.npz index 96cab22432d2f3c2a2d263383e54934cbab014e8..59354475b573dfe629e362d18ea9e8d4462e3ee5 100644 GIT binary patch delta 733 zcmZn{`Xne7;LXgU%fP_E0mO<7e{2d~{D*>xQgZbPAYmYQd-tGMa=6Tahb;mZ^sd-A zHqGuSnkYHL>5ZR2`Ky+QB{zADk}tcKc5S=6B~;!~vW9*7FQG!sj&+lk?mB(1p}>uq zldrXD_B_iEvOg4duD<{6{Lbfh&THH2?f`}KQPrcHfy zetucq{hNk2>i%awfBfw7=cT>z<>vD9-~Ze6@%FRF|HJb)ow|MN^_rmH|K2`cKXc6| z|EI05cgN_7Z(hiHjH$lu*|TSdzI-W}F=tNCJthW*35%YuzW%zkY`1J*U!T+7IR2$U znpN@)3W)sCGzCC`S5i;FLe(Q|(fbe_k_BS(%r;JH>{ zdp0t1nk!i7?6+@a6%`c{chBc-11hQ5xpnK-g8F*FXc< z@uT948UsVam7Lt%+EV|7H}!Hro`~)K(}%vV1x8-nyO;A0Jd}NN{rdHV5jt-9AREtK z{=T+t_0=rb_l!W^#h*WaCail^wtHcKh6`Ba?5R_yGS08Mm;vGX+Rf*m>z8g2K6lLLqU}KTk`*^|`p!l8`uakRxpe7L#yYL(r!Q86R2tjc+s|6P oNvHcBGcaxim?trEOa8In#}MGn$fV1FnsO5+pW-lQTL4b8050ESJpcdz delta 752 zcmew)*e)a$;LXe;!oa}50mO<7l{>RflmeLztda~9rR3^CY!G;R*U)=)xD5M)7J(^z zf%c9~-clTwxVINv_7yO9?R1^J)MLGG`zzgBWtrK3II{i*L$@v){A-zTdpsK5wmU{rz8wUzcxv{{8&@5byl^wSl^Oe}8)W zIe2N*uf<rtlq2JztF;KZULqn_Sg*Yiva3=Hu4iOm zSfVuhY}?MAI}g@}%b)-EuTDZzvU46k1A~I<>C>klzIv5)W9_-~=bbl3^vvT1iMBc^ zZn^z7ar>+9YqGXV*@`nTIAocbnH_rk`0;}1yZ7(E4g8cy6`WmlGso>bFf=AC+PrzQ?B4YBTvpMlz!EDKxBTOGPJs&^hcFuJ9gC4bcaVGZzRWD;RUOU#qEa+tGi H1t((wZdX^D diff --git a/tests/test_graphical_units/control_data/geometry/AngledArrowTip.npz b/tests/test_graphical_units/control_data/geometry/AngledArrowTip.npz index 77a28aa9d06d16c16abea4b76896ea131dd2256e..998f45c417045133e78cbbdade601ac05d52387b 100644 GIT binary patch delta 43 scmew(_(xDGz?+#xmw|zS1BewFJm)UR`40sfrKWH&>oVw0-pJt%07JMCasU7T delta 26 fcmew(_(za6z?+#xWb#H1@r^Q*IG9D4L2PdTZL0@m diff --git a/tests/test_graphical_units/control_data/geometry/AnnotationDot.npz b/tests/test_graphical_units/control_data/geometry/AnnotationDot.npz index c73dd16948b9af0cd7e0354523e4a78e5ae3d697..ec1a588228af968dd66d03c5b7fa0fd1199c0502 100644 GIT binary patch delta 621 zcmX>lxJXbcz?+#xmw|zS1BewF_}DhY{D*>xQgZbIAYmYQd-rTsu%igW1CQOGG&glS ziHT{6Y|qTEcPLbT;nn49s1O!Zy4bF9sr?TH-x@aaeGYk|ERF}?afKCJoMIU4;o;?^ zsZ}g~zmfmhxigP)_>GI-?Y91&cfYn^>6cAkR&5HqUvp*69j)-V{WDgEoSyo%_u1!X zuP(PsYoFa(HRpWT{G4mmpJ(@n&%auI|9aZ0r#E*>U;T9F?9F>Gs6nT3HtW0Bip!CiOX9htRCzR>^9Y^!(%h6bh1^nk;rS3i21Z`mi?x_z#E;_70F zTYEo#Jo(ZiH+1#YNzZwK#<6@nd*#F3{r>j#?Z1w%fB3ImU%CEKOw4Qd<(D~wgM&|g z2HNSN`)#p=-Eyh$;IC`HUu!$RcG|RQlb-W4Fig00@7}!yeqH7N)vkurzTYp;`|bUk zH!A1l85k6{hOIVTG5JySs_s{-*8VBjP+wnfU-=Ih5i3`&29p2${yfjOzx9rhiGd;J zR>u9V%iO=i{#@D)*1OMzb5xJk$Qd;EjTn}64R+#6csFM9m> ze{LIl`}sEcAdhC6NGWfA}(Y-4_fd+^K+BBc~T$AK0`u^Y5tgTNfL1K|L`J%rA vkHpn)WUt<`cdx9NxcJ`X&>-iQe6arqbAUG^lP&{lN)njd%VEwI08T>y2n8c< delta 663 zcmZ1^cuG(zz?+#xgn@y91BewFOlD4xvH&t0SS1-IO3BrO*dXxsu3`3MM+x>19>za4 zH@PY{w{krSo7GYl5W_Ne$&D#&N4!?+y;3*WB4Y2ld&~Oy2aoPlUD>3dabxWTF4;*% z&$>7{&8Bn}N!GF3R}{Zzo%i*8_4hlwcYl9>r@BJ*yV3VmI|8C>_XO>U)!0{O7^x%L z)qPs~eE75ZdUjE9kt>e=eD!DY)u{5i(#(I6Yk&W~m9o;H^tIc{g4fSNzQ3$m`C(bX z$wJfVr&%`#vi@e8#K>0vWBR9`H7mkaC+6nrrbLRFnVTQ}^{Z;e?Ag}U(|6ecy;m5v zGUU*|e{~Y3QES6Ark_6fnuUQu!u@NNZHd*~i8EK3Kbp0}taLBX=Z{t1{gyrxa{R5| zjh|%__sr^B+&(L$+d#6`^MuFYtO*okY#Oc{dbPY`JmV-tEJX9|NC{L*|zjA&|xccb94We zuDf;bo?jeT;m33L@14-w$#3wl-W;NW_xoCly&Lk6`qyd$HMAXxds$sw{ddimpD&*1 z*w3B5lI`~z^Vz<&*MKglTOFe1{GI7|eo*25c$<9D^T9`-AN=>~9V;6H!;j#-aq_3a z7Q5}f%jfOweeyLcD6F0qS#F71J8`DgyT7yN&GU;>XJ9yBar*h^^uHPcN$dAlY!985 my6|GgoK(H%D`62M`9r>rF~FOVNrV|K%}q|_FlVa(r#1i;u{6*C diff --git a/tests/test_graphical_units/control_data/geometry/AnnularSector.npz b/tests/test_graphical_units/control_data/geometry/AnnularSector.npz index f229cc8528f81b6c8733dc1558dcd9486fcdaec7..480c0eb4aef02ab2d9eebb17ec3606d3dd52afda 100644 GIT binary patch delta 43 scmdlkw_Q#uz?+#xmw|zS1BewFK5$BM|A&H&Qs?=Ybs2Ogzv1%+03%EfuK)l5 delta 43 xcmdlkw_Q#uz?+#xgn@y91BewFK5$BMFXdxkXke9O*eG?Lk6DCSWbzw6Zve9F2*3aU diff --git a/tests/test_graphical_units/control_data/geometry/Annulus.npz b/tests/test_graphical_units/control_data/geometry/Annulus.npz index f7029ef064ca9e90d51b97d180f363c90d05ede5..5fca3054c010324b081e8710c18d44a38586c099 100644 GIT binary patch delta 43 scmX@)cF0XCz?+#xmw|zS1BewF4sMr7{SO5jrEV!P>oVw0{;uQ=07t12D*ylh delta 43 xcmX@)cF0XCz?+#xgn@y91BewF4sMr7-Jrz4(7-CmuuL53R?gG diff --git a/tests/test_graphical_units/control_data/geometry/Arc.npz b/tests/test_graphical_units/control_data/geometry/Arc.npz index 5bb130ad2fc747d5ca60dfbe323b6de2af16c5e8..b7bb32bbc965d7c33ad4942c99842484489c25da 100644 GIT binary patch literal 3022 zcmeHJX;c$e6dpv1f`AGN1jN0S6IoOc3`99cDJlg~B#|AgfQ5=EDnc+&YZ7ZLin0ij zcnk=d#b_`=^r=FH4_@7??Ez2E)r%=Pou zU2F$I&=PR3hj3ZDvS#OpF=PfspN%{f6@DV}T%>(`Lb49D97@--1d>8Fo+wQt4Yl9oG}^(SbT4_s$ZjpAd2-@OYyX0NtWeJHr}J#WX!UHBO6|D3XL_bmj~rvC>TQ_jb@BRKy72FLaY?_? zx&k+RrKW9y&|^ncUK-}qmByxxPnR4buNJBmOm@ia`aiAAwUI157Z6xL;2Q+eXR9`Q z=UfrSeR`eUq5zvk(c_=rCbNTh_)BB%VE*V4li7q5<=6$&WI7PEUr_spsUl3&*=d0` zfgq1-KYDqUhH+zr)c!yqeZ7M(WZZnkQb=iE-d;I4}dr(>8DRM!kk=HI$? z%hA#Crjo9Z3AM_!va&KJ*2u_+z~OM_olQ{=raDA~hK6dvvu$GZ4-X4c0Rz3Mb6j)%7G1r0Ydm?nqKD}#1Al*O-g+gFhL95WFASPGacl8}Ad&d1LEee8uaAO;i;QAKybgJ!Zl?l&^Y?j9mn<7yUuP(RgJD6!A^|y zm>@CCt5hRct1;KX1dT=mEh{U-T>DUt%W??%fHaH7I_=y^%ykHtP7h9NCVBz0BI~bP zwkTlaXbECb-j0~+PAk{#+gF0}sG)h1X)+Mt{<^72#aOxF z!Gj0+#XfiW*+?uW2{Rk3oR}cFCCRUVVk7M(8562-6U5=Ja*|rDegcy22e>>v3(`@G z2@Rzvi}=5erKL| UKX1M7;8h)P!T;e@pa((!0ILA%{Qv*} literal 3028 zcmeHJX;4#F6n>Oak;o!pDJTRxqli|ZY-LA9Tn1SR4Two#B3lH*z7ud^lT`-91qBLN zYX~G*N&I-S@roednBeue-DC z=V}lH$%FdL zSvnP|ln+5ZTpHbOn>~FDmR^s1_=uRbv|@Bz}XLnVGIQ?)rMd6C&{w z^wQGO!iI463JTMj@QpOE7CIe3TUcmle0@Ph3SClCf{lqW<9T%!=;TUbs)A`60=5Dk z?ZDj^PLh~hVq;_17sec^b?gcUgjAvm794H4FG4uOl~ObH|2@yx(()djl)N^Vajy7~ zQ}}0qjtdHfS|>EpXi|3Fzh%SQ%WUF*#+cjMzTYF>F}6?Q@%Y6(xgwG1N@z!z_@i#o z*2ml)*|@m4)6)Ns>2kXtd<&8YUby@DAsD+smduwYyJ3!wjziS0spZPnR@)@FxXvuX zM!vL9-2{PvTFU|gPrHaSZk4oxTf~rF+%?K7Dk_rr3=9Z}CK`>_R9CRyN>z#(7#KLV zD&TeCxg5@3sSBh=Ss7vfM;vmjjD+V=rNp{Nnxos7r+RXEA!~D^oClKh20SksryfCP zDI?W+H`e0H4+7C$TCd_g5JQ?`LvBiAB{mW24)(}&f|lLg+&IQkJFEO zlhtTQ`wC@6MMVx>4Ct}WVk08z6Xt7J zEQfbd&C?k0k%7U(_SD&dx^b$uuC9_mAeh5|$%N}|(bqq&3SbC(!r?g*J$^nDN%C?E z2d#Ma97sS@^ptBPN}bQLj-Nx{vrCR!u>iUGUX7_a(%Y-*%Ov=Wc+c}0uweGX-GKEi zKIoIe94*tJbhy6j=DVS1PoF-GSRC(g_ws$JKr@_)HFoPS65d%B-+~y~Q~@G6xcmC*wzRag0dJdw zALz%iexfH9(5e)--BF$kY&n7%qx0)_^ZZHZyX-4=;Gpn9c_uN z1dGUe;D7(=8mLI< WA188mXSpxLUKw!Ng69p%sr)atuG|~| diff --git a/tests/test_graphical_units/control_data/geometry/ArcBetweenPoints.npz b/tests/test_graphical_units/control_data/geometry/ArcBetweenPoints.npz index 0257f6bb93991aa9b7c07a20634c65bf4477a25a..b29d3c9ae31b680cba9b7c8f90fcffa234164237 100644 GIT binary patch literal 3035 zcmeHJ`#02S7=L96rOPRid&i>Y5L;VQ#$`)NP0XknLu=UCby+OQoeXVfnGq22Enp|`52u9q`S?;IDf>gi;*`KPa7AS|lmy`PCdCg-4!SsJ z2J3DVmX~v!l9}867%bfb!saoo2D*cpOF=RH@7S<(*!h3>r-b`^bu;(w4MJgeKJqi} zMWLN4)UF<;RJ1;3y714ayVSA-KYH7=JsW-&7HYIa7AjK*rR0^kX-V~}tcF}KlNrsL z$*7$U?$WC1W+Ock!ScdPdp)(Dnb46cqv@^kJr)JEG`*yOtc1F}sdu-i3IvtMN0;XWft>2-$qR_Z^XJZ`_j|gLNZNK=0r=`o0<|(|=6xe_*aeHl^4Vgs zn5l3+TPl^7<4n6cI<_Oi1QJQW1#h~$PawV&7Z(Szbaiypl9Q7W4W~OFq}$(lm50q@ z3gq~+4KUFkxWJuAbV81h$>cy*{LFi&=GN9U1p=&liP!F?rlwAB-oSu9V(4=WFJrg9 z{^rKUHP2eEs%&~L6o&C1ap`t?h>%xR*q%v(iHXVmq9O|g`xg85?NfJjbPVLcs36*d z`ThM}u7_-FbTh4d3>616i#*HBDwT!r8`IXDPE1UUoga0B&?OQ_H#fKWv-03{zJ3i8 z0XmEXK7FE4M@PpQ!)u^zb@cZ3MucwVu8vPlaVHB4ii)n&)nP_pZx~=QF{?4srJ2z< zc?f(5tE0yH>sxGNg~n&^9x#nJlPAir2LoJVmuLO>?DQI;hbY<8Z*zJIk%gj9*Vb;SA9jw+e!_oB>Ywr3- z!i;;^Q-d|y`7SxTkhO`y8gwo8&Z`V_+;fPWi714Gd$G<$18xr5O5u=&b2K4=%0P_~ zS~D%v=}x0zioYL18r;VaX^;f678YVR^MZB_^~ zG-XcEPW#2k;iH%^OXmHohdzGk(xv$XxV@vJn|;1vVY0ugl2vCvjkdMb=kxi`V}_{O zb|!L68Mz~mN=mlC{2zwdFgz~LRRQ;2nE=+*J3Uy86j<2z^YTpRMWW=3tjbFCmuNJN z$z+atLI%Ih`Qp2i1qB6amlr0~v-XoU+Ua%@j-hD8W$42+kx1NQWn~o~3W57L&SrLh zY|CjVA=exa2?;q8EBxmBpdbxWiI;lJ)PVZMw@;TD2A^7=#*0vqk&!=TXJ_N__-(RP zXk@8E))}`rMXrjQ^Y5)sO7f@(BF;-8xZkK4STkc&*XVTm>%P9bbr_kxDx^)0I7w_SrBQKlvvChCc1OGz?dv$68y6jmp9q+hI`B3 cFkgWe3;0)Kj>oFN`xXEt_{ck^Yl`OlFDf(fVE_OC literal 3041 zcmeHJYfuwc6kd#!3Ievgp$hWUD#npVgc5X$Qfs7vLJZ(wU=UlS!3co}X^8a!N==Y01& zcW*cfw%Qtkp!dPE5t@~$7SU!9blTVfvVg3iqp1n_B;1h%V#2l*LZ%V4PVWIwNQcs0 zDk*v&HhEQttg+G2E-5ecTJ*`<%GEqy8`}X_(>4d@CeGmCgss~b{g-{t?)2HV5E2m{ zRs3bnV4X`nCM9p!+S{~hm+*kqaB;0^!vHDJWT8*wLtB%h$$FY8`>vsj_1vx}vqw3G zUs9<_<6#S$o7AlfC$Uq`ue~|E*x8^GSu~$9AObwN+y#FH%EK&!=;#@e3 z$@I*!grMC|z8R|D$meo6oT_<{;*l=8_n}lF=jKg!gWK2New{< z1?$T9YH3O1>Dh=Oe>Kw1i8=z0>R_Bxi>F=S9k+=3~^?ni-?UAW_V`-MenvX zH#e^qPQH-c?>hwC4a{4&Hsu!FAYH)UO5_TnkSTmk8mQ37^w_M-jATecVo`5aVu zO1n%Ea0No4!4%d|UE~uO=*Z!|Bkf^BQfDd&stBe8>RF?Y%jLP6c{QtSva1YHsasns zupD$>1Oh05&E9N4xsxz!EiD0PS}NQKhr{)tgYG@rxw*OL)0|seE^Tx*;L!t*$2ZHh zuhnDD21*XrL|@6)AOiR&#w@OSp)cuCHtp^0vUZxClDU7hmQz!cZ?GC08_Rwva01p= zY*Y5qf+9?}PFEyzB<163$tRdxi}iViC>@v9cj7ryVjh_VHj$@Jjg5`t{+LvBd*iYG zDufYG-(Enfy|XhKF?i#%!nS+|pLgcuf5DYOar@BGc8oa z=|XN#dQ{vim6nf0p(}#c*x1YKK>}g4})zR+j4k9337c)8>w_!n} zNh{;<`G^CIU}TmZ1pTeB_AgeeLvbsa1oho&v4R3 zpa;#6WNqgqr0lC{>QPZR7HcOmhoE@ZG9)=;XX^Mqof=Zm9z9x>REQAWam{en4QnFE z+6b@4AA)Afl~g!7IhmEhaTe9p)qNTe(6fpi$;t^U^RFJO*zZ43>a%0Vhd@su>FMdS zp`gz%dS=p3bp7BblQgHvR3m)Z)C>>>;n~j@!y_U-5CQeXyKaWVEl2L+%|KV_+Guex zh`Jm^BofaR6%{FJL6F;k)boIx`oxY)go$6Ty_i+@Ylk9mt;(`RGUyk5gMdb~ups%C*A43IqQ)1|A5guyB;oDr?xk9mxN#_%!&rK>s+N Thog+&(^-wc9R$9G`XlvdR|m2z?+#xmw|zS1BewF{)@JA{)d8%Qt4dGx(vFLTe!RdE}Rd1 delta 43 xcmX>vdR|m2z?+#xgn@y91BewF{)@JA+Hx^4G_XoCY?MmpVisW*ncTwV4FI*!2q6Ff diff --git a/tests/test_graphical_units/control_data/geometry/Circle.npz b/tests/test_graphical_units/control_data/geometry/Circle.npz index 63b2b2f6779aaf09f8b0104e78beb6e21a4dc4ea..de67b2e4b2a4528e2ccb02a939f3dc398c234b36 100644 GIT binary patch literal 5962 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

    !edXcOVEGHyxo*#Uxm8 z+v}K;Hsy4Ao!1#>YESTgHXPsR$(u#nt<*wHQ?HDMSa#hXuB2$pg%1B((|B4zYP{hL z+YXWkCF~SeSzN~dIe_9s?R8LkP#85Z3;WtN?YHekxn1Mp)07_W=>C~o*PJ^gCL>kh zsUgOYTd`&;?1#NHjC|orXY6&0qK+|}n(>k4Pf@BS`dW|gP6J)yTb`bg0;t)sg<`jW==HZ^sL0j14NZ%fs#TV)FPA>qPs2duC?QHf1N-b|RpdwzUkt$B+tM;xZb&Ja1JYN^k8*yWAMG50ID>(Ht0+c!mtiMwTf zB1;Q0Gf`<07sW}!PZp1U)@(1RU%?-2(_2{aZKsJ}+#GnBV_+D#9#N*vVtEQqhv^tM zOmm142ZSxC9bFjF@jKL3nUnQ?ZnR0WyP&UDX5SP~o8)Sh0kC?dQ7oEIrWI8w>e}xn*wIHW<3$aP|WX{ZQ|{kIXMCEK}j(ogU1m>FM~B z3ZpV(5}a8InPrNR12%xpID~_sg!u!Y81;! z%4!*_JrVj`hOT+xN@rc_ay{AjDa>!3YLWztPy!WEx-%M=nW?zLrlX7G`ID0e(1kD5g!}5m}S7L2njTXM#w|sdV&WksSYk4o_ z5M>MtI?31%aTOyjSEr1x&hg>Nm<0poWDL3c)V&YI79DvKBO3T(?Qt1a_it6Iq^;&7 z>pRr85)~xr24GKw&$G*)%(C@a3}0IwuLkde@d)&=@W`?pxF=mz(lvbJFrVFaPl|4h z-3&2o_k4=ozVjqQ65<-oOE0;6sV6+pXKHk#C9@~qrB}hl!r9&fw3aX(Xt;kLb5!3t zPf*l*KUgtlBPx&V{Zv)I;=(w=_xiHB(Ofj=wu6yM|Joabw@Uv|Xs?R^$&ch0EPg)_ z!hB=3Srie)8uce%%QD(5&wZ)lfAIY3%iMt$qzO^BPfqV7Lk{9O)pbqXxf@;_H?}a1 zrHFK=+Tr}V6X?!AFRZl(@485*k5&ZWHmJ<9ip(+QrdfGVGQTHW`1H$f`&f7Kto43I zcb0?QF|2N=_yXq3^qsLOZ=2MH2uLLs^Emu{iMO?tJd3w}bko6;{`s=+K2!Fw*! zt%x4h^C`AjP`}vsq}J1An3k1k!gpW3%7o4gHqqi&II(V_SqdY6z5@^@lJE$!7KC+Q;xc~IPadLe1QemAh zD581$QsyJUeMQvOAon3X4V1OWrg@-8gVmKbd5-N2gi*9BA|pvSOeB2$bx^0ie8Bwq zd&=6 z6;$DG2Lw<_+bnKwzD#{zc*imfSMh;bR=Zv>*&y&ar|h+nQgaf)PvT4 zy;nCu%JqQm}I`4BgM#HaJ^4KB^G6W znCqG|8dHZ1kGpJbw(z@fo_O-zuEkA)Z64!5n64RX@1uvLg^~K2l9qLAFd1jJ$|;%Roy z&+$g#GS3A|y5m+|?|TaR&fR&hl-_&6yYEfiopPDFH7SGrW%bWu%(aSZvc53lmUy?<`9r#^j)#hq1@D~G0i|bG zGCnF=WQ1Bwx1tMbj7usV7=)jAccpI)*PqtAS3*g*mKhljaA5XjJF`)jrl!K^ud(|e ziK@Y^6JH!)lXGS!vFRlF9|~0tACicMsy04o|4jhI2yp+m?JZ2`f&Kp!0Q}$WL+c#4 zsR8H!xBVda&31#oM diff --git a/tests/test_graphical_units/control_data/geometry/three_points_Angle.npz b/tests/test_graphical_units/control_data/geometry/three_points_Angle.npz index a084129e8f6d2e5edb7eb3ae8437e1ab81015071..7727e656781fd25361c07cf2e2e66cbc51dfb342 100644 GIT binary patch literal 7072 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 Lhrso(Cv5)E%~GMC&}NKC0*NX!KhZKfF`*W7Z4 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 diff --git a/tests/test_graphical_units/control_data/img_and_svg/Arcs01.npz b/tests/test_graphical_units/control_data/img_and_svg/Arcs01.npz index 8a92131b477a9afe22e7a3728e483a4901f16f2e..98187219a194b837ad77b562e00e1669f5d1e941 100644 GIT binary patch literal 7897 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 R=l@p__%Q&Uaet1c{|AC4<0Jq8 literal 7845 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 XVm3GV?ig3%2=J{9{I>e*nfbo}(!qZ$ diff --git a/tests/test_graphical_units/control_data/img_and_svg/Arcs02.npz b/tests/test_graphical_units/control_data/img_and_svg/Arcs02.npz index f102bb6a60c5434e6c0144e3cee26cab04fffee4..e087d3e48314f63fda7f5de4561a572ed1eb54b5 100644 GIT binary patch literal 26856 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 T1rBfsvH)-R-o^sVH3<3-@9Vi< literal 4174 zcmeHLZCKLh9;UhSc-eHFwK;0F*P|;HcjB0tFKlbp)zMNj@g4FQP@tHgI25(oxoRy} zD_;mjEVpV3f`h~%zGSviUTcaD5V4McQ&AI@S*GXt3)gm?59i~)g_rW-x&Qa?ci+F4 z2Z@Pvd3hrY2Kx*6eHZpo&NWq=Ck%FSEga?n+X%x`(z9^bqv^Tn2=WQ~8rZ9=CjbhA zP|(Y2crIX?id<*x!M7iMa`@G6-n)o?ug-Nlnp=&2)xYuJ!#9UMi(q{G#BJk;=-A}D zyVq{~x2Tzvo1#;+lH-uo%_3!$;wQFVYu<<{d8VuI zK{Y+%yI_qc)K*VJ-iVRl|0X+cIl|(hY8^Xm^IXcB8sRBL7oMoEe6ZFb)}K^m6|gj3NlDT`gO~v zCP{^wx}ig1V9Y-D%94??1g*g-Tml5Id!623jlXEF7*7K5)??|FE$zhU1!gQfWfeXc zrDP9JeMOy}AE!fr8v)O8DZ|7<&Ac|z!DrxDvjn=!*u(0VV6X=f7E8mPVb^7fGrYG? zg<(}9<>tl8Zw+WitiF+^&99J0Z>Ul)(EA2=wigYwotJOLaiJjcQ~AnYq{xP%3+nJztfpi|IB^Jc@35G;K^)8wZ;gFW)sUtV)r0`Aya&rBxJiSIb*h zX!~L~rK^lu;50ZqPDWi!(>D&7?q3fm(jY-mbCr*Wbk(kHyX4N6Se|2^wTZ+D)*h)9 zj(BxE>J>YL>K7$VhU0?VUiZK>$6*Fe_|miF$)k%o^+ zH4AN7_T5mp6MI#@g|j&zbBoVZGDw@TCQ{gtKlpnY_{XP`4VMUohVjRKT#g$kE@>}5 zN?V?w$25mL(=FcCv7nB`AHtVg={K$DXj71>ob8Oqu8EX!CbOlQ40>a!>YOusYUlV! z8rRik|HIx1(GP=-WVx8u65%lBXXdhSdkBa+9vb7!y{AX`?#hD+^m&m}F}(VT>B$la z6nJ+3Vp%HIiIdlx&Mg({8>`YzVU-omTHK8ah&G|Zi-LapmU6HIP73|An+-%@ zW_FrJ^)hIwKqNAeHfjJ3QtK%{f@pL|zCj>Q4>hpd*tI`732$|`YC2{sQk_(9X&Wcq z!1KFkambsYWkIMSBe5juiphx{Wn(xBfsU;Cap#1yqspj6;37~MF#GwhktOq~P(M&U zy;qTKxsGXRMXD<{z>~tfK-rk3iYt_o;{FNrW{)}EYshN_2vBeYymEtSUgzUR1ul1H8)TpcR+Zzs=Z4*NrsvKq^L$Io9XY_X#EEPj_- zop;^1`3^|o{!zTS!pAl-tkvk+67QM%9pIyx_n3jMPy4&b&HmXHi?koW{JvGzG1oku zYE|uPFV?he3;pJyMg&bxuVQ`Ww8>atAW|^_eH66An;qLTOG!Ah)qz-pj-_+x>mKT~t+-x(MkN_oiReL-qr?P@z!w9gDx;aIo zgTQF#hrHMfd{0#DBmyYe*8dt`x@gAS-vx00EO&oS|7l~)9K#XTWR+3R-SJL z<oTUAIcZMF3H)h~&p|=>a9x?>9aA*-6!^5)G3pDSUBb_=Fm)`=G!-`^rG}NwCSZCA&x7ID$|gJKPv5QscY7;ST&uvSQBSoIdK zv%_7)P*Ak%k{`ep(@?=y&h5Gz2kbP-LC?>?L-@CD!qm!s7RT8 zKASllLcHI)!(P6Pl@{g;mgN&NxEcp32PCMHI2yr7*garw!|;1IiB?(nheh+~va1LtB-d<<}-rL^W~2gWr4Jq~rOz3%`r%Ij#{w zbQkwp?urR%%z4}%3~@SrOCuqW(_3xbdIxVDS@J{N97~2Qd&njzdm~J0N{J)@l_~9C z=@)r$NLgURM08+5i_6;lw!emKpVOZQf*&Bm<8)zfM%s=@P$=T`zn)*?YmU+W8h*J1 z!4+~-Yrn?DlEWWJ5WZklma2XkuZ3I1;-};LfG=`BEdf%>>1PtVM>Q;OJ&kD9G z|I2FIO(X?V=&fms9-6B)dnELgRppB>EO4HzMA)Rn5;B+slo+4ASJYR8HZ!|YlM%9J zE8_?<`Z=eyOi1KOWCafY%^a(-73^2>cXb}bVgEPV=ndU)}A;lQ8az{#rR%`uT{ mUfSsL|Ni^`BkIZ3KK$SB0%9W9u7eP3z)vW6UjjQF2Kz5H=a-cL diff --git a/tests/test_graphical_units/control_data/img_and_svg/ContiguousUSMap.npz b/tests/test_graphical_units/control_data/img_and_svg/ContiguousUSMap.npz index 72281ffd096ea19c131f516ff6bc7408c6bdb452..7faa661c8fbe2215199b582b21202693bcb87983 100644 GIT binary patch literal 50458 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ÐlmAM|$v1O(e^T^3sS4aK~l>k~REGYlO^?W3IX> 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 Q>3R4|9R5kzjQrRC070n8wg3PC diff --git a/tests/test_graphical_units/control_data/img_and_svg/CubicAndLineto.npz b/tests/test_graphical_units/control_data/img_and_svg/CubicAndLineto.npz index 036827910dbb2e1c9e8be17199d87609623b6f9c..4cb4453b7fdcaa6b2aa53a19a109e93a3ebf1021 100644 GIT binary patch delta 43 scmbOvK1p0Ez?+#xmw|zS1BewFUOD_P`VR#grL?%2bs2OgyK{R304)Fyg#Z8m delta 43 xcmbOvK1p0Ez?+#xgn@y91BewFUOD_PV&G diff --git a/tests/test_graphical_units/control_data/img_and_svg/CubicPath.npz b/tests/test_graphical_units/control_data/img_and_svg/CubicPath.npz index c008af37352e30657ff7e25a74ce242c7cad101c..5a08adda7d7410afe29837a06d666173d3df3d64 100644 GIT binary patch delta 43 scmbO$Iag9Dz?+#xmw|zS1BewFc5c!+^B)Q}N}2L7>oVw04&w0!04%@{e*gdg delta 43 xcmbO$Iag9Dz?+#xgn@y91BewFc5c!+!_C9M(7-Cmuu;mChgpPKWO5LXHvq6Q2lM~{ diff --git a/tests/test_graphical_units/control_data/img_and_svg/DesmosGraph1.npz b/tests/test_graphical_units/control_data/img_and_svg/DesmosGraph1.npz index 847a68b41b16df74a2901f8f15bc285523002e58..98629e37cd8d169a604baf2dd1a14b4d97ed472d 100644 GIT binary patch literal 8592 zcmeHNdsGu=+Q+hLJ$_32*r_d{R~U$f$)^^l7#%0QVN!z*eo1b@nu<+TPTx0Px(G>X{H&(pT zykiNYY%(R#7^%V;@3e{uldc%C{meSPk7ioyG4V@8wM5KZb>iBhyI0G7hOBZ5$(Fj@ zXU;13&CPBTM_J}1RneY)P~#P!n-t{h{4k`{<2XxM>$9xjdVM74liC2+B*N#IAN0Un zz6|g@o4*{+@}E+Xba9A1Z{+)rKX3Wy!mm*qV?cfwIgXmLk%^GO@(*2=(>>|P^p=loJZ^1aN5vJ3Gn08CFJL)xJ3Z>MfjA<9t z&QgL_hqa&4 zOL!nWn8q=YnYn_hq0O;@$6qrdRb<2SLmFeozAtfhTZXy{AyJhR>5J8@fhI=6>Y*Z4 zde@G|ZDV((9bO{^AoFcdUxriK#jk-A9qKHsy1aCBKRrH96dfH3(N{3t9OMwWF**+T zB=6B1MMRA<3yP73i;d=iNFk6b-h|8AD{vniZ!Ph@jH@4aPgi88BU_J7KD~L*y<#oL zpfsn+c_+??*LV+q_L|MnY^Nk#=+w4SQM&<(<)A>G@75irY&D{Xmx2GwL_B@LTk`flBJ_$LVbsJaOf}oPi9s`7 zbsZA~Zs^0gV$AZF(qcHq$J$=@z&-o&Lat;&i$W2;Zu4~1LNT!PE=QAeCPz$Gw6}d- zwKmNxpwTNcpb6Vlm>w$}!k)f4>umku-mToTvw{O}ys*>F#oN>W$~e!NcQG-SsG>BA zD97^{)|Apa*{QP*Erx*hZLDqyjmFwMa6TT>Nq0U@A|4+gwOH%f)DVPgi^BOdLwCJg zxf|$q4PTB6hW}iMIh0oCeK^VdMZa}@A5!*sX-ji4|3Ed|(w`v2ofsTXWr+fo@4_%# z87#_d*hITbEqV&K84WStNfl5FqWk!@PRY&JnbXr}F~wNA0;l#k zdih=*I{^mNLI>sNdI_EqLuYoBEO~tM?lL}}M6vVb?1GG_7iZU{>s!}V@A#WR+3ULI z-UMn_T`0u6g(Z`QVu`r0z7s($?dd^QTE_$#0Z)*R2{!31=GYI~3^u8|)nTDUcQvme z1GI6^nwbd(mX<_;MKr0hQP22otkV9RFrANoJ3vesDSFPU%D9#D>>8=1hJqiNar8{F zYmG`%`1Nm@Z=Iuw%x!jf<{GUgtE(GdARh&VCM9jcw4kdFrOTiuocjFsygTE0-o;CY zGzN;n?pj;+yhs??Hr$pPpcns!6KnJCP6ebRoBe528`^2ov}|Cs$D2@@H5&Q}7VFH~ zs_?%{B9`1E#$gy*QW0G@{(P%mSu*yNj07XnA-T7qk{83MQXbs}UoEp?ILOA%|3$M)vH%6J zQmg6-$Z6VDT_{ai5t6v}a<);IzOu@gzK+GHHrM4@ANnIkYZ*Q+agP`~^=M6460{rr z4}I@}xv>i$18lsv1qZXvimQ;cHZvp`xbpcejF^({%%q4F9mriAtaE~FNrUN|c#8^6 zU+7!I>!smhvC1+Yx<*n_mV=(U2^}aT>Fh#_CHG$Gl=3{$b3knU1*2HMtoe<5Bw+$h z8&yA|u3}_gdf>?|@p;k|z+*s_tFNrk;s-if>YS6UaDBC>1{9fPbJ4Wk>6WcJ5FHvC zgwsaqbj{)b536@8D=k$x=cvxmx8g-NTps?+52JP*F@$kWboE%4We&U_Z3GuxLl3`P zn6zEoi?f}kLHqRA5Nrh_QUyfHHHP{O$}f6vh4f4)POMYMY~@s!$);TQ1Q(sHZz3?+ z+rCfiC=XdaX-~g(IJT1>rM{GW2G6U}ca>!J*++OaryNPIgBebA{pj^QYf3;1ieKI<;_4KCimbE>x1rAu5{> zdlbnvN{e}~{9EPbUL0&Ic5-MzBURqz?ms^cKSFD}MGC^*`5B%;48{2F&x7#y7SW!v zr0&AoTC_RxI&Z&@sKl*NqWEk8J^WL3YH6mbhid4}0|H8vz+asFN`iy0!H5Ctw*nb) zl)cOC4p6=ylr-7))}RLM_WdM|?HUQdlUrR4!`FA7TSRE6q!^BfQW{HL&$FIw^eE8v z5-=TFY>I3PYl|pcHQT{~j$V?btRT5P%xQPAWV11FkSFVt*_G$`Krj~lcMA`nq%qpM z=ve%WL|ANARvOfv_bmh}2O!&JpYO$(Zd*QuJ>QY5BE+-+4m<<7y!p<)*VU$c)G3bG z4lJcW9Ya;cfs5O|Y5ICTe9MEeM+O9#(y_WK!e?jN#szRiLnlZ3;Oc2eBA;^H&Y8TK zT$PXZ;*_i2spyCuaj)BPu}+W#o83pL&LdSi_-R82-*BuUl=P4ai2K&I zOX;xD_O`01$s5eecpchdguY zh$OO2zjG8iKCGP2dGdlU+TXvl=uI}bp&5oNMNf5k1~pdFZzh8IaR?aM7FoQAh>{EI z!BijN2}}3L0*Z(7UOZ+JCDR6|{f<*O4*_e=dyD3S>_&#@r~wTgFl%e-EGKJyn}km5 z+1ZPIq=EEQLvI!8cUcD8R8G2Q>0)`?U&UD*8XAG99zk^V^Exq^kg{ipjS%m(?0^cd z?F@p~q9xx+jfuhDhBjS#lNUBKON1Fh)9ut9;gbQ*UK7tEnit;m#~lM?qEj~u_L*8| zYeT9M5zuiF(<}MKuyI6LzNV|$RLO5e^Cw5ajpxa*i0s>fM>0n^PFBs|QVC4w3OS#t zfcz~4c6OWqu5no62=fr@`RAxTpkMX}o2;S>XZ(-{=)Z`z-M#|ms{{tc=yfel>-r$h zpZ40PE)CtYghT+o#PsPo&@65`RHqS#(@Me=v*14bC%?g`r!#8*grv~A0%1%*DtS9Al#Fb+m4PU#$ zPo8%0#CxB(wlo~OyF@6@*YwZvacjVZM-~2h08|Wjwt-Yvi1_jT+5YeSRS2-0>1Z2z z+{M4bFY>I`O{f|bSdz5xC&be3k^(X2HeRS|T{13NU%OV;-ezVUKW#8Z21E$R+(Sf) zzSU+mKi!!Gn!bWT0Y<@QxWdIM7#ZT*I5(^+kr$iiXwb~eTO4@|dSkin^^}!yFG}=N z>N(PK4c}#4^OS$mt|F22ktAPI2o(Sol_3*~g!es^uU78{FeO>~E4vgY5}boETDG!j z2_tD46!0i}F0PD^Lw=eNpNp`Gg`9kq3$pB2n|{X3I^&|ZnX%UE0!GyD-v2hlu%{nu zW-tkC6b5?n)YR&$cHoig;7fs)u$65HIgY9aL;O7El};O9)p-V1{{@``yE3n>jE{L56F zNw8f##QaWh*&hNWUDh=$Ss8(wQparGpSYGnbk>8I(v;kan1bDQbloUBn4fF>s#lr< zI+{7$0sP}IsltZKhV3v+!tKKx-4Cj81jVD|4e0w_>@sMs_sPQ3&NTGIo5{TL;|6=^ z6WM!(&pKEm$ey_u=jx01ry>Z}1t4hF-G6Fk1RxSVFxo@QffcFec7DZS%!pvPq4fdw zDTViTe;HRw0hcy_qV|p>NbQEe?p`}TeRiUk7M>DeR$3N$oW~vf6a(%(BbQ#s`~63a zK42=B^rOv;v*`t4C~~bVM^T{krpcm;Og&V$*zH@V7XKWs2O>`c_Ri(Px26s?(a3hM z-rH#J_<^8OSp$Y|eb-lq{uYwUI{f$o5yZ`tw3N&a?gCd+J})}tyn%!jJse4`V?FR} zQyS3x_1_W`U4%1Y4ifI1>kQJdYGRNB^M%o4qP?q+a%U2fI_zv8T1jcDvrLcVz|dCz zb&K6{ny!mJbVM7A^03%ofw22D3sn(WB`g0JrONo_`2YPA17p zrpm|CzgYI`Yc7r6hXlH&96yLt&}GlQs|`msQ@pd(yiqpa9uK_uX=9zBv1BM#82r6B z?0}>_^cIecP)6B5D$p8Zg68Wz%>^`#p+f?5RZMT|2ntTrjq2yeFV{4lWosql*->yWe37OSYV`@w$M2aJVW4eAol0OgVy36B(QBg*#8~>b1?gM1 zi9TP~J3ADYr{rORD0iL|a&#?lu}UJ4f5v4Z3D%K~8zpN@1@Rjp&P}~tg~izH2M@Pn zj895t?xAL}?t7bQ6BhhF7lFuyjxvu}horp?U&oZi31ns`tM{h8I$xS%k6-2V)LMdZ z3YGp|C4~jI14{R?s22|@V9M#he)4H?SpBoLVAF;X@3UJojHK1mGi>8?X%tmTsL(2Z zGBq>4;{Hn*By}kj{%i(EQnt|m7jSt>i8C1vK&|Ud0)DYpM68~TI z#nm*Yp=_k;RyRZ$U6v_ujnv}9kg87=B*J`YkGeZxXNqwvB5?8Ts;5|wY7HT!lRk-L z%4w!HY8%;2h|=*b zL+T`WJ!I+BVif|zsI(!27h8H-ZRYR`3LG8UJL~uow5xpo>p7XSzt)gaML3>X+~?lP z%n{a==xJRo7BLjsh%@%+oO(u5Ty0p;bP?P1yiwEJ`Eg}E>o1DAxq2F5gs}?PQhAlV zsS=mBvrfedeq6o!h$E0&WC>}m&#fwe`CnmtnAw?UI9a`|K`lFmkU1k&P~;7@FVW^b z+Eq#$Q?4@4u*+!U77Xu?AkvnX+5ZCncMXzv&7*gXwRhdZcb(M#Z8|Gs|W)yjxht0b2HA2ClZcy;sdt10%zEnM{K>4N!v$NUKS_|@J20GnT= A!TA&^8XfeM5a0|XM1RH;UU5P_0FAc+b|Acy2gLUIU6PHw85x$FLM*Si1CTAs7c zYoEvZ?Y+P6_x<+%&S!D{e|p2u&+pH^?H#|>RoS7_Z~OUu{mN>;m40vdWu88UKY{u3 zSpKmsxhF|W{QmO%j_*;w-=F$@F>9O*=E$|jbNxIU`t6di{kR{m<-RYj&#LQhtB+=` zeD&3&>C8Rb|Fq}rUBB#l`<*Wwe(!y~wQ6&f{KL$-@3vkV%lW8d>$1?%RUfVDKD)ID z6M5M9Ut%IJ?F1^}1mWOQMa1HTI+IqAoA!4Eab5y-N35GWn@5MHz0b-C5^GHloqYHE zNkxnsTp8_l^Sw`>@q!B$E;g`9%4;&Fqik5=o_W;?c#WNy*CKBKz$dhViO~4zMV(h4 zDj|=mV1q(R9@V+^Dj_`1rrLkj1uGTsBwAuE|I>^5{m1XmzO%QHKV)0tccJXvk)#=? zpWm;0ubP_Yi~anbzPp!rl#KNAJ9V`#Y7-*F@9Uj=KWCP+0{wQ?zI$t6pCZ8T?Sog3 zWO0oCet+5c@-r{n=B3@dbcUBi@t;nj6hX1)VHo}1-7vCaJ$A5BuyVS!a8`XSmu4*u zBP#h=%S0De)shx4zi<`K|KNFGFl+MOORa`UQ;g&mvgw>Zc{T|YSHnOAoU#~Cce01+ zUYB$apyWnhm!ZCN&GOq$J^7~1(7G4vQnzz3CHcGl^_|@e3{zsiCp7(be&7Jul2Wj% zRD^?C@|~}%>QP>UDj8^$dN7#yzKWo#j1Ut(eeoc95}n0)rGa@>+x;v8t1`$rn5$va zFX9sg8sCeqy9vg$wzou0UeVPZI~-fb6cw&q>^!WksvcNF`FOEuy?09xtfE&)?4i1S z%ir1(n9>^UuDB? zBa^A!30!WQ7vhF2LDBo9?_wXlh_F%PKNB-><}&6sL#;uYrTCC^Y?sXah3C6`_}9Mb zN%wT6tW9}jY^t{`@LAr;=?Y=o0PH5Vg+;7)1#$f#V*RnJH9kW%hycTzXd;1zeSyD zI~0U#YGMVmw2Ai2#by9SZO`mEKcgMXh+-Aq$&doc0xp($)0B?Zoa{NH$@^@Geek(3 zXc)-sjus^aAU-k|C{1)<#k|Nll%xY7I zQ0|qfIPGguIYD`b{%dlf>Bmc3K5zm@Rg0V1^)q1i1UWP$<=GK3_1-uBx3ezH%Mzb^ z-7UUbPz)vigLg&fvoVDb*0Qe+u=B^#fu`BJvX)spK%$nbvT6j-tV^6fGnAQT=d(St z*S!Zr@S_#1V*ClA{gzB#*T)yA@uD`vTJt!(s-tM_*Po3B{_qeD9~T; zu9&D7RMZheV|2Ii`tJ-tN$Sx`wVZw^1|MW}KOiU)Q< zci~ci?@m*k^vhU*w0BRr%fn#eMUll_o{?&Qr(vEsGwIPTy4;NmB*{ z;Tn5+Eu%P3E6=)KCNGxSCqi^#+dRYe22KVTvk@U)aNd!2kjiR^BW)Pgs1GXPpBfM< z37wEAY|*5&{DICJ@<}6idLr*Q9ca90V}He>K>YzJm_DFg*QVh`>ZFnC`}nmf>>B`l zSt*pW*~5L5jZb&KC73X1q#uFi-V5fvo zI8GU+g-mzTch6JT+O1T%jYS7IrJzTGXDoDu^e+#JH*ud24-dzijbTTrLc?`$cQLEc zRXcL`+vNepwf35h2xH?x5w#%MIrkXaM=vzrpO*s)x4Sl>@=ZXsVj)q(#y<>N!Kzy(iJwkTqJslryN=t zlXrK6oZy&Ht;a-k8N<&H{UH{p+SnRpIDI)AHFvv|uqL4CNzeHRpmA%){nr+DDh4o` z*7$p8Or3{%stHFS$xiAovR>%0B^|9tYuVi{Emo`v=%j{79h8ru1Q+savAJ+i5_{k1#i)Z|Po3jMKd~XJh!;j*?mc$@F)IEI ztm(H~zF2j4dFZ-lrz};A1^oId$Ne+WiXAx**ZXdu19g#)C-X6wYpR4$rqh<+!;$#_ z7jL>TV&MC*Hw6(8v1lxW^jc3Z55$3+)SQ;{_6>N@%*r*Qi^VpXYC)`RIU33&MDLf*f6-_na{gN9FQ}3F&b})D8?| z6fM{<<&#p8g=6SGBz!$1@Up~lP64%;x{jXwR7#J1AN>cuIg_ATdWKh=y->Nx2fJ+p znQ7(Vn-e+~ZE+p z5dG*=v!<)BVrQyL0xa#Dyi4wuS_PcJ7ve*iJ>fBVjoZ>Pe1a&o`$Qwy$ zMEgS55@|;tdpgo$jX&xTwj}?2`jD*(SFi0QMDQ}U72$Mv%ItDfP(Z(v0V4vsf=MxC0v(;*5mZc z)Ea(pPAP&iHj%DMFa!GDb+2O4hpz3@qhx{`zPSO#C=W&{%_ z!)F>G);O7QUyO`&yB!qc!CKS?F6&YIK-W`@FZ!?`swv*An$+V~K&d`5H{D}k#5&Ig zH6`axnS9b#oujbQ-t&xY-v-jJKzAN66t3er8q#B=tNxRl!|hd$M<6*W;$<8%Qh z70Q;hn$n$5FDTc%@3na#NV@ESYI!hawv}rv1}=acy6E&ieoLZ|{7kiUOZps^&|Q|x zt{Nzw60mg)?9d6U%^`PDY4C@`k(1|kP-gXr&cH{!7=`QCD&xk}(q{W2_o(&Fi!xIVyr)|sJi>IBE1T$r+rK_cSr}v`4 z6*!wgzv!@1l;VxW6{<`PexlYM2^iObC-$%fBq z2VK;23L);`V$rZ83_9zSQ|!RSN(+H5a<6W-5E8hG52$mIjY)we*~)~T;Le|PJiLNE zNOkKFM5;`fJ$;tPiEDTbCt;(EZ<^0UGIl7|qIkw?nZvU*ueu<1p{NO&rfCg1hg&kj z{sS=AqrGi>3yB`l=qoYW=5iWrV>fV9D7x*Qhnsjg!G%M6H-=OGjEtre`5g}|R2mkT zINTN_DkyBeb$jNLvO`kIyVmbo(!oA!GS?<*V?lKmIXL39`X>WL!RX@n#&5+74{6=o zDS|FM&+Z0!)U@y^Rxc&he-%BjqM0h1>=G4#*;KKokUeLarHPdeqXp0=4zZrAwTT;v zE+l^JQXDYqPmx!L&jg?rKIUhxiOT;J(kVz)K12ZXn=fsl7twIi zd1^UZ@YrLYdAijW#fmoEgQ9{fd6xjm-?sGOh8=|C&UIf%lw6m~7tD5Y7wWR;cQ*!i zw)*g{p_sqWHY%fdl=us7ML0VLpAKym*k{p$I;zcfDwKKpfXw)l4|;>GcDNK~60%XM za%kNwkbd{ypg)IG9P;qIb_Xe1gvXx*XU{Lo7f;+VUCUz4Bt|e#-CsS!sZ8HTF!awX zymqu;_&|i&?$(H#xwrd-N;E@!J4Q~)qb56^)X!_xC0OlkJND_UK8VdRIUdFJkr5#y zG`241SDT>W+orz>Ec!5aS4xzmQpGbLkkE_xEyBWy$Dp(p8U^5_O{%%`tz)ssH&hUPB3=cK0aV^%-LVW6<%OzxMWJMP4Li%D<+jGY6{Djk8uqMjc zSSoed((zP{xBbhTu?$Nh%5L~(`IbG=1+&w(RiPiImYti3%;MRH;99DxHf&NZ0S}ey zWP|(=OHl}=OmV_I_N$ARr%ZrK*1A~^Qr_K6#zn@CwsbEPo2qGU@`5;13*w-C8m~{S=sF7fSEbp5m%jeq{yjP`3_;29dc@{` zmagkk+0TgWy@sF}7z=XV!TVfp0~mjW=Nj)MdVzj7iR0t!>@=gms9q1E=kAVgCsVan z!CUpKhc~u$yR?r%emOMsfD&aOoJc8{-Ote&gn^Z%mti9R;(;} z4(MenTB;;N4S=^GPZ}|UTe@gsMMZaG1`}zO= YZ{oAKSC;)=y2Q7}_>TX0=l84s22mcJumAu6 diff --git a/tests/test_graphical_units/control_data/img_and_svg/HalfEllipse.npz b/tests/test_graphical_units/control_data/img_and_svg/HalfEllipse.npz index f7cd4bd2d3f01a6b4a6402b06bb555f68a36fe46..c1b83e0942f6ed99237a946e5ccd89658b20911b 100644 GIT binary patch literal 6395 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 literal 6412 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 Qg|{&1afkk!e%xmKH%B0mp8x;= diff --git a/tests/test_graphical_units/control_data/img_and_svg/Heart.npz b/tests/test_graphical_units/control_data/img_and_svg/Heart.npz index 9d8d3f86807ff30199629a173386e9e933e9f19c..5b1656744908a8902e4a8225b18d00b430b4095e 100644 GIT binary patch delta 43 scmaE^_*_vcz?+#xmw|zS1BewFI;IH6|A&H&QuPANx(vFL=LmQM068TO>Hq)$ delta 43 xcmaE^_*_vcz?+#xgn@y91BewFI;IH6hYBz-G_XoCY?P`OU>0E(nLJ0p8vw$q2(17B diff --git a/tests/test_graphical_units/control_data/img_and_svg/ImageInterpolation.npz b/tests/test_graphical_units/control_data/img_and_svg/ImageInterpolation.npz index fad18d7528d479293681cff641c871e040c9d124..0f835549606d68c23d4ab4f973bb49f389b5a20f 100644 GIT binary patch delta 45 ucmZp>!`OC*Q7XWjnMId@fq?^v6&b>2onP`F3N}j3%VpMO(4D+H*BbzE?-FeQ delta 45 zcmZp>!`OC*Q7XWjnMH(wfq?^v6&b>2onKOt%fQgUD#@@>YF;k02(!rK-MQWX1J?_z diff --git a/tests/test_graphical_units/control_data/img_and_svg/ImageMobject.npz b/tests/test_graphical_units/control_data/img_and_svg/ImageMobject.npz index 92adbfa2e5c8976a8b62ce02e8e478417eaa5d48..4dcaa0453975b1cde0b7bec42bf7542f1654a5a2 100644 GIT binary patch delta 76 zcmcc8t9_+cTPnbtnMId@fq?^v6&apfx101I3L2$ar5IbKm|CTnTcuc9rC3{~*jlC7 ZTctQ!r8u`rapfFi)@9J0-g%768vqeO8L$8V delta 76 zcmcc8t9_+cTPnbtnMH(wfq?^v6&apfx0~d2jEkXxRg$4ms#S`yRf?%qin&#arB#Zx eRf?@uioI2eqg9G?s}xtxF=i2Fk?EbsxV!=3gcBeD diff --git a/tests/test_graphical_units/control_data/img_and_svg/Inheritance.npz b/tests/test_graphical_units/control_data/img_and_svg/Inheritance.npz index f2395bdec226e46a1eac13338d60e7752f281ce9..4daba42cb559de2d955999996eb7aee9d54a1654 100644 GIT binary patch delta 43 scmbOyI!{z8z?+#xmw|zS1BewFmJ3Nw_zwjerOddPbs2Og2XlD?02NUVcmMzZ delta 43 xcmbOyI!{z8z?+#xgn@y91BewFmJ3Nw;NfCmXke9O*eGSj#Vo=sGC7#b8vvNG2J8R; diff --git a/tests/test_graphical_units/control_data/img_and_svg/Line.npz b/tests/test_graphical_units/control_data/img_and_svg/Line.npz index a5a03f0b626b881911adc01b2c06123b9464ad80..39f4607ba95d852a8bcabbbfa1e80645d4b9aa44 100644 GIT binary patch delta 43 rcmbO(I9*UGz?+#xmw|zS1BewF%&vy?{fB~$Qu-Xsx(vFLeK@=U9Q6*_ delta 43 wcmbO(I9*UGz?+#xgn@y91BewF%&vy?u>zS5tda~HrSv(NMVLh<`*3&z0H31=L;wH) diff --git a/tests/test_graphical_units/control_data/img_and_svg/ManimLogo.npz b/tests/test_graphical_units/control_data/img_and_svg/ManimLogo.npz index 977be514617570b7483a727d85686e9c798b29fc..527d7a1eb0aba77e71ca7ab8d578e7879ded4030 100644 GIT binary patch literal 9437 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 literal 9433 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 delta 43 xcmbOtJVjV4z?+#xgn@y91BewF!nx|5G_XoCY?RXBWENo-ne55w4FH}A2P^;p diff --git a/tests/test_graphical_units/control_data/img_and_svg/MultiPartPath.npz b/tests/test_graphical_units/control_data/img_and_svg/MultiPartPath.npz index 13779d26a26890a0686a7d147f0f429f81ace22e..cd306004e3fa7c6528a16e994a4f2d8c7b56c8ec 100644 GIT binary patch delta 43 scmca8bWunuz?+#xmw|zS1BewF7-vg<`40sfrCxF{>oVw0X5;h*059PWfB*mh delta 43 wcmca8bWunuz?+#xgn@y91BewF7-vg<*$-qkuu3v)lzPd*EW#`@nT^vM0Kpdsr2qf` diff --git a/tests/test_graphical_units/control_data/img_and_svg/MultipleTransform.npz b/tests/test_graphical_units/control_data/img_and_svg/MultipleTransform.npz index 60b0e0ee98dbff2f7e2e320f84c67089f281d0de..4a382c9adbab541b849e5ed2ffc4c3df8aff7fec 100644 GIT binary patch literal 3132 zcmeHJ`BPI@6n=;b%4XdV5WzJp5>yJPY*t#V2$}*h$flr(Btn7^L5N_Xz*r3~2-HX- zqYz{_;zO26v7{A+geW2GkwzrYh!Tn>%98Ykm+4IV541mcGkNdMxo7*nbMLzcb3l8c z9RxwT;J+T~;8^ylG{X>D37tF>9us-=M0i3tI+k=!3t9$USY!e;A*ft${sp}i&0GnH zGI=~1S`?Bm8rfjr1mAaROOM^S5VMDBO`~}a1TI^ieh+i%-s)4UGmC%g!kjMlH6!jX z@s7Ue5guXV6jSx&*DoV%@e!<5#p!$7V~k&=$)*drv3qq7quUt@A%Dy5aqctj&50CA zDJn|BRlEzN%tRG9Imet%E{YdQ4HC(T9dE`4XJHe1s5w2cWONN|Xm zSLAao2*Q+?h$Z^FL0aA)SfsSY=3rJrTbr8yl@0{$Da*=yv||j2tokN6RFecSyCEGA zPibcH;){r>Jd-QBY1#oxuHQoy^lr~c?SF_ z1m1eFMR>wu^=GIgdCTB6B$4trRYWA=fa89{wHG{hoB~`}3GG`75l`ep9}go5CMWK^ zI&btW)vQsI;Q8U^^wMAvbCpTMA z7hBdwibm1b$1{5!RkZ>kOECM%o|&ItN|*rdtc3Y?Mx|!4W7L6o0#VK7i|(pmK`md- zl*^l2=fto=4U|c%$g%KX+BIfuF{)ogGf6s;WXz~;e(l+Lji9%UK{AKRK^en?QNV1{$LyIw8^`#F7Tw7g9@ zhZ6j-M3`75>3RwF@zo|h9yYHaOuGN=+tT6fxp?A22zuI=Mys%KIs2a3-OZV-kAo9I zol95HzBDd|qY||^mGPW@USvng#;IQ2_H76_1PZrko z-vWTooMFXdBLz%GSGU~Db)vt&NiB@Cj>nF$T9c30?Ox5N2c@`xLuH62SC@~!6y17~ zl!%&5Q#ac&O6@-6RVZWXJ~#i z>MbB8ZH~t_hc7Yk-7VnSp3m&K$CQG`1J_rg_F@gu| zJsOJT;^=g@Xzouv{_#@}l6YUhHQ>HJW*N$Bkk0aT(19cyxQ^j#XXkObM@f210K~7+ z&2Yqha7mJVo&5eqZCS;e06f9vrWbWOHG$%)Uo{s9k`2lEg;CM*p`U;f)Wt*z#`{oy zgg4Edy{u+$ SPzzliY+(lSxb)p<2)TOWzJtZ0rW66qksaN3!~cc+a1z>eO{`u| zPiiIbhTc@rAf@>Faya|;l9kdjSt}++<=eZik(0j7?sDbaPEb-+^PltzbeGH4ge(^h zQ+5{<+RC1`dv#ZwClkm-q_mHIcy3rN=k@cTnMtsvl!_aUICieI(RgBsg~26Gqm0+J zvj;|v8|e5C7ve^!vL;zXuQ@~iio&gw*4LfY#JPTd8^vaD?MeB$wEFEnONXZ)_9#<9 zU~nRgwWWs}I)a@tJ}DjDdz}XUqYu1$NLs ndwq2mukPr<<^K1$0KSRPzdC=+fkohuL68>sxq`QJzWe_R+WI4@ literal 3131 zcmeHJc~BEq99~2OIT|ep0|;qFMp5Jxlqg_Jt5afVB*bVSM&yVj5VU}x5u%ksX^RL5 zwH$&~)Fc`ZNVq`>P(esgIphjL1vC%{qTwceu$k#hXZm;h2fMS$&ij7H_kHi}?!%&0 z*XltKqyetap%Co$PgzASO2_XCXhWlF4&zx6*Hmo2Z6k3j2KBRr~ zNnRAg$CIR7pY*<=Ejo_;0>`HB>1J!O2NErUs5?UZ)PgmB|MJ!?V(xLh6n&fum zvTpk(^9{_}I;j%TAMWYiX7B<-N3-@Y%gwG%ujl<#Az=BqPR~`6& zIKWM(32tbk02z0lWpCCO>JW5*<)UxeoT~~!xn4Md$o?$=x3~W&JG#yU+?mh2mD*nU z1U$Z;(K|0%!FRjX_lw|!RKaDqnta+u879>%p|q+%5SGoT^)n0yHLgpd2ZrFVb6bm* zU`}k09o$M%;0%|==rCa({_%o4N|I)ljc_Nl0HKVJl^uksF)R*0gF!N4RLOfm7Q6!H z8R=h*dt_L=+@2a)Y7ck7cY60H!=fAV8Yn990j=N>#j?q9=ao#WWi4>$kK<=-R+3T{ zt-=FfLF%;~Fc?9a@m6xMZB}|m)=W}{B@DFK?7yPF?AhWLOC^jJjKjGOcAK^Sv_B0T z+TLCw$WRulE@oU6v58JXWC({tS}P$7U=Dw}P4QCJ~gSrs9DbBW;sovO2p80j)>-pvp3zA*Pr z+$LU1dSe7!fPUp>a6Gd1CXZLoA2xE3Jnv?JL3eu_f{DvTJIu{qgP!3w@meqsDVNLG zg`wn7Ds7$;jPzz0fYoUs%;xME?f7`-ksp(&9LeEaMY<*j3db;J2Om7F(g9-Ej)?GS zs_Gtj-=wl9h%KBd1O$B+X^_F$VO`mp+TA0n^Sj$724AFWMT*@7{JHTl%)^I=2G8nJ zCqUTebDG=;b+6L4`hK3rs zE(KHR)wks_V1<;Egg*GL8bx>pif5f@y68Vf`ARwp!tXyD0)@>EdE7NevnPBO9pnxV zs;T8{AY4I${H4XLF}vLI5oB8H=Qe0g4aImPH^HLO9B0*($cYEa7`c)g4AQ1wZ>&l|=yFbDXtD2LrilZ6ijD6Go)R092 z@TN29Rl)r2QPo>zaz9Y(jIAV#BaHa)wy_v^N37uQ!DOC8b&EAcvGD@wfHM!d6Oh$v z4B(>3xR+05$=K|gxwA94`+SAtm`0!PksBKicE)U0fi5Y?vqHRq#AG8%K=KWHWyl^a zCDeR<(Xvu6M!#CuRGWM_v5Q8(VML_4ih*Z}n}x&dNKexA;GFDv!R`l$q`M7e+-P6s z-s?sql{@m|`{PFhVwqP|p~9)XnQzr=>|*SqOJBbyzH3p8q-*19V`HSenjBE7HPe}K zj>x07=N{t+cjb;z>VMkgRv@=!*=mst#F<7TPw4K6qczqVIT|_IC3y`#yuFqaCFT9m zEL$etF%GlH4huj`EAq!(+nCH}PD!&Tr4!Cz!dH(~2mUJu4se%ruxOPvdaD1n)&HB> cCGb6g{;~1LqSe5g5`t8~xgY$$TiN{o1(**JOaK4? diff --git a/tests/test_graphical_units/control_data/img_and_svg/Penrose.npz b/tests/test_graphical_units/control_data/img_and_svg/Penrose.npz index 0b30f2a70e4c7004c762119922f0e34567f8f216..ec951dddd3bff67e2cd77dda01ec319967310ecb 100644 GIT binary patch literal 6903 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 literal 6903 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 a delta 43 xcmX@Ea$H3!z?+#xgn@y91BewF{!iOjwpEaUp@CJBVWZT2L1qzVk;#7qy#e5C3d8^a diff --git a/tests/test_graphical_units/control_data/img_and_svg/Rhomboid.npz b/tests/test_graphical_units/control_data/img_and_svg/Rhomboid.npz index 14fd2fa5c529327efb441803e87bb060cf9a365d..8a08a403657f43143094f4bafcb3b8dc2b182fa7 100644 GIT binary patch literal 5650 zcmeHLc~Dd57Qfa~d}^VsMdT?mRv{EBs30^Ia0OZ;BC;yQP>qCELaJ;=60j~%WK*zZ z6$(@=3R&%<}`DQxPJL53O{m$|`zw

  • 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 L4&J?kf7AUBg1RQd literal 5762 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 diff --git a/tests/test_graphical_units/control_data/img_and_svg/RotateTransform.npz b/tests/test_graphical_units/control_data/img_and_svg/RotateTransform.npz index 00a74c7abbfdbcba1b96076f46d0755fe6f8181a..385d6fad1ce6fd0cbce42c594e4fe2a12545ee81 100644 GIT binary patch delta 43 rcmX@8cu-L)z?+#xmw|zS1BewFoR1o~|A&H&Qjr48x(vFL%LKduDKrm5 delta 43 xcmX@8cu-L)z?+#xgn@y91BewFoR1o~>kBY2G_XoCY?O)=U>0E(nOr8|4FIpg2jBnz diff --git a/tests/test_graphical_units/control_data/img_and_svg/ScaleTransform.npz b/tests/test_graphical_units/control_data/img_and_svg/ScaleTransform.npz index b464e1cb62404b4b1c740b48b9a2714b0a93e5f5..ebaef3a45bf0091e38cce6f2377c9d930d806b78 100644 GIT binary patch delta 43 scmeCy>(-MB@MdPwWnf_70AfXkj++mE|A&H&Qj5iybs2Og9}x2f07d8#PXGV_ delta 26 fcmeCy>(*lp@MdNanS4M@e51@lF=i2F5ZfC7U<(Hn diff --git a/tests/test_graphical_units/control_data/img_and_svg/SingleUSState.npz b/tests/test_graphical_units/control_data/img_and_svg/SingleUSState.npz index 2840601fec69f5afd4c483e0c66ddf18aa9b03df..596e35a6c9cdb961b87b1b1c0fe7610535b92840 100644 GIT binary patch delta 43 scmX>ve_mcHz?+#xmw|zS1BewFQr6tp_zwjerPBGCbs2OgxA1!d06QxX4FCWD delta 43 xcmX>ve_mcHz?+#xgn@y91BewFQr6tpu;pi9Xke9O*eI3G&n&_$GP#A{8vw$-2)6(L diff --git a/tests/test_graphical_units/control_data/img_and_svg/SkewXTransform.npz b/tests/test_graphical_units/control_data/img_and_svg/SkewXTransform.npz index b4661f6e70193bba5774bae7b0614bf72be489cf..05ccceee6cdda9692e059c19906c4d979e1e4ba4 100644 GIT binary patch delta 43 scmZ1~wNy$fz?+#xmw|zS1BewFR{a)!^dAZ~O6}!g)@9J0e2d2$06S?A*Z=?k delta 43 xcmZ1~wNy$fz?+#xgn@y91BewFR{a)!G?|Bip@CJBVWZSu9%d0{k;%7syaCC33Dp1q diff --git a/tests/test_graphical_units/control_data/img_and_svg/SkewYTransform.npz b/tests/test_graphical_units/control_data/img_and_svg/SkewYTransform.npz index cd7d9d69fd361a67e6bba755d31b094f7eb96378..681bf59025ee90389bf5342331782c7d4a6985fa 100644 GIT binary patch delta 43 rcmeAZ?-Q2_@MdPwWnf_70AfW3*^hq~{fB~$Qfl1Hx(vFLow>aME7=c* delta 43 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 jc3-RaKW0P$7z6#UdtE^X7!5y%}5zx00W zj)iZDZ&b~v?S*@*pZeGRcKdeC6iAPF2dSrW#th8$U<`7&Z~ElWw#SWaqm#V(MSKbK z@MxbrjUZm`k@eg2P)dn)ds>*e?w9k|e8VKlTHCO`7D$ETN7YnU`8d<>?Feq>rZ!)Jq2-+;mHC z*MA%Jw`u>p|3TpY6M?Q3YSPG&dHvb!Ym6rD?YN&uoDg0v9zgDS)%&p|gTILeMafUI zxdS3rTx9Z3Dohm+$fCeklcJ%Yb&e6oe_9(KZ|4MkiQ}n)KnCWtij>nW&h<~70|Hpq zA7;3>;yipP*ReLKG!pyyBDRzRGe`JziNPRHPPG$*+1=$Z_eK9Cwmy3nI&paM-Zrs&sVh(o`!t6}JRnZ14*Y|M*mM#~X$GMe(mv7zsj$ ziQa)@^f0{t4^*LZk^|0vzeWYC2M<1Xap+|}s)3IuxpK*(EQnaY$Lsz$HX!_$WLMOo!r zBaK&B9a5>eX7BTp`qs~a{auUzW8+UzJY)p$GPIn2mWn`6rRpHsz$XF8gKR>U{4|9; zR*AdVz4XV~SzW#Sa8~`U;cra7L{&m8YRI6`~$dU);^LJkeBK@`!W2Z&y69zk5IC$yBgQ1@|o~K=GsiTLeB? z9XS{mW_R?974(rh+r2LGg8#k&9m)=Yo@fG)i0$8w%A9(L#e+}gzC!2DPYz{TGK{$0 zL~>=t`O3ONqaAs9%c%H;By_Up$O|zOz@p}H&^bvB54{k6R;A?Zr@6CA%EdX1(7@Rs z=DaBdjVzZu7SZBTlD$XF5&AY70^OxC!|dE{5ALs`7osO34j1JqP8-z={b5Z!05b-G zigjkQrxL#OsZH-CE*Q#U4W!aQ(|tSB9{L6iLQDB#Z=nvR`iY>%hkC)zq--bI)in4} z;3Iwjf&-`2C2jyUsSBRqI_KWa{N99lex~g%MjA5%V;dDo-z2_^;7TLr*1wUK^tOMq zJodrT!2n+-lyL8Ixq4w=&e)l~oBv{|3c?X<(6OvQjb2NLtyM+n_zCO+U0+x)x(W%Z zonHS&xZr5V68KN%osQ0kOK3UF68Nab^TtH4;L=2)gDD7fQCmNI>Y=<5yqxno55jDe z7t?2(y|5J#7a&1J(_(iT?A7aXm~?Rb2+K)TX!yxKMzg23RX3GwuL8P?Y_nUb8KWFC zVg4L6mYj|C{foNXP8WN(Qz(#+Z$-AD{R0Hl^l+dusB`}(8j_Qnq1g-6>IZCj-MW&5 zkZ%e-^ThASJ}93(>KIh6&fd??q(#u>&hr5*ryrj+yj}oeDj5N3t^HUX>cJy?1H^MK zGdma^_v&^!jPqG8vuYV=vDx?N2q|xhmiscTyQMS4IWX~5OH`L757RiHB}h`10IaYp z>ZiFv^`3ikD6zv(Iq^y$G@p;DIkGzOr@rA%o$^L$zcg${?58R`G=Nc+E`EszlJ|(m zqAtgD$CQ0N2kp`FEj8+w)NMoPzE0aE=6mR&7sAZW^p5nkXDXiyFgwz${_4{KlB9e5 z6lI_P%5xY2V>MAeX8kIct5@#a-JfeWo^bzw5CuIl;dm91wm)g{i={dU^qQUa#7{jH zlLafnD9Q`?iNq=M=}vRk#7_F+GR5%G@w^p(|K`D^iDTNqeVD^6RB+UKM2wvpbl!MA(pStSnEYA-ftea}n0Zk}q2{kF+zYZX;2bf_(`52Y8 zk;U7yWpKHIq2T7PRIj0&SR4y%CxpaH*=wUKbuP57MyrKEXtL1D8wW_^3{A~mATDy= z6>yh^0xd_I0!*C(s%vZ3#g0tdksJ~0?CTKt6^A$Ozn^;dU{ggNQ<~>pJ!mUp%-Q{lClXvSAz6qXat|hGS_7q3=0?c#1Ose zUdXN|v+QR36UQ(3v=ybS=8EbEdXNVZdt)M@sf$rfQ7SY5iq@3t$yO5H9L(KxO#brV z<4m`@p{Y{_d+==EYp8*U3=+9kefTC?_aiKe&6+QT)oiAogFb#gVJ>oP4w|=ilUC>EMO`8lMb+dLRqUH zW?v4}+pMiMckQ{JMA*?zGiZ2W2x^c-equ!Y@GImgipMJCP5=eN&FQnjTLD|%;)yMnfMoao$anIvpN`$+$4qq>^b z=bk;p4vQt9?O3#?wjX0DOjA@PipH2N6i9EKlw=Qu{Th~=^?5Z-hG02!ulYPBcyJ}@yoBBw zu-HbdK%vU-E)@z7v~?`eIJ<5BUTLGs8@A03*U!KEOB1%mmPiCDi%;3ZG0g8t-TvSnnsg%rlbXcYkz(_!v4Nbawn%f0__CEK4cU$J!6VPfYeJeq||A-)Br)F0Ggp!7J{cN2%^cz&~ zzx^vqj%54B0;<)S2?bwne2&K+oA+}8xS;sX@b(b51*Kry?)cPPF}&^ z4o2LFl!l~R(CcwQIRlr8?dme}mX8whlw7u_00*;t&<~q`9 zzazAD+!C6<9xn;>YWHju1U>I}TPWq@L)*9bkE-ZCO@xJa zTE7EaPL&bcrNTRnp_`WDUbHjr4-win4$Q+{$bZHB5Xpx7W#?*a5-mVz(UKlG;dj0R zJ0US3QmP2tH*CHcZH-77-KV+ej58+jstT><0m~a}?86dGPD6nv_~Mba+I5e*NLml$ zC$;HP9b|f^c{O09#G)C801o}V(;a%Y)yfHH!V=mKSp5tL9h7>G7 zSDUJ>y+sAhU>Zo-=2fj8a}MKSO@XASr?UpZ_a~$P5e>c>=JJQgnqF0Zm2MtG7-nu#z#!?}xZf7ji8g^0H#J3@8}JlP%p_3kA1=jN#faO-KFw zhTZXagGy6|@7B;;(JfJiRq_J=p;f!^`Q%CM;K~5VK=JHnpjK-|Q{xcHCRD*~PNu46 zuWiAy(VGX|_f@VHV0`9%T%3WxK%f`+%R}U&&nAR1z@aYpr61mK8x+$)i2SMe^5%@I zNPnj?1LZ??p*GYJT8qoM7ENfh(9=(=Pk$I$c-bcvFP8Bgz9&f5S*|Ci6?Zla z?`cHoTf_iepz2Js4=n^e&mSG{(FHz_4s4UN_ zln{<}#9TX8b%ucPOioj|1{h%xB&bT+2$|YeEGUfxJMA{p(d@pbmILHYmwzv>7`bt~ znNb~)EV$fVAYHwpZ?^qtZAv?$99#k9(A9&}mcHiN=dw}wbWI+9L!&6OuV_QYg0tNT z9+GwT4(`WBHzafOe(j&<9|Zod5$FnA-MHkY0^Y6qzun;ew?rJ!Wq|(2eeNYUHGr!@ PAQj*P1%A7>u0Q_^8)uHr diff --git a/tests/test_graphical_units/control_data/img_and_svg/TranslateTransform.npz b/tests/test_graphical_units/control_data/img_and_svg/TranslateTransform.npz index 7b318538a68820ad009dfccc0f1454c3b49bda84..b7fa0d0683acbe194998d9126285ac2a874b62ce 100644 GIT binary patch delta 43 scmbO%GFe0_z?+#xmw|zS1BewFxSgC={D*>#QmZ+cbs2OgpWyTc01{yj8~^|S delta 43 xcmbO%GFe0_z?+#xgn@y91BewFxSgC=G;%U9G_XoCY?NBf$t=PwGWi6jHvpc}2m}BC diff --git a/tests/test_graphical_units/control_data/img_and_svg/UKFlag.npz b/tests/test_graphical_units/control_data/img_and_svg/UKFlag.npz index fb29b5c5d88a9307aeebbf25c7fc18470796b64d..fa2ad5f874e88ec99be9ea4012ef7a49ac19e0d5 100644 GIT binary patch delta 43 rcmZ4NxY$uDz?+#xmw|zS1BewF~>x$~8Ai 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 diff --git a/tests/test_graphical_units/control_data/img_and_svg/VideoIcon.npz b/tests/test_graphical_units/control_data/img_and_svg/VideoIcon.npz index cd8a9b125d0cabbad41e4b10ec0e6be2992e38fd..f192bb76813a93351c21ea15f012e5c266cf9996 100644 GIT binary patch delta 43 rcmZpbZJ5nL%{L zMJ*cH4q=i5fk?{Q$fekT)5W?MiK|9;o{n45B2fLG#$(%Xw zdGGtaxw+4Co_kJkz=n66006&&zaIfp-8Kv8O?wYmfUnL)$A3wTjXocZPB?P`1-1Y$ zu_NpW!1o`nc3|dZM?jHeU~s5pu*`a^aqOqxZs{~7OE+KH|6O)l#bAYv`R{Lto{4t1 z)RTN~e3<+0m5;ZUlnk4kaA~1E7!S(|$nO0D-=}EyVXd^5u?2-@+4UMd^mr$vYdPP6 z3y1!=G;vIcgPuIar58e48gy8Odr<&san=zlnx{gmudE}+bCg1;p4I`8lyXRqgJidq>QL410Y{+qW#12A!?7D0AE-o$?A3uKlU4Q?v%-p%q z8e@8Wr9glUJai~quh*YBd)7Qtzhs$^m?+ZgGZyta%A!_9((V-q`FuwxeVHc`iS{@< zht3|E_5{IA4Sc>xsXWW`lO(64SYc@^Mbytg7^|$TY+gILqd4tMMuu%dMW4CLWpaSjf?MZb2Ll zCz?Xh9L-%?n2DNv^(s)X8B`H5F_u?bbKD<(^UW4AnVeT+ORq11+ud+pkS$%dpd5LU z6WP<#!=QG6MyL4r_{fc3y~BI0;I6ap#S2GrPx)b1Ud?al^*adZ1b=o~diqUdR8m*x zx*LrSmsT+tjQNQWIPSEyB($)wP_h&?SVI(EVltVd>ELfmjp-V6U|`^_xd?L>UfrMW z=%ZB0g*3D7?(QMcWizp6Q?uL&TjMa0I6OT)?URufNOf)N>dI4~LB#=#_o1Mm+bo@~ z%Qd@p8e-=+8eHwXT)NK4t*X=_1$7lHcc`^Xhs^Gc6WJiz$82?KjQCS;T+{B-xQG_z;<_s7^a0p*xV^o7&0N~l^yd@bYKJMVe|PO zAK2ODr@uZ%B9Vqv6B4n;$V+{SOm<*hCv;VAmdRvyN=tXFk_QYK+PzRSUtixfZgFvW z?H9EdgDIjO24VRP4Gnwt?XyluNFelAYPH(nT^6fu(!Rc}DHIB;ry@}<$nNayT!nJ0 zb2#@%bw#L&iOHR^vYpyKRH}!&ySoFKp^&0dZ*LhM#5xgT z?!XUtbyHK*-SCX1*Y?^1RBF`l!wE)hRek+FWaL4PixUkGpYY*C9zAMLL#z8x6`4v5 zj2LaTaO297I&N}m${%4f37<0esHJ7UHq%mh6fbG253#^OdYxvEr>8BJx_E<{2$o+C ztEz_eJMZ7WPmq>BX(46pc5>p)8qsrFoTa0qv09$+Gf!{)xn6fSw_UV3oo4Q)1kkCu z*RNkzsZUpItCZfp*HOF^&~ z4CB?@h^f{0-fY)d-Es`IURurCDt}J7Ok1#1wbSg`*#HuGntnJ0s)eN2roB(zIN?)jd3H7cY%Rz zox7r;!2DsNR;$G%&@3O3G8Ajic4oJ3=9mwO*mS?&=z37=(#Im>7hKL74mk)MOAQ24V73-g*qe7hKVaMcWk;t2i4Z_4AObo*0fA1)VzHb8B t5FCIqasod-5=RcZk%RB|{*4{zC}i;C1M=X2jhhfF3jSc=-rNou{R_$?*dqV{ literal 8054 zcmeI1dr(tX9>-6hpdtviAPOQZC!LiBH;h1pB_?q~Aw?cBJc2B56^P*xECD3XJ(t?qZrh#dAN_-!Niw;a-@U(c z&M*0$-{*esIarMDd!_(@jqvju@VA(goL9R5@NVA=wg6Lb?z3o8Y*b8iQZzd8!X*?i zS-S#V0pf+c=0>_O!yUWECyK|9nip-H&#pJ=&iqPR;QuV$q}{eS@jbnd&}WV77xqOG zusfq{w`Ywj%65PC_O_TCdXZs-HVYFR4{FZeY#bTzX|sg2iX9;hXe@VVq-V2Y8OnSw zk@`-%O2KeeEsd#_Ga9wDn;WK4&M?r<`&?8+dP;PheXeR{g3+ZuvXT!kYnEzThZ%H@ z3%i;@UP@|E5B4tQYX%mh@S1Q<{S!@)>J8r-^S%LSB9UP6cuNaQ%SA6@e0)*u zrnH`Hx41KBY-i`@(xqeEYt~-$D?>v=3kwS-bhUCvVqzjsrJ|`~QXr109?k8^xolIiqaa)qK;s+abn_t~>sUcT%Hfj4VvYK{g52Fg58 z*zi#fP0^Sn5wa-KBI%~I7YE$ktAfDp>Y^gs&d$y&Gcz;6lz1}vcYnm;e8xTit>yRc z@0p#S=aikw_oNwESy>5JfcKk@?vQ_m*A)172?W>b>gvSA4FyRJjg97g6&wynOw=!E zXkaqU`YO7+yVtB3DL&2&I1&>R(Pcpq5fQ=xL+`ja5@}yq5Sz_jvm9mhX6HvA|Cw_R z`1xMCbSWex#Gxz*gTbuwTO*HvRu@I)*CLT9L%r>D0)bEb0x0e3s2}j#+IZ7~{6$I- zTgJ*cF!<7V%NE|NS21O^wKq8j0sZ{Q$VfCCl@a`cD3@i=Cf;go{e-X&7~H;F*v98C zuBbW7hC$zi5*Z9H&Ew?cWFY}~H~aYdwltm}qaV+|cY9=7%rOD?>ey^6X5h`b0ll*V zoix|`Jr$Falj3?{bF#c4J~nob+!-7TbgKT>^XFfBZU#NsewChd<#yUOP;$Hy9J`A{ z-8x*YW0M@F=PhY4Nb7_DMtQFjI9(b9O8kG$0S=I0^^kz_zH>S*=b{-15JK-+$_o5@S6A0sV8~c?K3~sg<4_AbzaRW`Tz^}ek1Q12 zvPVvZ+MS{JRf5mEP|9+((?4F-#3$=MPImp&0kj~yPks?H!rWL z*}`Np3m-oGt)~9L1AF-$;BYcD%ii9eH#!>mR;{AGee=?{iOn`LHa4Ds#WFE9Wj{PN zHqGF&SRES06_KTrYVfaPTxTGFrXZ zM?AbFmPnjj-P}Gw@GvQkB7?^TrGjlp74J3U^Wvav8y%`)bWB`>){is?p zGn0W30fWcmp*1_3xn?bMa$rT(O-)T*4(splH=}id?7u=fKx=5oa?LvGg?}^E^$!F; zN!hu%*V5C|FNZN38nPMTvrJvAvQBU;fka}9&woK7lOJ!}_{7VWb?{FK3C^i%n669@*oSPQ<(l{|^t{(A5^eJj2q-4QoH`pC8X{f1hBz^R z_dfxbkVK=YF!F4VfMu1xot<4_bMs-jA$Uvc6N#=C78dUJ@UVjE=H z$H+K^e2IumWj>!DO`#mDs;asYjyBiduwiM_dM@F06&w98T6vWOysM7w(OD^W=+PqgwxD^IkmC%+O-fL5Mp y<%w3F{9nowheH}`EC!`xs{6lo$^Qe1w6%@p|K2mlV)XP84-|a6!|&bJi1lwNLdD4d diff --git a/tests/test_graphical_units/control_data/img_and_svg/path_multiple_moves.npz b/tests/test_graphical_units/control_data/img_and_svg/path_multiple_moves.npz index 9f8839930d957741f256c7921f235848a79448ff..2afec6a40ba3668b48da8f9252521d081e9085b9 100644 GIT binary patch literal 12356 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 literal 12363 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 h{_!hWO9$aHvsPa3Zwu4 diff --git a/tests/test_graphical_units/control_data/indication/Indicate.npz b/tests/test_graphical_units/control_data/indication/Indicate.npz index 44d6e7d1fb47b140ed323455232f599248acb61d..4c5e75e629b5a42d22f35ff6cd077627167b7061 100644 GIT binary patch delta 43 rcmbQFJxN1&X05%&B&j0`b delta 43 xcmbR4JKa|*z?+#xgn@y91BewFJh@(fWL0BeI1muXuu)21jah_QWU`N%Hvq>Vz?+#xmw|zS1BewFE`@#G{~roAO5G4<)@9J0{8iW+08hISt^fc4 delta 43 ycmX@0aX>>Vz?+#xgn@y91BewFE`@#GzfPEe!QrGf!$zqa!ptJfB9p%gdjkOI<_lv0 diff --git a/tests/test_graphical_units/control_data/indication/Wiggle.npz b/tests/test_graphical_units/control_data/indication/Wiggle.npz index 79898a858028080cc7946c55ec4b7b32863b52aa..a024c2673b6f37d42bf3fcfab66a923e06f90380 100644 GIT binary patch literal 14587 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 literal 14527 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

    @(i3qS^AB{ev*RRC~{Mie80K|thbKq_~ynE(N)g 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

    @(i3qS^AB{ev*RRC~{Mie80K|thbKq_~ynE(N)g zxcMjiUjI_9z%;Ita(+WJ9-b)T%fSE&WKyKA?SIFv?uxolxA1iVdRl>w&9Wowc%S|u zz4eqn8CF(j!GKajep?u5!xkWi@LthPV(}p4pCGRoJ->hWZM+}+cEC)xWH>G}GxJSB z{13R2TExDbZnm;8zj+Ss5(dS##OWic-OcW=Qmo*KIuW4hp#4}vmfzt2mY1bIoY$B2 zgJ029eq%m59}^u6sp7(qt1H=Cqyn~n;rA+F zkoqJ}CmFPzBHw&zj|zg7Ev7@9;<%&k`)sfU-mI1@^2dHe)T9(M=FdkP1r{wYmAKUg zRpwG48%f%ObR|ogjtjw7ma$_@dJZp;FW7-r5&wW>D;zgBk*sx&bL!`!^nRENZ=dBv zjxa@r%1560JK8&4R#q~=324=h3DQVP@q{~r-UBGvhd`;{-8 z;B|+Ovl#%D);mYSsK2Qxl8;@E&oqFIj&}iC&h$jR!2yJgt*y>)8+pNsEiJ$1tZdh$ z10}pJ_WU!^Al$KN9?&X+XME2UVWX8D87Pwt;%dgfZKMrtr&Vyf*JKwm6@+Yz?n)rq zz0<=;ujt{~fdj#DQ>OMs*jpFjOIYCkqxaO??w3`+49HlRvd zX8^CGn(WPCjF*sg8Su3xc#CsU4A4z!0Bw&%R6J>ny!tz}CjEDSg-cm0jN* zgxq|d5^(cIFI^nQ(D{8E(|l$F<02Yyn`TBI2fVS!@n%^8zL`9lxMI;ig_0`E=`~`G z^KLR7Tue^MH?}@s}yb+_`-_r#mXL-%7I9`so}CW{TMRC+~s(WV2m3 zPC-H84G(}>^bL!l=PmaLzWoH!y*684mw&OU;9|$$f>=MG&J3pmh)Dk-4Hk*uzW0E?`ah*V_+!?&&Vv`sbhgJX2E$9J`Iw zWu=+fE1sWM3LADJ==|+x+$C9?G{P|3h({E8tf`BCgAWbA#ewA-5P_vN5Ik9ZkO5e)w8QM{Mqf6TI5f z=~LHmcQ*#T7KA%hL`P9piLehA3mFT9}IWHM^H zAvbvAm~k|`N}gs6%LT&vX9Cps|3bgHS+ zFVFjOMrAeG*j3xNZx2t^oS$*$>c9F~j&QX1LDduP8K>=A`AuzSU}z^DaY;k3tl+(L zd+1|dUtiEqw=CG#zLtHDFgSjbP_)R0F&>S1mif?)a*N`^hcMbf7}9<#VK$zd%PTR7 zL&0w^FwHWoA9zTC+sh=cBuy@oPYg@*94oE3J8(^2us3lV8ID5W+^MZ3c{a8Y88z%q zz*-R9T4s5i0|>n+h12<)fzX@#mLpM%O_!7|bCShr7=pcB70#W0Me2p}^9;>8niagS zItJ92n>KBFqYh*hfsq)=iCkp2>F`rh3*~@{tpk0xxzQ_uwmz$-bs-2khpfvsR2X}+ zIw%#-WMzIo>sXAk$96haq@EV;FPB0%3eIZFd?Hq1%#<@=ry}+?@jEM8bEA*zFhI#a zM9Tl)Zu4}V`!TcE$|kTx=+GJusx9|ijS~R>r-$Oyqu}*<$$+(5AoaZcL)!mCHd#9QRtXfPY-yTjc9Dk}Mf3a|)~gPOLFgW^-ReDTav zH%gGO%$tHATPtp7-s;Ca2fgPJY+m-wo683J?s9hsfE6aJD0KSai z4>=dnQbXsffi2If3qA4IPa(JhH3O^wGv2T<10Lx4q&7W&YLGWGPF8pL^=oHZy1Ni) zORF_WInB7G6MFAH%z8^4nb>*Mz=CDarTcn;bd#!H(wI zT{b|(>O@HYpLH@>Nl`re>f9?I)(rIB5!o;6mBmKo4r9dQppaqNLHj5|BG=>A44=KT`iRcYQVp^m%5!+aO3kw zoto-5(r6e3X3*9h7t8EuWg((WM;sRrY1@q`-%rwJ*sfy7m544#kIg>4w2$)=EO=l* zo*a91zKUYK*AyM(gqL85(`U};dcz@hzC1q@BdkjqR?qjAu4;#C7$?bKN`8V@ z_l#P>&)#_G(sj62s73BpbiF42RFMQ2iyuQ?+BsQ4EeG4KNF*Y zz6V^cfLp})ek=k$MY_JFwN0MpNW~lC)lidZ9tdHGb^d`5!c=H(oHFYM%?ll-O34g3 z?B+L1Ki)lR6*1*q%6?MBmMyd^1>LDP1z3pnF2WD%h)LgfR5c_=EtGAq{%yzcDOM53 zkesQu1f~T4yVLV?vx!iv0s3yCe?EONoK^G2Rq26x3wGB|RrhBL6gI`Us^ws?Q)4=-Z z5aGb3tJ{9r1}JGIC1*J%iG019T_jN6Vr}G8n%v#*r-%E;rVw2IMl{C(G~l)=SuPoM zV?I-(7y~FxjDE0lXkwZNDW<(A6?%psM_f8`L`o>LlGtat%z? z`qRZ?48ekUg2-S~V^CV^=?lNiS)gu$U-r2E>`j0`D&I2;v)K|o(kP>g1gtjw((D`) zV5CUU^EeJ#r#J-R*>JiJ|JdBcAtr!SKm5bn-p)+|A0^r3`+UOvG^R*^SV0O0wI=7~ zTTThAUz!(=B*~g(*HBH^!|mqz1?wP3-|6^hA&Ls3C2c^}sgwssdk zsF(rF6OVEkPm7$H)YH{XIPVF18|mojvATB9u7Om|dNKF<%G+=4mt5O6+?0=&1@sf{ zG+5=9g^d9ynFCP}r_h5Hh^j%-B9Z=4ZWNY3M}1&eny<73S70X4T*e3{9JFI5lqK{W z%5}An4ODd?$8(_a|G=@VSCgHc1f->z-D45gz4=pIAE>IpwLx5|DNP-y%+eU&RK?Qf zMDLnK8zNcY_9X!yWtBDX=$nI425oodrnI%S9RQ$`V6m69aer$ZiZ93=%mshHk|t#e zu{K7JeDN_{+P_v?k@S=FQ)SYOZ5c@wVV)teQ$ZN%w)uy%GFN%-(1Zby!Qx!NSKgk_ zmf8&7(?Hk?n>a-V^XMn|s{Wp-jGXr?nQvgcTUT$f$9#f;to{$2LoD1(Gg}d-Jf^lTFo(}dBn?? z2QeE|sgVC699_Cf+34YP9)qTb1=#+?xHbm1l2{?((}KgAq(1YH+grw&X!V|%8U;98 zXy`LdAq&2vrD`l)=vKXHH{qNtqRKTA71#dvKwk*gZ;e|7Y$O{&0nL;A^6K8L*9=ad znjR`}q{>wo2TWHY-#lL4$9G4{@?Mh?{~?AtahzHNhCvOMcrHOH)Mwe0?yD4sIT1k4#sgL7=+GyvLhzl3P3 z9hOD{9Ja-ovKVy)SM|n1ym4RB3v-Q8b_>H%YX{YUYydN4HvX6vq07}L<>A<*Q=fc5)@&{?&lS}vd8QUk8XxL@EB6G(}7EcR}60sal5 zyB6j6)oneAHi%I>O=M`zk86F~Mo!t%Hul!%ovh&SBHC*J-T6(N7Q8(dPE;$Qxg|2q^u=3yS=A1D9 zxfGYr;5<7Q48^Yv$7spS^GCvQ#`P{V2sCuWX+PSw6Ql7KnxDEy@cgD@F_yuhbu%u2 zCR9h3WXo>vkv{5^h1WS0(6b{yc~TZ;^N{u5<&P5KrP-$0%c>;d3Nm?$#aCY{86xxoW>=oB-Ue(-=2#} zyq^=T<9!Sh3_P!2;SgNe=f*}NEBT0^`i?I13m1;@0a!o1#Utc=JA!zIKz7r5vo9;p zu%i#QFK5dF-|sk@3(zRezi%V;@x^HoYuApqs_fZwssO_~LdPcRM(PmO^5=m@aypiF z5u4#qXB)lVIhOs@L!cqg=U-e}X)Dl=@xjQV4rI|Dn%7XvfFmy7lew>G-%C)t0@k|U zl9v0G-P9-h7t{Q1Z5@!7Z(qrl1>6_rNFqXb`(LM_ZIr-l?y?4(0S&&r2!(Jb>U7ZB z?NhwwKYZ&e+#=YWLZl=S)($jcAA4+U$OD{}w2zTi5k81pJk6lgOYMKs5J*gf8$~`~ zT6ci`6&g(wA-OFn1oJ3rt7P)@tESy%xdIGxrBCq2uetzjxi+De|G-OL&GtD9Oa$6h zzyW3yVYN|?AHHP1*?H{l$-7(KKOjuv5{lw&3SN;6Zd=$0k|wYv>g%j5$B(q1>}p@F zJ!O(^21lAJ1I8ZM0W@YNLh9xH9}2c__hXmjSZg-xkg|c;!S>Z`%+r&7a+@;Acib`7 zYB|(KjZa3q5Q$flKnq>AK#;Y7w0p{DT0;3wfa%L_EA<9LO*of|X5KN&+qYxDt@o>)=za7?#pWKN3h(1y`= zPKzt>ZamuKMCxr_ez=Ne$tVbO{UFd~tPHs@uiJTlyS$F~aZKDQ+DfI!PuC(LpopC> z{T?FAb(kK#eCIN$cy`F;03xtR<|_5}NsJBT28i1nvk@$Fs3D~Xwj;kYFI80n&|VhiI8K%F7x#|S$VWLX1_ zr})#$cetAC+#-CZ@&#VKI@7wGi!n+>!%w2a!omVBnN!|oOqi(_k-WY)8imkBcCNLfUl^m46_nQrt(Shi>8^AmT5Qq3ot? z0*MO-Qy^@D`tCD3NA!E2_A68UX#Hf(OIJ*bJ^)-;C;!Dg`bY!5XefNhq45=UcY{QnAOVUMr!EyR>Um=t06@UM-U&_L^H}41rUVI zmc_wlf)%{$4(bCYpdkov{hXzaAQ<8E{n*%vQEvy#(7GS*q#Sg&>^t7xFuo4~)x?VZ zGnSBlzWY`MiZM;T5fHvL6D+@<-yM?-0DHjyxQBrA5~>e+Lm>(y$L#YY06RXx=d4Te zv9I3!J#@CrH(#X$cBO&nDW;% zBw$bip#CtObm?VLpaR94hDnZ)u_G&oco7IOfPuf*1X+ok2Ru}IoT#e#;+Gr2m$yIP z>8*pgUaeC1c)ZQi->$mP2+wUM`|raH##}-c{OBF#vaU_!KVY7H_L7gVJi*O;dnj`!52wl*?;a}8oowzdcvpz4jvbHqB*IbMri+O0|OwU&&4D&A{@_o8xz6tN!G>$ zX)q*NEV;>i;?S2IKxX5%VBg;n(3M0bQ>bfy6yN+qZ$zN?r9j`SV5*f5YPdzPwo!09 zCMWJbV0l)Ol1|@6&3E9s&g$tUE>tKG4pZJ?&-PsLgI+prfM%mC6i_YB1EJDXaFHsH zK#6mty3K%d0yLEF=Syg!pSw{c=g>ynx1dPV|Dp4b4!L}TYN!;c5oYu%LPqoeglX(T zOy4&w!k$I=4uQeq_Vp{(V2&wZ(ua!x+)QzmVaz43GdVnwAM7*awOOJWH~J}HU!CO` z=Kw);SYIVz5e3J&mkW3Yu(lKzj@9b(Oiw^oX?P_QlXFn}|I zE$FaC=JoV=o{2t4Y2QuyJ`iM|*VV13no#ry4`AA2jFD15+IZPvJWDCsDE87k-UOgI z`M4lRmqHgphQnEcw9=ammb@;BZS9UhuVc$Y#S<*pv;eMTBHr$2J5>(lD(_&@ZaL6O zijQJ9qlbX6@djK}oxkzE95yn~Z}&$r@Q{M$+>~_%Tzzi#;YDiJ&%SQQgXi-_*)toe zWcq{*B8Rb8Fi&tA<)1*60#)3O^It1e`mGLCWcZHv0^PW**n7YehWk0`$N-F`WFj4+ zrb0biUSBDqRYYh%h9BFIfP&v6@Js|B6%8W;W<4w55Re{G5Zeig&Bf_GdG9Zif`9zc zAe2~qZoJa|KyVYU1$2zbhcXd+Z*c69m2Y3I7Pz;qS7ghUHyD0j5eyRkx-sjB+ovE;oVX1zN;`6Fg(Vr<_Tt!Kq`Jve zu6>i?yuNXFi!Au{wLRFn!}$ox{@f`4qCCg8<_pF2%1EOm?qsV=PNq$zv^VS{$k>*q z0EaJi%1q)^pSs5OMun~UV$0(HdKvijV;0?AW?H#&$n}Ck$_=a!_tuBw{LkQQL|KvtOh1TfxxT--w7u0N#C1N=)uIL#j%DypZ?be}{%9hg!oy zyV8vQ`w|dedbYsOm9pbMPR{yI@KS4S0@j&*pX=F?Vfys7a}kQuNHxiEp>;SSg&@E1 zegAYmAQ|f$*!v;@m7KZodG{h*^;eu$F4;K0%mA9rTQ8{6-~_q|pzQX)c?EgQ1;eLT zEe)y=trJ;eu1A&n+A_XA1mon(h}dhp_^-xbUxUMdfIP4Rsdl9GMjmaZ7t9;z$7&4Z z$csSG!#8b6n*dZK!kl>O;wX3zHvX`+CH(sNm;M-Ur{>BFg#P|(Ltq3j99LIYS2(#q zOW4Ha!|V8igN%=GrnZ|8?IlL{vo|X%0`; z7bl>PLZz6a?8c=q8Qeh9Qr1vzTysY5nct=RzsE1nzQ zwJgqQxs^N6G=~K0+r|MqDc#Lj359I_8vzS4Ey99~jzL?F&esb#8B>B<3)q3XfkAr> zj#NbQqyBeof=l##F~?0fHU?rLCsj zRzZ$=>HKHzLt_s7E-qDWn|Y zjr?FqPw1_ni$v4X8%!)~M{NBB@14Y!#6BBlEem4h?HJ19gB)?_vB0g{w)H;&1cx6r z@9K2^hspug9};|q0hqLzty!4c+^ywut?p9(eJHUv#IL*0Yb*2(bECY!bDHA`|HYYI z<>F(r@AbX`kD?^qC2TMTgGCE3z=VTX&nx_xG_ylN@%n9|o54iy8f>4mA{9;n$rrL1)*^JM&8G9iJwTD|D8j*0E_leF&tY!= zN&ZPL&Hw!|)WfY*l7}Wfioh1C;kJNU@n|?khdK;ij4?a)HiIU=rKb<1D*0YR(PyCc z`w!~ByVV=y$k8u`&D}1pMdA#PBBGjcn+8qMkMNeRf}*o|mU5AkRVtv9X+}a5fB!m9 z7i}#`a1BdOX`fsgBTEvK6*ro(En)fE>~F=1gN`bGNf6#wJbxLN%C6 zMXaN&&4~}$fK_tMU+wk$hDnl1f&*Tm0Ksm1*X&UhAXDYHkz|Z*d2a8c`|8|k4>zUsjgEl_@`&b z<~jeHlkWv2FW~(K5+ilk@BzR3Kk8M+9hV2T?Gr3xWoU4Ts$={G4(6cG1AHRbF%d~{ z67^J=VF6UzY+mTAB3Z)-OVFVz{$!Kl=##fkW+ynx*JyZFyz(6cJm?&Y(?wX_-XhSX zhS?mp#GO&7b_B2b+@GI)^a%8<^IT|+fZm~_Ve-ozm&=jH?-SyQjMoz?&~sZrK(Eap z0SRx}_68!DTH+M%A5<>wTzGLpg@(>*uwK&BBqdr6BZqCh&geDkMtn+~>w@_XcD1Hb zFU=Ofo$?=pXLN)Y8rTnnFAx~*N)_+}8^qx`W48k_zpd`fFZu=NQ0SOU#Bk{Gt`@=ra?~Pq|YIUoy?YaVt>B zEW@3M0iYGB4LF4a5`M(31#qK1oI;1fY=g>QpM0?22x9$9^d0%tZxl?M9FR=l52jOl zO8y$eRNY76rQ2|uSU3e73G|(7i&tJsa7*h9&{9>s!~^C3Iidr|=OpH1f8CTgCM$U; zX_^T@kBAZF&BH|O4ZxKlRHShMF1E=s40vM2((ZxexW?j@O$iVB9M>-?*TQ=Y^4^2} z;GHZ}mS9O)gAL1Z-%EE2n263|n5SQqo%I_85yZ&i)MK5Qaj?ckRz*F{Xy_MnOW=Dk z@SL2zggV~^*nT*QfOSAe>E>0vax_dM1pVQ?eRyZ%MW{8&f0W}Zg@yg~qA1?A{hmsZ z(EBd3hYtN)L@>Qk1wYNkeo1iw4e`mbF+~qqIkB9^Es>$(>L5Iesor>nD8?-*&O-Z; zXpNu&0Fpr~a-jSTGTZNKFz<`6vwSe5=h~cYznT9Soc-m?m#t>;zlzinbNVsk0{4Yd zT#S~RAh_nQ&v8Lac$6VBi<@+B8a&f=p2+C0O|Y8(?b8^Hl;Cqcce9K}>B94-lO)@B zhY`euD&EEfQ+b~_;pyMa(^Dx;w5fas5`qVUqP??6rGJ$~GxV0uypRcapsa}(y*$rC zc;OA2;6eCyOJoKoZmt?DoufBun&&KTg9X9a3{U}HQj5PC(UL5@X+z^e^@T?iogQo= zX@8VO28LfRjtkWnrw|t$ZyB zOj6Z~aY{j+jXBYV3Aw9_AA5taF~*cCPu6i*X=b2GwAT-q`Y6fgSWM5T82=LSUw&;R zofE;#-+acNMMXwzMt@(Uo0(Tn$U73E7Tr~kh0B1Tzgzp!$nKT087()EOz`i+3^VG|w3vwTM28O4X|m15kp$8lCEA{u4edD1QKm z28brB^vQ5Qw0xAp3SE7se}{QoZoN{ntaWEZK*1K2cHhG?)nqAPo8)6;|?SPeG}St=pCy#`4@fbR-%p0 z+RpqJaQf616f(fo0UxvwfUMZqnN$~I=92|K9q9PwAYr9|5I9-6*4*oRcc(dQK4BnQ?FH&2&LlPIfIe_0E&QjR7}I@mDm^a0 ziMm!r(Mh1{mba`LgFPp#KfxA|>Xk+|!l#Xpu7X2Q%9fgAl>4Gr*{$a+(7vIT9L4{) z3Y4;80&am>fMy=|&Sv)r02w2hqDVrzKP<4w@XMGV7!N;SRK)2(-JjL_P0ZXi0{5;x zK*S~Zj)38fCa^@kTZ9(0L;>g+=07Wm-49@eBp*0mS|92rrA2|L$*{PYyKWTlc!A(-!BQf#MBCDz ztcuPL?k%}OUT(l4+{h%zs~$j1x8lZf`2-KBGT&havk$hn0*E?=gFCCMm@Ad^tKwWm zW|ZGV72g5@1l;uM9gw8M`LvGI?xaG zTo~rgiaXhn&*EPDjz;(8{bZjp*Z1A+u?ewHRU&-?96 z9Ps2_+MFg8K!_O}_ExDL=>)Ky21Ht-TG;r=Y~5~@{*fwv$^uHur%yq;{`(TbsO1vm z!c*hj*>+q1TUca~g+4QF9^1$v-rC3s(*UGw8PN2wcb*@WoIf7L01c~PD(k-^bqm8t z->OY9{$n@pSDz3n?nh|I_kCpwdVMRJ{1WX(V}5svHd z=Q-7Dp7|xZJP77bmPni`C<74+R$5K00H}}@d#ENGw-<%uFeth-!iho4%Z?!tZ9;Z63eYao& zMomsWXv<=*_4)z_mADR$)z&%S;Uos$Z_`=0yqrbN&jNCA%u)BUi45akl84S- z^8_8I*#awmXp$8ypi3*F;Cm_F#)QxRtLr+Tnm)V!Yh88nT1qRT(AK&lhzk%|r502W zDI26L4?9VZD-3Lz%VVu6N z2py9yZ!G+AB%Jhe1Sy4LHuU~F3jLsiQRd2rx=hQa2IzqML3rjeOxwO^)(sN%k61@w z5@xD6lRJM9SZQ+k3LDf|;#9Y?rO=_oPrz+R_9}Js4c?*DG{!75q&Q8yNo?a=yslj= zM|?>4vuH97V`<*gj6M5ghh%=|Dr|*S{?(?JGk2@l2O0E5MpaAb`ns9!i{p(XoZ~_W z;3##_EbsEUrB7ER_{P`p_eI8o%8L>2gFJ&#q!f~Q>*qFY;8rsbcEhy4vyJcU9u^UZ zW2}_3mg=}QUXFJFoiaNOIQS63ou{z1qz{qXhNO6x(q!yQ&$QjV;ot$x&W`aV9z(`8 zrf+aJ0ZuD$v0l2J6GC8IHsm1luD1J8F-Gm*qb#zsY7AZr3Nqp!wUxEmvPbUz2>A%p zYQCESX;bEsC}67t^Um}B2noCsq|B-KeleM0 zj}`TVxP|`{K@EOz(bunS`Fl1}}V$i zr$bJdRtF^v!qku%5UTy(vabG3_SSEQemTacgYJ8S~jl7zKBBmhC%mk7Rt* zL|$lZ^s1DDL#DrNjS^Ut*l6fQ4tK5ZAfk=s909&r2oUp9MSs#?uY#C0bM7%vi*$#% zAG7Xz_ei(ZUl{*jve=V}j90rpxtBPa9^-84oU563J|eDjlw1a^NQ2GN=^xi?a(mx0 z0K}Y)RX2)Me)BUsSR67vbwq|#wtoA&oJzq4h0MRSML|)xqs44`Pu*OGcoaRg7{||Q zeWbk_)*FTWiKW!$eQQ%~G(tf#-!_udG>7Xbav2)1RW=(yII@Yr=@u3DvY6O%Wh&1x zUQ$vr2@mQI39qdBek$$X0?Y?ziV%dz?k^YtjDe(^?%_B*dM^~ArIceY}%ByXU zoukH$Hj}>k=LYngeB@Xg`)AN9!F&Cvm~cRX{&%T?KsEBOFp8cTS+Dum=1HJRvSfw- zm3o2h1#^3*r37gG|A^O{au->2E7wBtM_)@Z_b~!hJ&aV!d}U02+mM`{il&dD7mKPb zB$Of6buE!mCLS316s2PYcc~mtz69RJW#_C`6n%vt|-oTzbwCFy@!Nq zfg%XH46u1EBb(i-zxS3ug{6dfX`-zHPwC#zyTstEH86L`{53Qdw4)eCU_h&TC*0eBC<$p|P>C$=Pyy3kL?WKK2DE zVr2PJ_|U~hEgvWuTSBAewEOX|a^1tgsRJ_~uW9lalP@iy+2n9sfIWZiTywW5!!lnF zt08xqD}kE87$xZfv?U(6B-K#D5E_-ejlY z-T>3xMkJW4^tQIaY><#>V-Q668q+di4=1m;_qU;Z`HkIWV)y)^V9$8irzY%>I_^M+ z;x=ID2j{JW%QLL^yelV(ixf^jIL9RqAd`#vzf#I1G3L!M`W{$N0WeFE%CK$8kWZfR{DGrc2x z&GI#*gc%&j?fN;F6gfw~zt}|Ykh@!tJc>n%*$uueBM@@`F*u8REyQW?IZPYTf{m9~ z!L%T3-O`oRCtO<|Q5iDQUHd@gh5n6;=DWH4LMT8Mf(y(`ghCgK(f+z<;M*0nl{szO zwylYc8diO~VE36MJU3wix!o060)kC6%QQ9^8W=sO+b?!2*@PD`#Aq61_g0T1H|wr} z=`J$jAh+y1@hf&zeHDMv2EK1RiU1OUMGO;a>a@Us8>cfy-1%#FFZ#G6{cm<56W56; zrh(IG3yA~JE5llxOWF}_t3u9_qtliO)N>hT!r8aeoOn-&Km-)wA4ZF+n~s#j&#k|{ z%kBog=g;dV^Dq&fa*hiO*^a;x5QbJUte9V{3B7N{Vg;+vwEeU@Arf*#i-w~L^I!bA ze`tWCpvw|FaYK#m?5EJ`->xNkv@Y=*-L|&6ny`ahj>sVPBobR!y6hPlf>v^)x!MDh zpQeOscekC624ayZCs+rLqll zC*BR+a=avG^GRP1ucv>0gf<3Z8j^!F8J9-th!`h9tZvX({p>NXTj^%=yv~i?RuT{r&m>k8|bWYvG^(~>E<1M(sw8J z2XD=5`Yy42|0Om5P14U~^9MGs-uxwEbCC9z7rm><(`Ng&|5%%8#b59ljv0_^FxB8h zoD5`omvJ(4GB8)KW|fIBz2$xhWTbcRe9Jl;*YT9|GjB*+X`K(-3XxNrT&nZA;Q^fEO@XHBxT0}uRt1Y&@)n* z@qA!?0nPUL-3huWWeRzbY^bwjKfgTX%i*?6@ktjvuQ3~9eM2VuiRL^a)^qr6oBL1n z3cpMYRIf$=Mnk7s7G8}_Nlv~+)0A3rIFehKHDM221(^ODs=r+uD``ERjBlIQ!Swh+2_3Vv@w zC`zb%a(?EFAlt9*F^aR6BB8_7PH}}oG|y>fvacoFsN@YZ6yXRcG0C3YM&=(yUc8v# zITo}1*y$QJX)~>}m$Zel(Z**2xt=-cZo!saSjca@b`nR;Slk{C6E)Jt$!Tqjl)Lsu zU`8~p{zef!5}&@~q{o#(=dTQI5b`TP6w)PWGem!~awCr_ynXE&zLf}nZbl^@JT%u8 zNla+#`Lz9BO@WYOD_$dU3x}*c9kc91Lt`*VW8%6T8eD|KJJzDcDYZqCbUB(6Uo2VdOXf)> zc89)1=D6FFO_Jf>%u5@)j{R)mhD=7Wa>8oOwbczrcMS39611@vr;1Y;>_GD$=1kyr z@MfmDwE+}#$sx|$e$aW_n$j}y`Oum-*!Z+mprRl7bj7q)2zmEwH@)KcGKi@$-xQOQ z@+b%ejh4MxvR_{z*Kkwpw~De0`6c`e&#A3`8Jv9ou^gCkS2S^D(t36%yKEPnT(fq` zhR-nB1bh&|{>q4giNb+&<3U&J=`uNL@Tjh91TVMcL zUQJDHTItKL7@*Cd(!;kDX~VrFg9h4DVF*9>X*v3Oz?fB(wN#Khay5A_*d}7z{N6Qg zq41ZT6{obO(|IEuwyvFnBJ|XP6TG+?<9%WguyOr^=gG{klb%bC|GvAsfYDOBvA8cp+x#!h_ zOGH7j`f;WSi}(nK{5Fd3> z>k`ZAU}i|2tdOWhpyFF~5@zBMsI?s=CwKH|LY$y(80NTJWm#XTtJu7`GvjNK+B{;n&odp0v-))v zf7-Pk_e8-IG>N#jW>_rn(}A1KDKav0PBTb+R8FU|Kx#oCRLrAV=y?GT%w{`kSi$Ck z1?#MhAg_~2?w<98zl$b?J1*N&Y$$^T?eX<({+3*0nf z%*QsUTZotN)D8-AHL6#OBe`pmjXVZopsLMKcJ1tQAnwr*H;0y(dY1`d#+J{tx4m~V zfZbD6I#HF*>D*H`{LKSloIGl6BWbuhHSK!1{QY$6xVzzj!i6w3eb1RHj0wfLGtbd1 z-FO0XYx!cYc~2?1y7yH5+B|8h6Z7rM2sr@kB|+zmgat9u(j*q3w@ zFv9toc)d6qIPlLO&Q?EZI#qeVuWgQ_x@8E@F~lBfOis3z8bVTBSVzrtd}%^-+l97J zE zv~KQ0@9QV#O`Ap+VShEnA|2w4p1K99vvBIlZnTz=CVB2R3YP5G!nGQ%cXImIgXh6U5y?{ni8=kwq`!a_7wC>*%o{W8$EXPqTW zFD%I`G?9YXF+l8&)8W4)&yUfy;v{j*b<;aXD5ia?Fl~1gZtobcKd+NDH|HY*O-~1K zrW3`q?EieO^6G+uy3&Sthu43D2jT2AJMQb%XpL+{BOhP~I-g#zC)6gP$Vx>eSswU0PO+LA0*P1yW#)^~PUX5gdNX-AKanjn>y-HyM9w!;-YF=?!o&1Qn zxT{YCB??PROD|ar1G7~Dz-R3C?4)VIx>buR@WDX;GM;IYn-xq^t)d?dVKVu5JVlys zlYdNmIOIS%$L)Tz)@~R{!Fjm0v4uFA^@#MC+~Jn`leu1zWATxZj=&9@lkePyolPHP z)f;Ne_C07V^`5e67U)WXgnZ)W{_2bF$@9$i9trV&8-W$B))xlvk09A+y*Pj*Bjz(U zmr$yHix%}xUgG=oWp(gK_M_*$$b8Pmv0($3m|Ciq_Y55d z+~66$sXYy>*7!b^Kw<8tTt#6u-6K~BJ)fBN%(e&uw?PF1_qzqqWU4{6DJ>yUij9EX;xA>?&| zVs(ke+8yIX{Jp{(Z*5%aibG51rfb*-T^NaNKij;zVF~Ms7q1;-AC^V6>iAOd+1r;Wf;Fnz@$akE%nz@~3IO$;^cR8>`#;XW|T-es4jB!!1*B zN(u@J(@J{D+%00G_lZbnkAr(k=y9iO@PJ(>)`JsQi<0x5Nr))4Mi2Lt6!J5zRV07d zLI3Y8y5*tL_0HTNn~l^lJ+_RY_>4Mx^<&4y4mN*74gc=3`o~?EGU_wVafMzv<J-#qIq}?ozADVG^ZNOc*?`5s8Qibir&u84~fMU4}ViZ zJu3w!;G_xyWw9^nPqH%_s5|#T1QCCal=rziF)?F4eE7A@G5fo_PW)c}&Qn6#0?O_* zsHvlxjbbg_wN82G$Uj)IoEfi?_C{cP9vn!A&@oyQkL{jLyJKujuF=kF5*zAIB0fj) zOcO9koUNp3u7wZeLO|I?R9B!X~qE*BRc7b7e2U%pEFWg`T^kv%-!6{jl z`Og1LNS*vOYK8NT08`#htJCVWBc2M}+7X6AOAC&L1vc@BJNpoeFY$xRjVh8Rz;!dC ziy?x9FWA6oJxDi2>vb(ZtKoZLVRqsn+xYaX?I%u5J0KM8hE{lYR~jDqxpw4K)|v(c z1hfv+zuquv6~4kA19vDnwL8S)`xhah4g-~*hYd8l(d8>DojH3p8%}$cnFd*m`4gco z7J0~uau*pT3S24&{y@~;NjD8upFHzKn3|H-`K-mirg{0p?A6?TI%N7-%l$q284!(a z;8?Y~BeyM;L&@m+ShcQuyHA&%1Clj|^z=%8?Vd!8cRf;P>1#Bw2KqD?XwXBay1BQ= zD7)-`ZN*sr)G9~LoT9oSpsmjV8j! zm#Xq}6``5r7y=AaIDm$giM_TOxFWcUXXIL1avi zQy7u~XlkiTQnBuT8Ts~|B?a7zvSnfCCaU(}SNu@bA8R+2o)cg9 zNU|!-ios;ymcO0fU%Y%d-EUeXPJHjvvR63Nr>_IPMUUf9g6xB5p|1U~6?&pja(g9zP-9(d z8qbqT=EV7gU8^E5o9y}H&)!X1>O1VNrTCXNTHkt++AFp1sNvbU>n|_0mp|MqyV9}u z2X)IEfB3B{*!%pL;nVHU)-#@_-QK=kf3iwEI$@n9V{n1@Ct8!^pX5K5W9O3iaQ}iP z$4tY6&u{ZGrg$U@?lJFSysC+}yoW;SurhXS{Vwu_Yvmg=Dud+;0XRAX{Oi5 z7@@j}X!;9V+>MnHazcWeQn}*EWbuNSKb}hnJsNq~k+se^Xr@-Yz?yAil!{yIw?#Hn z=BtRFs7AtCzcXRxp`qed)7d&&ic7U)qS2dzdvS z)agU%l;8lhkkQ-@ccfMGa@ER~-pn$Eu%*^e#bCd7Y^a>)ah^Z5E7>sYea;pg&r3Wj z6zW=`6NgD|$C3rSI~emEn;d6s{^k~2FSDh_6TxZJw6r}zv5Ncu_zebIb>zA=d_pgb zW~H!~qfm`qBMg=TrZRGi#xDYuCRYxbZ&oxsm=YO*k%n#gW)a!zDE%QbG=d=|H9qmm z`&CXj(s1Li0(}(fw=T3`Fr_CeXiBB9HS2uV8ujA+wxR9q?Y3c?Rg;%ycgySAjA5(W z6(2@spPTII(Jh{?(W@hZ)pDz`IQ%9In_-o;2WhQ(qyepSyS2@FSw*yr5RPCj1W96a3ka>-h3 zjWW51K26Mp@oiwN>3UQ3n>mW;0Pm%tSuJ*fsd&=+RZ7Pw>FtXn1o3JY1J~BqgIVCY z9qEQ)n+xFHCfh{s*QkesJ)GL!I26vx*k1Wvvgpz76i+h_r)pDcWwfT zvI1P>LKj?2PnPgsKdeb+pEV2Sr6|si??<5=x8GX3bv=f|u*^h|*#`qwjxewEyqD~` zEr_efIl)iKacbBD_ut#X5|J#YhZ@o)hWwmHWG4Yohw67Djq_ZJvtz|twLbxznY(EAt)l)*q+dwVUv!J8C?~QHrH}&er4s}kY;9ItzI~oJU9)u zYAb=;>d_3IS{nwCzrIdh_ql3d?;Ry0$_foxw!!Ix-mLj*kN4K%abMOF zdB~M11iH3k@kKuOFy=?&M)OWaXk7es3<2EUhzNPTfN|fg{S+6@bSJzt?}d`cNrR`14MqW0ce#rn6Q9k$<;6MhE)Ly)v+W ze`7G~;H7d**v6F1ol+q7LjYdO{L66i}|->?tpM3Lh%5i+?; zGpAsN*uqgD%{s2r3uO8SqeV+cvR$Fz_eVRntH?JJOb|1gbuz-nqeKhgir=p0xU{H^ zQJLfgBTD)XlUdxJ1(k<8k!1m$PvmqHvw$7k`Mk^m@snMD&!y`TZY z>py<~*5>)ju0&U|AtzhkE>e$I$ds2wCM+2xjDdsXEgeKwD3~$jzszy#&;|pTyn4}m-DmdZBSYi>J-*JFVQEb+3^H{Rp!P!nPb~f!4X1;H5y3vqa$jJ5VuXvqX z9$eXqP(W&3wo`+xnVH$#sKFm^uR))W6T$o<+p-Ax6!upqpU$gg*;Z`uT**zQP76jD zp={A1PLLPR3S$<`>CM0TC7C_t6h)4i-}zW?7Ksi+i(ex{)>4FuL6h$Wvl<^bm_A=@soUH7K)rbKh~u@dU&@Rr4qg-=2KDTO)y#O8USfu6oSGzFm`ng**GNrPX|j(| zb~DuYROOi@tXL#0wav-NDTr0Ikxwe?LWjT#+j0lZ^I)EUqJl1#uMJ(9??ZMEM? zW9I(I-ukASR-vddVU-v(RX!vquj_p~7`eeI|G)lRab!(Z5?ZffKI|$(Ipjkzku={Q z7rHeH#2W$FM4L~A-|Vww2Kh%%%Z%7zMYl=pVU}ow^?sh<-ybvBvJo7O(YJL? z`2&5gXQYv42efab0{U+Ax%r*`iW=iqX7LAqeG>91d}|%!S8!&#a?Qz&>|;w=WivV%mR8v1r27tDAkt zlS+OHj6I@UKr1AT#QHQnFjm+qLH%MBQFT|@mq-HzvZT4@@R#sx8gufd`Y|N->}B;? ztttNsdd7&7df#N6x{pzO;1yxY^`6l^S;M6s&yI%PQnSpwV92vt{j!g4l4S5mE@YvD zlgtLlf2fnliw-V^UobfBYPQ?A>7hAhYqOgFx}Z@+XC7wG<}g4+)c(H0kV15U9d1^$ z-O}vd_~MKNe!ZJ%Cj~@MBUK7-T%jL}COldUcKG5SeE*e?VAUQFVWGri!A|^V3cN@bVP|l>;1&-ysw#e)BG?l=) z;&tgdz2|Hx1M%WC+;)M<2z9fn^>cPA3-r6>vd%{!8rmX%C@mqG{RZhk#}}pXX9H$O zmjLYvc~r>CjQyYr2D4o0^@UW3;7&O5kSXD=ggtdWMJg&<_uQ1RyN#(FP|l#yi>E4H zpHd82yh;c4E}>85vim!Z9#IdP>j?#0*`|`3UYtpJud8aCzh83e4mu;Rvg(CyMWb&_ zdHz!{Nt!uDq1kb&uUrCJ<;oqQa#7#hEU6fF86ujd*xw6=-x4YLLPc*p|6)6KDHu#C zzof-$xx~_5zFg&UP!cI2dd6_Od^u9plV23YkmmTuG-4C=d{1>u&wYtpiUa~ky z-RILvr497QsBmj40{uI%#BS5r8#x8Q@!#6}6tJShkQP=3jJtOg_8Ubi2t7ay%ZzVu zo2L*0hEg38)#v@GeOzkPmlXzczw=x`K%S@by93p;OF=&qnx`!SaOD1dgcAwVA2yhW z2PXn)RLqQKv2XeK!TqGLqh3UlucapiIJaZv^?W2Af4bn)y=^k>JxjVb`D~$c?bF}w z@lgvzVCOrMgBQ>X2I6a_U0UeXTJD{P1^O}d*o$QmQX>aEx{D=>J|+Xve!+R5#v#3d zIe=yC&GwvnvPA;+HzbMR-*D>i4$0touK(g(nL&gkwQh^z-T~sn9Q?2eXZtfb$z+f! zo{JRUo?Qg3`!v`(+wqL!?V|BQ5GOIUSYvt8`F89I#h@!ZEfAf`93~o2%WDW|lDMf*77jS?p7Kwi5}AE@BaZeT${&t$2zdC@R9T$rxuZtte3-KOuY!{u}i2y$Tj zaH!`lRC>#Pbt(`rs0Q7@Tl99vqB-giIfaDAnu_?{BV2srk8xhU8?;_Dxi50TNbN zYRLRwOBF@?c^?EbBVGtvwPBG$5J#oDRgX251c;r6-YOmhi zShXRUumLghP-`Z57y^uJoeREA6*2otWs!{M+gLyd7l|A37XTY|1Gn3-u&2QGSkB_W zp%lpsqQ}66j&~8kn6TqAZf3Mi6B4i44t2o{xaTnC&IYAhX^*sAEV8#=@M&_0!*A{u z!>nGaHo4)!XvD}|AZ2O%*Y3axLu7`o;Dxasp%@(cb}&@Lt_g--W!0GQ-;sOP5N;nh zS|y=Nzln!R<`GNnF9DuTI3YJgM2tq(fRt=Q_rmR;cP0}cHarbBVM+rV7_4*CxboNA zy_z3}sd%5Z-EI{~+QEYS<~N~Mh-k5P^OsNe!aPNmc(@*Q_IKYyUeo*M3Wb$!8c=fB z%Z+Tp;%u)P`f(&#kVm(^fP|cnp(q?Qex@EZvGNpiUw$Xjjo;~I?#Bt4uOuWBAm}^| z*6WWxS1-H*u*0>n6=^ilBG(|4zgT-z+K}}lvVJbyN*aFVo<~s1C^xbWdrwxYBEvdI zxtKdbFH#eLUPcY)J=d_H+isP;I9U74!5}1@K8)O46jFK$mO{+rF+1A!Oana6a@MPC zkor7z%DCP#vqceVU}9htdD)9S?{7L7_=eL>W<|TphMQ=m!ot=O2>p#A9I=Rhl-StV z*oQb>GcvxaJqF-j);S5rxSIgw%#>4dfy0*L`V0;TcM&Aal6GhA@vkQb1+PC_1 z6QS(T!XQ|&@#A!a1l)lXdrJ0jq~rp}Kv&+nI6u|@Ov{})Kkz0guM?lc30_E*YNO#8 zgCpxusDpCiX#?>F>x&i9zdE2j3W}&693})L2nCVMaj;S8)eg73o6UYRO}NT{ZcpDP zxZn2+Cu_C^RwJ|b|7(rf%91lSHVH1E?AmH<#_93;{+@mmsOH^f4j>bFw%UiLE_{j5 zpZfeJ5q2mX7L-_FTzDR=nx7Do!?$t)9 z6q+2KH25quEyJ%$qwE-gfE;0=+9P;_>?J5$>^8vZ6b^&LUN@oSe=7(sIfbE)Od+L+ z(f9rgX!Zg@sWwzlQHNzM_N$jJSQYzS<>f%2q?Z1g{v>KVVWhLb>jWDcK@Skkb4vsL zk+{eJhB+u&CD3GbqqjIUE)Qgd5?GmmJ zfZvc{4mK5ZLJ)d(0`dpTH(t?iXmo(`elc94S9QXnNM;gp*a9d%nTS+M&iY_Qk8gn% z4`;^0=cM)!v9N*ct(53}_C(DYDr7PCkBWUfJAsr>s5l+D!tYcf5M?mVDxr@6O ziyO;gW1Kc51q{Dj>S1S&o;iPlrI>#npEJ*2Hu0uXt*+%~7-|RSSVNwwGgj=6N2--A z>R8-8c|Gka;Z&u%G2tj|y%0&?yUcwj->r}l&X_h~q1L@xGg8q2BalUoo&h1SAU;06 zb}wh4n}1g%NFAj5jJ5Y`yR~n;JkDW-@U(!{9|2AsqajCsG04E*rRyT(9O#Oa=$OGk zw7%W`M8{|xft(|0mesg$>=FOEG-f6HV0a1A0TFu>;-If#1eIZzxMW%qMD6_}h}dJu zgOQSen}EsW3^cr-Wye)Bq2B8@9KqS?IUlFJ%J&aJQQ?U`CG z%}A8^nOp+K$n^$aO6Om1&+{Nex2Rmk^|SJZhteq#ObckW$&v&%gabDAYlSsQQZh)( z)T(^Oa$1ZC;2GDB#Hv`WZ+CcqW0j$Q$puo=38lnnZNikiMP|z?xbyqKU$=Zt1iXN( z<1v9@i6?O?~ALOZC;6a~F7s0DKV!tgYAO3%A2M$%x6JMR93LoaImC4t4uoTo@FoY;z9{!qy{gbkbe7_EO1?ex6QZ}Dr{$l^k7Dos)&>N=&c7Ep&ZPPxBz8|F(Tn)5PjT;Qa^XyX2mvT`_cS)ekB8k$7E$1wl#;UAhJPh)P z31P23?Q7!`gDj8^q+EbhGFYWzsAuYU>P@)*j+LaV680v(I z@iubAF@{}<=RO=g9An%K&&-~2cpodC&U#{!|K)tv&w&xeAm1hmJfK!r$34!Q;27}X zeJ`fp775k@J|E`G6}YS>VWGTP&n4)?tE|Ig{xFSEgPyL^tYe(9gUbH+?VS;~VGC&q z?yK3C!qLXPZ~)giuR3_8hTTL>Y}{fH90aR^!x~#A;C;K`edG?5fwudC>NTY7y!v+8 ziW@mj-NpWJD0s`NmfEKM>N$5Vn_i&^`N+z^HM~t7rnpUMwABsRn?uz1)EwG+X*BP& zz?ToPLf|0|a>2(edR&;&Y%YJWINcYRS)oCrE1&%L5bRl8L5QJ6A$30<`$+P+MKwO> zON8El2p$}7h!vC)uLy?H#RlS_O1d*Vdb`6b>JaOwndnKJi^adk!17Ses>ivi|MQap zx(Sf*4nDk<-4LsJv}gZ%$g%dREu>qe1|7w;sEL;W@T%3o>Ud~XsgwTCO?l#m_T|R> z^OHc_?sfW;Z#&`TJV`_rLcLdO(f@>Kt+-Fgpd1OD2XUUe3~;26n{d%&qkrx~8lTE| zLF;2%ziHXU!D*o3ZK;PnM&@@x+2;cS%1(&5$?OM@4mzE+OlbA$L$qlDk}eD6?kG`$ z4lH`$M|Gy6D53L^nr;E$)UzOai2&HZHw3mYJG5uz?mX5c4nQ7TvX`5*-~Pz>SRP08 zfyFX_YGUU(bMz($rU4ZH3-Y=H_6f8qOm(M`r&G9gsA^ZMB2RB}cb?lv?VR_$mPtIZ zOC0f6e;ff8=!N3dS{LvR+fl3a<*ako$kUb1`bhMwrDa0kc!3gt1ztZ?`HR!+IG)@* zy6K~C5NrR$1Ja3D1%X?5Nj&H!bzJf9u#k7K4c> zypp&5f1?sUn0ZFyZ6y7-wU#i~uKVq_hJH0M{_m3@sLUaK!)E=t=!kzH0?vf&*Lei_ zjm$K6oO!(@H`l^^*>7lz6Zju$?+01q3JiWgNrlqC+k5W_J~bT@i#jYSHPZn%^ebdS z-kW}N>MN??&wuw@X*vyMvU5lo{R67$ciggQqdfO6-bU2swhOk|DSIcBHtTCzC#GL ix4(a`0iaO-*LMw1oBjYLN)&1t{DW^6pll`IH~cSz;=LCD literal 10390 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 diff --git a/tests/test_graphical_units/control_data/plot/plot_functions_use_vectorized[True].npz b/tests/test_graphical_units/control_data/plot/plot_functions_use_vectorized[True].npz index 1411fbf70d6f7bc8fe41e8b133f5ff1d8172691c..ed9a9e11f0faeff07586e1765b05bdd686beb56d 100644 GIT binary patch literal 10414 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 literal 10390 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 diff --git a/tests/test_graphical_units/control_data/plot/plot_line_graph.npz b/tests/test_graphical_units/control_data/plot/plot_line_graph.npz index a184d41bd123a5f38a1bcf6d61c1ccbc70b91ecb..347f0bea6b026a8376126cac95185e1ff5a9c892 100644 GIT binary patch literal 12768 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 literal 12889 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 JHovL#e*gF0%aFMfK~-%)gmBk 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 JHovL#e*gF0%aFMfK~-%)gmBk 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%0Ab$&hx+v)co=cx_e;LGl7M>;q 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 G>Hh%J<`@J3 diff --git a/tests/test_graphical_units/control_data/plot/t_label.npz b/tests/test_graphical_units/control_data/plot/t_label.npz index 4788950de5777502b9f941e9a9f5864de022f056..41b9a86973e171a8f95b2d15b2b1cb7a647447f0 100644 GIT binary patch literal 10347 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 XJ`_A^yzm?JtrYyH3;(X#j6VGj^{ZC9 literal 10115 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 Lg8%o)p;!M0HnsiQ diff --git a/tests/test_graphical_units/control_data/polyhedra/Dodecahedron.npz b/tests/test_graphical_units/control_data/polyhedra/Dodecahedron.npz index efcffa9be963a4959478271365711221888305f9..2fa5201715a6a9151da8a1202dc9f5b3a290e3bc 100644 GIT binary patch literal 8312 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 sZey|KyZv(i+Ybi*YlfbH6d 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 literal 7085 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 literal 3434 zcmeHKYgAI{8ve{myJ(GF%uCs2D#caV#dOka&SXtSIu;izG)gBmP>D=Yk?gEl)>2D5 zb3_eqO`0Ay5-Cb~DJ#c3V@ab8qL5OVN8=(XDk7n0vv+IFIzP_u`P1GD*gQPnyPx;r zeZP0@V65fb`*X%+|Q`$rfNK@(WA_ zW|sNT^u44xhgdwOM-2YzR{hCp>is-7E6fV+yLYbM|G-@Om;KzLV1K)L3y$Uj`!@nt zVj=Y_C>k@EzhMGc`Ag2vUzj0vE=~#SD&%kK?`spMMAht8B}si6wVLUjU7L576t}!m zZzMnT64F?DrXqRZDw$)Dyb!qO3tmr+PPBWi#55ZQ-PyuLY#!~@Z0iJepRu!0x{dss znA|k}$|>aJ5G}NET<6YjZXRpzO%EX(WxeUrM>7=FFfYpfQlrP4$-$d9Z=%V3dH>?T zU*LcTH!nZGMX97bVCv(%86%i_)8F53o0XN-*=7a6 zjT(c&aJy1Dk>b3=NL}XTe zy!2iTanXd>m++`gI$KxeE2EHg8vRTaAI|SWSRmUlLtb+=%WI!C19E!%LD(mfQ=Q&E zm8Zp|<&i7Rq{x)rk}tXO6TNuTMYfq8RAj+{6nDFb06fmvei~=fMUX87pdh6!8v0w~ zVG`^TPE`AYyMj;BeQ=kQ_V` zBVr(W0s=pad=cm=Mg{)+Kr}>0*#|cr!?g}0@p89@<668<5ml*edQZbe*%?lZwN9KI`|$6CouO(yZHB$?Hb`W-6h)1$~Xb7eO(0J!Dr}{gjwL+%cw=MIESgemxdHn`)QVuYB4;(ilaI*{3s1**Ts@qZwBC01%u#I5-%7 zT{hdntJTy!E><2iep6A9l7JV8Gxv&_DyL%OeJ_R7+ha+AU{UDFlbJInO8{C(VPSm= zoS~tv$#M^WOtG!R{-sT87d0D_z9y*Yex`S=sbu}$EhDi*rxcBhZPWTC04(07h4wxq zt(BMf$*=djU*(&ye4bz0rCU7Cwr3m{6$UP^HA62;758oLF>OxIqy|swV^zTFxYbno zajTw(^F2x{YiySSQ1Qd0ZTg63g288{W3hpU?>lQ5 z-AB$<@|*6%)m(v{6l;IdTF_SN2pu0A+dQ==w7AidiSJ44T$E4r(kLCFUuX-!tIbBf zOzlN&OlwJukKY;kNGE+){|jD*VdhUi(P*7Uhq$&gTR+xWE!oc}%Jrn@IWGHbqr^oS zGc4GZh+RHTr_%H-?_qwnn+q<{ndxg)s3d7kZZAsqte7>zoUR+ENq7DraNu4V#)ikT z4~LwC^FF>(_jF z&A(ja$UsAsudkJOHy*~pof)zHKO)Bv6s~&KLmWWa{@W`=jtL077TR7baYfkytLUWb z5N{W}1Kh~{N+fY@K!OA~9wo8+5T%D?)-veD-7Y-58Th-_^V?A&M{@1t(6!GnhReUA zK|~#?wUbc_P#C|eh7a!x=5z}%`)eh1G&b%-L9AyqDiB&-#-INISy^OlDIzqZHY_`P zS){B)RGnWx(M$Y30kI^g)=y^Mx?rb3WOfX%1r2yHIe;{Qs``C@j;J9?_tSZXDPZc8 zAuefJovcdQ5c(h)Yxc&ug2yMWiA_%tI&iia@>WL;5xXg7eQ%bY*c`_E=<(w>l4#Sb zXpOL@{e4@nLG5TZ`gaoie;1Z2cj1Niq{LoPeZ2##2$sNwq^j2G=BCQAXP9nF(cO%_ z$W$5B;gZP-DnENBLQ<9pD7ze6b%a120ba!75_y_LiWfmDB=qTsR4TO-ohbG7_2FWS ze2B#^eLmyIn!Y$rhpV7GhECreL!)Wo5tS{B?~ST9Pc#p=yu7@pCZk?nGte^tC-&v| w;=o_yz^Z4nAQ)>gXSwD7doub{*JY$q|Mxj57&{LheE?X%r!V}u%EtWdzhI2z^8f$< diff --git a/tests/test_graphical_units/control_data/polyhedra/Tetrahedron.npz b/tests/test_graphical_units/control_data/polyhedra/Tetrahedron.npz index ac08a2e95d4132a9b399528749360d334238b017..6c1353997183e2525c2018cb928a3face8f19637 100644 GIT binary patch literal 3101 zcmeH}i&Iir9LJBjuBBEsX(hGUV_I7_&GNNYXzgt7rsHE1WEF+fMOHwqL@a#Zu9Z_s zJ7&J{Rhk(fm=U;QNMoyJlB_8hD4J$d>X4Qp;Uo4+?9A@|2hDWu+ zy}ytE^Us_C0L!6!D=`0Qc-mlUtAHJdI~kpT$Nd~liFQdme%cJ!f-DOMXe0m^t&JVf zsAWVXdegnvl#Ll?D}JrJY!`{VWvhx>56de|gdJUO$0~I3cUDn*tuoBKwDx!0nRCmy z$ZPdm66-p7zXjc~wl9+oc9*=C4xT?>;_KzzI4HZW zI(_W-giE{cCR5@@)X%u7Nsi@B?rvkGlQA*d%s&|T^!!BNBPEcP?dk1Z;_TuQH#0NS zNl*q9?~%gdf)LQry!ZAkMcC9-;sImSDapcm3 z*$6;L;5AlE^%?Anewuh_k(`l%(C7BFxBI2>wsdbGteU!?dIYf@8it52hf|K&V)Z0) zaX~@BSn@fCm`RO0$yUKVDq8^nvTNjiPBY0z?GumVC*D8P-%F73&ju9b)8-Zq*Xyt; z$d-oDp@TAv832~!eXLNm2TL<~P)}77-TBWY?}Ok{+ZW^Ag&59-;q7Jkyt$TT0La&L z_g$31wX?li5xfOkc$G8Jbb79tJrkZjM5IzZ^%)ibuxqBs;xcS3Ua6*U#ydtf750f0 zHYX|;nDSXSo6zB40It$n!zc6^StoWMt5y!gHd1DS-tZ#kG*sLaKAhKpeIyZym z_1!tkWqZ$x=>a7AEaKUfDsD{Z;b_e+X;{*fh4i))x1^}3D1X=&fUKvBm6@+*1L{ec z!HTefQn-QMA#0Vgrl6%bcqbHHL*#gQ6!4&#JR~;q_PrFUI4p`i#6K))f}Ks|9Af&T zA%b`T8m&pitW+UIRsihe91;;FDq``C$0#UG_(~P(aHITIU=0TnybZg-xj^LnXbSWo zqZtEX)t)AeD?FHh+a3>(fXB@(TTBAuJMO)XHr)L_JlPvR?{~?i?7ssBCvsUV_oxUYLM$ zE}mUw%IEHnW;{k7zVpG|FHd-|T2_0)*G6|eu2HD(LK(ebMr758nxW}K=8bgyvMKUR zcll0JQWb|Y%V(YYC$LmBv4u%2HtA~=C`%Ioeo&I87kMuT; zU!qQXw-Xc5Twce5c+`}pM(`1dvOnZ7PwA$(;0y!AiipACWH5%`IxIJG99zou<#Bz3 z6v%;ri3vZhJmb+|Zn;BK&?FE89(b0P>cDtW0(3al)UN|RZ&te z;Z(UAw3Ge$A9lP@C=>C)G1VcSR>)7bgNqn_Zmm6xO9Xz0}c&M?k8Qz*+q*N-$bkGXkywuj#)*_}fL^9O~ zYPrIS5Ptm?+b@;NZZy=>6_@gzg1?m1Lz^&V(>}`0X8J3^i-MDyH)BdZdF1i)>lHp} zL*)&8+@48H{e^i4Cnu-;VKlU#B0Rmk=KJX<`=7XWb#-;VupzK=!bjbX?SB-(kzY1` zUu1oK$VSvCGdMl$t5efY54~}yKE64fEOw18^UkD>J;)n#TROk)2!t9t*;#45frd{> z@z9e8&hq;jE2B5W^&_EaIh-Nnw}!7X8%-b9f0~SC=P(X0X6O^=Kufz literal 3123 zcmeHJ3sVzU6u$UEsfw+DA_{dx+W{37gAX3*XssxsC@cZP!&D_a45&b2P=pq%Q$($% zh$0vjgR)6LjRquyC<=%gQlJSWF;V1Y!XrwWL_!{2LOPx4On-ng?#|wwoqO*6&iVFy z=bn(DiIW@v08^1?A*gR3^t=8A0NInB!A#%);tt~o`(yXv(s0X@50Y)bEXxdH3dXF) zu0h$3r1^ad9v#xecVhP7N+^{R+`bBYsL6|SY?7cC`OofUy>AKZ%E|Js^b&Zp z+{{|$Yr{}+>`NnINOeY+EH@dM4KAn8*qilNo!^lV3lP6Is#jGM_{uv25*K-Km4u z!s)0>%(Y1zS+kRq(*?m40R9Y(hdaK#j;Xubrs(eTS+j;BnCnj--nRlX3!mqG>h+Tc zH?MvPz-{WC?T*#%Q>kxP`n;4#b`P&>Z*NzNd=H4eW?*SoXCoE`EWDsMDS%9!el}9R zqLXEOyNNi`ym<>jH87x)$82_V@f@1*SB)b82MY`NakWd*4=%Xfv794|Ve2(KiktN-FHvALguiO^R{T$VbZJB7qOg~Mv%WG(2-cg&qyh)z+ zysdJ`lNvBj!99?|gge4rTwIz|-vAJ@1B=Dx_&8@a$`A5nGNyKqTa23GbpZvbW2yFW zRh8mqok!d+{@FOK2iM*eiTl=jSM}f=-yGe>6Zp$@a$dfuV3A-gEuP*Hwll(al#RyX zQ)C`5YpSaY4JI1^CZ(9VsAS#%iH~oRDEEXqnpH=Zzbw+%B6HuLN{3)}Mr5eM1AuGr zStZ<-Oz$e(ib3We&AsyVO!mB6WoZb9Ay8wwa7(4IDwsw`DmXmv7JWO+T$11sJsE&7 zVO2Cl#0E>ks_hUD;VsoLgI!o^T}UAc83Yu;iczY76Qqe3OIsm?aVS^{QP@I;b<;u` zy@5bqWyMD&VHUK9??>gAPXGXh^UBx5%;yKj0inp~^ayOe(Z9}ucw-eud7JG~VnysB zK^>#I;<0s!C9g8G@0Qj2o@ZMS9rJba+?LYB^FU-MLLH0ewo(Htg#yL zP25MD*Fa)|C0LI!zY^e8(s5o^6EMN8Vf!D9`xReUjzs!A-qS)v%gtz1P$*v#KJFGm zL|$njjcH+UQx_4s9E>7hEoA35C}2uFoFEzBG%X5Kye~BPpM?eK!i3dAcPsvSn7*A= z)toI7dJwr#o8A-J5qA**ja!8~;uG83g&&-;}I+YZd z={A<~i4S(?1WY5edae#4RnRvyGW?GH&M3Q4i9M(7?Vk~MIy#@)FUT^RjNQ61X;Nh} zSxwpSUb)wkW__=M)g7&=LT|i8>o_WV%P@)&jn`6?Beo~r}+Gz`Fwu2_Yb&>9T~WW zwW)rjp;r&Py^##lq?rsOk9Y6*z|Fpn@$vDwARvYuDbPPA%{?hbjVWhxr}(BPrrfYp zUN$E#Dki46xo92bnA4|v8hrNqGXvucC>7?AAe#ve6aTNp|Cgw2X diff --git a/tests/test_graphical_units/control_data/probability/advanced_customization.npz b/tests/test_graphical_units/control_data/probability/advanced_customization.npz index a099ebb5ce98e69626fe7b66e9b71aff0c5e49da..c86f02f3e512cdf65bbbc92bf7c31bcdb031db13 100644 GIT binary patch delta 43 scmewq{V7^1z?+#xmw|zS1BewF&L$mk{tpEkrMh&Pbs2OgFW2=30AL3ZYybcN delta 43 xcmewq{V7^1z?+#xgn@y91BewF&L$mkPS9mwXke9O*eKPd%PhhyGI_bKHvsIA3ReIC diff --git a/tests/test_graphical_units/control_data/probability/change_bar_values_negative.npz b/tests/test_graphical_units/control_data/probability/change_bar_values_negative.npz index 03945aae155b88521f03a04396f3f0a5eb9e1409..ac715e9dea9c66b356835da9363aad86f8ece958 100644 GIT binary patch delta 43 scmccXeb-wmz?+#xmw|zS1BewF6yBd(^&bj0N|mZI>oVw0o}}sx09afRIRF3v delta 43 xcmccXeb-wmz?+#xgn@y91BewF6yBd(<*mxV(7-Cmuu-a1m05&YWb!0cZvf({3I_lH diff --git a/tests/test_graphical_units/control_data/probability/change_bar_values_some_vals.npz b/tests/test_graphical_units/control_data/probability/change_bar_values_some_vals.npz index bbd5b03264326df847ab934f505917ed3bda5f0b..e7cfb056b542161176df014d9eb72227f4f83790 100644 GIT binary patch delta 43 scmez2@xwzZz?+#xmw|zS1BewFPR(`6`40sfr36%%bs2Og>#BGI08+LPEdT%j delta 26 fcmez2@xy~Pz?+#xWU{V`_(mB%6=o4;5ZfC7Ykvll diff --git a/tests/test_graphical_units/control_data/probability/default_chart.npz b/tests/test_graphical_units/control_data/probability/default_chart.npz index 69ae700c838a41e309b36aec86b44c5cd321655a..972d32c79ed5a25ff1c63f8eb753f1e1a957f2e0 100644 GIT binary patch delta 43 scmdlRw>M5Iz?+#xmw|zS1BewFT02*X|A&H&Qdjkubs2Ogf70^?07_gDIRF3v delta 43 xcmdlRw>M5Iz?+#xgn@y91BewFT02*XuhwH=Xke9O*eG>Xk6DCSWb!9HZvfoX3UB}b diff --git a/tests/test_graphical_units/control_data/probability/get_bar_labels.npz b/tests/test_graphical_units/control_data/probability/get_bar_labels.npz index 222c26f805286072b6b68a767decc71548b1b1d2..117c77ba5fd69ba5adf7b5210fa08d10f042f893 100644 GIT binary patch delta 43 scmbOiH!n^qz?+#xmw|zS1BewFO2kV-|3kq>scm}9x(vFLFY9>&05drdLI3~& delta 43 xcmbOiH!n^qz?+#xgn@y91BewFO2kV-d-NC>8dxP6HcD;NV-{f+nS5E#8vw&a30eRE diff --git a/tests/test_graphical_units/control_data/probability/label_constructor.npz b/tests/test_graphical_units/control_data/probability/label_constructor.npz index 103876029f94a48a7e8cbd2983cf0a0966866ffa..4dbbe48d0f7b254318f0a92e968ccf075e5fbf25 100644 GIT binary patch delta 43 scmaEv{W4oBz?+#xmw|zS1BewF(qc}s|A&H&QjMm}x(vFL=b3r~08?fV)Bpeg delta 26 fcmaEv{W6<1z?+#xWb!;y@r^R|rpzMDAhtIEeI^J& diff --git a/tests/test_graphical_units/control_data/probability/negative_values.npz b/tests/test_graphical_units/control_data/probability/negative_values.npz index f50b1dfcf7a8cb0b0c99a081ee041e124d7f7bdd..aeeb908a52b7b110a81396da3deadb039534a550 100644 GIT binary patch delta 43 rcmZopY)+I4@MdPwWnf_70AfXk^6M98{D*>#Qql&@x(vFLEeyN?LXQwb delta 43 xcmZopY)+I4@MdNaVPIh30AfXk^6M98eAH)PXke9O*eE4!z%0TnGTFkw8vxpp3BdpW diff --git a/tests/test_graphical_units/control_data/specialized/Broadcast.npz b/tests/test_graphical_units/control_data/specialized/Broadcast.npz index ae511cfcbe4b929dd2ff27de108e1240241006e6..9dfe118dfe1b4cf80a5f8b12aae5d3981f49525a 100644 GIT binary patch literal 28784 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 GJ^D|!)n!%y literal 28868 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 delta 43 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 E0~US=!vFvP literal 7067 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 delta 43 xcmaDH_&881z?+#xgn@y91BewFu4len6{x|$(7-Cmuu-a7gIR=GWbzCRZvgKd3Wfjx diff --git a/tests/test_graphical_units/control_data/tex_mobject/color_inheritance.npz b/tests/test_graphical_units/control_data/tex_mobject/color_inheritance.npz index 041b83077212ff2459a188c8b655329db780cda1..9c2a1f5b11562ec16eb903ebb67db75f3759e952 100644 GIT binary patch delta 43 rcmeAO>Ijkw@MdPwWnf_70AfW3C%4A1|4^_|YJmo`E`#pmy&B#CCxs8u delta 26 fcmeAO>Ih;D@MdNanY>p+e51@f4Q3H$5ZfC7XQKy$ diff --git a/tests/test_graphical_units/control_data/tex_mobject/set_opacity_by_tex.npz b/tests/test_graphical_units/control_data/tex_mobject/set_opacity_by_tex.npz index 0d1164611aca0ba4f22877db59dcbda5497ffbe4..4e3b5f3889125f73538bc8959fd458e2704acbed 100644 GIT binary patch delta 43 scmX>meN0*^z?+#xmw|zS1BewF7L@(}@gE8{O2zRq>oVw0uIBXy08080(*OVf delta 43 xcmX>meN0*^z?+#xgn@y91BewF7L@(}VZzJ6(7-Cmuu&?Gmsx~CWO6mHHvrM032y)Z diff --git a/tests/test_graphical_units/control_data/threed/AddFixedInFrameMobjects.npz b/tests/test_graphical_units/control_data/threed/AddFixedInFrameMobjects.npz index 54d0d67bb1206ae8f4ad7eff3076239da964762c..08ca1e595a4b01c339d0497fdd864197312ac373 100644 GIT binary patch delta 43 scmbQDHAPD*z?+#xmw|zS1BewFY*v-<|A&H&Qfow*bs2OgpA_*103YBFlK=n! delta 43 ucmbQDHAPD*z?+#xgn@y91BewFY*v-^~H2lrocL)@9J094zY%06{|#O#lD@ delta 43 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 IFLj;nU%;m)-T(jq diff --git a/tests/test_graphical_units/control_data/threed/CameraMove.npz b/tests/test_graphical_units/control_data/threed/CameraMove.npz index a884913567d4111d6214c99e50f4ea7568648b4c..23ccfb73b6be4a2b16dbdd1655fe36b91e412dd5 100644 GIT binary patch delta 43 rcmX@3eMVa%>rJ+46%JhW!Hn{f-^Y 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 X5<{I80=a4lwgdyOFm?~l!?6DY{i2LY literal 17623 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

      ybd|0Y5p}{~Z79SXu99^W%dpStNMwEGjA! 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 Ux4UG%XD{$^2fj;y`}XYlPp59T-v9sr literal 25859 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 E1-BllcK`qY diff --git a/tests/test_graphical_units/control_data/threed/Dot3D.npz b/tests/test_graphical_units/control_data/threed/Dot3D.npz index e946ae235b0fa3f422707dcd0c72f8a042e9137a..4593a97c0bc453528bc36f83b1ca22a667e06630 100644 GIT binary patch delta 463 zcmbOwFkL_@z?+#xmw|zS1BewFR`Shf{|^NdrR3^c*@419@b=FBF5y5C_6HlkYA%y* z713L>;Ri$6DKoJ!p*tO|J0`s_>kRd9%8J+PpP=;8>7RP?xdR8*%)NT%Q2B$$_wJZ1 z|69oS`T5`W^6m2TRrx*bcfbB(SH9Ui)9gp-)UB7^oUZ+zzWwjt%eCLv3BS+3eZOk% z>FW2{zulipefoVgRD18f%Bx=aaq;na`q3}nf3bgEIZ4HG^FbCC=7}HJ>!+wq_S|u-3h}~e-p73&}(=$Ww)-nOj4=v^2 zFemnJb^m*oYj@Qd7#xCok3V)VUbSgeWVVIOwR<3;$w$ktt-iTx*2+iwcl~B&V5s17 tTO7DiIO5&^qqg^6z2k;@l1;K9?I(ADHzSiS18Q8gPQJ@-&UO?WO90oD+cW?G delta 458 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 literal 7371 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 diff --git a/tests/test_graphical_units/control_data/threed/MovingVertices.npz b/tests/test_graphical_units/control_data/threed/MovingVertices.npz index 2da8e3a251fee7d2d29fa0a7f332d7f46ba994b8..04006a76ed944599612f9b7312bc06c6bec70193 100644 GIT binary patch delta 43 scmezC{MT73z?+#xmw|zS1BewF3ipdH{SO5jrKTz}>oVw0-lXUa093gV1ONa4 delta 43 xcmezC{MT73z?+#xgn@y91BewF3ipdH%~oV!Xke9O*eEqsky(U6Wb!6OZvf#a3F`m= diff --git a/tests/test_graphical_units/control_data/threed/Sphere.npz b/tests/test_graphical_units/control_data/threed/Sphere.npz index d45b68e896195931a29e089aaff4bee59762e22d..4909da623b66e19cb30816172447927d6bbd85d1 100644 GIT binary patch literal 24819 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Öot6{zno#Vqs++ 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 b)5HIBVZkL=4RuQYy7j>KB=9V_s($+~N_vJ9 literal 24809 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⩔Z9Mo^Wg2CJJ3)qFQJs7RV3Rq-HH%|Aro#v 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 Nz-bHah8+1r{{qm4d8hyY literal 122822 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 O06YKy0Ce900002#(D6(F diff --git a/tests/test_graphical_units/control_data/threed/Torus.npz b/tests/test_graphical_units/control_data/threed/Torus.npz index f2a8fcaef92e851777b6a789e859e33da69cd042..e50dd86de48592b95902c9255385eb6b3a125eb6 100644 GIT binary patch literal 117528 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

      2&G=Qr^?R5g=lc>B)k)xQs!UB86JSH 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 PpHG4BJ;2{xyY~M8)#C43 literal 117615 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

      q%GBIQ15HAJcM!k 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 diff --git a/tests/test_graphical_units/control_data/transform/AnimationBuilder.npz b/tests/test_graphical_units/control_data/transform/AnimationBuilder.npz index ac3eef3c15a7903fa3fa563f73a37c9c6770ddff..f0245be46636247b6277aed5042ffed68e8e18fb 100644 GIT binary patch literal 15014 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 literal 15077 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 delta 43 wcmeya^<7IUz?+#xgn@y91BewFM40NP>9G?5! z=Xvja-}jPHC;w(Z3?XC?{Ju`^U0w51|BKIHGK{RrS#DmPwQBjM)0U%an=V925|?znLo10!>!IUl#~+`V&E@BVJh zz53{XcMh1=G4a@~(GAx&r>AXcN$(!@w0_gK5nnZh6gc~`3jF?(tmnPw_LRT%Jh!`R zPkKRqZuhRMHJ#s;FO5C-rT@l|Nd?<`pFJw*{m1>fNlagPeE;*7J#|mA@}E45oOJuW zf~S9Px|$l__w>R2wdebP?5evHckWql&i%IUh7TY92SPmi@676LX((G;e&<8X@knb2JSu8RXClQl>WP2vI4br?o872N6;` zf4%bvFCoPApn_c^ND1-jQv)RTdwJ^uG5-3-fWWDPLunJk5n}Nsm;$k+5vK!rSEl9! zNc)mBw;I93ok@2rL&c0F%`q|Qve9{&QV`NQET#4+nhvI%-MFyHP1*gb~#L~`44D?j9el#=0)6Oge zcmS#q_#lCT4el}BcVQs!C+W*6+N-3%snGc8?#CT6cTY!65nLEF%JQ>Cm3O+Kn%4eP)ps)UiefzQ2+O&x}nzh6NU{41C*Ov#3kx+>zG$pvXk|UOOrOYD%lX;+73e2dHDZwt> znwoUuXaTDkP#00f zK`~?>9wu@R+e&(WAvmnDv*e`nTLNd2mqZ_-O+s328zIvxIm@7bGTtRY8M2~RB;wK1ElqJ zbMVI%EFr~BI`^vx%rXZbJq|!=qs~1A0K;f=@Xcxfyheq=0nf)qMR*xVjGwEoKMdNc zcLnJs4Dc14;bqLw3sOG=Ku-l{PelL*q8}L@9-Suyc3ORixB4)3luLG@5(0vQi~21D zJa3qT;hqu;PbrLOQaD>by9}8V1*w1%E4(_-KwyTI@z%2#h;+%Cu>ik=Gh~68JynqQ zhycSG^yvPwAmtIb5V zN;P+>3RY{6Fi#x=iz4@_nhhB674seCDA`5T>_97D3Eu%jj#z#I02wC|^%t>Fdz@Kz z2m_mqHCs{I1p(Yb`!c}^V+9UOH7B4+)L?UqX!3)xW;03@ChJ>JA}Y?DCTj06*8GHK z?IpYr0H~TS5h&+{Vl>%cta*$kMTz=@xa)?cf*jXLTxsH1y5?%hLr=KKr8u(O6NHWp z2y89lXJQXYGF7t$B@Hp=_Y)CdUAWcc@!p#{B#vKwfyW-IsNdC!0sieddNJWov2`NQ z<6Rj5{u~=%z*j8}7p2zU3#2Ndd6Aj<8Y>1o&Ov7EfaQ8^z@*S|F~C&D1SA}$fJE4` zhCpDFDX^@(&(?}&_VjHpfV$NI_hI?~kf8ZgG@0ytHDJS$=4PLmX*l;caW$l~;gLSK9J&*At6BFA zRPyWR*A9ps82{kBIyp!ZLt^01|GlW;D;U0x4gOi1EO4^O|Gl=UlY<8$8U#P^orF|F H9wGk)9eaOp literal 3575 zcmeHKdr(tn7XOH%?)6ceAzju7P-b*!B2~LM;8rE9N(BsJ69P+oM5^w+XsR$;sTI77 zQ;GPbxS-cZ!Xq~%c*oktTcyRtT_4nLmjpz!cU`5f)_{YpQliBL_M97Mc6O(K_Rof4 z?&SA7=l46``Ofzx$xI(HGMo@H2L4|mNl*2=*NrEH4gD3FK*GuT!Zqe~tJkjCvgWmS zHoq4_!ej+W5Q`R?J!={@6496jIkG-F%V*6b6m(_im;bYWY8VRVUWxZiPl_}P8yozI?i z-?e7nxlq)9vpRd{xzC$Q2EXX+__Fa&gWo;5THQ80R2{XdUys0}Y z6H_?XO7xT*P6>B!jO_L5A7dn4#+Rp~L@}q5CHiSs2@*al-y@q10)S?|lYEaA z-Fsrz3nm^giARYl zT2Y)pnHdRr0mj7&#vR?56KSJ}(@BI9ip05wWSd*|Nzm zxN3^-j}j1ZHwnj|Vi1J^IXQScyfe zOP&lX(JbXC3EP(E)qAFcS=cVVRD?QNkx^Na!Nd(FGf*Oqqw=sBW{*A$``M7LOO8T` zsT?(c5&^r@whYUO0)PiVv^!1X5SYwSS1{sQyM7j$WbWom&!EXXjyi%Xisz_v%fReZ zos)eVG+SQhs6?Ek;|?b~4S@oV%E2|yt9P>4;I1lOQ3$D~EgTh#b=I}(HK{;E?B^At zO(5)YT4hQHz<+{Q1Q1xos7zR&A0qOh8Jd~#%FIewNo|K-GZsw3{>UqGp-z^LS9)Tg z&P4@2{Y{RdTiuo44954mq(0b{!i>;Gn}=_?0y7AC%BZ40JTK(8!DROJMukVq9W$Vv9#q$$4TbWtPD@ck%V5b1lRV6CkqE&<~ zb1OgE4MbvwF(e&;=NNTP&T88D>W9KZZb=Sh|1#pcnv*Xjo`Wj)I-mz$Kf9`)>9a!YYBF_ll)CNE~x3 zFWH=M0rP^*3?|W|%%Ns9IYX;yl(3{4lP6>3Mv3Y{qS#}|ECa$162)k?fKmHo;Fwry zMqoCr_TdsEAmU?4Z8_pr9M82*3x-1CSt9 z9>eD27&+b?`VssG=!#j97K(Ii@7UfhV06|_1R zB`iyfUJ4`EO63v~^F4;^wLtjyh z)d+XJAngGH_mq8?X$+tzZ58unlSFsc`)G2hPLO2x*UVY6#4~r+e3Tfd5dzqMTauJ7 zn+@0nQ3iHO`EOvvl^Wq1);}xKoQ0Fm7BG!FknkAfYiU-8;URj$LC%%0EC=0qRR(5D zJ=jAs!!F#$1+iz{ol_C0Z#SSoYeJzB18s*V{sVhR?EA0FgzwrIvz#FG-wFch2ZKO! ze=q{RYKb`B8goT36~2whk+ilxNHoT{;Yx<-xEVBwE`K=~>2(JsEUpiNkz3{jiRK2c zEaCs^WYBC??+f6cRY73+#vl-({X$M{X-Es2q*Qmvsa=LNc|~m5jUbWuPHGV7``cN$ zoSgOfjR|d!q@Dq@QTxqz=d@3g_N$5X}>-hQga|f^k tw)$a3W_pMsd_*|B`>~&C|LqeCXNvsakG9P8&{2qnz~4N0+Q;L&{{WQcbg2LU diff --git a/tests/test_graphical_units/control_data/transform/ApplyMatrix.npz b/tests/test_graphical_units/control_data/transform/ApplyMatrix.npz index 1350affd30c917c6d57fd64736aa06a276a50a4d..5fdca272a81a8ade83fede3a6babab87176d2bd3 100644 GIT binary patch literal 19578 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 diff --git a/tests/test_graphical_units/control_data/transform/ApplyPointwiseFunction.npz b/tests/test_graphical_units/control_data/transform/ApplyPointwiseFunction.npz index 54192f9bd1a014c23bd2ecb0a6ce927673fe0dd8..d342842250af14ad173d67aba15a3b1ec5bb7fc8 100644 GIT binary patch delta 43 rcmewv^fO2*z?+#xmw|zS1BewF#D6y${)d8%Qi7Vyx(vFL^)$T!PLmJ( delta 26 fcmewv^fQPxz?+#xWU`*7_(mCiO=b~h5ZfC7ZYl=5 diff --git a/tests/test_graphical_units/control_data/transform/ClockwiseTransform.npz b/tests/test_graphical_units/control_data/transform/ClockwiseTransform.npz index 61485d691c84569fe754781c7557d10038891961..825ac14684c38a2614786c4dc08927e4d7aa46dc 100644 GIT binary patch literal 16701 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 h{^wP0Z-l7-`@;Y?P9-Wfox;nQU$A4FJ?{39A4A diff --git a/tests/test_graphical_units/control_data/transform/FadeToColort.npz b/tests/test_graphical_units/control_data/transform/FadeToColort.npz index 2c595b651c553b481dfcf1c589714fabd5e4d6fe..a210f99e895ceb1d8e50dd26500fc9913a1d0c6f 100644 GIT binary patch delta 43 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ûWfG28C)yxQmr&`b2 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 Y=j$bxY`1(PYa$PR%)xKRjaN+m3(?60_y7O^ literal 12969 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 literal 26755 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 delta 26 fcmeBF>{Mh8@MdNanQSK@zEMVAfLVkA#P$XNPFDq6 diff --git a/tests/test_graphical_units/control_data/transform/FullRotation.npz b/tests/test_graphical_units/control_data/transform/FullRotation.npz index f273625af4f2b38e9e12edbf018bbcf41d2325ec..97189784986d31e91ecf2011e7136b31a4f8ac1b 100644 GIT binary patch literal 30960 zcmeFZiC2^7+VVM?v7$gChUgd$=@CLu%!fzZ|}4>HLZ z!;okZC^AGQk&uM8%mfkvNn}igK!gA>2}wvo$a}^8yz5)vf3V-R9@i4r61Z~@*L4oZ z@jLG;ZoB?&{>dkwdD{`qNMT`N=m! zrr;+(`2?Qw@t;rD=01Pb?xTY3#83F|vU+gH>ZDKMS2vn&eLeKghi^KpY6idXKK<=@ z%w?@(_lGM8&u+NtcrWAk)jhh2QfCO1J(3@WFY-4YFHUb~=dXjyycW~OX%l%=ZS_Ef}xqfF7A zyu5f^(59RhY-bp7FuclnB||M!Yg1$T4B_NyH@}eU?YN!pjK-I<58ZSryzuZrLObJwohX(&OCOV`4R3GT=8C^d#<%U-iiH;kNj0} z`}p*wqE)wy34`|NX~_z_I`%iny>Bw!G)1v%F(ogb()RsLb+xM|l(^wL{Xk*$*{1V) z+1+%qf7J0+`j@Z&_m}?nM*Kg!BEF0jzRNUd%7g7}U3zR2&5BW0{of6frCIGSuafhB z4v5ILc^IZez5D)YW}Y&Yi>#)zqoa0#?^>3;{PaI6QvBzf%r^q__BY;r^iSM#`K3mI zSou=@w!9C5y}I5!pg;Myy=GS^?!UiHOkcJem6X9cv2M7}Q{OEbs8diwhPZ2c^izI7 z_3XF3rrzek>ILZn%;b^an5!y*dM92ex-hY1HzIk=w_+ojCPGM^aY$9Eg+bCx5pkQl z+SIl2d|vvpLnVu-ZzA88taxRRQ$PH%ryizS@tPD47=$&pGVCUc2%FCqmhKw`hTlKD zin+=Ua#(p*^xU5&Dp6C9Bu_`xt`aaCbp%my?H3T!q=|aCujde=F{8Y^v&QK_|)kMg5P=z-C~l=Zwhu)PBAUu`ZW+i z*!%#6hz@hZA!-OR3eOj_(TPAwCjI^MVLK_PKmMV8&3^60Mac-lN&I=3J+A`km$4%z z@|FH8i5G1v(?mnL{w$M>)nf89;-Kn0|8MeSr&8up z^n-AB=x3ssVl*!YVzs9dQI(?>^OC!jp^mIU2UP!Yd@Dou_r{L-pxBPNyM1)0KzxRm zo=>;4L3&%0|7zRt>3a7SUJOOpKN*qlc|2HMN2 z=`yhrmhT|Ci~@&YMLeJ|@Vv59mn1pXjNcBxwm&SO$|@sqp)ax0&h?iwcA^GbR+;s_ zA_Mi-fL_=E!DwP8}Q86Uj9PJ;D^S zZZ#F|KZs0MOmAL9n~(3QH82TfV=YfKEJ)LST4AmT8I7qE;+5Y&vPJjLZX zvAUB-=sE#|$>f2pHxHAHlcpE4A#f%V6@kqd`(C?I;A1!^zlL67`E7k)+{NNh}-;;v~BaKVU zH1VkaCMv2A5Bu=@uF0N*u8Y2_?842m*r@3?-crcm~&-MhCD`Hc}ZuDBCcOoEe;rrf9>uxot$TU;L6 z^ZdJCR(rL)%;2)2_czT3&h%%ct+<6f7p%-FJOQ)H)<^SuOP}sfv$Vl)}PuB zal3Aw7VbajxOqj=Z%b=V3B2TL@H!}y0Wauv;_9<PoV`C8rp3UHWru+t{T({#4XZ!XwNC9JB75zGNC!2f`{@A)ynuE7iP3 zc^WOw3i_|z9`kHUcjeJtdF%t$Y(Fw#aj5kc;o|&ejqPE`-jUve*bnzskwj&PFwvbQ zCaSj;Xz6l!{KlX-X5qdV@piHQ#9~#$o||c9-FwiKvw`R^F@l`%?!@AVR&Bx2Eeh5R zLQN8qJy<-LTE42}sIkJt-;*49P-b1kX%eH z9Nd!ihDFX9MgLc;a{l50=rcRnEHaz@)SsrD6R<4vYYC~h!SROCyh{J{5BCfz*4dHW z{>z(KIX#TE$ndL>pW)Jn36Czoi>jv*J@oJV{%Ie5%%w_M?zgQ>QF$mfPUJhZq;z5o zWy?7ijVF>1W>@9e-JZpW0}_^t(iu7@4Yq#YvnpvHU;43bSl3x0YETzjxY_dGKFlzP z*EdF9k5A_ZXXD!at+Y#J>Ecma2)qv=--qY#mG}kKr3C(P+NyMG zEFXJ~qDy@=3nPJD%ZL8SZT58HbL%_~5H@G-J=#O_0WrSaj`d{*&ccmE;Tl5fI6Q6Y z`|l-6Co3X)y6?-%P;0Hu`SP=wzyIYHno7N5?Jo^eH%U`Q5oF`c1SW#j5_g>)PKSygF$$IKx?S?hO2 z12*EHJl-lDOGi{j%$tdKiY@lKbM*u%138R3gQURv%kBZ!KP|#6x0BLig;o+*eohW$ zcQxZ1lO+@h6Y8kOWgtjb6Ztp`pU)e`>zo~Fhc*Np;n!@7=T6e*{KF7ulc|V8s!`Uv zQDS)BltCj(`UB%Lx3up&n5ApR+2$_;LS@`Sru?2xSgD1NNv7W2012pao~1y4aA-uX zYIOyZ%?!Def;TV~D;h2?TlLCNOnkFEf^RB7kd5QhMMuC#Lku}73lEQkCXHPZ*bG~{ zHr>NQJG3sjHT_(Xah0rFt((yMFZG;H>DE$>W3Ybe`=^tEh)Q3za;=rwBs*3D4iM=X zPE429sU4$P4XMPG6|0g&`4Y~5k3rfUup6DLEqSq9twtRS>n}s&PU1<+M74ULLc6TP$pC}0?yHkr*zW!n9D3yQ(ugbNZ zf0fed`Z%5@U$sWDK-gM{{HdT&V1^EI!&McpnGDSrZrdY5muQt+OXEwcC7sJ<^?9|I z^Ln>4K*DNJ6CL+e(^;m`jqQFa8gKiLZCFHuk0-Pm92C0VHt~Eh&%P-I`oysFnU?d5 zshj18A#R^HIz~29z76#8f>rKxB~7IoGMVVSxJnniZi+lZAsCP3m*muG`8-l4?GV#^ zJm#Y}AJ|f!rf$8-jon(v77`d z*yrmJ_=C~Y4!4#at=0I94(Ty)I-Y%W-){-Q`e`5jxXo|uuz(-=@7^>+;+2)e;=+_} zKlckKcletVUJy9AaUmC?540H~fAGkLxHz~hxCW`2-9_Eck~&@Gnktj?_R1*}-Wy|F z3WIMFT6(B|+UG6<%6r3GDX|EKs5Wb1jq~aqSx35=a3*WfBJ?HPwE|0+3sT3g+oXO> z{4s{yn8%w3!9KbpY4 zuX)Sh*Rcj(w5K)8c-I4qtbw~A&S;i3G_Hzm^%QqVP%O{o7Hcl#kn&ur*VOLgF|S`y z8llQ_=+ps42#Zz3Zcoy|RF`xot0Zi-U?2#STlR$()SD1kh+G8?N&>hBcTi#`p?2gv zZOsO?2iI`|R=Pc1#ru0^XrjcZ_H_V}4%LA|s=$#`xhzzT8kq*C zLXVU!1#=XBs_g&}0V>eTc*%T0fdPGIu>*&q=-^6 zs+vA+3e~dj{Axn~64n7T3NpOG7mzTMupJSOZ<(@^_*!>Jr)cY^0{(zUp<`r(gsI8l zdb?Q9wyE_EEw0o!0<5i3la7?HEGPF2WY6>-A5>h`Q?1+sYI^ZSD>AQkK19hO^^0 zYRz=$qkn6CGM=HAJS+T#*IzRTFVMtLudOXjH%Q!dm7GQ`w!U(x12)FyHaza2NgDg; z({3Pj2%g*0gt=Z@Dbiz+c`uUWu9ru!iNbDirN9h+r0gB2l$)57rlEP>E&eAlmo8;E zbe?87%4Wf3SA(4VT){}DS-)dfq^{OY7C7q%QW~g9^Jt!Lrf%Y(mJWT!e@@p zLUVRPHX=a0YSSd=4h|L*f%F_p2Z08zH()KGh>w8aH+9@ zaC7Q-p`+$H)jI<9^Jo(FWeV6AlMgK{oigOj z-;5tjA$rCA&b@3F%78~zrdv+gWHzAAtv3``+!tvA#Vj*pv&tZLwsYu&At!>6qE*B&oZv?fq6?uxL!pJ;c#>TtSGm2D1@!)@-MB^>H3uIA-P9H zI&B4$8zk?%L>&8kqMhlaJZs@Ey*#zo>gv7=3%ig`mw^uKExOME)vJ$!P_a(1o_E7h zaaK)br{*D+#t};$w;qCirY2Rb)ltIMBi{Fbv<`b%K(aoEJ`yuppP)sDJ%--d%T1zjM; zZZXIDAvk*Cfx#hTqQeF+m^V{fSz-|ldB(Y{F2J5txlCVG;Ed+$R|pLrCkIj!**6J} z89X&|)W%=ff^w7ocmp!{U04x1r)DY7b6@cFi?t%hnb?j{6j;|9{hiiOmeESx`Rhkp>W}KcC*<=ZnKtIKgzLsuYA6Vu@(obyS-@E%2BM9_PARdP=7%x_XkZnjt==<7uGh5l^w1ji()AA6JVvm9!e3^cLVCH<+A|HXudvcV$9f_u^6_&`N+WbJ zS_2k*HG)BEoIPSc&SK_P)_S>XM#b#k>w^0WJF%e7l0R}V<#Fnet7W7iwAa1V*xFh2 z{M(ep+**mMJf_7(rMefS9<1;uv`c4^Ohu&R-QUi02Od;WBU%23?s{Qsra517Sli;La+=Fl_W28QnV9|+?Nv(BI`rJ zcuG?>-)cNyabebW+za6qFkb}E$z}qDXZ3wmzJ=&mPR`0`;G?K)d>3)9%>3-=V6-7} z8!uqC7ovWImpn!J{c%m!d3Qm!Oe;oAZDy?;pK!hj^JamI(a2k6J1uX->wBC&{Iu!} zQ;g+c`x^pVSH)JY#W2KpO>X2q;>(ietI{B@SEAjrTAt!WB=IGL+TOiV#abm-%d^}K zqlGx&Q>6M;$Nxs0g9_EJuajx^>aU+eRa70@%?X`5LtaiLG#jMtoS7Hn62ZOV_wQN` zKAAx*92ll%w9Ov3?tZ(TfS8^PV6(Ty%&={nA1{=&9v-iqO`7nKz{fZ3=N@J-t(UTl z2>}#FtIz4u6ENjEXd-j4ml!C)jrpCpKD**VaZ$HwJwADx_i|xm0-h)h5OH~^z|@uM zY_`sWQJ@^;m<9<2m0MGIgW=Rb#y`wLnJY(4k9;Y1seJg4%esh-`}K`4r*nooL6l*` zjA8LLlH;2JCCv?B73w*1XonF5wrd4+ll6W}rYUhG=fCEC?I}YT5x-rqf3SXxanvk* z;zk6tCGI?n8C98UJ0Tw%K`!y!i!-BJnh)rN)sFOR5~?lgB9>7I5rL=LnIvI-^E-kQ zmWSlm$k^A{G%C*@)>#?MKsyg;Sd<+fYQOO+LL;&#ab?Ct7X<^Gj{-UCUiF5LoFH5n z(T1nITabJ@-M(yph|YePK^#eQUS6B<>i%#aVg}DFYqSVY7T?dK~ZCOpnEnDEsce4%#o z4a(S=<;|aK1|22>gq?fMUVNjHdo~>WrZyK2s|>Z@{lHoD4KEPImD^3>riWgczW=3d zppD+fY@67&Uq83*?}WVdz@gsgoFk^ripj}UnVs>8!bK6IYNJR!UkE;P_qa|!v=~g* zJrgt?>2uxSe~q3`KKXGYRa8U_i3Q0-qiofAt@@I6KN*?T2+t~z8Ja}A*mz8^P?YrT zY5}ayf7PGt@QFLe(|-M$rr4SU>UE$Vki|68ZixBIx7YjVHd??KC{R3u*M+SHl0$y~ z5C{s!=RohSO@Tg`L=wams~W`}v=`miG+v41nXzNt&Xz`@(DbHyZ#!Fy?IY^MOqjYG zH65O*_grHS*a73@InPPf*+)O$kVsu7n};5FU%hE6M`}zZ*qSq}5eh*N8_tpd5mhh#b?qqcRhS#!(0%j%VZT%G<+_xyZ1^>m zgakl^`Bc6ojF{jz?bBcQ(RPwAmy=TPd#+B8g1UHEVFSD}b)ZVx(cL&Rap`#MH5HId zn+U){(}tYb{PV&dy=$rk?e1I30L5rNu&gB3;&j=Zf4X9V*aY8R(AI|VpIqi7vO|-7 z*>Fs(q!35B@iI)E8=qFCSb}6g&oKYtmA>jzPlt3<6bg2?(+nw8DnA9H6^J(5HOdR6Fih7ko2>0hsowlTE}dnTf3&5l*=^3 zM*`I0TG}~Lg9Gr_4nr`o)P8HiRnDRsm^5!P)WG)>Jfp=E(93m#ScC1q_GGietqwrB zk5)mpuiOkUk-g0Mhlu=)na*k@_)-q2POT#v_^}jrG`O0^I6z1I6e{>-XxQP~<%H$R zNd(B`N)cAXL%QbHKjA6qdo&Zv%0^CMDfIoWg%{Ji$;SD{5S%FG$u&LH+hqf`H%DaLWnf%w?8ko%Nu~G~Bs$<}Zj;ZJM zP5lp^ZnHkie|_wEC7GT;4|ejc1YyKcnI6#>!PS5H`rEySGt7-nEN$<|y2F?p?$j&o zZfne}m93whphwdss#Jmu!PE{p=ldNH;rzg*!l_==O$jIGvNrz837ZJJ772NT%#_T$D7RW?zgh@{JMF|I=AR?R>;LbQ_qH*E9~8NUqKTT z)gB!SmZ0f^z2P5LeUV>qeyD)IV<-(?PKGCqeLpFq$*5nGE-2nLd{y$_=v#dx2kF}g z6m*%Gv9l2Sbqk^Nd=^OmRf`FStjAJ!k2=;T1wPSIBs4wYELgTcWE)+ACK;`mVcyOy zbYn#uQ1!zolE(N(fmU^dUMVnp?c%;%>|z7m{`=wA@#{zjDq$uwPUjb!w|)+n2*DH1 z9fV*^Gi#otyw=+N1cwNXtUMKcNp)z?+;n^;sx=3NLFFHH+z@UHWr!Z=4eJ_(Mt)%a_u#avsK(%K(56$=sr6WL0y{?2=6*s8+O9tLAB!?xcY zR9YN?M9lU=ZiM|{EJNp>weq~qO}!0S1kVL?^-vESUv&hFtluUEC*ftYy)qgC)nrv-rvK4Zzrn- z9$lAWG#=|C<7WxoW|K*YCs8w>8&_Om$JRg$OfhvLcRbZsqx*=GfCr>#z~;u5=W+RrR`I`_buFuiNN#~MD`La5 z!etVYm=`WhKsc_>39!jRQSq72Fec&8m}$$_k_rG;YzDDVE&Uapje}*OD^{p!I#4rH z*Is~3pe^6QmSW;rF$-^eyc&_mfeAy3^n$aNT!BSvjMgqpmUzUc`T$pOTw_nofuugU zgbRZUqDS#Zs_Adco%K*}+WNn5ObG1vt>(Wr*XX46fIq2MfEXF1k##3;mdE;0fSW;~ z;}5Q9&JxcQ#J-%Wi5I<*ek&C&L#-n2uW65lTv-^m#-0j&8He9U^{HibDFPW*jK_BC zUs|4%Ctv?AGm3`%x-sn~eh(z{$m2mdj~JE?N;NZh9(-_0@DT)18#zG@+#CX~pMK!D zlkhwttupV#8e#}90VPZAPIBUwvC$bs#sU6L?pR^1o%}ht&HWQW!RD35l$lG*mycB< zjiGbWxn#~l*CP6M_?c&)#(C<@Z^TM6?nh;9)0k)!mlGIhO4>|zUNTaV2O zil*aHjeRMoDtpMSe6`j>zgeFAYcLw3@J-aqw|Sr&t?SfKNU}rMgAcqEy;P^iN||Hn z{7b75ri)o??qi%Xt1e**z7Ink{cna0ivv`C?k;@y=V@tg7v1{{6H+$5p8@2|tFR()%o3?DnKJiC zp2;Nvo$uC=^|k(MJ+Hd0#|2!6PK~9xi2YcZ>F|(8Z&WcQ>ypktRi~7LH%H5CHhAI~ zTsspB-AkTmA(#@)RVNWbL+$A^Fc_qJTO>i@sCiW|oWp7sCJ4Yd4{@!}xGU)zEd`mQ zpT0S^+8Cc6Ewm~r?xeP5H>~9Dge-s7dJxiVS52QX2P>cpHVc~fY`IL2-CVzIP$jRo) zFEoDm5y+k!5MSxF{XTgt;mMj6Ac?vJ!z%JMHQ}VDAE2bEzLc%!7>bftS~l->fbLo{ z-%^0E!pgchje_tZXl=sl$hh;Wi_$!t#okfr6chWBk>N+yr54I*Bk}967V{+PFmW0C zjpdBT&{OMz!+rrz3C50VFM3wxjo}bb;Rlp>UyliVP)J65=x1o7CNwo z5TRtlz;c=$pmj-wxS6N|)oscEVmQ-~_j|-RG{|T3Yiszy{St+;2#=habGC zq7P58$bzAH_MAY?mUUoFbv-e^;wsHJXX3SfS;uX8Ta;t)(S2MpS^v;;kR-!uYz2uL z^dpSa_>}&DYPw&L=qTbKI+0`?wtQyb%UrO!&!HRLaQAO203H;e2c8vhw!amfinQSU zv`7C|2*)}oagX7_9#B=jl?u7K%mGl;&MicmnKyqi#U6Vjb}nMt$yUafo}dr8js4=# zt~GT2YYep26NuT>Cm|O_!}+q2LZ{P89V^D^P?k4*^H=Rj*%|;k>Qe$;hitwknj4;s zPg?%n6*#3D(wOE|nb5C;a*xvz`+k==ADW?(pz`W~Ya@RLa4`0y2FF;4H2+FDSj3cT zV!gnBC_aSjUVV~yO%#l?*fUxHB{`Vd#^$Cx)A*(|FGF=W0ayOm#}4}CgnF6gIL4-K zRzn)u(TA)9$s^QKnjF;ejerfI*^v@N$AM{WlI2p!EQNy#9B$KwzHMApQhRs8!&W8W zkF_C|S&peK%psl34h8Vl1SP(Hfz|8!m6U$1rB=PWSzRtpGY*Tus~`OU!Upos*_0lO z&U+xY(_W&x9Uwf1x5DK=A9y4ddPZ)v+GyVeINKLM18!S(awhC8WPd5+bDkwktR!j?u9f&v^itVFiyxkxYokgn$W<)U~7;06dt|TRtbPL za*7_g@vx6oYJLi%!IiK$zGP}BZ=ASWc9vF?Q}O-THE==W!#?HM0JlT zKS_bQ%HIw+`3Y8Z1!8m@Lm_;z95PH!No-o4IxmJ6g|?2cm-ymz`A&Ff7*k1*!PbAE zkX#6h`Pj{>K6;R=C?pIB&?- zB~^TA;FebGFK4fVibhYNTccyUvuxXqKSR7C(&d2smpd40UwU5~{%XVd5XPHqwy&0% zzJdJM`crhPpLux_rl-~cn|DV~>X4On_$>&Is{tL0`7j#1^|)N#i@%Xpz~l+S9erLH zCOjSLY!?lidTpUJ*Prt)-X*VvOVxNJUIeY8WNZE^C;(g;iCdtrJzqx}b%;uQvR_Pg zca!=@!tSsvi~OS~`TJY{aU|eL-hNHCHI_(pl8prkD~Y&5-m5j`E!SByYAXQvSe=5h zGGaLJd`U!nkuuIIj41yz+k*VtJS2p?Mm>|buf&?xe>{4BJ@;xiD2k07Nw~BDbZ+9t z^_3RfBTMwg`cMXlp!;wdFV1fDx2lI=H&Lb2_2hRCj@Nvlex<3TkqhbX802CO_6 zN^cTFmxE%5@uE3Oc3PVAz9OiTZ zJLrw_z8m{#@tX2-cOim29vOZj0je@!|z=ZNDKB~1>HeBfG zCYY+$bGCM+C!0@YX}Qnn^sBx@!HY#}*m{DA%1m4VhJxWl~DgWghZJN4Qj;gWJzs&eRvA`?KM`STTbdiKifxP3-EH7#5ao2FklAs&c^KOce z<4q#Fb0)-CMgHcA6)(-FxxjqLA^S3Y{X^TaJM_R;8fsEcT#|MXP)xBp_9x*c32xS^ zK#fMrSGC^Lb?XF3B@0@pA#uswgkjmu(KuE^pd{eNqeYMLBUZ^M(2*u{5r)Lr1#4G! z{fw2Ap@`h@$f_HizM0r$yE28FcY&)N+-ga~V!yH4Q@?myLV8QQ={F-~`iQrCwB4+%$7dFXgYFBs;mD>y>W$++I1Z$=~*dI$3&| zM`e`7UpJV*?iQva?f|AFQL=TKzl!$r3_ItJ_Blj63nxskOao7YFWCgNZ)1we$dreS zG^-34)CNwcUbMY`NW%AyH!D}RZ$k_Zz?8qjWn?yL4RIjCX(n87{HS}6VyzeyfWDPG zoyHY+{)|EPOYX(-F5h0dHJo-u(K5BvblM!@y@Z|14ft>FMNc?)995B3GunCP?Sn{9 zJIv38@hE@+t!*(qEiysu@3dR^?-LK%NQbNmCT+gLU~1j+hyL50duD+@o1Shlt#RUU z&BvjeMF-JW#8c-`=H>4!TlUv-ypHP^rw~Vk?nYkgNfLgbf0l9(i_6K!;7^!DjI`x% z&uh3S$I45Q3Ie zL!%A?w^ffTIG~F>~2iS zS>u>E$|_MiaH+ONZJ`RDvt=urj)6t?fcmQc{z%}n6#JuYjFG{#7}4=fJLd@p@rcjB zf9WQ@zTl{=M0=7q$oz-Y`Gu1|NUgL>kaE}lh#T|qWc2M?)8-jm=-ohP(UKlB z+5>y+o%d|Ku*w8_7-+QHw*i{GJ|x%%9qpvp;RIeyKW~xnn5w9Z=ySQjsM?%0-S>0z zg5`J^N~ycq>%)c8*pk>K9A7$xMDI5MaGF9=;lh|aWF@6f@t_gaGqSf_x!X>^2F2z{ zMy%aB#8b;o#huw>35Npf%~ei4Pmby27i`yd=5;0Hg_*{^dNVzyk6E)^q|7Z2rLi=U z9J6}#q_cNa74j^qDn53p&r4r&2<5JyAGeOXeBemJq1T~V<@8s7jaV~dvIjJXnVm@N zCK#w#L0?{+x>4k@nyS%3zwiHi?$NgYkmQb9CG#(jeHrM?x!1rcafol2P`-8^aJkX+ zwG0D}mJS{Os3qDXghy46cr_@-8pB@Tut+SSol@Rz-6=qD^3!19QJ@Bk9*51?2`m=z<4bWaup+V5IL}>*@e4`l%gcf64vcodJG%O0>AVH` znE$r2SBz`A=*Fryvg5UawQtik5?qseP)h?6}-LfpNv8C3fOgX#KMtWCsbKDLaf7%1VJhXmlhYZa~#2{kKch#%`Nwg4Dt)xXIrCpCEUcFB7bd+3+)><5-wG??dp=Z-0 z0}r}dJWUH-X~{EOx5^mzoPbZn?Lo!so=L~=9icrRUwV9bLD!mCg5Yn%XUp70KBNM=}9;&k%-q?n&&e<33TxUq?q}YlRYfZr+uQ^2(CZJ+Fm<@ylD@=_~Py zs=FRtPIL8b`z4Y8e4jsUv#v-Yjh}miyYK{do888rpt{an3ETbC&TpX;OI z{{Fwe^uIUa|J@bw%-m`FLyuG|P zqX`VEoaWoWuWACLj>d-}6JHMVOW6=o1e^(wANt?VnB@WYbyWkG&I|LBuYn4g_#6PA zq||va!JiUx?nYC^U|Bu~iuyP;;HY`f zUGtKrg{9+v2bPVm1PrYE0#o3E1h^sHJ8y%c8-2T*j>o+U7m7Siu3N9SB|(3j|A-Y( zSA9v(Y4Xu{KLCbt>bKETbhsZSBmxf%yLydVr2xLqv{X0}x#T1PAKYmtdE-;B>FrYj zm1CL;RWlzssgbB|1B||&qbwk*HNwaou(>BSWjCcE!li43*fycb?PI7<9=I+4I36|! ztj$SHL$_+rk$Xxsw3-Gu{5SG1?-!Mj(yGat`arGXsP)8RH;c|265!IckpTx>ui^Pp z(8{6zpZ;&&wbl}W9o2aKt3WhqplvTfv>}23&7ko|cf=3WVG0iVoJ*zCjxe7sNM8|s zS_v#fj05NC|BcP%T zu8?QV@e}lbD8S%XZpuE+o`S~NcMhvup9J9j6$%)h+ke_p3+R=h5)D8&&cR_+_YOJ* zn76(DwvYe11;~Sbfc*)Za~e==X9H!DoLgIYW8Es&VUaYxwA)C!hJbZp`$t-D5}@KW zyyawy7;!=myy#%k3o9yGK;0TT_J#>a*wm4;B?9`I)o*l_i71sqq+C4M4*0q%iHIT9D1XR|Ury0-k0bhbz z#mY4kzhIpwPo}c~FBe$4eR4r%+5;rP}x zAbvY85^W|?|Srk;FU86F{VH{uM<}IlcHCzr9a*^h*EW`K%FC&SBvBO$`)A zliyh1+Gw4sSM(U{yr@E(7-=1}y+uB(e#};BW_Uov^)<7-JRP>Y$BMSm%hbyMlv;4U z(Lw9xde>oNA;3JIEq3z)nW=ty2hUq=Jja3kFME>^2Gp-x0~vRvI+1IZ^G;P4#-{yC zq2oE#UCl;f%>?VbEoDF-^F>|6g17aNGGO-G@3evjK!eWAu@cQa40r$ImTl4bEIb&2 z)LK=UQJdoX?E~XyfZ;_}VETtSXHK;onW#_G1DE%`V@E~GIC$*`m|7tTzM9+CTd@2= zajD;h+u3>8xViU`+h)T)jUAl6Zj^tOghjAIEx;bLgIs`M!xmaHz!<`th`|d(W5t*? z4U4=ASUlj4~yQTG8{`c zwb@}A>0Vg&>G}rmfo7_-on-FK-n^J)OIP#(AsoKlZmf`;E<>N%sD146qZLDK*|R5FNS&J@*Al;%E;Q7yWzmst%b&WjlG}i&<>|0H z_YCMa31bR*Mc0VEA>-Hb?nR9*i2~%b#AAon`>$<)Wi^P&I6LEr^>%g>+XD*_7TKt^ z`@+T64(V@Id8?}eInZVU(!t6$hjWBEguPLH5t}_BpN;emb_xyw{-EHMB(87&z(><{ z_M_=a;$H^6cr|gOPoRO5oT_wP=1MWQ=1Fl&fidg2Q#RTTz5w4S4vBbBcf0*vugku~ z;~SgUk%Do^(lIYi2pB|l(VYe(VFAo^KwaJrRfP_nAf}Y&Sh6)5KFWXz9OA3Igw_7@ zuQr`F@&C;K!IZ0&Sw{fjmraGIY4TOgt@>V zpQw*&TKe+$qO-+Ki#L`+@Uy}8fy=$;YbwpDo8x_awn@*t?Q32j)Lciavhj*~gd6pwCvGZ9rOVl4=+(JST@S zbh3{S5UgEfpg8YN^!PQBZr;(rB#pEVd%Kz2R0}*dMBHCSk<#FKQ7Is$n`UdR5y|~J zh>;B)89qNg@%d)KRD4dZ_|sjcwV%mwG(4xUmz-fF-z_!-Xj!7syK9MO4V}G32aNO6M8(BGXpO|4PxuuqmAM?O=d>?;z-YbM-V4JPl%vK>WMom<&Yd>XTRuSspWCTMJ>5=g&wc z%%K@_jd8<%T~waN<+b>qLLZp8`@kgbiH{(*zc#B?gB^mzP|RfxV`<|{Kb*gjMmYbF z>wG%2)cepb8E`ih}=FKrICzyp^o4~$%JT68?dz^>{*aBxSx^!sg9cVWx^VT!D;xo#t z3*XhW9>G6;B?IGIee^Kb#GIvlYv5E~#Q^CXRS^eaidKxXnmyLMMcJOqe0v?!bDv$> zIPSTP+S!QAs~N93wurCr0G7nEi^h`J8t7$fswprW_`ogE>|`DvkbGbuy10k!lu zPa4&)Xn407%vg&XOm$;i>6Ea7`K?w1%C~3ASLZvmyd0V}1y(k$tGFT7$RaX87U|8> zFqNx72m@e&_aW0W__UXEgR!skgP?`|$1kGnoqf9TF`k7K&n#lvXf)i1GE!XuSk6fe z7YF8}&M%FW_4edy6CKv9fPM0E$l7k6-Imzzad+G1x0Z7yVoNQaZP)BynnB`KwmAZ| zUwO>0->sD{c{Sl_zdwdB?RnWDR`D+=?tKjaR{VG2PyFUn7C=rdPBA&|J(Tr=YRvD;n30q1FU;I7xbwB9Bo@+@E_6D}ocvfG`wR#**=rB2^D14+k8yFW192c@HeT z)~`L|40e_PZxJJGIWsFttDu}xr7^B_L<*usxp~_G{I$2e?@BGgIyBU*By|>`(&vHG zqjHQze4O0OjI#&8-hhJ`y4a|Bc|;%G-*sbACzxr=NdqR|2PG&=0@DFSY7TCBA>yoM z*oj41J}8G3A%E8N+8E-38C}FR{Rh3_AwYzj1oJT=lr`!j6up6|2O5A_(go3*1BvtV z_+f_+nwhwTr6)RxgsX&n<1RnTm_(Q>C6-}#i>i+ogHM^v#x?pUUK#|5By?r_yqw&t zb#?`9*Sst1rN z{5ykRWqtwKGg^rJXQ8ao2T^wLSBDeJ*!DmF%k&F~n+cxjdf<0Wy%>Src^r{fH}F^M z49s!lkWZoVT0ckQAT|~B!i-1>D=n`bhV1bvwctF$3%);6$Gq&B*IUys=s4+oU9qs= zcJ{^kqJ{@h2|)#zQ>}3nCC3CBl#~MIumhJt)d7JYC^JDDYozK_LTyqY0LHGj7@u#R z8M+t*#?bYEuQLfCn$S@&VIfhs<`JwnTaw91Q?7KU`UbY4pQ8#jL5M93Htn?hIMoyR z6hFSZm4pPiR?i0Dmt+~tXRbSA+)0zrn(-DmuEOo(?4>&6<69blj`@`N>3N+gbp?`| z$nq7zjQgJ?;Zs*Mm{NK_`#W^)lbON{tB9QOrS~P=#>?|#6&!-v_@%i#Cex;N{Mt$9 zAEfA;-O>H!9&mb0)KZ;h>4mB_?~!TX<>3Nv;upXmZ!6QOO97^beJHwTgB4Z10Vi3% zCIynsn_oi9O`0>nv~2pNA?F}+n(8mm|248-i~m2&WA^=^L%UA4hK`H>Zeu#fa00du z!??ctqG-ykCHCjan7{B1K3i{ywxhegj2!b{pF$kwhi(aYh2Ox8Li5nW`+^vot5KD z>+Ka$rH{E|yzhCMftoNdQ!E98=iz@kv`0Bdc}4k0g;mpMqVUl!gz1XUfoFZjn@|}K zd`vat)BWWR#sct(5(2{kl6Sa@KzVi|;_u}@Ohw`vmCuBlrIE7yQ(0-|>1ML8+SFGjNaFIz}f&NLJql=K`XgofUAe! zT8eZ8lk7&@WX)SGBu?+b*Ky8n6}L9N2a_^EGXq80r+En)w4hGYD}#yE8q=m%zcMVt z0L@v-wTu4NX=bx?$eO71CKNa?KXz?;(ECy|X3Nzr9*GzQPLmckboqYk!22in4xENB z!w0wQd1jt9)O}SI+U8#7DhoNIpWf*h)1T@&53mJ3WwA%!>x@G8kEy6}bTQOG0VZ?3 zRD!JjcRi;&C7OAtg{2>}Zp{7aB9Cz9rsjaji>hQ2{!e@7{*`3D_WwP* zJ<~J0(!FykHLWR6nW?F1fvCH2(oqvDE6>`9hsekjk03fT%{1HcP#!}CrWDCMkmpd5 z+8LgqBqdE_@&F+!g9s=nKA+qD%lG*Up1r>7S*=woSKZv)+f~X-<2RA+y(Ufm{Uqham->?Zvm;@cLzY_jN$i=0=Kd`sL`SW`5Dj zmw;iE9vvoxfD06=NkS(u9ik0vV|K!(2m+W}w7EdQO_U;myIT~IXbD&jbP{OP6bN^5 z;`69FkZeuPIpfbQ9$fbvD{0PiJPRW@*m!d)hLSn6B2!jx5<7b17&a3OGkqb4e(Y5h zW(aB3c9fq5JaJKG9>GgiF=PuXH&UDpD!AGQeFX3`kWh|Nuo zM;=f@mJb|QMxKDRpet>hc2q-yj6-=8O@Zi-F7sQbw0+~*pv&9J*XNa+SZef}QVQ(? zln>_w*Nd_fwv&L zpq`%YsD_ed0Z?wcm;1#~TtOOx=jX;uGq#9ZVu%`0QU{=Z3`B(&5?jho-+%CE3rYdI z0xxJ!)L$M?SzbGpE=zQZW~0*gT8Fiddy)Uh$?q(VaAdF@JUakgV-H=jV0zn59tw#t z%zZex8|vtc?DU&5_wlQhxpzuGudaj)Xvcg?qn~szmX6ztkmNVLgRjDZt^9E9+=0O$ zQvZ1Y-LBAJpP90;5LOV=&VhZ`VAl57JYcY(#++&%c0`Z8{#>8IQk6{(|y6Q&!Y%- zC_#9=buKv`Ssn-l@>mCEz_x{1UgPe}pKUzrIyf??Un3anEPU_C=xdffP9m$v3`f3= zok(%#TwW4Ryo=iMMuh$&@}SSFx2h105trtwsDaZ0#fks0FwJ*o%{CibArCX2`jlEV zd5~gPd$dAgHvorNIY~h_>BzESl(u!h-LHlB6Oxv;gDNsGEN`5YJYqEidQ=Zqsx*jLRr+FtDq`Kn$6g&0(?m~iKlge9oJ#5KSrF;s!3UmwiHRSTe)Ur0xIxN#Oi z$40K-7x%RORCWcX6n~L?dVBh&H|Xj(^3!HX}d2D#r(C}st{l*Wx-LYU5SO06&D<}qqa_da4zQ~%pF=Wtb8DODuY)v$6oeuEsxw-O9 zq@`Yd0?@%z5C>5ARI4weS`r(FOxw>bJ5sqw@}txLEd100OxxX=;hYCwqizwkU1LE^ zn4~>vik-Of#xr%Hu6A}ER0W+|YyyrvyyFJ*IQ)Q#h7)U;e?Qdw2rv_ zy20qMM01%wk8%6^*Dd6J^TJq!r2XYr7H`mT>sgCaUv||4xb7bT8%GaO|K=T2&{wqo z8?*Dmhm(^RPFP{9&n51$uR85jZNGO&JbntdIuaewXL37DF38g()Fv_;CS-BqZ`;~7RsK62lZM@ zysLdlQ<|j8^hMZx>iSNL1C`CcK1sfYzSZ+*bMvQC?6{Q)1|v9?JrcJ|Q4kuhBMKja zk_C|2)CEhiC2+wB_>(~M=-%Bfbz%CRoN7s%z@HJM<HvZmUXra=m1KHkfUh@(2 z-_N7wqvvDi(erWhnE80|iEsSv+a2?JycWQsKMEE02w%N30*1Q-_sd~bMI0aE6{W#F z4`X7+PM0y5p^@2U>&4=L2v?l3XnI1>eNb`)}vi&%?r@l*Gj+YCxvnFd^-34Ir zN$U8MJ|ia|@|Y;}Ip9_bM7UHQTI(}e^VWLPw*LSt)t><}*ON53hySukis66Ikm`T! zRP=X&nl4pwC!p(58vII(WvL~F%KNNHRv|*rg263TTZn|$;HI-Jo`8<3^A+ze4nB;t zYiD7;>AnnWlKGVdYhb4tg@O#Aw#|A%1|XPuVBxL-8-w5ICP-1O-KFWmFC6f<@ptt{ z$~TMN7YT}HM#S4Z_&(vw1@nMd8j%c&=1W|J{A}`6GXD~!5VZdO(~dE^C{zIqKXt%V zpZ}GgRZ<4vf7CC5o+p-0y?wM7pw$3ZAq4a6qy-rmQ^Qrn|*ml{6Nv1i9zRZGq6PV9YNM z+D0IB&8(k3|MS*xheD@-4BlufKRjdufLk9g_o>oB#gaE5=m!v(N3<~(_Ax}N*rYitpU~Dr2!oi3>`=kUknYsh4!3TYSH^ow`kGQcu zov}3>6YWen;QR&wkaM*fMaA7LWizFoJLsTOrj!A$X9Ea3l&H&2h?byqQ!B{l@@M>@ zp6T)W1~fE;GQsl+^)0oq@U2D}r2=7t`lXl9bW|-uQ26rhww|8cS@22@v-guw@SdtH3t%as)H{7vPD}Y$h*#XI9PN@L%Y9x#0WMo}=^xY)3!5TYUptT_2 zmUyBBVE^J{LK@ES_E9$tub#azdMTiu`#BUlg?WS9VaPv=14MuOt7X^>-kA9?Iu*>= zHpehG)o-g{z0Mfy2;zR;_|-|bVO8l20pyk63X+!+=2ki4#%(cvZ0AJs1_-dVx=IfW z%knB_VndHMzM#rsyP?6;e2O#Xf|}eSg4mH$zzu9y>FUQ-6+0ahjNha?V>9o`e*)_& zHg5!m9;xc!_KSwmT8JWceo&BhAD>=nP-kDFR7wIpmV`NWmQd3Ii) z=|gvVXyWJK*4Q9#QTmaMu+-UghJ&&&W46OY3c(OO>%-JQqWCu*v68zArGTMPv~jC+ znrcfxPo1RZdq)(z)?#hzSQ7T8hP7#xx&8$fL}c^(Ggz~odhtd0pCR(c26Og9pcvs! z$AKndGCpGoAaPDqXQeg|JJm|h$5uR9N&OqFoxGNboHpFvK`F%VMG?tcxhgPbJmE>X zzXGztL{u5){$#!tq0U4#lepLnc)fY)jCp!yt4sCgF`i3>Rm@>V!o&>7gVS&DA#_d}afVqDdPj9Iwmcj|@6_`2)3O#R80;{sRdK1qQ?WqUaG4@JC<84c_=QZBlN34nQak ztbS=cfvs2rP3C1vtqnwI<~cP(*4qidr;X8UP$P}K`vS+=`{NOh1O$*w4|mb7&bW{^ zwUIE7nT|9t=`|jGQ23@mes@*@SqC&DNN`*RZAT?Fz9N0123fI|c7v`2V=%Z7^H>E* zkX$x=RvXOLfxrv{>p<Jur<87R)JZA9VQzS>&Q;-riD#ei zp)o9hTopRykvp3z$FFUSq+j(OI5Xfm(0@fbxE4C_ersPJZm!hZB+Gv4(awfrm#=Q5 z;!a0a!%>rB3iu5Seh2T;Fs9H%{LoCZUVE{^-G|od6(lg3Ic>5wl~dn_anba|?A#Mj zmhdaoG^Pc69!5Rdn8K5RN#YJ|7hKKOF;l9b338ZpH{~20gWZZBDnKkq7oOJ+Vh#L+ zIil`mIMX)>F!Ll>@yBoz5q?Mtz_h`y$xL>`y_K~gUXftnf^eWl z++N_fzl*$!)2@9RT$*~A^3q=0DhqbgT-@2J>%o3GajKzM#{IaCoYt8*6^;Y3TOBo7 z3Zb`8vet&D(Z*JKiy!_p<3Ejusw!x}N(Z1;s{}}MlVA6y)qe>)Ib`_rtyjp3Otp9v z0;El&F(Z)i9vaxcRFfw0n=f=T&mk6l4Ug)W%^jVqwbuAjr@qtNPcdEenka6uo&GO_ zUD?#(4@gW0_w{{vQQVJU)l7e`iV7csru^V|7nEydPMC?OnHG)P3{KjRl;*qk2q=lg z%cJZz_`eTA<^8MYUWb!2HrM<~3mpRg{y_Kpd9D6s@rDRe9d#wC(0+OijHax~N^@%H zPN#Sd49j$QDQ@_0_P$1nkiEFi^DmpG2X}~-r|D(A&PMlO!&{*NF z>yq@GulL?{Omiy7g1Dp1{Jw3YJ7vCx*0wZR zO&@mpIAEjQ>TDd&X}GZ}Pgx zQp|60BiTphzLx(w2AuXm;pN~ykuZ1axdnsw7!@y^>y{lT83QE25RCOI} zRSMiqDsQ4{;mj)7;kyO=CO6J`Pvc97TxwK9SrnZy%VIGu z2JsjBO!AMB+2&jO0A%?&EhuC(5as9K^}gN_Zw2szanwnE$araElA+I4O@)0~v11$! zNeV_7Q=_a$>Xfl!94N^x%+~> zrwpV$&d8Ep>je2{JY{(3O##uwY$X!RN;x9-Mp# zP1Z|9dRAqt{Uc(lhYqx3*gZb9Us68x$fB%&8bJfxrGY710^B$RzTAL+HDu@MNH6>9 z!gp=jaIQR^08)FFYaPbjWIcMSDhR6;=6065gN*vbs6=iu3x1ixAe zgx09%;G6su^lp~`(Y^1Oh8c6?`g?Yoy~q*!P=mLQ`>$3^UK0DCvEij|afQ*C=L@hv zIKj*`#Z8nztPF%(xA?@m&=(ZJ(8n}f18(fP3D9PClDTE>n9dJF>K#F-CoFzb{2D~K zLFD=lC|*Ldwgyq6^cp+IK<^qw{jqOjz=>;FSqE^R)p@B$NqHAW4iG@;C&k&sG1@S> zV|C-@t#}Q75s=2w#+u7;aG0`g%4&~A2YE2F50aK;EyV?}Y+^ZBoLaWr{DPAa5JV5$ z+Ym7a2ckw2yqF}Kc&0j|{3acU7aD@~OqGGH4T)X7(jMR)OHqS*y)#Yi-KV{QA^Wpe zZvr#YDE?U~_yPx&|0abcMOHwS)8*k}PS+>Ih`EB`Di4=m;n8kETe%~#j7_}T@b4k={<9mXYr?W%d`bonO^m>L8Pd^7FiO{*<3 z+UzErEIN_CJew&pY(1mofd)=P&ZRxDkM>RmYSLc6fWoGw%S&NO!V>W7+?c|_gWRt| zti4T&W1szjE-y=vrWGyiBC9MYNk>mn|Z0RyP9&H zCLX7Ccz+tQ^w|u9TOV&;*d+suo-Xjw_c61<450mku9KUnLJb1iR^$eAGqP#pU)DAu z!wr4(9NgDeJptOxg;oVv5w$qmS*PJIrB+y-_Xt{!%o;x!1_e=hfa|Td-tU)rVbg63 zI!vlIH$%GFJzU#-wJ&0_gD^k`%#dqRrmA7n4V32{EE`hw1$)tPtga7jo0=yGt#k@X zc(q5e4km=timrEU!?%XlMWG?W&Fs5SnCvdC#uCPXeK6R;fg1<;A5krUPyA<2MH5ja z{YhrZ-wkFRqPw)pB539e|NVz;^NQQc-?1)%)A!n6+zW=!A)B25@v_Iy-#?LD(hJp- zTQNL!E0uTATUgqP(K*Gm(C8~jac`ZV;3Gj`BN``$6eNfFfY)ZkmaZ0nAuu!VBbQ6% zy)D{;LQ;-yvOp5`2`K1V)5^Sye;l$Ltav$s{_#bU(6AL9KiR!E@XC+y1IxSO)7+VU z9?HQZ;KD>Nc0y7|iQ{gIj!+-bflI=|Xv!>jP{(6%j6S26(3;a8C1pZWHgIJJbhB1p z!p)CqbcLNqNMv(T(ukKL`4xn}Ls$(c+d?Ve{|mSCfH;;@1V zZtzdOo?zbF49d8Ux|$-q1ek%4z>wlMDk+U=I6pnTyR&QlN$p-glz-FqZx5`sgR^LY zs;*v`CQkTFv`RCoLR5uTWfUP%dKU!#QgCnFHj$*plApf@4PZHRF z;5Ar9J>omHYKcXtQK*nROFp|?(!C0qex?3Vb=@qLh4~UN!W|_qRY%p|>A7(bblb0Z zBSn?@t{vUC=cTO+r|&U;f(+C+#3@zlvT?NQWpPq|bPzOlAf5rQ=3G|?vmAAMV2CEGyEu)wl$`gI>eAzeQ_}#ns zAj|CEYuNJrjZcu+5n)@ki^E!DB$cs)^WqM`I3{ZwJwsbM0Bj{len=28R&$ipK3>fD zndlETw&NB}WORcU8#|dId>4Dn9A%%~&UuDsJ9waM8|q+%Fbh4q+s>jl=vWmspcOdZB+S~WlW@Z5J!I^?d}er z_aiXMaMxU&E?GX_L(EqSAdj~MpGuV@E-u|JuZdme}+yuoA+X?043ieG$K=hQiEs4FG?7esgki$FPE+tToD&Xc`Ni zagBJg44c0;Td8cDbR)z`-zpbB^$=sHntFUpZ$usw*$Q3xkbMUsZ8nj-q_MnMg<6Y^ za}xtSCb0rR3sFoTxlz4o$WinJW~Kl~UgE%mB_3J&^+x)@InEBa$`{b^71QbYbr!|R zRBzfgkC)&Ah4ls&O$b~yXpxbtNKTj;Di7Xv4J0%TQt{tL<$jdiTy%Kn7!s)y(;Z`V z>Gl@|E77`>=Gx0yGATnD44%w#XO`KF#Ewa<2}W01OsgF+DgIfusNLW|aushc#LUYT z5jGTjI{l+}ol7B$XvfId*Pqp$-;yA1c9yBqZRm3@GtpUHb?1v*?FknfOh!`8m0#zt zM2kasrPXv_N=W3+qXNuG3ur1Gwe8s4GN};A4|Q}OXPMMDj}{{+?7=G|7Y^^71(W-bHBF8d|!GeG{!BG3_Wf8@*w#J?yB$f){9A6Ghw+!H0@el0(JcC}*#eB~hId6MReE-PW&y7z(MKSzFt0bTv+0)D@#qv3b zdy)3xc7ZGIX<#2H7UE0dZb86X$;8)d$j)-x&CKM z|LV7*Wu~Fz_?z6>@Q4X5c-m8U+C(gWNG9zMST1t$y)B3B$F!Vxv9J>bQ00F?%|UMN zU5f4&l zDD1Gtf{NB8Z`!Z-2W5i^Lo%ay$#*&5D#-(iSujF65w(twy>2>FN#*TA)vy`?9V&f^ zivSWAmrX2h|7>`^hm|@%4c-tI$2Gut&3`j?Zg4Uu)OpU;cga5%(O_&H{}Tg;n6K!1 zzC>37E*aF>x~qiQ)-GBSyu1KKvH$J*k^L_%_rGo_di7#n^sU3iOnGqmyy(i>C2$C* zxl)-g{%t)*;U7W0-e=4F$N&B1|E|IRhxftP(Fs6q7zHrB*MH^F{0=s`4B)+K&6Y6b zEybmQ+fC;?a({Yo0)0USf74RqPt$?ELL=h1;DH~S9$w!`yZ#@zOgs|dY$ z5BSl~G(V;JXLWW*?!8My=qkMDvnzX^{QUQXcQqLWnl0s|pQmnP?d<c9PGME_0yeElssyPtc0eUHP&$aQw6y*CL%$v^un@{X={gzgA@I+}_V zFXnh0fSM$Q_ND1C*E-maD~c?duw-;;H4h_+*f#a3-7>5Fb4q^uxd{Q}PM9~_e&WRf zvR-~ycj|J^%D_ey^e(G)VT|Z9eJxo2lj>#AScV7ZMC3&*cZa+p&h5NoXKW;;3jE zz6n;$byDWfzF_gC8fsJGK0JS%A;&E?jV|%pT0f7xI9+gM`oC$P_;0$GXVL=!_nPKI zKQrlzam_hN*%-aq-AG!gy~}Wr)-M-^m(7R%?Q;HtH7z28g<0A>6=d?^7Y1h8nz@7z zhUv$STwq3a%z7)8{A5D6TFLhT7rP|h;y|ehvS(a`-g3fVOyPh2wqD0$LtKJDc%j2V zG0A8&Nciigl~O*2lZUMlx^M@cU+=(9x8^~s zfpJ!LLx>>P%e`i9v(Hw=@tq092h~0{NP3wxj4bma*N?bGCyf=?LX}((=Dn67NpR+n z)xb%nN%1{Tth9^WpptY@nJk2%dXrXn>0nT60_s4sB;!I71Ll2@}m$%&jyJnAfSqgk+|AS&=myqx@kq6yKl%Pt7M; zHW0jGsaC9a5$vQh$hy~i&eu=HO-J$|4>*oeV($Q5ZBg#zh{rg}N`#3^$N?Wm8m3GZ z=!!>L!8ZRq=p7JEK?PMOZ!H)yhiut_YgDz0xg}yi$Jh>Qtz#>ShEddmsEDAPrMbID zs2$^;u1u+qbPgRo>$KQyCJk1Ocko}m-op%vpS_t`y69-RytCGY z+s-LgTb!`=G_3shjbCcK)*tlgyd zqplWf@0w;0zrIpl)>JTYs1G9=@*$TQLDXBKIuFdewzi6b@7}0Hl^1qfWADgEso?dA z$=}J#Hrlw4g|HV|?odxs<5=$%e$euT^Wr)Eqz})T;Od%-6ozC#RMwBm7K~5~X$!*< z?F55zWIEPi`v|77Q-AKX2+TyHLNLkCe>qUg@QR;_ahg3?spX=!E}dr^Vm|(Hx2~am zk++~{P*bUS)<%N~nbcXoQBQ;EzIlX?JkY|_{R<(A6Q~2OYLr^ za=_k{*LZKC>7;P;qrrqEW*tctZ(_&sBn4glzOVjr5zn<8G8)MKd8he1rttQ?Q^8tX7~U(no#NYQq7xhhh7h zBdHtYbzXgoJGM07mYWN;53%t&(Uu?C-zu4cOShuKG1mMcu+q+tofAblo2RCQ`tG1V z^TmppJY3Ta^U6SJ#y)jfXAf*ksW(RHtS@#^=#U0QJji;5Mp4xXsLfbqHA`_6@ox{xXtyph##nWG@f$)JXh^0&M`OXffX zJ=%3S?shc^v$TrhCcTG;OoeR(Y=dKUJWu?XR;XT&r`D;}Q>^axgjpj<0eF;zeHJ^e z-kjGhOPEi&D;l!3faO0Q-O;-Iyv6%ylNRJLD#V@ZLzUm0h2k4Ux6}6xyd_C>j^`UK z{Azql-(~Z!9Z+AT5Kmp*{a%>LG55g*W!GtIhw@R)Y@KFs( zWr+q1QD2VsbM_)~h%=pn{{8LLk9|`vEaVyDfg#kJ{D3Gw^2yWtpMXEa*WLk3 zm<8CCc)ZE;d~%Bst0m>&FzXpD-Dy43%CJB&wl&R=x-R4~Y=U#rcN!iJFFTjs^E*cw zfD!bjvLeadTT2!`(9J)zp5V8cnDG$WUQH{tbq6d4Znw^}tshMmnHJpHLib%Uz-_*t zM{)Cdep$kjl#=OGe5H?-f!$lnb?*{cMW&-a?diseVX`hvN@6ja3?3%1uUg+enfxz# zeNXW2^kk2%o6C{S-HBmTMN=lWp7in0ovEznKHX9ZpJ|yHUX~apXx``tyZjA(#G7xd zv9Jkr=v6+8szPDelTWM-|BdnU(-!`ug?W|$`N0ZtRdXKo4!m`Kttj^1QruCx$=8iC z?VA&bXk*Uu%;St|zQH~xebo3%&T`iLAPrqQ=HV#J${ZKLD+fN;&a=$eSSnN>56X|4 zXxguKoI2;;*Aq7rLz@p>%S-!Z3CRZM(GxI2MD!WV)-&w|n(`?6htRb@5Cf-tz~ldl zh~E@sCI^!BC{Jggy3ynqhsy=_6JYLolvbaGB#cH&FB)vR`z0>r@q8a{1&~fsn*aQ# z*?76AE?BuDM>06<{_wK6w;pKL)k_&tlk{&!)O)9M6Mhbi&Np`@7~5X!TNC9a{F$b> z%1KbV4`4&*8`vKo+3vG&B`k`D?3ZzhHJ{{l+1A(|7knKHLFROJP#u)FD$>u^vRIN6 zkKe}Tw3+Ate#Q!_1Gm?dkeGB_aK_JYh5;`(HG0W{pFY6UFSU%! zOt9&ZD-6t*hOBW8`9;X!txqrIvBZg9$b# zf~sKs1%Gxc)&tbZfM1I31f!uRmY$e3zI2qo%{*YSBkic@Oc%c!EkNWxjgil|u7Wc~ zEUhj}x-0Irz%?Zh!F!F?QPb60(5;UVEz~f=ZRk&n=5+Pgo+9$ZolFPGOX-O_qn&?K zz6W>)tFJygD>=l^t3OUJYMu-$ZcwS@JOV-V_k4373*+F|0Ll2MlNDjh&lHy z1Q#K88Gf5meI=s@LtSkim|%zRzQ}DB_pj6uV9D!~$*0*I177QxyBVy}bJ&hozXHId z1#Hh9XLD}PSNFh%*gN3)9o)^&jBssve9WU`y{YJH7K4}(wdP!?mmqUg#)GT52wRU< zea+!w$}wJUF!)A$2c;oNNH?uJ*!}UB-hsb0t+h{2z+L@WIc_;^M=!E+*Zv1Pkpn5Y z0s@>sXRWQS(mo&S!HTgxJX>E;#lR#qYI}JJ-Tf*zS6oVR_DPAlD}3 z-E9*e@(7qvL37?y%8#Sali-Bx9r&(gjUt^B!>T_$^ryE^(MQUS;~a<+uJ{I@z4#JY z|9e?mi+Otl?|F-g*k(X7CVr*mxcS$7sF^W(H|E1d!xOMQMW>K^{iOaRy~-Kz%EkWK z6VepskdL-#=c&%WevX8CbU&|JE_B(mFu|BptE9F`4c8?xx{mlSDY*&NY0*ckuX3An zpT6sO5AUA&GS~xp(gw|P$;~?=C0?}#cRYc=iwR_ zdD#Yx!CD`?@s`CEDi?~EMsu~yB&m$_CF&%P~$ zh0R8IN*iRobKwcTA=gm(!HEf0`Q-f4v&3fHvIZ6`w7B9c|6PCFwQ+Rl>~#Ga$FwZr z)`CRGUb!(=2LN7J53O1KgXEi&L4B}(T#lbEbR#^%R5NKZ;>i_B8*iO>xQbZ6JNc^v zxq4P^v(=99%gt5y^8Lah6p0Aw*+{jdXCkdV_`1Y;K($^u@Xpn6>#rSk!73p>5<1{t zk(Og}5X%+jef;epE{V6_ zBABokSc<)`U2H$PP*>mVqTgb_RpR)j*)$GuvC3hWGI63v`SCIIB&^%h9iTS30XY_O zCu1?qdF%HP*@6jJ#949>ZdgOZj|| zbu0DMghVuv*i{2h-y6Syr*2gifyeR$+~SqF62NEp)JEOnBk)U6#HD<-Tn2dNb^f;N zKo0|p^gJ_05#nHq?p+0V3|!Hb3by-Nz+bkgxU#m(Iz}ghy7%sFDG%J@1A?ZxW+zzl zD_F4$z9P4NKfNgHJ=CM|$xaLMs{~mR_hm&!ZMR~UpCK!;X4tpb3Evo{;@j}%qz}I( z@!!6OLcxhq3vVP=CCFT4i>6RN&bi}3d$tE7dT+bkoUjK+78BVxk{EPS5TVtZdR zNhVGX-cz$K?t#2m?{WnfLqr)wWR~D5tD)&Icx%sI*Kr!-qu~07*2VJ*uybD5%)9g} z6Hn4M-s#8BT&FGPn}=A0&i?taQ~BQNK)z+uXy{sHT4LBL@&!%9ALY2#SRGg5mT*89 zZ;>rdjOJ51njqC5x&e;v%2+5w4nqL6`gi?q=aa%K@c#e6 zsh`}YUYns^O)e*gVciWFQ$;-pyg8EaLjS0GqPDJ49-O(fl_xbKVqNhq|Mu1s_`@4+ zl27icS_~tmGLvN~mfDmATt?<{CK-tmHRooHP#6Pj|X?v!iD#^wh?c z%u0QmQ{}X4DIKyEAF4lDZ&%rbqnPgH501iCNsVD-X|$wh>k}L(q2#ue(o@craZEVZ z#wId2fw_8KVA;lvFScDSzSrz59{2J{Cz)%Rz`NGk>kQDVO?Ez?whfzaLK=<_%n?$Y z%!7tuB>76+wB(|WD}o3El2Gr!j4OSzc!px+FyRl+RR~6xPCn1`*jS5BMhlux`!+{? zK$a^4!FiZ%^NpXb)zkugcY$6?<-nv_1I426Jm)EKxN0pgn{o{YG=y~dX0@ZZrf;p- z{)SLLTx)G~>4*D+Q1uons=#E4u5&l*(g7I(yYjfds1RclVMrh!lpT&PaqA;#*uL%E zAlSrTOJ)k&^o@iu*5NiGayPp|+XT+WN+SasSD!Z@xLtqf=bjy5$xneET)DUtuz7{) z#`(!<2Q(RPj<#6pzFVI_?I}siW&d`(5rF@d*M_S50>tSL;4hyy3sRf1Si@ zyxTDwrz?igJ2uA3Rjmnr=;M&~Y&h-+Rl|dsaJnm=g174H0Hi%#o-lQD%14`ZxDx72 z9c|t8BN@@I3HM-t@=joBg`QGf*r9)e0!Yd+SUb!Y&_AA%)}kf5!+-#hK?P5KdI2xF z4*-wbhxk1JIINT)hmXS~uzts{0kl|onb{%f@HlT4Gy%Ip%~BaDuS}Fz>Q^R5%oB^& z=`-IW>P_P#`zA%v-Q|((lVC>MmdPi(etuVNBoRR zY_uQd+E%qyofIElgQUD?h=0uKb3#UDpG#R3fUBSCT5T5dLmT|Lb{n5iMMq|nuuy{> z#Qqf*rr3_~^9Vu#3Pq31rXZTPH`NIIa&6y4TEU^3W8IRKYaAT6Zt2wDb>`)SZ%BI5 z%-!GMYY6=uwyQdbw1+at!PDl2NvB zV3;mbm!_Pi=)R1Ah|0Vb$%F+wy}3$}9*qgXvU4qm7h|3Ei%H&Te>`0{z3?+txfacn zm8TsHo4IdCQ{5h-B~0Xou3-@b4)6J6gIW>#Hnn#qIuvvNUr5hN{!mdDxNltazofqm zaY`8H%h8VN)`zW+F_qXCrGu+Bd%GwMN5wwEfUlKPA<|RWu;e@3<}~a#Ci8uiQWTo+ zx6;H5Of^<1Cjz1yXzeYm``qT;_;=kY8#KDxQ_>R5iWc1mwKm9xFKt0l?m?oGRp~f^ z7S~_uc=zG%vjyY)=+5_##C$1SX%qq@PD}x8w!&*nOAL)N37%x14Ec-8h@Xn6CPf=Y z!)oeZyF^Jw#k%H+ex9r}c6;9yPus-sh@aEa)6Voc=-=AsuUK@m3HR(fKjyR4>CVn` zJc;}u(?CO>T{XcK`m{URZX6qS0G9Bcw3VY@*AHE@#e*caMCoT(IQvBF3^qbO z;K}MRl)Z7P)hMK1N$Ehb8drqo9!r+IaMK-dz)X3sr#DX=38r%k_#%;g8AqHns>|91$-jmPA@fnzRlV(SJu3`)0b41W9fPF+rAvT{X3tY8!p)ibg`x5 zdC0t*-ZjCd1Y4$DjIQs$GT|3qnz0_ueqzl)=SiJQAREIUH>Ckl#LDi>H{HMHV22jH zu3%`-^j{NqxU$d8`DP62W^C9sPy|(WjzuwzQmeJfT(;1X(TIMPOHLtU5-5vxK&5UlN`}g=j>fx7 zeII*{?(veQYz^OuS>Ac_)wcrqXKVfo`YB8BUTS7I*(gN9tqvB~`s^oMbS?}CPF9L} zaN+7>#8RHm1X5SluYj~DulJb|a##aCFle%AvPH6OGL?(mYLFBhq7*vVF3jsFu3o(+ z`DT5w^V~>~4(;xck*P}g#}31K#*eNin|gj_FdRFyDH)MZ$oNEdvl_GPX(uR3EG5HW z@vWA$DqWr<6kda5z(xhN?(Ahdr)#LbIXb%7Hn?AGR)o^In)F;j1m~2-o5RZ76FBGDek@b5i_!(Z;{knI;S+3fszDuA;YRkm+;Y=tL z>;kpr>MaiTd|W<)16!F-wNQDK#)0j3gXclK;Zp9=0gwfi%uK}s0G@I?I#23RQKk5Wag5d1gOwV4q;A)er!3}xf_Fp9{^Pf( z*Sl?RnAN}f^J=*o;My)ZkY;9WSzj=)>&QB@#?Ig50AbsVam<0g$7K2h2eAXX#SPJ? zU=p05)`wCn-=sldv&m|u81q9T`cdW>2kY?R*~2IJ{iIW@?)X`hkH#WP-`qUeGU&+; zSTf+T)v9>xy+!{-FibO;g!|za3(Sw$4D~cy<*il#128#|YD?2Yj&s^I6e>Z#&j|bB zwHDNV9bH*6jj(tsHO8)|25-&JqY5%cahL7pE~BY&00ys=q1U<7GWSD-G^5*k;lsej z;UW(LIgCUl0^5qmrWbtQXX1}salBEv3d_!7nuL<`Y)vNigVJ z*x^J`F?&WNy>qRhb<{-+v9~-<-2MhN45;hbF*cg+3iHftYV4Rx>g9bl8w)1mO$}K6 zH_nuGAL3Ms=szxon2E^5;i#3)L{q*_#`*QmB*!BxRwd6SdnTNnu#nEw7%I-xzT13< z9YcTHdGZ=uW61%e0I&Hxb~xu#^%G&>k{Y zK2&6y!#c7s>&Wsteu|ytcKf#w%7qcqu&#k=R>BCqI}CpBDD4(ke!=#3Mr}^WtPbtU zuD+3kw59xj#sr71=f##$!1zj<&1~peC-w3mH~LmR8#UA~gaDcIrQ>YRxF3O6TAO4c zy-i_VHXJgL-wps9>f$Z+-fi!=EbJdUVW;P}KGwGk`;&)DUjdIM7P~g`{;?s9v9rp; zB8dGa9IyHaWG-GmPb=tQJ7B*12+^i#aeA>vjf)kA$~!1FWN@W?^ae>i_LB0Rwpk$SwzArNi`3|_6!CRC=nYkhbTa9zT<-iwUTSN6R z1MhsfWUWsO5$OAE;XEF~LI{4O8_@sM71T;4R3W&c7ddsQ(V}XvspbAeY6fJvV4nX) ztV`phHLi{69k5@fXjqT~h`5%TkVf{h^H!o9D*%N=Pmb|LSpBrJxK#wL*>fVaMaxNUj7C7`@wJWeoeg7ORxvO2?bdO zOJP3ph*f$1xfC$T2@5fMz21_x4?*f;{hn!8E%^Qsn@W2_n%QB9c?DB=+I5WomTK`5AKT%5Dtl5 z@9{=t4@%Dai$0%yLi3GmW7dLz69raI6!x1PB&e@JJWM4YX;4)R3m_O}V6pmx6SOD} zh|Dy%t?wqjh(naJu3cO>`e?XXVNMDqb-%T-{fBL^Eb(6?fjk8X>~pm*h%&_W^6acN zQZx!2juX7@Y>#*=f~9{+Pi$9t$*pn3!ESh1N0i=utX8+sV0znC~Pn+=00=&qqz;=2>07>uk z^#*tYH$SA&%LIYl>i6kx&e+D769AFePtfdfV?9;7;vLsPk{xX(tr;^ui#c+3>Q057 z)Az$|6|=}VAr3`?@iW>GrX}rrync(eP$+cg&wJGQz&Q>d6 zXg6%x800L$w9g`jP3g}XkJRX(K^-;AA6)N!Cs}&q3-~hXyWva3`2IO#*^J1bQhy^v zvjP$rF~MMbFhAEkcz=DviJ<(w+0{mH_t9`S*1LB4mG1Sx^M)}!UwI{!YMi!i&U#PT zjj>A-%R#&KK_?0y%Qu6S?Uny{%6OL;oG#A|L??nWU;||L-NK~?T(;C2SH z&x6g&?h-E9Zh&ZuJR1XID-*=suJ{@juv0|{Frln-$UEs>B(P^5uyD1A1iX-WQOn^* z5J)D7NfWCP*GX4r5#!gL+*Z0@qJr}kwWFvH`8ghrM7#e1E=-Lh8TrXY7X{iN}c=klWGI z({tX0ZHA{Fv&F*f>oKJ#Xzg;sR&1v$4 z#x*M`BuMh}dg~ykKYSoIo3fd`Gx8~+93WDzymP>x_CC`%Gikm|vp>%-ojjhHRGzq8 zm}FQ{U5+D7fk}{xuX&NSRvC2LJ$f@l$7s-w+_REv9^L_Fj!7np+x#uSlQv8zU_#F? zeQ3u@XFG=JmKYC(2Tqv71Q6bvj2XLt*cqCc+jAh-d?5B|oFyjBLN;j)15ST(XM&7$ zinp)1;|>?`Eg)5H%&(X3=)2u2!pXPb?hDA>THSX8#v7s2=$8jgH&G*)C{audO~ntM;zE@ebShl?e5rhs-Pd8O*xmt zG8UNr$2|a6G0hHsu=NWUx}0IMRHJ`Fn(c?oQ#`hr@U2KlbUDBE@inilT$9vMDm6fe zu$$rF&27%hx9{`2ST@6>;~{S>uNXxvwYb4}qoL0WaT^teH=PWzu^JoI-bH61akYtd zm?hnXpSeJP{R&tyZAyCxO(bfY@UKhIadka;X##ZyrGC5EGMq>PmP=WW=b3Lj)_f6$ zS#2eS)gUJEd1X9<2Tbju^z6z;D(FP*_evrB1ZIdMEz}uvE^SM+o?7ec%mCZ!{sDm3Z#;~QDw_iMh{PiIPgIV zCek4|r+_{hy56=i1f1dffbk)jiRn4)&e%d1=d0P6_6<+@%L_wZ=M5U{+W;1$C(mV8 z1zC3tzg?iX4`UPR80J9|m><}2r-$Ft;r8B+(--ia#fvR&Wtu0d;|^7BSRxm8lNR?R zEoM1Q^(hgQ66Ft0x;u5x(4FnFnivzl?;@&8y~(STk;4i-lEsy|hb4p@PG_vl#d%N9 zBGFvq=rmR%J=#E+=%9t`aSi#?uW;B1_Y)OjH;Vpskf`BmaGdF3uk1q)TT1~&t4h!( zHSG7Y!lWli>RrkfMwiTtWesC-MX||lI+Lk)MnvNom3h@?mFpjA%^4;kKRqmpc3duw z?oLw1!-x3aFG+=p#L`g|Hy@*l*b$-i+7Q0f66rbjNAB_9V?!u4W;` zOrK1m55iUQXh;zU=;1ERp0OF*Il$0EmbJl1HL=OBh;XOo-~YCATzTb|2k;jE*!Uz7 zgVaeXm|q)oy4U#@R6~Pa6IA-+4qpW9 zJy=u{FknI5Dqv`yz^z@$u83S?KA2*s6A+~Z@ zo$?FL6aQXFy9%p(i#z*96FIdzyYXP#oM`xFcaqCeN51Ggq zJZ{hL+>VW^HRi1~_n}gZ^9x4!p)lS>L-{p<5HFl$;M#|i!5O?O>-oD)M3WjkxX@pH?oGDZPS)Xqf2hJI z;x){o8+r`997N{nyu|9B&G6uH2g$pNgdjVx-r{N(CK2Wak@^>JxeDi&%7BV4Is8(D znrJa`{93VaRbn&js8}Uo^BP@`bA3jsyH=9UCz&oJPqJ-@G1&u=N-@jur7A2eJA9+2 zx~%r>T*AU}%CKZQI#|l02V5h$d*vy9THM7@WH(U-Tf;!?56a970xv+^>BqIZ$^_fK zH{+7Y@|_ceoVYw`le6sJSn>-)=j3dhvC>suIJ$J}biIb%i-RS9VnM8tS3p?QJrUFx zH9)yIpSQQ;43i}X$BGxBe2wGV-_Sl)JDe2@SPWAs{vKzGjI$0Ke96Bghs+&~{3gVQ zXu8q^H!hEyw{~IGO(XcFvVoFfD|{hwXfZH)w9SH&Lsk*<-GlQI-}daNf*Ova_NJVN zuD*J0C-hH2Gq&6igSm~Y?b zb;m_qGXfbQkf-}dIQ^8^Ti*nWideDrYk@$B6Fcy3(0tIxV>bN`ih<NipB zZOgDzoCoN2Vz@s)H4g0M6QQe@_b3-HuCp-hZlwcZ_jg6U=1RvNDU9b#L+ls8F5@?b zBGmO@Z&O^?Gtq@c$E5`khO#bABpj>dC8vB?;^avof(OWJBlF-8z(*zc}{|+D;!>dY5>`1>N;ykwJ!`N{?fE#^h?K4=HeD=WD{-=JjLBrP$8P z)8XaV73Ik!K?mt8pR->T`drz%B7d$4lx(7*6f!lw|wa0k3fX;E{-Ba zI6)r{vh!x5>&JK_k7>@g>yL2IF?&a_4GC!=GS?L%I5hSR!wp_O39M&SKOwLC81JsN zIt$Ll4f7qd!9wb}zFgL%%^Po~@?+o8h}trWf6QK@(?FZc)B}fv=V{LchYEx5^oHD~ zPNk5C_qv|E9*kUOkD~f*?)P<8dFBIYmO@&{IKPtk>xN$?Z`^I*R7W5RbPv2WiTyU< z>ATBOd-?ekqw3cxy_})q5(uS)Dw<5qdBBZ00d6lc_|b+X6@=tXW@x(@S>w4eWocR- z#!g<1i3r0Shoi2n%22Z6?XNixRC$;S+^%MeAIuCwWJ`EM0kJ{3j(~cRW=?U#t>W_? z!^zYZkhzIlRQ*=owr<*TIpT=rwjFx+zt!)`Nl=ZV?$9wzUr{xf`h%09Gggt95&rWZ zuYni12?A)4TlRgivrhJw+jMA!lV#V5jq4j^H)!z(`=Ca+6$gmkfQc)v(eZ`8l;<%u z^GAR980r?&N6Rj@5nTY>%C=Smob5OzNK$uMX!C!fN@NIE8dWrL0bbgjtVW*axs5yPl)w%%8n}}w2rm1TBmVAx;w7I`u^6^ zSQ`uJ%RWa-3tyVDW1FhI2twOkPqKul+finGc#YDd&up#53;vJKNnEh@YC^WpDc9p! z$U_H%Vy{yU)Ws6z&T|BEbfQ}5xU3vh_>%%Zdw4{&I_cpk+V5w2PtBy$75U=sL_-nI zouhR8Tz-B2bD#_e=9dorJ<%}yK=7CU`v%f~{clu80gI%;{oMP1Uxt7rtP>V0^yLc0 z{!0HX?DCTDWH5kq!MFGbC#!eg(Vgo1ero%M z|J1xMjq|L~4=eJ`$zU|C)Pd5bTdl=d@&8pU|F3KM|FiyVL@Ma?+(rSacjnJDux_Rd zmmr!%oNSe5=Mw>n$Xv&N-U5s76z=NA6bS#=X*$d z-V29`itY+}4_d%7ENvgOQE9W$N|!1iGR%i9~29vLTKRk&PfB#5~+ zuxaG-#9&wamp@$7Lk?OpHF+2ch`Tld?+JQCbHs?7@s#?6|Cd9?+8PKoH$lzvd@4TV zQiCOLAIFlsiio-#M_~16N-DZJ#GMq<}3!?B(iE!ldz`}G}Hbc;wR!`FM* zOH)y-)5LR&K>Xtg9%ZMA3)h0fw@nVLzE8zPaX55C;E^mJV?NY!^wrcSdk5^YTL&?sE}Kg>b?p@Lae9OX|YkI^6LM)`u8{zWE8IbS~o9DgH6j;0QZ0@{g>X*mWV5N0g? zTigAm#w590nde=rE{Ergb2XVddIo7gLDxH>ucq8W)3z`fMKs>Fc9SwO?*0}P%URsYk@~u-%TxxiadCz97N`- z)~j*g%HC8^#pS_AK}Q$YqiK;c8Z>PylGd@H_53vM5-b87i@H+&NsxGC0rUr`5%;l}kK&#pA6r@KU-&Ck5+}6(lBT1$v1o`8@bi4UjKknVta{Srs zrq#5FYA}g0NbI`J<1fdYzB_nO~|J^}~OqJ+OMz2lzw?FuH5r*yZbuRW@EgmJRtcHO&M4Ay>?ohlv%9wJNd;Nn7K5_g;7 z=C}INwvq34qPE&vhL1@NDjKX;4mO}db&Q56v9`;%Ve(P@1n&`$_83P{R{^p5B@A?y z0gDH=bQ8^>ZrVSiGNtF)XKSAva*f4DDXV0Ohm`Ki)9pYOYgCnH32ir0VavRCK$2N$ zTI$J>kjenNjl=HYF0=oY`FV~eYQP!-gg~Q$g@5LFs=!1BTgQ6JJjXfx5>&F$qzJAkoYo!d{+vAiUwd0ygpAfM& zaroh#Ugr%G)xcSvs)?GICc}I8`_wPI(^ypdYT)wcJ;kA_TP;Ip%~W$*ZEr8@GA*}L zLI1JNhq7|>QvcH}G?Af6q$CNYRtH!EycchGWzybIWib2gZkA`ZYi{F$ zuhr#ZoGJ2{tYZv5?GMRDxaD*=21s9(W}_)3UR{=F?e&Fdx0}m4ipcu%utO2UDAJ&1 z?4P$qk28#A8CLn@9LBdT3N)FLl zTQnV+1f^Xi)AlOo(24BuV5bnQ)f-rxrlrY%V zugNPtXS=Nn7ymtklANCtWXz)q>r1Mw!{R|c>Z+{GKk+VTk<;eIEA1Bw2f~tEW?)m^ z!tEs>V8;Y?Jod}>ytd2~M$t+E0~nmwI1012sElOkmpIhZcoCaT{gl30*zQlzFk$p5N3d)qm_TZd@eJse^( zO5K3ZC0F4!jeGICo0>Y@<{Evu#f@FkZ7)iCIPTGLTfO9JL1`_!=n*A+o*CM3O{iD3 zw##$o+iJ(@nR1iiFbxca;XSjVW;_|twEuXj5cOO?3iSkqvg|{hpkw(Obom3(9*?nM zT{ZhHve4Co7Z$f{&g`iu=WxPI77BAH;dAk9EN@G%66A;H;bVk%bp`JIZ6O`V!K>kP z)1>Lh4z~|-qD^%cv37Kc|4ZP&ZRJNOfEGzZ_iQDvOEUJFS``xC^z>jqmElyL*&!#< zKj6)GJPg$|RTg5=L_8xl`_OccxiR%aLK&Ox+k`tEJ9~egAd0p?p2<7=_7G$7UOzh5 z0oX8I5x+VY9PstAXCMFO#PKg3A9`bK=3%fE-*lzdb`&9wMt5I(-u99m+pyBf< zR!)k^uZurS5f{xN07$0dyK)C3P0T~Du|hp3G~Y5<0h|9R;6d#*J6(oppM4W~TE7i( zG(Ap>xu)kfHk5$OUc|a=Eo!Q%^P%QTpcq=$4WuMc8hv;iJ#o|^s&#Ym0zQVK@$BBd zEgS3Cv7J*8aCyX<)y%?k)WW6h$**)<1tSA99W7<^D1ciO(K^l8G>h7rR2 zt(zw59K8IGmE6UHL-yl$GC8W}0mRN~;N)p*6&|8SgH2rQ$X}3A>@64!{*rVD%E3+J zgoP}Ps5M=q6|Zvn4MB5$wm=Zb$OBI}5(tF#oUgaXG>jx1C5+#Z-K*x6-6+kKbu9YI z0fISO!~S%gL<5WRhvpQDc^blnq~Av zd+CJc%Lu^o+x!HIK}_JXrdVWOks>>MmjF>t zrhsvxuHKV;kCN^1-8yIs#c*hJ(Wr+lH_5JPTgp%OddoBo7Sx`cPrkR}%g~`%L>=CI z=g?D2&Y&NKY}&V`3G{(#w7@@%LT>DaK7s{m`)vX=AA z;a}=V6#y>Y>DAN0hhK`b^%>7_g+1P(&OB=kC`)p?f2$+saceBd2LOMkR+F+T0%kjpZ=G4@u+bbxik);Bu&Wzn8GAb@ zQDcpf*#TxmOAsNOo(Bnm(d{jb$V~(E!*whl%?1q$7uDNE=JBAaQLA8liK~WQD3u_t zC|&`$TX$3M!9tdpG08GR2N|o8w|2RJetSE>r%9QFCZYR<4rBFg;kA5oC&JO_OTvsW zwFFcCu6?mZf4sy+J4^2;KTe^zk;uL$3=DHM^H|gP3dvLe)mb4lkktQP0GiExUjv$H z0X|qUl&?Bwc_5_?SbkBi^^uY=msR#id1&c%VOG95JN7>Ke9{Eywsge$RXvQS@Pfqe zK8)D65f7?C%kk~6Gi^ltRrTo)kW{V~J-ir`TRHGH67;)+9o8Mew^KTlTVOTZF3oI> zl~p}l6=*tpH~;fBh)}yXkciF1^I(J%N6_!^=D{7G?69JY(WM6{; za?ykC)>J;hx4f9x^q&9xaYoMBn_ytzBm`geF@D_pEHkGH+6hKjHyh8UB=~)u9c?P; zd{`80AG6IT2z686;`9`9?*ao-(j88S}G z@e+aHr~bRm9H1z7ba%shAN?8o6q8GL^&{!cKD8{VmudV+C#<_LD=e@&MP`OjV(7;B z8wWwzCwaXAwAL7m9WosH4BaOSdn_Kb;I5bFNOI$BULw)eB?uQl+^}`vD-$mlAL))` z+I0q;aRp71-y@e=hTgezg%W?s8P}`AkILUfSX>#%&@{2;B<&sPh1F-*j;$R}?EjQR z8nc?nwr`u%CV|Y@%fRz&aIb2eZHLbg-RD4Vn`cu>gy|i>?2zdExbGil|HyVV_mevN z9dsOBkR|s0RFwbtM3XTHU-_tb97w!As7|6BGkYXjE7*j-2TL`fBo|o!>h&97ysco; zF_F6MGLj}XYV)iAMP)7O(l0XS2T}IX<9AT#RFO|akDcVECJ0SlX1v<^w zL!raqpd$K%G8uSt#f@ZPza0(3Mf`pxn^*rOFm5>}49u`A@v=ct$O+=%z0)vK8s#bW znpK7kASRhIa@x-D^tYg35=b7TJXP>lTh5h9tbT0{2IlA0czXO<|KYU@)}tsP483-f zqi?v8@bi1cKZdX7NGb+ZBZiy5?^sc1q6{5hW(TN26c*Id54j4x&K@sc`zU+-#R1=E zFxwnVW#z!csRrd_3w!Z<9A8846@s@C(&4`YvnUL^$K!m#yw(uyM^H81K9G|Fn1JQB7rOyZ7z4xrA%qaPd-L79 z?&?48zjyVz>szj+!V+`NNzUHy`@GNdJF~_BXAr3X5ewf*&~zMHOwRhsO#U1oLas@X zc-LsTzC&pAXTT^Joc^{63>J~A^@hBPm8RM9OYPkQa~~Ufd&mG=Bx}U$MmFIKkS6j} z=40}Fvt+*5B8OkxAH9g~4bo*KL>uOqdNBNdeEp@&<^s5sai@W!A%^t5hdife%}J1J znQrBbAmReE$q02Zxm&Eu;sh`Dl+}|I{=g_Q43&WU{!QkV)gLM}w`e_I%;X%Oo2@<# z+*yTD?TQKzYoOaZ%}sr6e$@K_@|5xj5%g)*V(VezFBbOMNh%-(oerR*KLBHq_%36% zqgP0kpIZ3Oh39}YV8|h)DZ#y);@sZtXL}$4;aku0 zWPhiOpY#;WIQm$g^=7X2D;uTkuZ}UsgZlttMmAPAi@CTFHkJ_0pBvMyO=fbO)5^&` zyNFnCaLYqI3=&eRHH{x=(2LrZ>O%FE4PggJ9SL(}s{vfrW7RgF1A>VDw`+F9-3~;+ zPw?e>ynn{KuS+*|2nO~*g9s8hcOxJ5PR>$|#qXB3s_cyXS0kMxiSf5ZUR}Ng_8<(8 z)C&q^I`%h43-m0eGB6)O>MN#;ar9p_V1jXeQphY#?&|`&&=YwhIl@b3b)CPj#Pv8#dkrN{!B*scfcpPh+^K zx$n}_L*eEtUxjBD1{G8aP07;c{!6!xTlUAyJUuspd2X<*Q8Jk>U%noX*&71f6lMXy zehl1Gv$d!Fb5lMETHm}Q+cF)sO^(GzRHHV{?+dZKf`f{}_;Ir_Wy~oOlMzksj|4U`(SyDRh+`QYTL^ zi}6Gz;in8 zX6%m5k|&4$sGAMrC(?NTOMeqaA*_%qaPpsP=pTXIhf4i zkAw+`E}ML)xB1+u?Mzs2s()lu>{*W3oPF1$>IDtohe1}6c@@yghs?E@EaS;tjuv=( zEAwUAjCu54w>-?{kJ$m~M;g+^eh>5`H$ebce4G3ookkv2v*W#Q>wZ7ftykN5)c0_; z67uTgoo!>b=ZK52LQSXwE_@hbIIfYN!JP+H{6ah!uWF7zF7LMSH51(My?bzU+*J6& z@4@Qwdd_UPORLlL?7<6D)vUqp_j%-GnphK>C7q%Vr0L0ZydRShbw7X^zl=&E4_e+M z-^=vVX#0ip@o~OkepScIdqH3bS@4)z1!bIOAVi95nURyrrO7=CyLfdM-Z>w{B!t7% zv?i@u_9uo2*cRH?n%gO7#_m3o*9|5cn}1T(9sN?jVi2N9*^Z+sQjlKjIx2B1w)opc1W=(mHPWchm)sv4(jvaI@h$8{38EZy*T-D0fW|!oo zh8Qt_&SV%8?=2mcT>w|j1mu`xvgpO#(NSlHd6nQR6N zcEyn&u0M~POt=|`avY(!TWRSqvv++Rt3lFJm}Ci~PqHkplE14_r(@96NKCayA30(1 zuVof&9IVt;UL(4BH9TjF^jusIaO9p7@$zfL)dUme`OpB<7_R zQ@}a_j1nv}&t45MW zKBL5nnnwL$)xFgVCjGb+J~s35Dz=k4=s{xe#k#=$O#=Oj<;G9MZ-fh(G?M)DrvYvSje7pi%f; z?vf=rj?}MJF;Y(3cW_UB{vYk!5C*BCkvOC4!mt{0jc!Ab3FdJ5ivcT>yqDO%Vh1}s zz-bBFw?6g0oz6Q-oG}MfgY~rn#`nu@q3OK?5kKqW1);&H-z}4aSYQp15u%eWBm3Ue0wIJK^g7GHeNir}CFR`78e$E-8R87}3~`4Bhj>HdL;Qh= zhh@Q$7%e8h4rUcnPuDq1&$=BZ3itP+49@a#HPEWTn-*!NG!%HNMF>`-!T3dc84-@n zUdmiANGNprgcY4VpB2p=Z(FR*%Ac)ruw5?PJ6Psc$!il2uVt6oVw8RfA{tllyu8tF z%v5G2dx=N>loAFLHp0K@+atuUt(gYH*DtPTrOz5DTsAYg1EMc(%v#vr1HKAgkPYY_ zE=X5Mj{xeoz2AK)XCnuF;6Lik%-P$SL_Dc%)@lCi|NCjwzuzmK(E!=Ynorw=BK#k{ zS4}Ks#tngo zee)V3g|%$ z>kl^`d;)x%%FRtVYa6o(JCJK&+qlD$6eDA9Z)fG)<#E{(3;uWuIFC;tr?C7YG1T6m zIFH*W% z2Gni_M`EGB1S(BNyL~s;EJ>RBScX8PgIt?~FUr9!4kQdO%f*Oe?o?a=_3pcdbaw|8 zJ_cBuhIpljSU!Hxt@7uiJ}Hdpp|}ieq5R?MrYWB$ z=5}n|!BVaU@hH2GVRBvx{d@(5dMfwzl?gg`W>YC)jKB0tEi-f3vU-<40kxIlJ)k~7 z)#p&5<9L${^y&EAh<>S?Z_!!$B$!TZ`8K^4d1MJRB@KNSm%l@XmfYPs%MVPGLo7}* zkIBiIv2Ee(KVC?Rokc0(oRm0aS2%M5!QsBTcI$zw5T^@4t|JTg#!6T0BDmUsB--p= zXddK9q*5iu*z4`}{|tx~Z2YJ2OAt(B-=X0KN-xF~XK{-rH|&5Nuq2lyJt<#uv@~tB zG^I+6_#W$<&q=8}-z)>-PP09$|J4<~@@+(mqcUm^X@c{15yqcU`Nz&~FfCWJ5@(xr zB;KIacC7Ya2c$eNC}9>>gZ#i_2R{|y<(_DiOox~eyeH4m(p>^`>??6*RV*@JG>L>GJ zjcE;jaUnyg8xe(zB(JUkZ*}E(BUDkI(!R#}-TE_BUmTaGjIkI24P9(cd}%+k)MLf~ zc4O8_k+!5()1&NCIR{%rvU9Jx+3nZu839+5MXhFuT^X_-gq=!} zzhnPqej9(GG=Cmp_cASZeQ~#5IALH2$T1*h%&m!TWD( z>G+G~o{R)fm6ECEjWnBCSevtT+p?)#dt0{m@Rof5+vVozKFzQsAVm)gE4D*b4Sn+< ziBPi&jO$;sSl6m9>{d4(4=;J@xY8ntmm zPJvr4CU7hzS=&sGzuADF?$w6lValhDf^^~Pc5XjtY8QbI27}5wRTmZ+A@iRBdG1>o zpldSPxz>N>wKAul7(W_Lm*;@ALSFxy@SeN<(*C<#sXM|s{;kfO&Rp>C+%>SYd4SwP zu@N=TThzf4QVZ8&_5VgHp3~3~YvTJm*+%_|r-Q3>c;7vEI!vD`Tj_Rv$aGdXBMOF<(e`;ukRp57efcsT&_n~CeJBRY7rj4d)%+C2`uL?= zWyqijQ8D;!djdOy_*JooXTrX1M?S9;?`Z@$jVc^$PT3K<_o!Fl-N%5e z^&-y4>15Dvs!0MB7@Sk-`;hDG{d%i%z(RHPmmDmznI0G*t7>b^z zj?`MbU)*=bUavh2EW1@u-dx`}Q+p8FIqkS*__4xgxHnbjZ7M&c0BCdDIz)A$s@=BJ zk07+4c%79+kZh}X^tOu+I-i#U7GYxutGwZ>2#0~R;3=1}oCdS$KdbLcq4iCnvCZ6f z8OUtReF%8?LmnK^3(20-5!kD%l@x32*zZXOwL7t++EqcnuWe>mW;3i`4oA2T)RYnp zDM$4m4K+URwJLlu&<^QcJKOF5Drnm8wOY(YPQFo4Al+;Xh!LsaKn#!77oG!bU@tGA z&HgCG=Vrco*Bf%0vS0sEzhBAAsbhVcPniyRahaO|+`=Pmb&>DFyAtT}dt>|;NilP^ zaBp-ccp$}B_MHv84T0P}p1wleYCu1isVV~sJRGCmqBg2TKFAZa;L}2oBRuh0R@G%b zqO>6y6znOqd-kZ=EM)aSZ*#{?#EGfeToo{?O1@zvgDgL0^26Q0f|h&)i8lDUBa=yT zlX!xm%dC!eIq$x9c(QyRm!Yz7q1Ru8)Q3tippJKzOhWJm$XC3KD=caN+^++#l3m!T zmTHDdbS^qEAs;&CnBC;vJU_cXfZI?_ZhxF)Jb2M(iGlnDSkYX6WnI9fU%SfsGL z5Fd4`j&PGT_a47G8g}5-Vi%YLI#ei!kCPe~@5+spYn~AG_X7?(Fr4*Sc(?=q>Yx z;7@sI*WJ)(Bu1>M7Cg>I43r`_b(Pd?beKmp_L)_On#Qq(w_?TA6kt&tb;o&J-EWZ` z4hGS2{TP_5Z_B$m?c_?Ye>mSqCgcHXK%}(cjCqVeBg8aG)R6t`)lc*8E1;;_LNG!i zlWrA`9X4jd=+fQD2c5Mhz=tDKZZkq6B3%sF)hzQGkj$+K*orz??PRS9O(x>T(Xq3f z2ZE5AD*{Ol+Q|?$i!u=Ve#Pfm9CKK>EIMm#NQ@mhkv~j$2?VCqxaMV303nKnL0jE&! zX?_;7reOIpvf9lhaEOo091S|h^Bv8r#cQ~RE6EmxGJwJOtq|0PQhau1qjUYLpqEQ` zLy!9-iEb`@)Q7Ql(VKd&NKu2e2vWFRSnA$-gdIu`&#zsw)AA9uAh0BvQBF0^0^qS)zoBjwkv_b@+9ckG+OH zew_mm&rcxlqP$ao#rwFt4cL_;O#t(}cd|sb)!5Ms&#q^ZM7l4lS-j=MfIt8uPNg>* zQu4ECxjq$QMaQ4?f4~D+gDI7L(BfQeAFlh2XITR=A*XYjzfbQLtx{kMX|n0*foPbVMyTZx|YQe|3hiAH;KZr%ZC={RF3S(R&sK zyt&4Nwp{S>^u~RHUKeZ73DgMd1((Nb&ed;zJCYA7?RnoM5Iuu$T(s&l;Iov7nG-!^ z^C0%aF?y0sG^-Atkr-OLXDBZ8lI#X2KtPeVPPnksp5rEC0GD5BFcZL9}mHv?Nl{cpay0r+nK`{uDjm0l-{?GC%f1 z&~N-P9bv3jYn5`&kg|Ww1o!k{Rx3a+9&>lyoeGj8I8Z!7G}$)(Wvnn;g#{S~NsTbN zO;um4s)_^OlKGXn6|K&5VambZzRucP)R6NG@e7vf!CuRJiI4`sQyZHBJiPhQVkkL% z0yAl2YK?x#;yVyc8<9-_c+e&p5q@YA1Yx$wbS+!7TAN2fb*lM7U~1eC!rIAr;V2qMGaPZ=8-8W^JGRTrJD=q z2+{_t5QtYuCyY#Ux$w~kCk_=_b-B>1ANJbaSteVs>Am;+62{;O3R<9NuV$-Qk%mpZ zvRI|eOF}v@V5E(U_2KE_jz>=nx(kJ*6zW~JIyfvBfmT1tK*NPFSTwal1}9htjYmpm z?3jS`xDmTGOCp4BSZ;9>^hYl=;|sx+kF>2F6}8mw8ikHWl)oNckWJe%r5w%oUVXII zVPJm+bwY1;ssnhbd?ji{#W*w(m`RSfdu1JT&%FM(jjdmF(q8axpQ4oM!@LDybu0lG z@m|QkjT|I@ZnqHr4(^TP{JN$IV8Qc1fz8t4b@9fmfo$s#i(<1l5OEvehYuYp+yZfi z&gyac1{`?9qGo+-knYY3P zW3s%}@qJ{QY@~B=C|gsgDIt9caBNkE*@SzvLC}ez0r_VdbuIOy(b9pI?MOl{Ntwt)fhaE<(@HXHS$yz zk+j}#b-M_tM~&@KdCT*?CSA=nH1OIJ^{$Csa3;a|EEIxs>xOEr#64$=4?5Oi)0X+G zC^uU7H-hYt{+ptPKdSHojmC(miFQG8@+MMi38J6c+#OeY;MELSXaS=mIRc}L#xryK z?J9Z=dhELZ%K3)$EVvOKfg8aws%we>_gt_!EJ52`+U}ms2MSXcI{hM)Lx}!&r&A1$ zy1Qo8ol}Cv&3Bvs&+|5-P_G_T8-3YkCGt-({%Fg4fj#K)OhvX}87W)x(C%3lAp7~f z`W_QXu6_vPewAfTBOC5|(;~y?mh{t7JsNDZ2%ZJL0|l5N{n4gV3wSN>Fcjtz%))^i zD4Vn+g!0__=?>vq=!6-^HeGY8UFp^M{U-ugo8A|tp_bl;2{qjC-X4bX5%@FU5gpVD zo>`w?Nk^yNJxH1`q_WF`5B!2!iV`)P4S`XPblfVh_kVQ}&Y;1>j1473WhJ4dBi^-epx=uHB#Oygmb>+VylbVfzp5CA}OY z%HsQMo436tpf)<5(ja2ioT8+S=B$PSI6?Jz$wc09G$AV{6qX0m@!>8bBk0zIqLB$` z_^o`f9~u5m-j_(l!F(!jVkbqolG%}@A4MD7p_75oj~F*_E4+p>(J|MUu~FaC0&2um zAx4<47j~dM?|==e`*32&6_H8*v1-|rE31T@yaXM^k$7Zq-ae?+|OtRyKKVk zHt9s*IJ7-kpCf1l&+7--Q0!73VMMgNnxK7SXU^e)skw%6Y+#p=zu|{;3o_wYrE3Z^ zHj-`$2ApV&Zq4;7#WRVS_*zc?_~j7On}Wk&YwJy`3M<59N;R7(h*kB}uKY{W)s~A? zDe3)(RAWqkaDUf#q<{9u11H1=6a7tzs z9i_pS8uJ*e?HUSTkTqo7zP5LM{4iGc`&aGS#wp5P^AlX*Z)dJClQW2GE_9u`C?|t{ zlsH!};N;yyL5O5?ITL2prsK7rR2?YZ)K{U`i&rj07#~U}6O#u+%UCWg1)CTf-k~7H zD2)sVV?oXCg!Tt3LcSMK@5%Q%gujKz!-JOd46A)IJ&bbg*6<%5Wgq?JHE~GhN|IbXcL)<4+MUhPncH+G2Gdx&`YNL z@0W@tI#|E;dGrR6+JlMb#*J#5VGh&MFKOr4TN1-=9awS>%x$+K-dP`8Vd}AeU7FN) zgT?zyGFWmHkEFNE4~mBb)-Sc2wiKIXKb_h28>p&d z&j)%`j#JA}e$@f3~DYPdTXGbKgK41foyi)+8x5F&XEyWnf~ zU~3mtjDJEWMup8MwZ80uV}dd?1v$?z`bGL@H<6^JhuIrWj0MLSu2QEhj~4rhV;0}v zo8~X$)@AS4HdgMJb7{-FgKmNiG#@--LdpIv1np{XEbQ41b+_)*C$3c8`Wgt$Q$oM5 zP@wkM$wpp!7!&XE(JxCtKoe|jYc*5uLqpONVZ<4A0=jr2RwXB8q~TTaegLKh|NE|> z=k>?N0Rw0CrfLcks2ppq0V5FqlB+zIe2WklqA9ht`ba$(9H^qFVV21y=?&VwcF!Gf^LT>*~ z63x$JF0qkiPmdzUFB%8C|LPZb=^-YS1Rq(2j!DFg;EgC+j;0(ljyVU{TCHP#aFk%g z%L1{4!C$44f~@@73{rY7`W%V2$!@m2D_}Y-gC)@6tFXwaU1ux7$E`folEZ>^Tzw2z zJ>lZ?-nvIVg3#G9LwQ7WF%pydlx~9yul(0((n<(zP|fYF-A^csyfZjHXS^Bl$5tL3 z60L(VQ4|;xd9ZIKojmh$$oJoGc=B&?L_bM`fHpn6+kpJe$b*hP@mcv6LmT8ZWbX*M zFnSz4`cs)(fdviTy;9`+Y|$Xy3+6F@;yVTO5P%qBh*&k;+5M=_oLslV&DERisUnB( z>WK=#c&NypNjdvMO57A7iGx}(7+=+pm*H1Su4eE4`-}g+2LB&^4xGJ#_}~Zwm<@kl z5e=$g)0e0NqB|~Ws;YG(a5J5nbUc5l@N9V;C46kC+(T`{e#r+&JtiUFj9#{WFee|@0wW!Eov!SC(>zfj=M*V_*@{+~CP BQX&8V diff --git a/tests/test_graphical_units/control_data/transform/MatchPointsScene.npz b/tests/test_graphical_units/control_data/transform/MatchPointsScene.npz index 7e640bda057dabd7e387749f2cf3276362a90ba5..e52ae754504ba1b29114a43bd0a6a15d7d641b3a 100644 GIT binary patch delta 43 scmX>hd_q_%z?+#xmw|zS1BewFY-jB){tpEkr4l%qbs2Og*K&FT05V?>y#N3J delta 26 fcmX>hd_tHtz?+#xWO6O1_(qvHPG%8i5ZfC7UQ7mP diff --git a/tests/test_graphical_units/control_data/transform/MoveToTarget.npz b/tests/test_graphical_units/control_data/transform/MoveToTarget.npz index 936f7b402e82d056ef3615c7a0444d679943d282..d79b0155353874d7db4ad0a459323ec0d456b3b0 100644 GIT binary patch delta 43 scmeyS^-W7Ez?+#xmw|zS1BewF+;{Hm{|^NlrT9ddbs2OgYm0gV07~2s`~Uy| delta 43 wcmeyS^-W7Ez?+#xgn@y91BewF+;{Hme*)w>oYZF6D8(nrEW#`@SzFW_0O(Q)=l}o! diff --git a/tests/test_graphical_units/control_data/transform/ReplacementTransform.npz b/tests/test_graphical_units/control_data/transform/ReplacementTransform.npz index 7d5ffe8e56395c944b0fcb4372cfb9f5a3984078..5b42aadb61bd09f85956193e16a791d9aa638fb2 100644 GIT binary patch literal 24023 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 EFUwR+qW}N^ literal 23941 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 C%KS|L diff --git a/tests/test_graphical_units/control_data/transform/Restore.npz b/tests/test_graphical_units/control_data/transform/Restore.npz index 263fbba5754d0b3d15aa546c74ee316acd6adfea..838bec5e2edd33ac91b950e5446f04ebfbb17ad2 100644 GIT binary patch literal 40804 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 literal 40860 zcmeFZc~nzZ+czAwmAkddZLOj*)!K?Oip)cZtwmG>WS)tF5CH+h6d;gjZKX1*$P9_f zJj*Kn7!39=@cRUet+kx}EfEGgKNb!<0Q&*v6MQ4U8+r3a=neJ2JCVC!|K2$RJ_>_A z1^rrJVCr)1n>DTv8qMGPYT%m_KmVM6{?dtfs==uY?}tW=RG= zV@i*0q>){FOE~#UqDkRmR9Q@90;=Lj{z37jRO!i0{FU@%+d!RdTW(p*~ zu#M#sl@Ynxs4b#m$d|Z0hpKH+Ky31{0aQn^{DYNaI-V;VWGAtDPs#t+<) zin0jb9KXZo-wrWBE?GFF>6IR*b`MfE>+G%tORHTCLN^SV^FDMjkdKldR-lhR?c z^F`EesPdxcNhX|P{X4^@()GdHTVDNd{*vt>>S>&^%Bp*vly{Nx?%>I9?>8`XH&z#2 z=f-PMp$lWxVE@K0Ov%G$9{asTO4g|O68lCRF9a>FXv7s`dF@6#vWO|YI`>wZ%1VX{ zpA%wcGb85L*?Mafm8uS-Ad-EANRRw*ZDPuAk%VE6e=%Z4FV^oTi`P-at#lghW4ri8 z2)l2bjDh(D&L$iaaP^q)2&}ht{-c3!T}sW86=X-8CcZoR^2TE7)hvDV+m_ojgAm>F z@iYzBh8ytok?4}jFg_D5Zh{pzYgdsaoU-wdrx&U`NO3O16|Rj7&fxf8`;K&|XtX_o zn;ERkGg^!7-CIK66TZHi<=S%dvcOUalN5Z3cEGlRGgM+LRD}&q;>0{zn(?ZgP;TaB z*tW#9q9*p=&u%!^2YYXR5m0N{r(^3BPY##XAx~nC!2EcR?jMNbBQ|b~ds5VoSpNjf;Z^5AJhWNwZ=ypZ`cSTbX>Byz4cmZJOp;lNRd4EqG_fu8@f}!(c%yI z?QUcZ8}=+*y>(@v=@Z=_dPPkmzMSIbI&J3)M|ZTTTWz2_G$UN~)($a#?SfDaHq=)? z>UPL6dSejG`rANOCxwXH7B3jUigRfm_!zg1_f|eM>jSOHii-FM5o6~>C~}J;Mtaqb3eT%%oeQb-aKAe(l zjP9HeO~znyYQh7+kj}=?>(+WT@R@KaSp9Nh6&`M>&ufBa@c$2~J$LEr!u!&l{bus1 z;L$w<9Tg}NcSdBUh|?dDi-OkgB|FDJuu)dEGbCflm>2p3XBc|7w&oC4eLAv_0B#h? zd9UO(BN3y(koL{ek{yxJn%Dy{KXws9f?lYNj)ZP>>(iTv^}l3xrj>vfjyu&vprPZV zFH8l~AvAC3o%5TGdOtOTcrATjqRZ|BN7|O&?5n=>`VVOAQ!&DaMB}Z{oq47qqt49I zveUuXzlK;aBKQB^(rOe{M$Dye~5_z%v^Prbr+0=kb_2fbePepDY zH(G4+0`q@|%QlgbK}OtwX4P_YF-X(z^E>cjCl(#8#3LbK6U-jh3v?SQJ@_^jMYB0D zFL%dKI>$%~rZZaSJNUw3@$79Uq3X<|4V3~D^JXv!A-&mp8h*nc78_}V0y�`Vd(c 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 yBZC9uJrGA*xv!4z`#=3e=l_D~- z2qeLQc@iN60!dVc2nZ3v3?Z6`VN8rb0trd(`_lKv{nolazMsABcVV$u>mByq=bXLw z^PIiUd(KV$8#4$5@)zLmCrFNtKTh?(e>5RKLc(uci4B8ay^?UnJnnk38srDa@tz~V zlMo2ee(N7(iIY5>=d%G*7DVj(t+-&<_2cJ`@ALlbr51Mnhu?Nx|HkaL_pttXL{-y` zJMW+Twxlb-yqy_?AOQn z`Sqvp&SCSte7_pi3P0zf?6vly3M1cjGeygQ-d8fyal1~%`C{pA}Sbw_f8|&Y4sEvy7n@Bwh*`?r$Sk`F<7# z=vf@Mt{}Izjdt%iw=*hMSVtCb^S&8S)D|7v4jCyK{r`{rKRGWmgtqv0arecx#Mlux zzIQc5_YvSaVf9A#&k+KpQ0+g>vHvseNptUerKTRTtnJs%+#WsJxgj7(=^lYJ2M-5v zrxdkR<%1aiIxC8vf33mXOkS}mu)-vsEwn@2&b?4QiWMReQ&f~_QP?I-k55%BiWXnXMLD;PQs%JGwNJU? zX|`wlmqnf6JGO94?U&nQ@SJr4%uOP&DYbbvKQP=#2ZDO^dF>HA)e@6^W^SS}!mGM@JS1buA5zhlj1+Y5U^(SNT@S1Z zN2)7)isI?X5>v=9=l2~tdqfF01Qma*E*%}IT6MBS?}01`KOAu5^)QWC#AknNUL32h z@G)>qd`H}#Mh(QxJrR$0XhpERzKevNtnyi&qOialj$glY@Ljc>3jiI@8v`nR$+1&5 z7*JM0-Vy%qBCG{q)_5e-AR}Oeidx(!w-f2%>*?K3ZI58k~ZNRY+FgXZ4QCi{SUS!h`S|FeEkLWUhZ-z+p z^X{csmImZGYCuX)W7#l#pBW(Np9@^2h{7Eps;3R5Ei$QD4(J>!g8mEvDcN{S^Xdi9t~c9vfRm~auyP{s z8+}XmkVEc;ZESs_Bj7NF#ZgEhsPfMU;$6U7!vP6ynhu9>lFr>*D&bJ+rFV~^j=*3q zHYY@Ge!B0vwO$O|$3Ms8xma*a`!yX+ahn}RTebvmjMRsWzIzPLLe;aJY@<|_d`l8{ zQ#NK9O2UH1@L{V@)(5cCur2GQy+*Wc7qwv1A4elD`a zO}Bt5csndIi{jfYwemNuyj#)r{h)VkDp>eznq=Av7#j@msW{L~DhpdT z4!;jZ#s&#JbN6G%EpXW*87Y$#B5)No_WX429lX-&mXI1PG0nR-pjN)}sul1zbbq1s zk*E>#6SuCi&VN_QIKR;NaO;JqE*VdKcg`dWmi$eATB~(eL?eMn5(bc?e1@z3;kf(| z>UJPi8pt&fZto$er%|KXW$s?piPKkZgD-Fz3xt91wyuxW1pztB$nGd6|I8`rSUF~C zOOQjt+_~W@ zSAocJ1<2WV2MCTjL%6JIehQ3%navx=$X2&RtnDVtpnkrF&5MzrMFp z^xyytwT4MueXhkkeIzG4G~XhlV~<6)y5L>*hE+u8r-smw={c{4#gcyvQvB-YrW-V|BQr$?Fjo7VKkY|=WhErTJS*24e5 zz%N9I1rfM?;v&Bpz6HzKzyc;YwYk*B%@%PGm}%T{1h01o%OWbc3SBu`>Of(?`h5`5 zs5!yZdQ~RM7`tQ;?Mpf@!gHG<*&*&DfW@0Z3bx$A`%FJ+Nn`?Rpj)eXY*K7R4qVoT``%{!L+T~A7D zDcQ#Eg;$LE!KcP1&Vd-0ZMa6qxDA9!}ixx>49k{nwE-2qw49dInQ zI@bz3o2~vWkiJmWz91QbF_JeM3hcvfNc3laO=23P2aG&*0m;yzpcHcnte$>p)uESA zdg*-q8}I5W6lwo)vYR5~eC-*<{u>d8A2l6Rkr+xJ0MLh7nLWAb5ov&i3k%$bvKyZU z)Q&6klfOJzALPIRW>b7#H8t#a6bg6o~Ymb8eMsgB7 z0|s<~`sf#q?E?S;)^bzw%IUL!SoTK^vuq>0A{tE3u=#P8qSfjW#iL{P7jI4AqT zQ@t)BUT+cHK&Xf8;Qc2%11+3MAhNqzn~YR> zHv&snJ^`>dx13EokRm)HDrhT1^-oXd8Ut@!a1d?2rNLR?@cN5?wGUSGgaVcYPUey% zp9R3O&V$kBi4z2ZlaZ%Ggs;~110Xw88<2R->AK)iqu>ywEp9WWIQfluYf=MR@ka^h zVEWvvtx0e(vWJcaA(8=~lXSC4nU(x*kR;95QPvf03=lz+2%It3*nLfu-O6t5JB55*H(^Twej znnjJgC!hz2rTT@|(R<<Z2CZ8pw{pZ6hF zhfah{u8X@ko@RkfZ;51QFhga=X7t;FJ2zSM(DTy?+?2(=RyVGi23Ip z>jYdLg%Dv17um@l!Q|Q^TA^r5|3Yey3Ns}-Qr2x1DN+*&U0}$>|9XW5<#~Fleg<5% z_Xwx7h`4KjWWV1dAUVOSnw~sW>w=dw?QtWUZg4z}a$Fe*PY?lI;42AQu2kEoO~YrQ zml?RhGSp&vgeRKdBIb>_6#;IZLMq2N03eJ)e7kT@U6KQYk52RxZ$0)*r#ZnvTU5MI6x+XWfwzOy zY9dE}^QtVqQPUtDmzvwX-r40CR<7FZkI0yPKz3%CZ2Rz^?0ugO)lZvR-Z-akWEf6Hcj*Y zf3@eo$MvfGit^3)L)vcq&6_%1k2Qow2m3j;*~QKWGzrI?KZ`6)jCW4h%VNo4P1iglFJM?q#w%Iq%0!lr!#>&uft6v(C^$JYw2qJG;{tk`zlbEYX5xr;+|?DyO{c*B6~ zOEES>mdNri@6xjk3LI`Iuiv~noitr_(K<9`X$J2YeH5bmo3!6HXAFjR_k!De7R0bi zkzO6<{td_Ic%>`9)?)fcJZ-tVWu+-Mq-VWhurjD^DRg^@ICAp&=~Q&TzY8?-rBb?c zqj9P^N*kj!WnJgA@FHneMixt!7t^iB2Qi*mv9_WI*d@p@%}7yav~BS2z=Y|V8d7c) z?~a;+-+n-&JC~$P5)Ul8ReNSeoaoG?%3Sc;CVd~`vE6*@tV)wqO8O$IK+ zjy5CePX|z9yjBrsFcuyKP^(2E2BJHvu2Z~QU>Xb*z)n1Fn0m3!iGb~f!&Zi$;${cb zUv-}rR47r*S|9X4q97QWp%l&vcWpnuQHuQzjr{~r2i*Xw+;XIuXG-=cr)n^mI z*=ZRq{W#HhtjT~HA2?i

      v7+MLX`-p56S?==wXKeUd~U>#*`phNxx4{z}?OAtrht zyHV5W?*KJAMKc>Jv;?_aeIPTtE66KS>z_i?*`w&yJ4wogK5);g%y%dLzzSNM2k1#y z*TcKww+GF)z{w5Gj;~S->%E!C(7fa5p|}o`KhG)OT3$Vcvo};@xd6bXRN;CkkMDCS zL#>Llbia)WdU~E*HItWu(6X6TI9iU>|5Y)%@Y*8@? zyb;CoF(V#O%vIL56)4Bv8YP@&$(cFmAepz_XytTpSTq4Pjqb z8o2_MjbYZ|m2f8DEX^n> zwnWj#up^oCVtx(@_lWBJULH)pK)W3Pj6My-SXy4fZFZ21J5y0Qf!{-1Q z*Mg`ak(X4jp8>q<(diS3<|$uO{IblGi~8OYu^SY^mhsUf#aW-_ zdOOtz7cs{=0$hNOYXGM})UyNOEr*?x$Dd@;Z^xD=F7x_}>Z>QQ>kx9xMFw5mcf>pk zOc~E+qVK0%ciNcGab>SrgY;N8nA*4Sb-&+_7!4=k1XqlC}2nHNDAt zPp728R&lrcSof6+2enz>AtS0X8g&eQfGLKVHIB0RkBh*S>HZM$9jwA0&f>Q~*SY9fquXC+^M?|u!5g&fzOVBu4B;YgXcDCjK~>nZG`mW8v0(0OGzM0E0jGERnxRHX_nA?J#QbZc1ooOI`X zJ0z3)K^XUCkqn~qO-)i|U&6Xtxi)5j;jF*@_qf6T_@~b4^cUG=(NbdcB61A0NrevP zqnX_O9$e&a`j!dT&x*zz6DLDfu8q|AONt@G#9dP{+R;+t-gra&Z=1^=jTcBgfhPss{bC;TsDpoU#`OViC`18nD5MpPfl`s%P){AhPhwrjq@Ub)Ebc>lJN z0pqp#ef9cnKhr5!ao+=T@Dk^navL>T;3byxv+rnV+5i0{n(H86R~t_N!qJ|8QYX5S zEt!TET1TF5UvP;_KWgvR^Chz4Kck7!KMSr3=Z%R@8AWfcORXf9t-&2aiygHfd5E_k3^E$s=Zh~0O;Ptpu`qvn z#T@_P=*`v@$hqM8)=845lgS>fNoP#{`IxCE*v+Vsmm%>O5Pv-ba-FV!QR`B!PWvx} zo}$#bFv`Q)zV8J9y|8uV69h1 zhk5U=AHYOI&fzNkVisEcc1A>B&?@uG3EEYiICTKXrMf4jn#&o^KZK^l6+zuj*k2PE zq&pf>raPt6>gQ~YijI}d6#?y{6K57XnmpQ*c)j88@YbVi-xbU@HQn+A zCX?Z7)OLD$4S;Ts+|^8E6cY#9WLE3a>& zGX>efU>Tq^5(p+Rc0%h7N04O;3V__Gf`Qm5+7EVB<0!S1Op0f)c5I=a%HU6RYJz!` zPYOEEaR&s2{`BIt`0Y#et+pm*`e}uaWZSl5=6)Wey<_hR0HSmN3=G6UzpakW3=oO>^?VJD;S2~$~w(!UWeHrVC2jTx4BP1N}GJ@s7^4IReh-*A%;bM0pf#>4u|K)e(V zJs!vVB^$j$XDyD4|Kaem1$`hw^cHD~oQdP56Legd*>~xoV^bwy; zgHfBUYxB!iAxrp9!T-+H7sY+D>TJ$Q9x7*tZ%y-X{9ISw?e3p$qTd0=Jd0){^Zw8pXox0|cOSF;x{b#XI}up-HP3_>Sa2FmH85YB#2LbKyW0|3V zBL>?ix+KJmm|*g=Mw(9Nt`9!h!GEx}*fs4Bxn@@h`_R#+nW-1<-cJk*EyZTlI+T`PIS?ejeC%JlS+A>>R>5>H7X<25zdDmVy0Q zSfx=B_sCrjUhFp6d_unDf2JWxk#dxCfe|EF5E*ElTO4YuZqppMH4LOzB$eemdIo*Z zP3hwmU$mBffPA2x&v_MZM)X_7a$W{aEhQ_9nv|GGg~JzqZZ{ZwVdU6BCt;ACBbaU6 zB_7@0uJ~qWICZ7N(Ijnhn3~+ko4IG3?f5g04Ie{Us%Dodn=Y!w2-~K=D1xPa+__RZ z)bk9TLGcLK7m>A(e0sXxvBXWVK6_t-X{%Lyp+pmv#kPqwGj@wfAycL-L(NTaE0 zOuOVs2fwkg>|}L#|5n-ya3IHNgQ-$wm+aF(p*@g)!&Y_zk!b2HUxm7Q2h|4wyQeu} zpbqvO9uK5C$+%Zn+p`?U`4 zBI4s8v~=emK|sSKaE;}A)haaS&1?84zc(X}(U85CF7;)L5gvE*I&ODX#8Q;?=+)-v z!KW>K(!Q05J=P+P+xkCX;>Vbn!;oHMXnkM{`xS5Ea)4f`APEfjhT9_MZS%}}vvG?! z0u3#Wu^`+(gWg}(<}^gix)O-$BO0YmvS0c)jyFU<0zpjQIYDrd#uPS$ZyI*VD-z<4 zKm}~fw*T=A=D#-q6(^xnlniW2oSy6QvA+-OZAPX><$M&2y-x6-we7si*AV@%B9~+a zwIyaJg0B77%+J)+$pM{m>DQEtOJi-WO_4LE@{5oP!`QLP#(qYb2lkp2p?{$gf?dz7rol6cCFYZ zdg5mfBZosX7a2I&8gBwI`sMXt`3ZTJvK3%)cMo$Y*^Av-nJ^p5a*T&4n ze0w%;c5Si3MS*c`G@h;WQq`|2qt;}FdBmN#=+DpRC==cFTu6oaJi%*{BF&lI!Rw_Z z=6C?~yXXE49*g@L?9w0L@B%IoZBKItj!l{Inonc)h)RcWcc+sd+|*djf|(PHY%`5! zp?i*Jxrs7xc9^IJQoG1lG97!IsVVN;ZpELnI;d@r6sVParII5Ja{8wn>9)}~5@IHP z#t>D{qZfT$=*%&}Sq6)sk=7f@eVXj#6p@mO?Cx}@m;dI#%^UTF6Z_RoxI&W;|SZtti_=JK9Ue8>YE43pwb!aI;B^=GZYCklqYZecF>g;1J@s zPeAZ-<~L8g9DhV-`UV2+f1@_^l#{Y~DXn0N5&Hv-Jj}8Utqt6-u&5;wbcjLPdBIn%zSYPIsVw`4z=|^v&mLCA`oRK=0k$DBR z0Mu^-N=RsN8S->1@?i&=e{v5k4(zBY18jjtfZ?w&$ub8Dfc7a-^$@1oY^rGhtnE+K zqjQpCd#0~Vyp<{ywvq9C#7*>8iKi7cMC`(P1H#ymCp5Gb+dyFnl_GeG(w58|1$#`? zKD%Xu`K6g3(oPCE_U#R;<+b$*<>Dh5g3cvpC`bv8Rq70$XeGk6L-@e@iB z?!gC8@nGpFXfpoGK>D9uSkG4A2#17VlYuu%yxbH$;{LSZXT6XZ3C0q|UQ(uFLLD^Me++LJBOVG!3-p&F zm8o+|Yb3n8W`@I`?P_cUX5kpiyjUAZ8Q|eCkG(H%64M}A?}GsEdTc$^cV)SN!>_X3 zzs0NsOE$mIolr5rk*zOZisu_{yiWtEPk*s9G#zc{Zu7h8>~LjRAJ25+gE?Vq!h!-6 zT>I2V{f=tP~*0I8%wwgB+Rk4ff%&*%mpPrF#69P%etNMI@FUXDLo1bXuZ8bLphi;4B z75->sWPJ>vUp5{KLE=#v*{9xQac9A3dS(52a@LL#UrrnAk1EF_MFS38yDJI60vyZq z3QRPc3EWxr!0OZmYPZ;27@_J9)31cLs~R>jrgpz7|a&J0te$l z>#x#S$gn#z-;C#qEYp_mE|Uw9f{pk|%C+F(QKNd+RNQVL<#(LHm>I$uzNZzjZE;Uo z>W-8s|D~YRtHRZ}QGmRG+bXK05E7FjiyftpGrtHgQzQcu71w1QWPAp_*}6w zl8`6+&SS9w>?uehwC2Wt8sK10A)2LGHw9gli(}WbW@~gHMMPtxbq2N{=7>vZQ1QrX zi=+fRzxN;NA!Buf#ns{$n6~ByPgX4d>HW4n(G_6erJ_ea*#Q)2U+`am*Q z+LmNQw1Up~Hyl-x>B8qkcW$BmVfwMKv#D`!=6HrY$MP(*l+fps`B4`Zii(t~bOWFP z?k8-3oYOnc%4pL1d94!~_eB$gIv2)k&t*#|=U-z4b|Fk92%b^9|9kNNKk2DWl0;}` zBYK&wo-~PCyx7;AxIBJcFK~(wKoyRoIM>is(UgYlT6NB68;_?U+wSXme#kobN5%a^ z3x5tC($)IS((x`XZbsdbKkt!Ih z73@qAo~Tl7s0{zFGh9|%xKMQw%5c`KZvl?CUffNIS-9hgLU$1yDV?=bHb08kg4_8P zX4!5`!NB*gRw=cumd;HG>}Em*Oo@|RY{!kWOZK8`e*{B$@t%9c#RWJ0{lvTtn{la<1x+38bGNlEeT7;Lnu?riJ4DzY$8 zPvp<_Z7LcFgfA~@ghnnrF!iZ93ec)KYryd0fauoHvbyzADWePlY zG94$)dlQML6vQCfOFKA+R&T3&aISDaB(Js_ab@fKIM*nrkyM70M3i8Jj5s?6H%yCIvRQ3qSpQ$K#Y29TVhVPCrB<%w>JRzZ~I`B zTwbhkCK(x_cKK_9t!;Nkgn5QEsNEQoKiE= z;S{QfXrKH`0IMFvm9Lcq9|J8dQBM5wd}WLE$HOADM0n?R_EL`h$jAgxE;1y|&@G7$ zh@*SnJtjc=itgV~(I2Xsg>?V~6eKxXTr*kN=OcrXmNRs;t<8IbJk`^BtgEX`451F^ zhCO--VLzwFG0T#!CY9{<18N9oGtsrtSq$J*)y0cX#*|9GswtvGw>3Q04WM6{@RTx} z5qt}sW`@bXn{a};u--ANks+QP*!F7uxhy3zD<#O?U1GXBGPu7cBo0MgehOHzm&7$N zI3)QB9JA6t-=CFWWDfK)X4;$ZAEW)UJ6}>)fYU~|cL)eN_4(as#7$Wz0fk8VDRShkWQy23)Q#xDo8TP!nU_oN%c}0VwT`OXjpEDXMmN1)l@XgIws_ zKy}%1e~nKG7JO4MFr=hM)}{#cb3f*kB8X9B!yih9Qkx?#q|)#h32;@fjpA8Us1LE~ z$HJ34P#P9Mi^Lq+BY%Ky}c`G`SoAU*%y8u9k{c$plVp)E{^Jq41mX!1`&1J zE>|IU{*ZR&a_n}PJUPb=@i@=Rn)*IM66l zHSZF(RZZe@&!{%gojPh0$(nxrB96AUnS%Kj#QVj;lec(1>xieG}@J+=< zBktrr=}rl7asPmn<@{{TWKyTD?6Gv z-)}9U%+E{;Eoxirl!yBpS`1oVqbCW5M z-u;AwL-apc1YPsb7Xu4*jmfH}IG$~3tM`IxGLjDa1;S@LQEce#(a{YS!%+3M5ZA|x zC!R|#z$zIQd9qlOHIf_#DfzVqZU>{^=xKgxexXowi96$4%rt(w+*O)*9#hE~#sP;4 zA7S1B8CiR6B^|oc2ADn5O&TT_?#TlHqnyiu%dk}f>BUOga9k8j zx>v2hc?epgl~9|5(U9}vBeJ^|{RoGmE<0UMir>6`*)J98={ensbQ2fOl(X2<`IdxD zPtDaXxou5Ge{QP9_i2w0FC)f*jHhW1*R@TkF()4OKot$On$XIm^D9rn+%ot}cmET= zA3R%zS3BpXw#^LkU%&4JzuW}B;?(>Cj8S84ogo6zM$zLZlM|BoIP4;~7yxu~DQ1 zrFW!5LI4$rf)MF7$(RVCB{7r)6O!ETV{ZHXasR&a+~?|JdA_p0wbxpEz3+b4#?f}) z*T*3c$lriJXCPCr64W1>Kp>ajX+q>7$05OY{3C*3xBO%Lbt0qV+lt!RBbElj!emJpn7GLV zA58TfTRuy{efsq88aH)h@8~{?KnXpFcymyGMelR(*-Q(;@(Js8)ThxJw~C%3V!-gF znrWHj(!mDf&}|Wp5x4cw;_Ow<#ZqeJku_P!#Pc&)dyeyvWu4{5qs*`WoXcP8@5?Fj zssS`&tn0aSGa*Xh^6=L3=-IKN{7B+?jO51@{gJKzabvgH&2?zOH-fdl^6N=Ml>0nd z?!wQl!?a05zhoQ72qdaCUGe!*m-+wy$p4Fed1cAwf=Mw|=k3lPGoHMVe6Q?Eiu~-F zwS34zXAkBtmDGP-V{VTB6rCRtK+AHM;vIbNTr0qFJJna;k2_=@%P`|!QN>Q&K>Shd zsvf#16;q0TKV+0^8Rd7KpdWHq)jB=((b=oV4@8h6w$|p`KQzOs%QKCEFTg1Dm_Y{5 zPTuR; z6KXzlqmqvC+j}PGFubnjkEpIMb77~Ggqu_gv2Ky17b~=4j}$iJc#w&O_ey%q>8P$p zP)bV3bUp1}t4pRD)UdX(P3hvzH*=cL^byQ^v9ko^Qn*L6HmoiDO@dC{7bo8}IvFEC z$T=cI{BV*<_h$BwDSqUH6Rp+W?UA$15J%)8MXmepe&{opj62KYB-D)>V$8~8=pl$f zd(6AX%tCvv%Hl(UYPr{Bm2<_qC#14dBA^)&;#aHIO$Pnfq!PSWkiwbEZ<<0E2X{WQ zGU3!4@*$R2t6f8Su5z^iyU!d{J>{!^DRe#%Hl;d ziIeIzS?yZ0_l3Yr3)AlH-hH#kr*8yT?j3Kfw!)v>d*@tX^e+o2Dipl)^2HUr*JQ0{ z^WHm|g?DUrr+raD!1v#vW?odf+U4oLBkWJkGh0j3V~*%z&jU03m7MET7dlaSLjaiO zvzjmcor<#nuS@1-;=2k>Y{>ICi=fgt z+z5=Ln^^2@7Bz!!)DxMh9lW<_MFsAKC%(R)IPN}Rf-h4eF*w0C2rTZGr`x(Jw*YwZ8auC%>pn6NK-?#mdb zoze*}Duh~_l!`eF$#B%3tz6MY4l8Zkeh3(+-2U0o9?5pYo=MzJG1oYVGY6U^Y6;=z z!=yi9$0S+|!`gi`uA>BQf4T;Kog9Ju*dEy)~ zQV3j$U;JG$;Nx%mLEF2<>&GnPMJs!LF6!BGdS7Iu3)pUavp;ob^q9lm(7Vhm_W&*d z14itiI{N1B9~j2o*zqj3Wu{3p9L&}f^*E12p&8@do}(9ala4eCX3l~`EtROJM?pVd z-ZS4js#{5~+yR`Hy}5L!Lq^B!d73VrYzUZ}r~-|uI#;9u6R!fR49E(4{90Y^Pw{tv z{El8)si3%XJI?Nf02S4v`b5JXjQxliyI_YI(H;cmSC??a?2^Bb26{9T7IS0a&bZxP z2ynYJUchc73CzeM;-|+QeB#<(_@%pa%%#X_U+@i0-5zrbLqMf`!Mzp~rwV z2GhjYwPLpjquY)Gt;L62&+9_%CGfMY5%X=8uJiILx!^eBwQ;DR6Ie*d{D?Ns8#M>Q z$+5umpG(dW?(cJ}eG5b~Zw)BWH)=$}wH)A$-A^kOfefqwjB(!DLMIZqBUpI?-0Aw< zT-5)#9}k9Xi5SQ6ny3aUCY#qgrgf?@1KMcmTxcB-kb9Vz}LAkv-c}3R$A+2GYjh;W1y| zD(;e$F85=mysBxqhiw`BzRV}^@Lb&d;jjh(*ydj9*e+4?+x>^LYZq{`!)u*5_Hs$a zg{ee!jqMju*#gqig;=wSo2tI`hvED!8TYRX@P8@GlI<9MzNiPWioT8=tFJd%yHBR2 zc)biWLwgUThe}fKpmFq<4UeCqBDM0Mn&oK>?KpKaje818M*ni9KQlM^B88&+MTz2k{)a+TpXxNWyz<}h!stYm#?@pGQ=H#*dW6q6YQ`50 z!Ia#Qo7uvy%!M(#TF*^>VV^dN^r@{Hn+r{ObvJM~_tGW!+{6t0JS=D4X&9Yc_7e!fk;B_d|^!x=H^>&t$Yq5(-` z!faC$F0v+DJ1{><67X6l5Kn9qygkbtXA_R0Xy_~E2nLy7Q-N!FL6CgO%1PZ`*az!? z)_3j{8}mOK^dsLsx{`7=W!P{?s`{0qSBUQuy655upVxAm-sRDdei~|;JzNCqG9rnX zhghfE87CVOWf;D28m1ZQnV|MXf{|)Qk~dO~F%r|rekK{eO>?7>tV^z@H)ZZiCaz7D z*9d(b}+=&u7*inpszEt;{x8x)z$ny$6U1(S(y* z!U{8DJcU|Uh11#{Zq%&zKyG(fU}nn@vnC)mUDziU0%d33Fro=A_dIeezM{mfVT4fP z(l#HQU+h*U;dcTQ&ZsAGHRTd!_365aP0(`O-BhnE!J(y*uP$?1LujT_@$fX>&$_eu zsm-cuZm4S+7x{H%Ocm}%wQHSs>mZ@bYqEkv*Uz^`hi z4iZY9I>`j^?(Lgkm9$%RC5W=w!21U|&E`qbylD`>BFC_fD}?j~6PxpeNPE;V5MXGf zq@{6-PT<b|UVyWcF*j`w&2~A*3REwY^*363U*A zVTJB~(MjOf=xGm*vFhLiz*7_5(ZiDn`rH%ndjff%ZgWDHYz=_4Ic!mnfxUU6-QEjI z6xGvU;t5pB1T)jpnq}%E5F1gPa~5ju1vo$O`odYpgC91Rz-e-5n6+WV#v|)n)El8a zQogg5L+=9MJ+eBMB{jae@)(Fj6@oPY<{VxXHFE}Y5)#TwSGQ0?mfH;jt|7*(x)hvQ z8*he#M3fGLVGIV+l%GMZ&qt89r>yF1gz9WCfGvz#-%BY`KynDQ%Jd_*meI1w91yAm zPU$wS7ba^LJZ(bgX-fRLW0oN5&Dm0=7HAH8wDLyDx+maPR1&j$kEaNN9SV;|Nh>#a zu@0Dxar*9_y;wz8if^a8FFI+IWC-Fo@AE#lfwL&=510%mlDM2Y5JFKY1U>DpEmUxO z6Aw?ei5;cbr+YVaeGfc>5m!+AT4*Th-nV(tW26Ega#gNF+5O$Sul5}brUH|oC2bRp zWuICBua6}sVQZM*C|xciva_kKiJ99pO2z}ruAM|M48w0wG$rd=)9-+hZNwWm(TDcE zG;z{RnHLR<)djVSjge-P*RY48^MGp>8J{wr) zN0BkB17Ja5u93Op=dQm6oIi#fnb@1{>JnLzfaeDe0AaN0Nf22#Qa)V+`I8Y&+)oXx z_-F>)xUi!3hb(Dx`&1LB4cvoZfc=a1$Xo73bTkl?$DuC&eI4yj1_*Pp)s319@xzx; zqAfHl#bIwrl(GY>+zu;W{0>N76Vda1tQTfHFjmCbT3-^dh?C;MwQ1@d`=%@hWUaKA za7K5fD}Vzdz~Xf3dE;!E;Ig-fa_kF%T@t3It_glVi>)4SoIO&M0|Y0wIexm{s!q94 zBA9J{`U`*@%!UTCvRS6eBVZ#J`y_Ny+|cbaQDaHo4cOhuSLiF8hA9>qv$l-G`=wTv z_z2N9erY%_i0Y+?O%P}eOx4-ufSW4P)pX^4pfpk<&3G!BCwZ#yBJ?i{clsCk;2P-= zLWj3;I7w@9)E|50xqIg|Se_dbU;V~}i-aqx+IdD)iwqo`Sx-8SHMs*sp=HdMxT5s2 zc(yrJIV*J1D6&VJAQ@@Lw|Z0uU0c=M`6Pj5k|Mia%wTf3AAc2IwVMeFZ#1+OzRfYi z5Z6AXFgkR_sJ~tI3(@sAwKYeM^%WbICM`{4H;(mVZ&-d27~x}wE!SoNEILhvZWN+F z)i)d`Q^%pI?4mBi43nMbGr*2K09Y{nUbjDec+pSqvsX1e&MR2W;{b@)uV{&k74ZI+ zYzH%?7@+^?&Fz}+2ypNtrtG|DWok~rs}mJR6^f5>Kv4txO$Sxy6T4iD&@JZ>d{Cvd)pO*sis90~>Mj zKb+NfT-YZ^=FSS}NP9#NB`-^p`5%Ln{uPRvbM3ISLUY8jq0;r5SH+^5!e5Hw{B@0S z?DR5-Qp>6LJEB-Ob8f_|+t}XYC0xZ2>7{ZpC_rm2==ycFHtZH7VDt7==`}$u#HB)0 z!B>6bN3nwTu$e#<)8;=j+dvL<3)6AZpJD9|1N*#a0AcwLKUUYK0 z*2LJ}Pv25-%HVrq_>_+L6r|E;laiKUiTk*8YN}m`+m)HNMw~t?7HUp;QmBmP$|#s6 z>*)?>cv>-b{Y#C-2_sc3TE!yl>bm~Tu&|4eRjY=2-&8MTpGf31%>c{zsg9t`8Pw~Y zovoh__OXgOo_pZRT4%H=YDyTMso`9EWFfW|qHmr)J)N5}Vy4G6UHnfmeS*!4q!nAe zS1~cKH{I$*v+l+6b98A(g#}4>RDKE!-CCZwB%YDGeaeZ3UMmkP2@?<7h)k+9GU&mV z3rM^%^wN0Ik5fJ{Ka9_H^~NiF#vPmjBs_1-?>-}uJLh2%|I4hU8F|xYtxgyz4&P-G zYnWZwoPM`LGq}tiGSlLN`{d6r+@w|u;kedEbpJ9e-vPVIWGa1}43kf#(}=;cNXXl$ z_E&eA4X6d>E8<-?7PmMOBYReH(qJw1ikmf6XUY>Yd4a4h8ZA@orzp(mVzP1PCTkB; zO|jvcHmfJ+C>zsjfj4yg(|$JWXMt9%LFk&apVT%nbY6nwnnNZUf>@Lj>?&nZUTM%~ zu$ARb3+!`8JhF+~dGL7>^v!~Hr&&fC3@6Y-@K(+#Zfl~{Acpp)*4sj} zD7?jqxRJPDc?2t*Fp@J5r+(Eta7}!aE1dxlX`($w7zjveJS$LA^UcrJW}@2Zr;u^V zSx{T->6XcCfHFX7NPr}A-RzznZvb>K{kmR^LW*$hw5(&(ko_My<&LOA%+-SKmCd|aApWWj&33z87iZDNqiF&N<#91CrYmuH5rjdMriR`9oO)>tK!2JNR!h;$ zCyILrgF|A_3H65lK-wQdIee*EfzUOPns} zF6?IPiB1`>$VoTjZ1C_N0Cui^*vBd_0i=YIr}VCmtGQ&>+dUE*<1qPZykZZ0mEfk{ z1|9BH5Rb?cwor~M<3&^v@PQvDD_v@~Y9Y6C$0WQEnAHzGH8#Ti6-g?fE?^XA7rvuD*zdGCP$lzBeU;E!leuer;8NcJTr zSS>_P_ybgC@RR?%BAiknci?tMcf#re#N1;m;Id71Kg@iz6Hxxw-`VPXjMQhBk+ zv{Y=@jU_-&K(f9kH=D-M*U>V(5v4-jXZ8=wOj{JqGzqi0eS)N*{yZ;zj)*fyEtc^o zDs&=0V6>eSGT;`H2e-Sr4}h##VvF+hMZ8^Q)>jNE_?=LlZ+l0mGIXN12&sAhc)pRo z%rH_TFBhQ2OKZ&DkSBQde>(Lh`<@L6GSp!LMA(Jo3!^|)@MxxN1r%<4-Vg8ZdvT=+ zE^+`Xbq{HK09*n9Eq^)nC|8`k2UyWol zRi|LxF}8`U+RO+igD`YYH-FkJGTryUVQ`bTn-I%6>aLn_^F}j4Iza(!2`NI?o3GGZ z650jN-YC42(jYHGu3@+t1yDUdAC%|rmqSLB2nw#H<8J$ciF}@6+04GNR!Q(|&oPLh zU5Kw9woe{GxkfpGq2ca)ImcSS<_wJNJNPuwlD?!mrx+W$JuyhuJen+;EODk7-x`?M znF|TS!~fIM#n1CV&HUUi@z|#E%sDT18ZrxyD-e)*&{fF9wY8JlscLtP)LJ#@or@wS z_tAvI_YzD(oN*JbC%yWTdSSEmsO@>O}s4nu24;f`ZCtr%G z=B+a|27JM1M3)i>Isy?t6YGHgZ}gI73D4oOXe``MK)`nw;@p zd0kGbw(JCF+-sh1VkAP*b&m9?l$b5;X~9_t0W`G_IXs2hjI=6B>u1HCr{n5;^>s() zQJ!bEHLs(7EXRD0gzx|B@{qrjWt9)g(@#@62;KwFSd_k?@wm)QjrF4yTvJndB@_MN zNSe_B6h}oH?3x@)UezN~PBum^m7>|XcUcaUh6fG0&lIOe@{YC-=PSWzVfN;20f^nz z%6%;Lu*|fc0yKK}=Hlay(1B79(_8b)V?e{gCOi!g*m2{yo+U>pC2VF0t zFwqOk@p8}R;(ArnJ03okn9wd_a8P3O*b)BcBuxLM66=2n+aj7W4uK9>tU2{AD2jA}r$-cIsAbmIelogVo? zQtNVzIumhySFn7SH7XHiG^DsI{XESZC=B{!*g@b)9htl7FvlIKSU0 zM>nlVttD!UH)DYz1gD=?r0!=}`r8#4$650lA=N%}C~0rg{(iq65#6$}aSYSko@rqm zNk=9$a)$~JCU4l1&vAW!(j|D2yJlDq&8R(k&z(~O$S8)WK(=D82+3M`e4d3D{&E@_ zT&-dVE7F}DZ;{%<(~xYr=jLwToL0e^OJ6bzoVi*CkEXCI-ylpa3#RUNZbBTrRyyY} z6jkM+l<<70ZAAENeZ=nW=Y6SU4k$O7hS+VqO~NRO$C2 z4rfkhdYmXUY=i>LZ|ZK9(fD(nLQuX+Dx-f}m2=|?Mj+&s`u(1%{&Iq(nf#BX^AxpKZ%23K4~DPt*ctX z=w0XmlR6l0kBS(S-0N3x2YJLqWTDv=-VezKR>Sb@0TWUtAn;5GP7{5*VrEkJ8Yw63 z^7@K08fx`i)it23UCP{9JY5BJCDJU8VJ=NzejKe1S!CSku&cnm9B!XzS7rnAI?1vEW^h@BQTBE8iY9K4)#+v(JET81hhIX|JbCo`_nWG|&u`y_gT8I$ePCEDXEJ)MC)3 zq~?Ll2fR8DfWVyB_k-cbvAvophetqFb-vhcjd?x#2l_L!s6VFo+)F9PgxrhJupuJ!>pV*VB&T}g}sD5}i# zv+jx#tvm2pj}_>o&|T;J6dnv7&I#8`QSeYU8hMrt9U8C^E8{jt?-o1PWX}S3dk(~| zxNLpzHI-bnznp#}svf4U)}2(CYjy}y_9)>|#pbKStuhg36Fz_v(1v`sAt$&SE5}li z*Sy=pz(uD8>ruNdoN&LwLnnvkO#KtZBg1#2C!3hhytw8Dm#W1}{U(hz+*fkFJvPv< z)P1^NE{lor`BSr-yXQhA!Z}gwALlf9*?|7DI7##z?}&QWwX^cGcp%w6e+k*@VvTFE zV7LqOSgI#3XNAtTTth^?owrt3c_J1J64qrHsUy!$ zf~X=T159V-Lz5L)@prfT-r&ic#f5XZ31OwNG}shQP({k9@9-l5+bN*v>WXq@U=4oH z4@^Z_m+f|`8uFAg*V|FM%=@nW#0$b5VD~yk3gfR_{ZO(U^=UVmSx;U%Ztw$V*bIP;^wsf+l8F3{Xl6&Tf)%kHol}=^OZ_Y) z>kRGp*!Rmv`f2Iv1u_2`ty#G@>l`>->3=DBh}*BkQV`Dq3*ZFmOL<;Sl7J-Usp_?J z^Rd?*l0ARqxyac7R%iJ0$t*56Eyxq5+?p3B|% zm3q`Va#S0W1gUn|)UXR6=@bSe$Se>a?sEb;I%fUx$KoD1*wM%{j2yz|3RLbd#U%c^ z#<&#wMa=i9k=xR)9E>_vk-lJ|GauxVnE3v_aTvuP@&3cljg_#5Q}nXHmXJApj2oo- zN>N+{^C9OzpYJ$@5+(3HB{Pl=*}YTrh5vS;ik}t2V$Jc*D0asv13Bdx_=CZAsX5u} zN;q$F>E}yjN2 z?X4f8^2QXUHRacCKlejYEAO`*Nh&!t&#(?IyxsEmv?Iy)LYkL`nG;8@Fge?671P3UZWr+0JaBDZ)Ea~(Hsl+-h@Y;@G3AD^||8nxIa!RKXT-b3`i0d&cj<+gskZnz-t z1V+g7-Ss_hQR9qXLX3TW#UI%C!hg*)xzrOyU1uGfXY>JzeX0LwyWW)dKq-MYz=yA?hcIbyH8DOXI5@dOjE%K5E`=hVp7G z>SAaJ79#Qm9A;;KGb_LOoFcFF4nRqEiLIfY6O}1T*B=Om^Mk0HyqJ*L;O$QNx|acaqSlz20aV*!WOWVg2N8Cntsu#MHRP6U7CEJ#mc281(RGdbNu zCw+l^EWVH!n_;Q`()i@oS{6`5w{VyW`QY;$73Yq_ftIC>KRePlRp^%A9{LPa|Mh_MWRCPL9Zuvia2qAR z>#>$!+}-P+MCNye)y_v$0CL32(<4_>ll~2|156bUmLN3(vJx08yE zOHIs%X(95|!ZMWu4Gr%?x~eK%K&j^XTDcv*(+qlg2)N?}>y63Q0y|!8au&vQ7^_re z#9JF;|9KGSCE8wVby^cV0~9y&9aK(E`8lbAr&i&9O*dttNVrP73J1G@1!UICoxv79 zAke&FZNmHV&H$_dxc;6u-;7QfzkTejlZ|Sgk?zRj!<>n|9$DJ$HY z<~S9QyOd3~AWG0Tr%KT=+?E5ID%y*?A74L1uv=)w*Y@EU2QCkXPjz{k8%8CV8)NPu z7+9{k?Am;=9ez%9_se+6um;eT7fp5s;nATIuOGJCIZY2N6xL^osPV~_yckmJV#Jbq^cebYOT&uE8t0Xf*!n3zMPHX%=B z+oCgABK5O1GSb5+JQb9kI&5p;*H-Px@~t#oiE#36n@*@Zw-Mr~3MgtV3g2({ zK@*mr8wXB&C}#W-L`qA|1mIep9(now^5m6>ul~9u-($`;Gxm^ElXW;bmA%oem zQ~NKo)~F-S<=xJo|Ms9R@w>?N@JxsB^|W~-;80RqTz>>DjFo-3u%Epmj`1%id+4)3pv?{miE0sf9f6C`ADck$TH|mpDe#|F)Yi%fl9BRijrY$)imm?&l%ySL9d$8{6f?7# zs1;#VA>4*j7UwMPr2Or2>}q&{B5c0fgl?{4dJ5OE1G(R*IsQhKNVRe-(TjVTkYh+N-=p#<*EzrTk8&81II zrk2P~d2bfR+Yzs!GJSHJA(uAh`pMP=5OQwr9@gh(O2M}R6p`!IVF zXWET>4Sn-X?{Z=oyD1+JU z3g{#Sq!!%Ad3Z|TyY)?=iSeI9!G-SYnAmHqEUHmWl0zj9YHi*y;I3L-KcqP#%e zg1t2R5sQcwH?5moSeeTjVy%?i1wis*!U~aL=B}zK_-(MT>~S{rnQz*rZ?gtF);{^2 zR$Zp;_We8TQwlhXr0?uo{GI{>l^{{PdpjZlVclfljZxgz@m6^xpgqJS5!(UvyTn5$ z#B!jh3*!w4H)-}now)GX-)E6&DVo_Z*-};)YeHBsF00bYxQyF zq%N2Y+?{KMOomji|9#A~;uYaLi0k?@z&pc(K)=vs4CAhyS+U;wH^)|s<`6qz`9d)n zHli=xs{AS)%*;NQnv5?<7N_}5|90lYKrUI zGyqL%fJ=0()jN$L*e8ah9Z^U+5ER=5vAoNhkh#P1Sj>H;qO*gUPAw_b(Um z+oSw)fCSBYB=~-p_5#Z1_+oG9$!(-vjj*#zj1p$=33%48ZLIWiP zz5Yl2-|~qdw=_O?cuho7wfjo=DTZi*RZJR?Auz4 zgAxYhVq+=x5X{uX<$a@}p;1N{BR?;nIbGK2vMQUq)@}JuNZ|NS%@*D0mGS^srTSqX zW$cN1g-3G^l2U26Gw@e9yC=aL++qRcl1E$NXiphjn)#uwS*9{&ntGN*T+tvr$j&yu@O16I1=? zo0v4nbv57NbpE5*8rF+fQZ#4c5t>~cXmvQvT7jFYuHd80SeQL6jNn`V0A(v)WTBdq zfs2m9C89aih#tiQy%SFb#y*$Y&j?^0#*xe6nuPP+b(jc5y-mXkR+Pwi+~1E7{Ohmy yBZC9uJrGA*xv!4z`#=3e=l_D~0t5(ilqrUUM93rwNq#HzdEa|~RrkMJZ&lZ=W0hL$mF%p&_gc^M zeLmkOT(Q~yl@0^~`5OE^0{Lm_3r70yKYJkiA$}1zLww=4ZbshJ4ZRa92l*b7y#E$> zB?QuvwDli^Ir~lHE$7$+L9A6%su~Lqt*x9Uuf{rMUQ@VcGaFQ`iF5n<$LDt^cWzg> zX=QuE;J{tEd#@Mo|CyGtJN&|T2d3*Szut*8&ItEj_<~>bb?N@5iJBU|dHN(4N8M0J z5FZ-0D7iT~Vh)A!_ z1kM+psX$5Ee3SFVXMw`+eC`irxPJ53MgFb+y>aW-j|pGis$&X!Oa({s5Hn2Ikvvz(^rlv?X@|27MfL46P~zu zxpV&<>t@v~?Hc-~=4`aH4m{cJ3a-9AXk%OCuQlnjj(y6d`>u!l=M;bQd-23apb6V} z&;6*7)Ut5CI7ra~b@1T9_g=7wM_Vi5Z?%5^wv(|4&U^Okf;~(e=`VaOKO&z>R8Y!P zZ|gzL@i3$0v24HnZM!^mKC>aOmsCw6eoSDasC{tf6~}@XYIv!b?yvVqDjB*@d83!W zLeSf(8+I!?LD$2O$Q5lad=ey1!!J9IW>@JwG1OeK@6T()o}xa3 z^E|5HV&$M`Z99ezP2rr*?|wXW+O;GIt&LkWb(J1xIA!MV_|36>tVX@+s`E40m^L+) zROu(TIBbUt>ORk@svb|PURI$M6#Ab(+}gP-Su60No8$Q7T~R@8QQmDEgDnAexgwNY zRf-eV@oJ^8!X&o_NqB;&Bb@8{>UB0Q0=+``WPVk9*)&$2;l|FByA$GubBdzS^WkNj zqK@MetNA}zylwPGr^H?=8`nQ`l=?nyDeeagpGG%yeh18v#7G?IX{NnlXN_qm3xjcP zW0Vhu(dqrof}iodV%2St`A#*CP}>6xm7*{W+P@%~q6&)c0m}yT7U` zajJG4$j>~ZLG|lbkgIvA7&Ml4JY#jBx7l9rcye3deYdgxaJ=ir*#^nB$hH|=&7@D9 z0mra;TUDm)hlSXG|4@k28s9W*r&=0t2C~#GG<#iZd!Y*j@#%Gw8&-*lVLSApCc%yw zB9nnZN|Z%1z0a{W!c#psnt<89?J^wWmK{vU(ttDMzGKB0Ca(=^!l&#p>dS6UKmCZr07lY4@G&J7Mk@GZ=cEFy*Gr+n^YH;qugaU_{0UF zivcG}tWatmF1TFJuyzO(rb za-;Uzqcz|ApbWcu>y|aUg1&^(?lopgE#4JA#o1mO4i?`1_l8lt4mB52ytK&<_Zqol=)GGjI4W|+ zN40f3WyWjzL?nG%YT|}>vRy%w4gaKrg&S5giOPdqcWoc7`P>}keTb7M+Yzapvq1y$ zkX(u#PV1L}Pptu=2(%ytV@NfYEEehxGV;|eI5>B7K6kqzDzj0J%h(yzHb{rKF4sqs&sPQEfcHb7Y@uS^YcsU>=P(gq>zBR1MQsxJiENIB(Y7L z@L@as-hGAtb4-Z!#0q}4T`8$UbOo>MvtWRb(*yT8RInTWW7ix9gUmJz?7qK| zJN4DyHdOw-CT2$d^PW7}eQrI6FIYCJY*w0ETh=6-mc$>$Yn!db#37HUEyQ+6GBisr z>&1Njb98JQ6$-({uBE~Y3Bob#GS<-HbJL5nP{+~d0&|H=oUq<{SJ)->n9X4>VSWSk z=DwR^=9-z8bc6`YHrxkO!8p9bIP@?KnE}}>jjnbS8?=$< zpWl6jIay-z)Jhl^Tw{w{R3ScI=n7x>5?*W!XBEnQA;@C4wbFO|T*F)MKi@c1xXf#- zT~eWJ*9`VH<6nNRw(SZW?NRHEX^7_cM-Uvav3BTG0HZ7U?ag+iC&9=I6I^=??j@AZFIATr$! z@=cXvJzsZO+h;e%f!Av^pB5v2aG=yAf>J|Zu_AVNZQhkMfy3!7;^+gVYanK|$TxZ~ zUug>s_(O-2-lCC+-ywHM+aK+ArQg;pxX@+-xF`p9%1KJ?P$h=t=)jpIG2L9gMr z0|c4_JH9N_YVp);;vtBK7sk!d9MQro8vSOY+l}9&Dd;?AQQ3R7_J#lO%A`R-+$uI} z!wQz_;(y8-Ix{QJ8Luh)l!0kZ!*12P6l^!%_h28f2pU@o0N>v~}*nP3>*&GhC zN-X|?=WG9cvao^Tod6P8sf2kG4$q>Rp(eJEIvNB!!gqP72j3z*p_sUTG$KKYUgqJn z(nyB~+oJK{k$GjoSxFAbc4Y8a1hwP+#d&Q8yx!pJge?0-U$HuP4DC+mGdor@lR#d7%{wnpw}r6Fpq7EKr46lw_$Str|NmpR>U!9FQ#w$xbnG&cUtslUIS zu($LHSXfW+J@WZ8DE!=p-SY6a&_%g(jz9z`eaFoe#N@YX-h^_}gP-k{#&=e33#gLG zjwA1I4WD>Z85_DM<}<#aD?xGqhkucFxa1DiwO+)pr<>e-SJd8l#6ocq<9LMSiq`2C z*B{@sYEj#;D%=~^z{bg4cLW(&e}?RUxf&2@pGsd=!Ap(~J~9#@cV1CMU#op{g(RRk z*YE7ODoC!#4|~^8^++{@OAgzp%O2y3XCo|k_1A-aa+E3iis0`{M2ZESfSqXwQ$K^ z{1eElpd~j&Z{2-@$KLR&V{h+~SqkB}_`kwZA;sg{A38x?dg5KuU8P#TQ*YUHxH3U2 zYVq1ecldlv_{`&7hBYL11;ot?Z5NJ{$9!LZ#$c3zu&!kH*#gPIwz{_^9;Fi#AdMA4r_uuj{k@; zpx3`~*OlE>aXGU11QprVypSobinaJ`7k&h-} z$yE*9Lia+WNpyzoL*)T`J!;EwXj_71+?~~!a~&~>Zl@4G?e2eem3(SGVZq>GAL+l7 zZ)f)Uj?(B>B5TKXF?~?crnhZ<^Kmv^7+V(jM`hDgq@iV3cr-~}J5z-Sb1(E?>SzVE zb-{ZOdDUi{BCony7B>XBx}7td7~<%t9r`JF%$_-0Y%ZE|uDq|IF)6#;CuL4uGjyCg zrTn30H~Gb%%b0K%gCs9uIi=$$vzw+95<1w)BlFdMX_m*&L27>!qM;FgMoY~0OAN~$s=N#%*pma7iQQl%T z|7xvw$Q+{yW8bXjUf9;&=B7n`M9Vmed89Xfcv&KVe0XTs=7i3J8sNjHA4CQWZ!%lG zPEcJaYT;HLtv+9UkT-ngq;pX1a@a(Z`6^uB2vrPJ2pF?@aH#$G-sE6%m7C!>H8(N7 zuPw4KYF7g-MrUKL?bgjW+r5H-y-6$=AX2PGYYuvP($6!T$~g-*4K$gYukpNxkbg(UvPa?C@&=kXD2xYmk4_W+Go+W#GJ5q^`b{({c%SGarYHpFgk2X&(hgv zC^#R+i`U3>@vlcmb#%i6q!h*`AmRv(pkpq-7+kT_21DP!{>W4TwVcl>cw_kdc z%}vk7F-}xG30vHUsPz!+`Fg=@t`sdPMIY@X(uX_wI^2>vA zr9l<$wcZIHb&jMWYgs;Tc2W3xC=$G7xNLsr%kRusP(1fEWTPS=ku~)38qxU4u)Ku* zplo9jW7sQ8lL$yvJ~-Z@+Z28)ns1h$#jY5h^i@cmF@ankhzuSpn5t9Wh+OwPYj%CP zz*IiDCU0;;6}7i}s%6LaRgTIeeX;${ozi}aS{h`)u&5qYaodoFP+Bh(A#?68or)t-TC!z4{?gPhNf*lWVY40s-wH}c>`sLkxcqGVB(3pJWPR5 z=&{T!pPDr!T+cj~{2dpA_MB{wzRq?__A3ZQr$A3n1a>3Vyc4`7V?h*7Oi+p#*L$M_x$wF+E!`iAN`?-qG6Vj_M>fHB-Wh<<4D% z206y82^~Y~qZ73L(h(DKH8ozipy`PV!ZjVnH2`e*g)2a|aq^GqfkJuF0qZt4JLZU? z&lx10MA`BBkyMu#NQowF_rIyHKcx0l?D{> zev|)noriJ!IPv@aC4B9lN*zirpd#IEz`8o?wwPt=1v%tU>#g@j8RMQei1o;ac2+Nn znAv?JyHdWaR)0No=+M>LpSh&esBh3`jauCZr!>=ArpslD<4ldy{bQE*=)0%KE5*B( z{YVWt@fw4V1Z_tIRS>s}8o`b(1}ML{g{Iw0=J#6>_-llR$|Svov={{O>(>fFk?3!= z{q~eoLOpX?E=|Uwu%ME>uy=@vjrr4rM+SmUc?hiTAWrM#;ln>scA6)7`;MdjsZ3J| ze|IS5kqz7}d3>x6+^*fC24@{@n*Ou_@7G6WTVd|)`Z0QxJEgMSSvQ1kt^zsJ>|~qb zb@?jRJ7bI)_1(T*%awW^%h~k$S$Fba>}oyiM~ktgD#x2(@twnMwnf0JX!{Z9PsrgO zPS@Ik8LSm)E$nBgUEF2GwUrN0ZVeiH84DtOe+r{F(Ms>9W!H9EW_DDa8c~f!Kar_S zOkW_zcGCt1^7SATT_igHOeMB?hWy!Ah4M6N={atJ-ZQ@u7{7dH0H41z^^h_<^S@FE zt8f>?#O)Xy5@ci&U1EyVEjkxfbIdGeIWlgx)qp;WEU|?lNt4{_H`c`oXYm4-0lj)2 z*IWWCn2Vs~t)D6;GS&n!@D7-{a!JyMeg$>Y_3O2eslL~*E%;NB$0~OTlyHn={`QsD zgGF{>KLri>oG(iGs~pYjB#P`PF*92(z~5FS{JkdDSUEgA+<52Xn~Jv3;TMg;@v&`) zg*NWGr#qP;U|k3^zmpKR@}Zc!DDhkZ+J)KucpYetxZTZ`L-&MC8{ z{q>e~Vk$}9t0BlOyv_@MZlK82XzRQ$oD74QgwOze@uvrd^uDVlDQ%oJOVmi;S#)(v_;f0#?!;iO0UUCuw%7+bT4r>6`pS5fg4#rO6G=5NfT?2b zmy6RHRL(@Co*VB6XU>RAoAtc^j1kY_4s)wDP~-F0dn(8>*lb_25oJxXyNt6 zEDZNchOI9k3()l)Ka^Cb&B_D0*NNi02(xwvzal0btH(eA>-g9axU|c{i*hbHOjYG# zCt`V=J2bV%tf$O>e4Opu;oiM``2-xY-kwvB+US4ItO(<|`ub z6g)9b2^(LYMomS}F6dwr-?9)-5M-;~5Y@ZnH~4W3@*1FEb;*sPWZdjhgsgH9ka# z9f1qtG4tr~BGb8W3h_86y(6)+2kVf;`EKYUc&2Y?nQEU}aEvD#k{%Fo5a$!Oo;Kz> z5EdeA$+`TUD8E~o4aFO}uKKWq)x`lmMm}I4SZL5$&!v2p$O+q{<`3nFhgA#u#ESlr zQUA4$z7^EDISu~Pj~8vFzP@`wd&G#OWxHOU_xix9T^O1}-NcKiq=LT*CtawEO? zUt4NO{4O08)T^94el-}Vz^{`&E{o|5<6omk#!Hr-pdb_J7}}_dk^gNOp6D zUJbsU{1$9iaH`48I)%sL6)ec%Zf|iJvmiLUq?#at<6^vh`4ho=LFrRqP1}kW1-%mq z3vXiSNRpbi;6%TwG`r*WLjLK&N62#^W>G-Qn&l8jjO^8I?U@tTC4R<8HRaTpxekQG zLHIk@%y_vT|8qWqcZIG?Q?E%gjaXlPTMFu0{ez>z5RV!?wA+rM#0t}B;vs&?WM^67 z+ZhwWkJE?#G-kK1m7hP{{8F$wo#hAj3&G1?xB}2z(W8W2ogmzr5T_zDsK8?tDv{HUC%ev;9vxrc4L zRmbGPoDkTGta*?wzszW+l8A>_ax+y=g2MT)6m_88xy~g^N!MfI%ER%xOW4T4Nd}!HbpMxfRZ##TPPHXPzbok(#*N-R&c$Da05x zY>7wx%XoN4XVzL|RFtoDPOi!`DJf|s#3E#({f<}MTYfsdkEl=%>y%y=GUQ3+(mNzo zIwcJDyE&3;A#8n%>ib`Uc3uoWm#B{?eAz6XH|C{judlLLgA)AqEA4R^vwi-1%8f#& ze@m3k)N|n_$g|?!kcT4$O<@=0Q{xOqDDE=A0~CQCOpra#2`>zrjjb~aJ-h{ZOu&W- zJDgW!9`RYo%~hDmOKf{!(~ZsCZTdYp;^RS=!Pyp!nr| zs)kPY9#W*N@dwp|1L~$}8Be!V(ypDN0#Gr;UiM|OwBF6oO-az~MDe?ijesRopCWEZ z!o%l`rMoETlM8{j2$01nv=6esJW&><>{HH#gFQyMuDNnz5GBo5^u-G|3i##2hp;9! zj*wNFTQ>{sgBVe#CcG#lkNOl@LhF8#sidSxNmFBNq@5>cN2%fHxoF~42TW&KpFPn3e791c_biP^DD4L9Vd8D4I_{f#U7!| zL|QSL4lgk+_M=RwRFC~KlXQo&#^uktZ-w!w>Uz=ZUt4`)Wqq@pKxNc&W;Rq;msR;( zrW^e;W`PbIF|t$DL1`{!pw$xN*nF;gWvDKv?K-$p0(gO*TeFrJP9kUw1d@Z3Nc$6} zeXv;oyy=11g=Wv!nau&vpdMO$x)q#5!PC?*bgc2@_{ z#qDveAlyFCRcr5zT?vSr9p_E@1pVt%>t4afQ4nDbOrnXB`$@dlMS<^!Zt$NSx(TAA z&?}3Yai0Um&lrV)#$R%$!~){xJPMdj-A@#tjLHv6K5ahc z&WvflBFb5;zHq{$z#XZ-*WN%J`L3iT5FY0Y1duVL%5$_PDU#XE6^0bGI*IetsJLSZ zAIAs1EVm5>zHmwqVWvk~*N#p41U^7%I^~Edh`&xJhLKD~+wnc7lh2Q(jz|-vlgx0) zmG()?drMO-=^72Pk11yzE^2Q5aKCT}=O|6#@nDvk=DmWm2fK3EJ z4^DjxahqMt=e2j|`el|MWEHq%OL!*1<8o7vsoS;>tw@@PBhQ1lF2Y4y5zht4=Bu?V zvE%zN*q zC>5tWSer(#3RRjyE_6n%EUWh@C-d*DO(alP6zMQ1?baa{{k@tq^t`$BW3lN7Q0B5H zHq_;V3|l(@J(+mx?Fut|jGP(b;lRR9kjKhpRfKG1dNiLFi@f)ouEZLlZu9h~sJRlK zQ_k@Lt6z?Rt;~ZWn8jE7q4R{XcK+=?HFs!-Kb6nrJu%9S_0$5}kXqi&0>q|5D(q+o z6m;-ecs2Zjbp5VrQt87EnIOMmXc7b*>|8imVYPazGSg0<9fs+RA2UOQj;zcPP&Tbr37h{& zkjfT10#`2rSe)K2D6+%OG@eD(;U0k~;dy?>;XM#w4t)~|jNk9m^;obcb1fm3{21(_ z?X=NTpq|LG@oS8UggYNQxJ9($OR$C{>y3hsGvV-)^Bb=vMgOknN~1jbCh#D%wVwTK z6b2hPjq>b*R=Zg46`wtu(T@oR*YO}&wcTg8h(v9~7QQtL8%Vhw{MAB-LY=C8lH0qr zJPpyvh4h58Tl+G*-gM;`ru!Go^F@zL#s^z-y@*3U)rZcP%!I!*lX6mx4;6vPZR^i0 zHX151kGbLBsy9l@P`e;f>JJI1`%59w=Q|LUpG|#b(P7kw>1E{aBs4W*X^BpE#nZ|e z&bfdftqtgH`BmKjJB1SpH?|FV@D8`Zd2b}&vLz-M|1VmV9z8>f&m??ZsyE? z{Uv=m^JQmJ-){Oo5L+w5CLGPToGUeUszAD4e~*sqqG93s&6x0NkVGoy3|Fr0OmQx_}wv$ijZ$lI6LGYvWkpB{M9E2G17N{9^PNp}x|-du^PALJaBwc$etJK`nW zG~8G`c8@kfHIuTqm4aeBIDVmms}S0HBth6i__x{hm*~aLMH_F~G~$kWW-DaK#Hs(V z*75}vvU(9LOCqvFmQ!2A7fk%mH3lReT4mSL53CX1rqXgtL<3v;M;REY-D?Qi*A}R$ zGv_pA~;Y8Lef$=oC)Z!ka(uGO2P9ban0bh)N*sZVM}sGf!n0X=P&}9&&0O24soEw#AB{chy>X@ zcXZz2NVwCLVHXo-0r-$BJ+-Aqh)8PjGMDF<>8o{=B`td-1{N1rTB?VX>_0Gb0rg zN%09`6VXcpqp7jMrd0ptszX0(+4hxyid&YP8Z&>x97X8 z1Oi5G(%hCbkOI=NJ`}*R@d!QYO!%3f|IK(HH&y`Pk@7xoG)BhgqfVyZnH{&G zAE61MNpQXkq$=HQhea)7_xH)sH$rwm(7NMwRD6W1>=R6Cb1Gp?eyXLbUv%`rNZiTu z?C0Rty#@G_?DI|O?pb*K98Q4Q(kB>OW}f@~CPQICCSzaB9 zj>7FIoo$WiX3x%J;+2qx4aDIK(l76_xKG-dHx-63AjjEB86P=;^gI4u>Zy!GX+sZI zt21`zr|Z&rCR(*UT3mk=DnBvJdQ}}0_0To^b_=4JI^IlKD(DDTchP_-9phwlJ0u!pYM8QT1_43>t2!5 zaNkknN#19P*pv)|A#C!TS>Ps>0H2Dg-ln|@wh=Uk{%CGZy6~KnO+TV=#gIMKj%K!> z8LvS7qua2*#hT~P-s}g+X7?k&WJFvYI(xPQ7KO7gqa2+V&kS#;t5jx8IqWTcdw#1c zCKU0cl7Cy9QbkPUwE~>E1{`;rq>a}_z{h30B3?^aCw||&A3~&2M+$>MZ z7VTfoSh}P}t*=fqm>&SEegFx~Y%WbuVykZUNA2do9afC4(%L3-cYE)bqk}VRkl#o- z^(FwlU`sk$|2OpV$!3?uBSU5hEUpxYipFTOE#~qT$Z`1o@Xh%Fc_64TX!+7pFYMkC z?k7c4^CB{E!E*r)Bz4B|#M);zT^sPxk0Q%$`cRqiNNrsc0@$KA6X!EU{UG`NFDdc1 zE0(56BZ*ZZLuzN!`t8)AE$z&{{hXp)AQZ>z;|`<#2|7*zrO!~OJ?1P89!%ypg8m)A zS=8sE++Cd|?^TV;HKRi>Su5#PwK|h${t^++sU&MyC+w#TnT16g+?zbOSMbN&A0d`P zS!FCxGtS-GhfsY&G^orJ!tkdOmMaqImPSl1b&&nlk}?HdqNJrS&$&W0gFJYgx@&uB zzIWzZ!v_BffJtRauW8dZoE!3Q&k0r^8NOkTI{JUD6E>5Wv$2t$&PAHSW3D;3ZPd=h zUNF0~{$p&h4(Zc!ZoB*IA3=%^-yRCM_I(wm;(1>Fk=@sg zcHcaCVTYFL&q!zJKfDg)*ChV-@^@~n#Scfaas2j9@*hq*UicfXZBuQ|B`|Xa1{KAc zqb5j)Tt$Tmi7J0DIq^R=n<}d)oMGU{rxlSgEMIy~@p*dF7?iGHRCgH}>RJ#A?|c!X zUZS3FP;0E4K`J_!ywXg-9}~~jl+$hGqhFSkz_N-vS=Zwhf%(I;Y#;IGhh9{lY^^qS z?h5Y6BrUMRJq}B|#HJ&`PP(>?DYsW(&##=q23`xy7%d_g-T48E_;^dW@@G+3VW6m= zKRR1xQka8o~=GF9Y87Yz?umh)fC2EYUdso zUW=`CWMIM2Z(fAP+5n?Lcl8Ovktiek_vU^OEz82px%xoI@C@N?>Ud*dT(GOieRj&D zu=Yh~Owp(~oNnm_PNF0)#e^jPUisX~Cnv;OW;DVeG zRom9!AA1B?RS_)hrGcUy$yp80@yDRRVu@RNb$+tJBh5WmPj|h$p{KP0awXBzA%Dcj zUq~*XV0(&v^HC`3qfSD7)2&Vht#wfe#{c=Yd5MCWw2~{INT%$ zaz!nS+M)%GU%8R*1~W(H*z9fXg!f9vcWXEJ%iZ`Ak~i!$YEZ*PnX7=lX+zy!Py6l3 zS%#R3G*ecLq(|0F^vOGqg7AJJIM1Z%%bVOeC7rsx;cp0b|x5{olKMN@NqOeO9 z%tk+Q?Q+OyQcHEaHY(?1B!cvYdrwIMsY^+E5Rr z1bMJ*N))Ex;}Nu<9#+Y~N(2q^VWdlPpX6!!o1c+ge{uO?-GVcx#5HFKz5^@M+pgC% z*TJ(`bDdCBMuc$vt|~p9k>gL2dtJUU_xdh({`{_2w4W+fl#nmw?OCMa?a6-@kd043 zlV+>E^{QrEd#imSd`=DaX*$xP?2?0&M51mt-i(RW8wHyMGjbsG2aEDpTE!UM()6q! z>C`{WI}ko&ql=IOHs+mSsJPXisMg^v?-J8W+P&TRhaunDc_^#6=$oQ4vhFw%3tvd$ zSm5BGo?hW$16&Wvzp)%%2+M=YLzMOS*VAy}P@lzvlS?`dscTdB_LfF8+6Elh#~4fU z`4dY)H=iB#CvAJ(6^_|gO6mV}hZ(g~I0jZbodH$_XeiP@LsJ^G&n%+br$;AfhmsO_RU-=(QsZy0P@83P;V5xSa zE_S**`}}Nq&bPBq^f5QPp*7R8O|v6;9Y_(jX`4|(ykPmd!ME$*SuKi3i|4p#4HUEb z>nlqy620ndsv2A0yBpP=9N$tRvaQFMb{}z|WmJOwI9R;o{mWoaI|lsHD*&Sq4Z@ z#kkI$#<{4(us_b0`C)5YG!=t?dNKE)tr7Asm$!+O;yLdgQOB8jVvsKbQ}XiO#56@2jv)KwHyuPn(#$eGoBhep)HJe`@l zc#{NlAR>=p`HN`So+}_+>kKKEAf!7X*B_LVD_#o1+~K3XDI0^fvz}eCw~eQYy@E8S zQlrbnpEQMiP!M3rGZh!RiXSKx&%g_vCCniVS7-7K#7>`<1giZ*tIeXZI&cc7c~3(!6p)>8?*h-DjUj?!4`dq~+k~e4ciSU~S{MNkhuQ{Fj+L zxvH%N&qllD6C!U|3pYTr+F;m~TidDI!eNct34ZJxZdOr23c|6YTlB?DqDJgmgU@to z;Qf|H8Zqc&B2Xx(aq^F6FJG9YqqfVB7%1CSVAW<^`}3Mex9taZ^OVP|4mbNaq1N!& zY=Zi#+4Ug3sdPRfb8m9*DA~*~;STWu7i{K8usP_yHl_}Y^Th>;xlP~frZ3sFr$jGw z@b0dvTtjl6GJSTIo_@FSNwvU9kyb_Ghu9WWH0R(t$It^^ty;oV%E5h_x1_rv2a19& zd9%3hK(~a-!{~BHG})?A`iWgUVx}$Z48Q1~r6~y8_WILaM72G8_IEWHxdcPc&s{a! zD=vl`cN)WIag|26@5qMM5UuInoIpC!SygxWOqp-d+s%sZd9U$IjM>wi=F0=c^2za_ z@%BkMKoJF$v^H8vH)Xs6DZrdq?*f`27IGj~1X^@J#K`h$t}#XBDF1^or9mTHo0|c_ z&IE+Atw7_f>;4ql*VPiWF@H47EVa;d7i5WISbhQ;T>-<#ic^@bJ2h6$LgR!1D}^&p zpIT&&tT6U?E)({>Se0AZ)4DSr&fGdc-Bilhzp1RoD@ZCdXh*uF| zmg=0QjRbEY+Q{N|$EOSVPR}WlMEB8>Bf{u*$)sDvTA`(36#JMMQ0bC+8KA6afT89d@G62$>P_C|@O9T^G3rqU*_o zf0@B;4~$*_-?r-g`0C<5GWODf`*jjRm>bBcHwd z@C7}u#vgz%XuBD19rt-rBFlswCh1Q`IFuqS{;$17<%Q>t8!0Vx#9xc@qJ356SKk>X z>!$Vjar2Keg9b%_NL{L-r3 z2&<=d#9Mykf1xp(Q2RGN>yg%iT+JUrk7j|tt0a^0SnzwzIiwecS zsyNFNq<{lh=m9w`>*;?zI92Z@Hd5M*n~e*$OyHk{cpRo_L99$E5V@+az!z)ur@Hca z4!f3b0WpGMJu6U?5sCR2r31;sxD^m5r1=}MB2V}D6F%&_3 z)5Zf*k^hxk)eQx3b0~VOp5n4XuU9WM5-47&5JiS9Bd1c2Ma_a*nj^cU?UJ^U7O*OEfwZwignr!QPUJ~O zU7T~FeRopU%p!zUc!pff>n~GN-nIhmzZOI@_oNozxvm!d9;D>w?O^)}0|WP*MkmJe zPriL#{@fhuc8HX!tRu_VA5UQ_Dq6x6aVI1E5AH$U_Iko%Q{Desg7%|Fla}ASZv?6t zmGk`3)EcN64j33N%5~>Ahj_S-dInVwLBClz*|}ww|mWlIij`upgPOx>k#6 z9gHb0k(UbOUPIVla=r^R$~JWTHti(XZ=w;#ItfYZST&d?@AJ zk%EflZ#~@=EMniq9_8!AZ(dG1MRc1UH+vx_wmlBZS-v(b-R($#{Rpunn?FAyUK@|< zB3vl}`SxsXtNAaD>f&FL*xI~lrxlnW3}WHyat_ElX%p|fXT>x2%;>CRA@M=kD!n}V z1wO!NDl_p#=Zq}C4us@iX9j-x@Lt>%yF}WvdI<|BKZzd9PaMYOyV-!~58`+(L7lfr zaR2W>z5)=07d|4e4JGAs8xWdX`!49l3?c?8Bool|vi7s(rp7uqsN>s z_QH8zbTfD(cmp|5000E$gf0C;p(}m4_v$`D#j?@x!fdzoOXG$)) z?Oq}yhH%ya_th z7HaoY0#R%W>ZFSXnsx`Sn}%} z<}eS(#rNU@h<@D3qO-@u6dz|9MYacc+;8Aj^{CVmU=3sjul$&UroS`<(!>5d)3;T+ zC$%S71|2#U%<)dYQD?N-9-L8m58>xa+HPSE^f$p#fQq7hG3slUZ!;W>zV4 z5>lXlr~y+sC@2JShwjyS`)YkO1`{2_=N!=K9vj_{sI3ag0=FbrmwzvXGuoG%F?i^b zWt0QbIj-f5xyVcIItFbpl@h0b-p!kAcxq{;2R`nsKW4YW>+)3b@n5}bLO)8qc20H1>&qP5R9Y^yScLt6~Q9IfhVZu>8* zReGuuS)dZWw~wLKeJO!b)hD7jyTj$K1Qz4<_5JwA(!?4it#?kN0NL;wbxe}9IaH&j zo-$pnezxa~dUuRnD^R|1GN5GW$|k#b`pgMbPL@9Q%;15rG*iG_bnR>`6V^IW|Gdwx zjj8vRb{)XtR{=XQC~2;y)jC2y!B< zp;3$zkQ(YhuQ}8NZgH4v#WU zSQx^bDSN6X^C)U-(HFx!n$2VmZX8FbSREMenR9qJjCo$&WbTjX*eq>9*!I_-ULnT0 zTxU&wc_%@5=iIDGvkOK4A7U$*|2di>LsRl)B>jn_!JWqWbc=?N#b`FzA15gE0y{$mQ1#nw`A^T5MfQh4srC~2OC=>2Lr{b z40+&I&-CR)E8!3eqRx}JeLT$U}!30$6p}&H&!cJU4`8j>A=3^$_M9`XR_xC)r`k;)y$*x#jAM|uG9n3 z0R+oh?3P^dms!KA$t%|#UikvbS~h36%ti%asE^?8pI*BevjINe%T=5`@YWImoY;q#^)6gH8 zW#yxD={Dz5`BI7@F=fNKPhTKs!K+4BpBS`}Ii}L3PjjO%_WFE7gdnzVlmx8&)Wk5b zj`-%FCn7w7HTSk%=JzWJ@~njMdjW^j8gx$b>J6`^9F(iFtKT#KzJZt`x{A)jf_AEK z7~}D^;(Z+dzobdi*esn6zF-B`y&q{^rQZB=1q*YO66_r14`hkVVI65lQC@boFUL$F zCexU)l2gfcqmPQpry%R~83PADH%QQf`Hhnizoq-CG%a z$zd&?jZ0O!MT$7#t&=bVm*r$xAnugK31BPJ0d@Byo!+lLi>r>Yn{?Ziyu#`AO&x*5 z6O3&S!Y6Tpit$W)DQ87P#t3D-2l0M(g;(mzTiVLbv3T#G%~eN?gGc_gWhJwx+jJ9n z9|mhC?`d?erCYYA(B8^=89sU2De~0kTc>7RACOsn70RL%kF)P3>5yz)KL1gEV=Ln6 z+vW`B3I0Fcg9K{h40m^DY9_t96#Tl_O~10LPi>(ebT-)R6a9Q1|L{Th*hXjko0jnN zP`(C2uMfx{8_wEnL26qPIFCb}%Eko7R+d;}u3AIKtJ$(-l@oE!*x%_?^C5q|o5?8+ zz(SLWQd=ONp*AL6U%U&0r}AZe8h1iH2`xbsskkXjZPHfG;%j)%fe?}_4@ld6NWvLct2Zx3HcxfC(?u7yr5(Ha_9NRy+U|_A z>jNs~9pd$=IX9d(M5}izV;35N9*(TSDQ6g@Ck zpv&s0=2rY8@xb7xmj$7>UoQmd{bC8VS$2ZY_eYGwfVC-8U=4!xgI&&Fu;j8#$&;?x;SHunK$8adu)f88Vej1{x`1-B4+s*;jn!A&^6jRt zWKAgVge~e`u~k8g#jX}Y(#nTtuI#U`qyw3q%1GW4Sl9Nr+bpE4bs2;G0D4y3SecIW zIF?JU^kb1q0}XN`z^U=FHowos#TO@6_8>kjIEpbbA^56vN=!?bt_jT)DBPz0CRtE) zm%TXVU2!UKGJfL!*k9yp{O;W50g_Agz%G5KnO5HrVQLvli=Y&{DAltTRKQj|p8&t@ zZ7mL%CNe>wtetZUY!@u}H9O+P^VZi=aY+!zKq@oueEP!yMYle0OO#EPbg0l3Y?UkK zS5abXXSGYYw)sHp-|+D26~Qp)p3a$B1rfKW`Ceu4U@|!*Sa81HZ_wz#AXc&uGqlIW zV`ENy@mcV&eLOv7bp)O9Fj|pzcP7^B!eVM6_2g3eOe+VXA2D_O%uCRMq_eEuaNM@1 zn5MpuazX=M2T$ve4X=aMr6@XOC8ijLl+{Y!wl(FvV6kYJ38zI_qg4F7WUOtg5Mb9T$`oag8LEg3F-!phgb;UaQ5k}Y3^F7Y znTH@lfB+%13RuQ6OMpa(5Fi8$kc27Ze!sZyz30!f*4=xpyVg1Shie&(A$;HaJn!>9 z&l?#mFc2;2kH3`Q>+fEF!U3aRXR-Gam}kpwOlC11KIF3$GXjRjHVJ-(@$}eG|0nGE z$?h7+&t)ElpJ(yjWf7?#=^Q<^NY(RODO9iZ?cbFZFZ0B@u*<0^-HD_~OqlXAoQ50% zq_cYvQKv{D<&&_oD_X*rV4D=|TsPTmXh>d&Lf|3mkR}tfZCOWcgOwa|lnYlnan-K( z6?h#CLSA8fc&gmJE(3b04m1g0&+HTxa%?!6t|U=NeWmuOrBW8W{GH9Y#kCPhtn!Zl zf3ghQS?oqpCLt9pUKB?kGG5%e)J*OC+*0t!-O9gtu22O0dCP!7g1IljWu0R@z^crrx z@LJFXyd!mK(kZw6KY3h$!)ievxMCtvn&Ti4AjlfiE7h}Fv}Y+AJtl(25Q3*$eRa4y z*r4DNdWpeIqjD`HX$4ogE)L+laKH`(*O9QvFsCBoTpU_5u% zUY%TT23E2w+CB{DIz>(;R92dDif^mx!qQLlSpm7D%*YA{Iz5ISjZz`53`S}7IS=@> z^ko^H*bafU%{w`MgDzI@Q?X$g)t#>l$}`9pTj52|=G+D(5PdPD;tzvclVyX81s)Ix z=IzE>?s6W@ivTlf-&_Pucd1_%*?7;j@f-EFHWsamp*qFKG`UK1hWbZEHSrO%FY3Tq z6`H|597e7YHF|F@ziYWO443GEE{4{Ov3mloC+ph_+*1}{0nru^i<+FL#=&3}gjJ12 z>7Sfc<9{)q5=}5>wD9qKFpll0?3S00VY__*_JT8XXk=Io{F}X87f=Zmt~V?U3|TpH zJ`_Q0gp?3Qfed5|zRd>Cli45NZbJm8BZ0B7D0#)Z7MjOFL=gFJr+lS~Ki|5FO+ z4a|K8Iex3g0R+E=jGfLZ|dB6YdnlV6>%|>SO-pVGj>()SLsmR5*=zfNSLi6R$!FlxfhhF9UQNH{ zg|dSP@f5gzLkJu6<3Py1bL^1jLBYbnV6=Bjz~7;VQ^WN2+i~S3eouhD*66#I9f6lH zKOMoi{G*$Y0qY=76R38Vh6#A#A8lEsCuA>-wxHNu`O6MAzy9x}C=a?cKp}kN{fkI> zD#yGPi!M91FXnT#)%YNUR5KJheO3~F9g2rKF(yA$D&9DX9QLIHx(BYFfTy_th}ICe zkN*APIw$=!GV^I8_ z&}B2pwGU9UajEs~b5mK^CfHl&UU9HR^l|xm?U?gqTB81u>me7t++jad+@vEBAvzDJ zuR`PN^?x3K8i@jR8)I{7v!TArJlJL0rPg=2I%Jv+`gr3}M*ZB^Jd07gxLUo;#NCjR zRq+WKg=``4l%+P1&kKK*y2q(Kf)n|W@e%7&%BpveQ1N?V=Uxv6Iu33(RBA6miBHfw z&6pV|p%B`X!@Nt)1M%yJ#j`4)zy<~n72HC+1~RdB-+6pgfJ>}6n^*^=ktFiSu)B#C zA$0{uTNjsbL{tB_kf%025GrJ@`U&#dI%_n#YwmW}w7hNBTv^qccq*dN{#-p-K80$S2(HyT_P2ut zPhX{7_-^4)_v1sz?;qQ`n%qA2t?t!tfB8dAR`L_R~~A?scB+2w^Pc}d*vk7n^P@2#xyh)!Co(QeTU7Oigo*8Fo= z5O7%&)^`NuGphEg=lU&3Dn`dc-cgN%xt_-#%=IM}rseo9ZX}dcDLSfhOzv;<9bxSIPpT-v(IYi$a!5Ud&E zwtX?%>q}r@b3129?*y}{L0yG5tg6lRme*C+J7hzzO^o+u(pr~9z1Sw-s5GoQYzJE` z-}#YItn(ypo*{-nKDR+`vQ=BL{MCFSR<)(W|y3-QBQJuwav z#ER!}S)Zj;(}v)OVV7Db>0iS(^-{}IG0F@%(LtpY!H|0mXS2b;HpiW8xHEJTn#ah( zURPCy#ZlvD)YN4&L`mVC&D1(W{SK?7xU>FUInd+ky^e#~{N_|%%2~CR`X9S8!;4xD zb9<{`m+wbNIEX{MWI8;?Yh>8c+E}tY9LcAXCl+?)+Rl6&)a1_8j;Wrns+t9YNTBjI zCvg(Y-f{r8r=z2nE22L*;MaSyGT_}K@62eF9+oLS3M%omI)mw5G>%`31R;lTO(HGo zQe2@zXC40_#7*kF8))U8q-%zEY=s(QCub4dJ&vd%$Z%{aj*pP8K2&+(8M ze&}Qf|1LrJkMV8EpHMTJZ=>W+s{BmEUk!R0v13Asn6Y_#&cNf(Zd z9<#4{rbl*S2_Hd_u%~S#X5|T-e?ZZ+mQzw7kEzrWwRAxm2C_`m!&{Y09y~7R5`@%g zb?QEuVhAQ4pL5!BpYwYU6bH4AB5_k$8<%zZ0F(fXYJ1-j;Op;(fMW>LkBO?-=>$gW z=oi5eVXZ`9QBvk9jNwK(x&JE^x}UB^Yh(IYlaXBwaJDn;)y9 z@LOzwNeqit7$v;1bJYM5qA7xxjx;@hQ5OHPratp=(rq05Hy}MhX>_E|5okbXgnqVx;O3EP zO=<&z!C|=YD!|*gHQ_jGTj96Ssn!_Oq~ptel|liY{=Ky@?XwcU+S7U+7v&M1%fbcl zz7>jV{X1UEZ~I0KL0Vm7RMiAi4j&VN=pF91VPAH;Jgll{$_qrJgpbYdnML}jd%gNp)kT95il9lNse+OG6-(A=pX*??)cn2I(VC45|S zHX#+|o|V3zRZf{^aMH77iBguXE|w^{5*u$^NkIq#D+^%?G$K9T*-bJH>S}V9|F4dO zy3^n@6qcLP$JbzwSqs0SyJKf1>^5NlQi-JBy`C?@95Eggm!<(fFc?287$4O$Z1+)} zP?UJ)su64Qecy?+Y{lZ?E<%l@IZ0{lpPd`AX(lc#W<0-9;^`B&{^9rVR%e%K^o<}o zeV!A7@OBYmZ3gg#+n@cmWv9&gie49JM-=E#6_iT~;)5Usji-94PJ@TQ|qW zk1>fG?J4EmY+e%dxpx2a>%aUCTr6)5w$;d+RI-|@?-V4>wWnoh6TmR8E>8Ijv$#L= z2w)qtegDxme*qPDaa}uC5feQ1m4pLe?rq_2^vcVpdvL^=SxF zF};|*OExmctwiv}qxpH0Amtrpt6*x-r$v-sF>6#)(d;vpM6me)UWn0MiG+Eg4o{tk z8DwD-*@OI$sfoirTCF5TOy@s%vz`^zpAw_?ng`i4RPK!qmqhCI)h^<}>X=yW9sGBXHAP*Xa$o%R<(kdrwaF zh6J-(>RVFRpOW=;s$0!%2*WGdA?}WISE|yp!SLFPk#n34@g{)$NtL=qe*I~8N#jRJ z=T|3(nzirP1@u74kqo=%MbL%mb`)y3_%6Tsf^YdmQr}ky72)+8w$GhLAH&Td z$}%?d=4WI6$M#)U?__l-GBT>_)1bS|m`HR9sn0LWXJg zwJg@;5lQUY!hHFv@ktmfbM!<3?WK3)3os;ku|7i{;SZ$kudIcY$k5s+)p|<@L1fb{ z!NI+G7m$Q5+5<>`XY8~O!1=4oU<~5)$N9uCn&>SN^xciIfv7D^h_NGCrYEoP8<1MS z#QawA8giPrKuot|J9VX>`0^=qWFc||1xfPigujiFa&U8te*Edf`yqV&ILNpkAr5iw z{;=eBt`xoaEIgM|ANAQ!dhN(FFQypQam~6S8-uDb=f3r@R%{#{ljdU)}!uj;~}|n&Nz* zMI?Yo0q|!WGWEC9=I(`XJzdeoMLyL><)MD1BM8(S;<|fu@khs;JIy;`JH-LYtZTa~ zDw+Z%z~M64s6d5Jj3t)60T|29xhV?My{F{(;SPeP1T(gUZnJns+;7iT zwy4(vfJUD5&Fp)Vu}}#S6XLOk0m z7R1F0I_K@O^res8~P3A%j21IUMP!n0uh-U4BToQW)q1pu~OhL9B!oAf9l8F4r zWraO?`Y&{_8P-7{UOfiWdJg{W0oZ*JK4d;c@n}EvW9p0SN$n@WGr$wMa7HE!GPeCb z^j*JN+PanJVFxT-_`KoVd{>uzwOEtCUhqc7F=D zIb~LWV>yEmCowq8<+95;TQeO5hP&?* zp-bHRoksyGE+p{M#+Em^F74|5N~O;k_*BV=cV3bCWqxgZU1|!XR}JR|StQ$D$_IJzcxpP-~X3gpT&Y z1KpclD78A_#WL!X)hSOfk=b`Ij?jlp4e>UTqt`Z@o=$mu{HwIilqAEI1wzOX>Y@I; zbWmhAHA&x}H4k6?$!+2maxQxo%zN7*V(f>V~z@usQIDaYWOhO_xh_ zWRf((nj9BsQR4J^9+cK@{pdg<1*Gds6m|8s6O%O=#uxnWj0Xovh)i5q%Y47N6U;LO z&eQFRJXHEQOCB7hG1SVrF{*4-YdQhJ?f0SkIzk214;#Xm@~Ve)_ThxO%OB%9f8OAE zdCVN}$Flj|d&4Bu*45Z)#l+14Ud~v@fzhf&l1FoX#eE`~Ti8Fu8VXz3Sf@oG&gIoE zneMYJ)FkTZ5PFfR{*~TGA((_<3?C6{)w2DO{C{Bas2ns>_%Gx0fA=qZX$P7?R}-pn zET^B~AEA{bA3UGz11^MjGwnPWDS(enF}E@MV}Hn_YOBl&y@V=YM}ZHgq>D1!MUJMVGYlJEku=Y`IBXngy(60P zn5nk$p8+S4?|9zy7DEo?S)bN-@cASct+Nw$oJtmxa_WX%UM{W&xMd^Ex2oXWZuGFJ z?D9iUanCVW34xB?Xy-+3T3_y8Sz<%jPq&XdUO^W_YRK-^J0|E^{am*ZVp>&}f8lP3 z*TD5Tse3iNfI19tC3Sy4>EQvJqqj{F1@YQiUarKd-B3w=fO0;P0CQ@9`u$&PX|uU^ z3M$a9@64)OG6kSawP%l>h1w5(Cn4!;sJj60IX6?d1(9jkQAk2h=q%76Er( zPS(pzS=s<)sH#^Y5yrA|Qh9gd?sMjGR@0`F8B$QQBqhD!5y(&L z*OHILO&W&k73n2+6K8`8CP`YW^oVXCs>2jwfrBMokX$AvB1Fl7ekn=TV?$uHo}#RK zT3Vh=&tfuOgmOj?Lb%=?CY`xJlyhS>rSoN>b(L5wahMX;jlDe#W&ZcwLuL|7?F6dC zrl6~!^;`gahyR?Lnjzh3flOQE7V0kocmT@0wVlAXn>u0#-fYkmQ#R-Sygv&~Yn*-n zrF8lAECB5hn{D}cQHHJ#W(G97=Wc?Ycf($%b;NO`VPDCOh7fPX74w$!Sc3J|8aS?* z1|TQ7_g?whpSo5vUvwXZ+HnXf&6#*9T!t{;6hV}m3QcR$>!JtWgy*8OgP>`Rrp@+t z5oM7IaJ&B~+l+M+EVZD-`1L154=n>^PI#RoiWsv6nbv_12w7etC-o!9v|2M#`KeVC z(5{O6Y2>6lH$6kZP(q{lEj9mKY5}@DD?80qFgu@_PJ*aF=|(pxL6$z?3K=RN<}&Kk(2m!2Ryhr+3;@46$)FmIpWUn z@Z05Y*loi=8+9=PNM&|Lpokd{37Di?A zYmf7uswYABc2!Jkoo}d|mquG7UB|ySW;UYHZkcC$G0?S*QBh2+_dmib5IQuMiiiK% z656ljq^Q01om~@~Vq*9dctq**BCj2?$nm^G19bM^v3p8x9VVE-6x8 zP#Hy!RwiRqnQ~CG0$o41y=)w9dnWbJ^23H@-Xo~<@{x+_SQ9N}3Hf64%s6N~J8nWl zoB3x#BhT-t#t@;JFv-m5KT_Oex8Ru$sqmXmsJz)Q;gA3RPkk-PmF&M}BeO>nrV022 zq>!9|otfPrH{xNidq-}=4*e&VaZkEx<4*WZl%LP-n-Mp)fW%aHvwnP#ek>O6kZmt7qgl%4fsB z-nXab`!BM8x)t;N*%P~c$=(OBImf@))A`-;i>H!0jlD0P*U!}MH2yEM*iqDLcm5()0tb*%xK=Wgm(lHV2R^i^3V&PJ-}#ODAdFL z`2)$bIy$6pBFc9nE3p6xmp0N{KMUlWg)MZ7v`{ZTPaXToP`;&ned94H@>8*=b7X7S z1UIo@0v#}A+!(xxpV=PuSD_f2wrn42`LtK>%3rtn@AbQ_t&QcazIki@@7zfq6hdwg zjw2nmc=~x8wnFK^!4!R|VncAN2r}$j4s-HZBD%t3?5>k5o9;)*nf^4=!7ZELyST?m zxrvabn1964|Gx+PANw5s`1nzhNsBy%Tk=-tgr_)=cHPqh)-kqeeK^HTgq8pIvfF># z)zqYo5Maf{cubi-bmOl0%8Edvot|vbGn))e!!$MyzW5palCW2*3aPJZi>jK zpqWcgXojX+B$s>24SRydmVKm3}dWS9+kI6(lP2O=k7=A_MkbS8u>NRd=rWE*RGBDoM_vXpU|fVq0T<7y44<^N-9g zInC?OW=AHLk40$Y(cI*0?Wpk7*(kf}wZ_9=oQ-I}I1xGCeN>L=w{Pd>*-i}$$|kGA z2;VQ>zMf+{nQ)!vyE%A;w{zg1b5YFor5j1j4(A0vF?J~g*nFdIng*&)pa6OP4E#49 zZ*D_sd|@PNHMDB#9wP*mC-$VEAL!iXMk8awQiB1=lBxn!Z+n$p2!rY9S)G1(=*^1z z?mZbQNG&DW_*XF>Dt##{cMP>Hb1Jqr7>+5h57+ilX`cBO^f&)YmoP zZMXM2tYVPRAv}rVGdPLViE&^<9ovwFG5fd*d`L)hD}}DMX2! z!QX)mtWQ4BV4h0sHoI_|-{2V|Mv~zQ9YXBA_oj`P=Mqhq?dAH7D?So_78S0vG9+b; z2(0c1D^nekI8;W_OsFU&Fa>Wh3lbi#Y%fDA#%{D5v`)3MD~1efF>|Vf50W!63-<(Y z!=gGn`kvF-=p}|@b)L_z>pshagm=-rBhNEvwg#viJ?cb>p*qCf#SAPGTEKJ(&R$_? zDWMp~(vLa1R8E$<)f(_Cr8NyGXVASk&ElpF!`My*^+2uAT5fKHNV(s8%aheK48!ON z(zGhRYrV3KpmVDFPN~f9@cJPJGnjYoLe_NRR_gYvuargeiuhGr3 zs>{4(ls!+gS+ty7B!Y^sV6@FwABwHMYv~ZJtgTCIxJ`PYMCEM!F&B3=X&Wvr#;=!U*-unB~RrDJK2A5mas-11|!kLzXPdh5{rCLQREoD9{ z3JD!~A$qR99ljx6Z(8332Bw#!+)2y*CPsZkmr@q}3%b$w;ip)M-}r4ME~lc@Xylnu z(vi;i*^ZT2^T3wLOu6-!&O9gRC3Tmxq2E@V!F0X*qtuW6J&6wWWEe-~oTe%=bFWzL z$!~FOfVI0LMiTtyBa7i{Ij(CR8#B#;(h?03R_?kFa5yjBBf;6Jm+~@Pm=@<4&H8$R zo{~42A5tg56-y4DA8cMSm3&F+A#+KfVYn~XSDU^nfAY-Sza?h z4Ic@;gu8*@ioVMK#kCN2NWg!A{L^bHT#K0~enl-Y5@Gj&P}5KFTK4FLT~?YbW~Uml z6EL`^$Ma19dbe=7L5JEWA4zMwl?9ilEX)q}hnrxXCU?7<`k(bMGbZb-U7otpO4%!? zq=g`5!FsQG`Fo&`(EmZ#M-8hAXvo2wuk*`-1ZAaAhi=2K`dXL{yyifXPLOSw(FEhP189g#C+d{+>vS6LKSsazBFr!;Ki*xKa^9J649jBSK-Uga+4c&s|Jgu`|%k^ z8&)stiYg#%QYJ-Hh)ZPtEC^vvkeX8>G+=YptvXgX!)jPNTs}T_pP4CY4mqj@0Cb=i zPJST1E+hvfQk9V^8VGJQEXHoI9Bvqf(-ui1K;|4+5jNIYobUf%;YdnXD1QOyfsBV~aNEf0@xW z_7&Ys&h%0>#)+_WiILFkjU_R6hMf!RREwxsJu&7xr@Gl&O_7sh7o6}$FI{AO#Tm&? zML(Dlzp%xs?Fvz%lu7xTG2);@Z=@h-mFOY0*s`D{uJWZwLC`AE%iBwAHQ6n(IB@W~ zweVJ1D{_BvT0}5n@8VG*vBDBd-!+_$_=oHVGMtCd8BIs%>;iv$q{HU2XCuCagpTyW zN9eogol2SLB~ye}+rksD?#(uo6PpcfBN=a z1Gc~L&l_m2&KMcONA@!!$ujm#uSk?OWOld|n0zqndUfYGS{$8XvMn5i zsXwISPpBimK(ahi{@<9$sir_GPIqu+_{>t}gxi) zTpP+p9W&=8zWsS+2Ce?%d-}RXl(f)u>+j-s4)!lNKO8%BO=t5tjlZj=7DR}vdxf@t+tnO7fA;L}c6k<4Rn(*K zkcALTdxJjf5R+CEOU=8gh%(D&-1wCwuQ0=0*$kh`R7zIeraGJQ^dt zV=`K3i*XouZt-xlfnRDyE2JH>2xL~URt_MBHoxLEJR~kTtr)g!e_BTLOm}iDJR&6x zGrSodPb+C{(%YKa^&j(=!{*hR5JExG#RCgP^m5NkMs27^BWmQHX-MB>O$Z368RrX& zylr*hMyCEHTmKb(QH9NrVO`NjC@SA_sxjow7!2NwaTzy3IA@JJxS=o>kJ|&o`c%&( zD|cGLau8!VV;BXi><=S^rx?uOSRuVA-i=;tmZoP1u=fH#GH}Z*eyur}R?FWoYO&~3 zSEEW9yRT=fP&60pP?OE4pl>h+IvL}WhKIG7)T^!1r(lAn3&pCJR2!zFA$U)Htdsjh ze8V+*9inZF+O+`Iz&aWm@!%DnZx!cLTU_I-mJ)qY>wbtOae#7v zKEaQr<2G9O_`rfM4MT3OBtk)O4yJ$cHu?TtFacWL-z8hvmz@hm=tLAyOVFQhd(*$) zb=D%0?W7^Wu@Dz3t{Um)43aKY;)=yu~# zCnHdvwLelq`l`-bb1`!FY)Pgq_kI$W3bY)yUvQT;09FY@Fw0M!ShwQ)WZ5Bua{oik zA3>G{&J?Btl2K1TW^zpakT2;(KASy8Xl#W44sQvIFul=B2x695GoD{c>N?U8L_c)h zN3i5ni5`5M?M!dh!w{H>DwR~P%?BWVoO2|>74k|GCF)+DYm=GmOf;=IWtHK?rJddF z2$;Cj5>F91jBRp5LEG=MoJ!vVC3TzvzGPd|5^bHU^%I1siCf=FA!IutAWJ zvJW6KISgphZafHKgsaVZXrpSM=k?6+Txx*=}ZFzTP45KKGHb$RGP5?M|w+VASa!tRW{TH5Hy zt|L6`tZHZdfJ}=hI%ySu@9%&RM8nH%>MPq9PSMhL_(#(c>Wk}pfeYXH{ArlqpGNkZ zZXO#89tC6}0aL)84Bhpor9laMzy&N>hY) zgMN=$*RttFZpS>IOZ3UKK4n3UYtS{!?1G_BZo@VdvL4vC=yV5|Nswo}A_<-*fcICg zT~@7pdXinGr(?yr?+g|v|6a96F+DirqvcsQ27o%cj>|2oAi%S>q);>l$#0vp|2p&Q;e-35M5c~W#bA;g*-&>8$gYS8R_{EemH@@0%T~B+#wQ~BB z22HUu`9Gi-nz3+b!bmmW0|+?Y3kUhd)ixv@kv`_?Ioh}(`t_2xz*q=4S46XMfQltm z-xLux+6+nX9Q_9lqzbtZ*sX=7am>zpP8K5+8`#$ z`NILL<&F;S8k1H$RBT`O&rK@+D#|qa0`8MAnB{=R+vMp)ZY2e?9@pi8oHI&@KfoL` z3ovtwO61MTf~7~Zv~p&1eG^NQu2*Ul!}s>X_wCzPB`PAAIMfpsJxIprQ_yg!Ev97g zC&hRR1&Zch$t|v#Yn#}aIN30b{kJ6z|6U8rhxTO|YW3w=ww4k--h8`!+~Zk*N9!qy zZ|4HPAMejv-b5FP)Ia8`P1R{o8UVFaYfYxNb2t&wmoHx~@ysA(x0-u5TpL6D+BSzi zJM|3FmKbRk=%w3Y>XYXz&&dc)+~(*k3zn?@OP(>t1H=Bar3%(gUzf6u#C8KRGb6~; zlj=&P{oV7=%e>p;6#RrsV`I~3$bCgh*$rfh6^x2^=QRt_0El(fNKY+w5G1^>OY=%yb0Eqk;Z6328-L)I)|93kJ<1V zud7PLN+W2Viv%~nGE+ZL$8g9&_yo4(M9AGM$0SWv$6KrtbF;hE1fOvegJ~(BpN_VK z3Lj#;riH7KyvfQliAR|zUpOSIK+PKs`)+9KEhC;Ss%6A*scLI3@R1v(rRAvH_a z)8+Wx1>=xa-e~s;Y|yrlUom7oG*)u~XZ9X_b?*S{dBdSf_{){@>WCoyhxU9jERA^_lAOu}# zUF-iNC*G8kq8Jl->U@~`t+PfFX@fT_mE(Muw0+;p13Mfc*)nu+%w%X+k%I8|eFaB-$x#tTcyFiJ#EBR}=X{vkjEmJIFR z^BIg+(u=IA{lY~jh<{NUoD9M|pf#0Pi)BqN87HDTu=-aE$B=UQVKh3y3o2Gj;@ZnA ztd&iYN82_JbFW2<=02ynA>`ktLOn^C&#OPM)bmVl!Y}rCAfe@|9$76o?ybf*4+4d* zkdi)-Rs?75E!}vu0WSa7i*8qSLX-O>0Qn7PxtlYSL{r7RbQBoky88A3uarTLVP^XLKQ4AWkF0H;bFW??9$%*-g>(lwUUsbCCAYTr#rPX&7A z5fJR7j+|&B#ueeYq0Z-&HH+~0DwOPvi2pybGXH{7`Wrnm6gl?K!%Z+vKcWTADn3@_!JfcS6YJq$xnrUeFA-W>$9l zcy91tLg!6ar-H4!H{Ho98gNC@cBz0ch=^-VHW@~#nO#>iN}B!!1fPWCP3gKGSqrqh z>FfJpy7s7#6hj>M;~)Io1E+^t>(?B`r!Q@b-~HCcdTs>Ivj}Qy;Y)Wn^^jI@Tjo*f zq;2KHQ6}AGMq3fHd~CqL0{Xtc=4hv`u_Llf8`0}lLdUf!K4)m<*JYLHH9|*NC}u_^Zyhc zVj<9|tM(p%Gu5qQD*ux_c+v9Wa8q>5xdO#?+4v;OH}fClGM zDw_yj2N&~N7efHOx#-u^_0R#Cv?g&5WEgMT(6zO8sMD$v@1rVR7*&`tv2}IeG#6eO z;*NWTm$~mE>|AlS)2yMj%+C`LOALea`jVar`?TOJOnGogY~dxNZe-Z>IN8G$rfgRi#tk{Z%zkSu>ig? zfAJP=hN0}XH#cVeE+=9&$XS_}rlLb8R`?8$Y@`g*8z(`6+@zj}SNR zHrL<^hqz7zcXH2oc(B}xLFtdjct)wktT#a2hIn|3n+uKZV8k>SA=9IzJhOl^q?hx= z3N^22(JjQvTlPQ?*h>KvyOcy5?vTop+?!5fJp}wLz_!(=!(MG2tOj{l6doEjT^;1t za2Z!pd>Zr{eAF+DOqz{%)*b+W(_h`mMdev!F=`rQ%&8={wp@$nCc87l0|3X0(h*=( zPaZo|(}%y<0ZPjFh3F(OuWttsp02HAcM@rEdkx&i`XfHkBU_*ub3uQUApLWzGGx1K zU`b#w7!T94nKp@b2W(V-fN;!S`Il(i^v0^o^#+dLYoDR$jNpM9_36`J$BZga*u+$u z9?7pk^udGEO%Kmg9?IAt?h^e?b-``)ALLoq^=?iAsi?n^n0b!!H_k|BxzY*UwIsgChqO0l z++81+1>b9B6MX3F7-yr}+Laxq*yYHUS z06~q=uV$0iaK|(1bQC#ylh zYiay<^ERMxc7eZC*;Kc#groza6}J>RGGt%j>B4my7#b-AY~&>~X-dzdT3f>LI()vG zWQ6q>oF%mCNhZ9A;lK+1GE?*t{$?+9re(ytsqQYRLQQSD$q=_ToN}H%5BycEYZS)I zHZqfR<{77l_4)CbXVO)M+Yq;5TO(Fx%0z>(Ry2KKRgIQ#fpY9P{jB%)x@c+A z(E<1gJ+*@ye(WUpxTcTwIBci1e%gk|M?MLTbB~882#8!~QJpeCK4z>RtAX9N#R;0qL=p2j5syw9zUsKrUZoPMqtGkTNr5qDdf!!On|&9!Joxou>Ao(#2g8(y1h zS!Qis!qF8&M>W7a-saw-4j26)k#5eFR@~a>w1`os$>(u~M=Pg0#Gg-u_JO?QIKb0Q ztF6^T*dCK!s8+hKo5pdZgzI7GN)=c{hoh8;f&LWPb2()i)){8V|)1F|&i_#i2W9jLr5|EqTZ{RgSf-B3D zS4%oSQhXQq{5le#Rx;)UBYK>BX%S=+96$RWWZ;2Y#`ZaS2#_fg@ZO@Cmw&8gK8=3J zsjMPJ3f}(_q`L9P-r%19;7+aep*ZpW)AFgC8`j zJk}Oo8!1TU<2&VFTQ+Sz5OX%E>Db#_ZQ1h0o=q!_d{!HF(1E`EW9!ao2pkX(wna%E zd5l|I5^6*>$2DE{1lUsrx`_P6Cxlo;kz1OsEorLWl;S_}l+T!Q>xL_M&Tg)6^tJP5 zLw6rq%%zQnvNpc`U*QY?Jq7~l8y=cUbq30eole6A3IFK`D`i=E5X8Kz>XZO$@t8;U zP}{_X7naF8;!p!}U;f&1mf15#m5+zG`?treOf0RqHDYC%WzREx-V)Vwh!x!cwzZ)R z+q1JV(e8h7B*G@On1nZWluD>38e`Rvev>piW$lG49GQ>UZf{5@22sg?q`kq z*gOL3xJEnYu!nx#PF;+Oj-PE0oLz6w-_?)5(3_QM5qb|T))RSNnKlpoUNYCH;1`xi zVQuuDShOd()>WAY@GCsc>&+_i3^lO6kny&y(%r1t{b7aM;i2Dc+R`*cJnd?6jY7N>%FCBaKPeu+Fhber~K)g(z&?w&)ZDvwU+AjzdHj#k`C!roYF4J~qEo`6bzrt* zoO`cHx#lkz~&RkMV>r&D$OGJp1sgC>vMIi=ml1F zfw((nWn;5bzIH44DCY-!=X$&M{wliM+x7RMl@sYYRJgVNWJ6@24-vg9b4_yQwt z=~7EHh%|K3R2ti6r$b&u2_&>hrx9}B-oV+OFjII+A8fdOeY0G&O zB@=iSl)i;5e>>{zIR95|t2q4dOG6H%rb-XSu70Z=dF*)pA!rL4=_9-)p8QPl0iqJ* zti`{ioh08kK-s~Tb?g7+Y@4@``7OkMsY%hUD4pnnrzBm*Y=D|$vN`gbe18g-S;QYX z5?e(dxY8QB`VhlBEE9HMoLIzb*&eK7ZiA=x9dT1aKk4aY0d$>GnU$D^EsNVv(q*bA zRuy7Pr4TL;Mb~dWP-3$_z-^$H@Rk&gZKF)QAw$lZP^PBlv$(SIIVBAvW*s8*P&6@( zO;z+=Z|5jpz_28MmQ2#KLGN)E&t|)&Ywg)c59qeS*|ON0JU84!UM(=6wj-OhJJx?5 zCVNzQALF+yr=#7*q3G|iI?pRXxa50sTYnci-j$DtDT{bOO9M=#_rI9PGT`sWAW9ne zOY5!phI5i!jm?{|1H<}iQ-I;K0HV~{sS9i`#T-`LIa?#*j^|L)R>GstrN=e)NhuDS-S=D@w^^c}@k|h!;vV zbk@oV^`{k(KYFzu+8o^VwU_#@dMZ<%)H_@^!z};A+vNi6Z9!EKQADs77Q0;XXqZ-p zxZ0T4{Ym3mxKS%>X_+I#!Mq&(XHj*sLpPqIpJ}msZU-$K<`=i(Bveq+Y7HC`_<24S z#r`_m88H*7t_ARqCWBA4(L=N=dB$%Dlj&y`%t-LossP+wcwmk(T*W9!o%!3^JoTUz z))gEFiY)ppOJ$a{winZsyF=$#cwNEPUq@(UQ>7=X+oBlF zwJgy)NJ&w6$LH=7LxVtQy-J#RQ?_NhLgS9R3;#NEW3Ss-6q$=Sx$A$29Bf-+MQR>& zC+3$?SJS3fZPGk{n_hKTbxYIvP`i~ho#x$R=e6JR=bvNxb3-yl4juh+#KGzZ$EW?T zPd&Pyf9Kol=I;oxkNU44eZ6b%cOmv8C+~#cEg?SoKJ|6cu1EiL92NJC#rj^Wz$?9Z z;Nd?-psDADrgNca9Ou^dOWXg&15v*`b`uelzt#O8RdyzekJ7Coyk^}pKe=i%1u z-^Q*-IAA9km6`z_6V5Gp7WSQmv%!dc`NB|JWSmhsTusDV{w*)pLP^gf*j&vr!ng%< z8yktC7lGmlB7*n}iNzx+@QP_eftHrR1}*hyKC`a7$~3;5{qW)E2@i9r){R~m(5*k(#NkYGu1R8Bc=Y`uh-v>9$I-f z))M~br=;+a)wB!@o>??q7}2{JE?B+f)5K~PNb!dTOntnB=XPIL^-WMc!kZfWrqz_L zC|X`hN*pS7u4$#dlGt;{9fczNt7%qygtiC;dE4&@yAoVnOtQGiK)C9MuI3B##Mt}{ zM4^=AIeK&9gCrYrHsm!Do2R*O!9JIrI26xBnAyLMa@b}?rY?kB+a1#PO$@uX%r9tb zJ?=3mdX<2aw$sKf&FO-VzwP#EnT&vRov!G^7G<Kz-y7)>(UH^`*(%fie5n}oBJSL{ORJhmn@7Sj&Vx(r(;ZZ<@iM)7G zsJ+|Iz3tZ^^-h9fUk_ME{93L?)2wJzn}#p=TY$@uE2FMEcX!NzbfI44io0j8n&ky- z+AsBYCqD*F6BHay`GBu_a+Q3BJ3a9nYW)MwZ+bMmN1Qqq40(8`gBl&905vIX@!EoQnedgmB*j0Pal5& zA+14nfhBLzU0Hpy@f<&8;_>WA%O2Zy`>LRH|WHQO6)cX&`-;*F>C{O;U2%t z{(JUc$7l-gO}EsCvED72XtES~j&-1y$zNP2Ga93OA_IA&veur>+V<>;rZ?1X%I5|vqlpVa1@>P`j)9CGjMCVR95@i><0(Rxt5pT zVbdPH=vZ6-&=y$c0~cyT+;dU{0vSd5mt73kzAkqfxbB$_JpfVUiG6fdh5$o}817nf z+4u9%;*FKRpTno?x%>{gcYFWc!y{svt(uFh2BwG(t%#4spi^hNbAkCjzn@|mExh$0 zWAp{Ir+qQU!Vqpep{N{t^-x62=Y^z1LJ!vbc^TjJcH`4bc4sTVyd@V%NkWa{=eonZ zxMc2PT;q4Y7hAG9?3p8GO|#0eVdDwWeF?y7SZ!r&mSALI8TU!|if?cz!Qxxe?jC4#N>uZi)xHs7tc8^|jW%I|PoHHok z!UtRMnL{&~gyi>AQ_J)EZ4GN%4rgdh7s#DMms)f#QDwk^@ELj?zV!Z)4E4UNraLvB zP944e8l%h}-1Ylw)2{)t=`znEj?rkfm(NxR%fMK+e{@#vRBr z9Rb8-)X@IKa0}hYsGT0);K<%?RGL=*TTHyZfA8Y@^FB@w?xjUFHaNto-s11~Ed|fT zSo8pjZ3zIg4-Kea0E zd;8}Lp|QI`p?G3&q>%uPDTqwv1JG&o2EYdkOl#KmYS5F#PJNxbc>G z<+;OD%J%{H-TsDhr5{60yfNjD4Xf3m%j4YWwW&LiowW|$UMaz;4rR?8BBXapu-F+y zadHO$(&SEiwIq_-N3}c#z~QM;7d&AQDc(f3Z?e`xCTTR4L_O}5Yg9B2q>q)5>t+jv zNm>h6Dpn{hxRtFj@0C;usE0bxdi~D%@JrV27nB+YaLWDWMS~&-v*iCWo6!5&=g(NY z3BB0-uvSmayj}xNZvLSN&un0!0YsX@DUmnE0!&eqR>Z{`yUYw+FT^qSgm>qAY+cBE z5>?QSGi&mm<(DcfldA7+KX1B_DxnlFqA`JLJrZTeS%VRU!ATa2ko-cFIcl40ULq-$ zssS0Jbeoe-ei0G0eF}0=l{L;Nj%(<1D8|h4XEw&DM@pxMqfI>vO+1DmG8v<>;(nHj zWy{QMlj0Ma9F+y5Bt4!FG;GEyQxB~MS-px}!=G6=3xG>Gh-R5sPD*ZSn&^o(J#hO#I0m(7@N!^2UbJJNslOKZ7i8QePNB<8#aoKvL7$ zs?dlsqX5pWRH#k#>&9#LIp!)lN0h1&a`{1*lS`5TLbhAiqMfI*{(K?wHfx;8jzzbZ zh{a100R8Gv?nkCATP#l{DrG`@o@BVsNq8thefCV1;Z=d0KuOV4yV%lg8)XCwqRWmfy;wW zfQa>QWl*17Ds4Md5f7Ne72vu_>iCbAbND;^^0%qlcu$}_Pxt>0?Xgm#pM5pixx&7* zR)vuJG!x0};;vH+d#afw|8yIzNdxD0nUGKK3MB_T&FPBOoyp)_?%#Az7}ZXS?zg|V zD*LKCH~r%_!I=WujjNvHb%uwJ4|;$C?R?Khu4vG( zvxkx&geZOeEzz;C+)t9$}v7tqX1=^gv)0($Y@ zXCv=TbX1Mr;mVp7h5UmXxTE`j8BbmbPWS(S-yI{pN^ein%Xkj$yj}10Ip-H5{x#j-vqs|A@ag2%zNQs@F`p?Kwx#QgymgV@p0c+Z4trQxo zgZti;R)+9usX@&}-fZs>Z`v3%1*>Cm5CPZ^9K*^?g!9k0_PdNiKJCjEkG zuX?iLfz{dNSW!pxJmERnWC&Wtt1bR33t`xgyB!ImACAnn2jk`iZzo+ezw;1nI-P6z zyxOa8Re@RW;%0d?McJGqqC{LOxV89T%*s~ysv{}^b*~Gs!NL{usMUu#_cM2*KH@G8 z*HE-+_%FL4>zqM484S~9%&xsD%Ee}@CgZWKn&EjsCHf68j^;NKnDaKr?t<>O$8W%3 zj5>@pb6jSM9v+;Tmkf{j`XHJ4zIL6Xp8q1f~E83c73d|Z`1$;5bN)|UZuD_>p*E?S33LW>9 z1eQj@UDF@Bb(Sr;h-Z`I8XR2jY>hxP8oSZ^kZZo}*u6%)w!9LO zg0e}`mjQ>%n86t}v%qfw>Uno9g{E?^78)KcWjt-HfqY+j_&q>2P!-8+Ujqk9Y>^VG zj>~mW6=^9jD>~W`w0!|`P{(ijU9p`YEx0_i&tV^#2XeC&ftPNoxRux;irw>R##UM1 zRC;$!9OPL7&OoYoC=lgS#_c7qr3?>#wwMM0^15o8J^navV(`YO&o67a%C3rsK1STd z4A|Y*BWLdn4N5)%2xeWNdqeSOjZR@2Gu6`a4aMEM#ebB)YC+$qNdb|3TiRH=et$*c zNaHnK!j?`AM{&>Xx^6a}UHqN{(@O?E`<`Z}o|sNFfseio|MV$oeTmz*@_9KokX9sI zHI(Es?DL9e2Uqf@hmMfk$PfB?Pvp*;7eWs!UVD%r3HEJI^pEdB#G!b%oOYs+8Ko5^ zEMGOo{_klN|MLL)f87Xj$;%eqWA+ac9tZ3FmOY;KK6{khK5?Nu2@6Q-vMOO_lE7HD6{eb3ICqVP8MeBd?%zdpt)SOGvfyYf7CmaxCJvl#6khph`uW0vu=q*B+F zD6zS!XieXGHXd7-Htjh*`2wd68BU5woQ*TNiHsznJk0@#kM!BD4WbU~2fNyyfU=v% z?`bAYm?B*_D16B`qEfGbwc%2R zF(o{zcJ1$MBS9V&=4VGYu%fHTl>`v7PIV@ejBio>o_3qYZY0k3U|o`Pjju2C(#F_L0;Cec_X0O5F%yPNH^Pb(AX7Z57DBe=$%4BB2N{3;^SoPKgKM!noLvhy* zXq>KC#tQlKfopL;j8*3(ztEq*2C5p=T~_mj7;AexJ8{C)*@rf$UK%iTMR63Qfa`$l>i+alDd9={Lr7zxrc^T@mC$+3o00Hgn;63Hve zjH$n1_;zy;K=8S;i}QvxlOUxlB!+uBZIrN^S^f(Cj2N0Y{m>UgLTv!gJU^nQK-IEkfeT2GpvvmGfW`$ z5B;{^fgH7cX~nx5B&jwXi8>;R>p7pBvaiZ;%$|`_pku*~gXu#5#5$mmL-#`z7qGa^ znVo2I1H8H5aU7&F*`QsLPTT}732~i#|Ob{I{8Yk$qH>gd1!E2 zwaj5Wwm&Nr^0bO3Pe44HFbA*nKH)C8>p!@!J=IiEt%8!V7W=aKtoyJza6`kyy(M;S zKK8$-eVHiSBUj>;EL@I9rt9|N3!cF%AKZzg!{Z@NoC*%CLs1ma2U=S|?W(z9N=*nE zDGObF9}Xm%2=Izi+Amk=k|?JHRK5Ay!RrJyi>fAHI&u1D0%wBKR1I!zCI@bAi8min zo>f+ou|YrciJAfNhO z8>@Ctpt2lhpH$;212cwy-+w%S`?0>Uxl_ON7t-D$WJYP!7Qj52FxGtq`%M(*PvZJw z60t;iSA@8rg{W&$S#8!5c&`|$Aa~!rEH8cZhsn`OO>CNUy#R#O(GtCk>l1=Qa_i(I zziTT?te)8g1)C~_i8{%np{94@#=K}8vX}?`7vZl!#)e&suSxdm&IIp#?|S=*lWC%Z zZxCOZoSK4Lfa9h#%hc6oqyyI6V{YQ+T(1l`oG)C9>$Fq(6``lKzm&)p1 z>gqtQmhF}yThQTP-<7Qg$UQ@@t-&_OUIbH;d5cMBE)gez@_o@}yzb9Z2g=4n?+JGY=HhrSdn}uS8qJjk&t9L*4#3w$kuN%vIc74#n(ay%hFb~qNGR~3;@zG zcK-S4j?LPT7onMhk<6!~mv)D#Wx{KokJ~I4?F^mt-j{FM=dS|e`mF=)Z9Zb2CjUT> zo`T9Yq%_k)E&N}DNZ#5?)M;^zv>aL63>bjlHzMa@6F^81E}U5rkMzs}pIxaQvYstO zCZ!vmRWq*FuxP>tM}}h&lhvh^$ZOHXq9G=$K4gn2;=kuO>nQWFcOVDt{gT@*9Z~k) z&T$F!o|sw9oS86lPTh$@c067-lweN9|N4Jj=>GrfhR&`7kyJf)0sgn`w(i1}&MD4} zeI2?zy7@uyWNTe9*o5g3GI7gXH9d)zdm?81Lf~9i_}Ht6l}8oIGo3J%1VHE1ETIv` z(g)kM;k2}*^|mCZz@DtpbvhxfT{)gEOEGvljO|}mB4nzO5lk&XBzo{GAwKL>!h@Nj62DK-HXOB9hXWB_MB}1@fxb!pC!x`=?d&TF^3jm?Mx`%EgHb9YU9(>SUnM zJHYBArG+c$vFMKAb`#CM8fW)vjXsbq-UulL~>RjvKruJl|HZDVFlio6Mi)_qrX3Z*qoV0!PSR46V!&K4$-U@ z7<(Ip&;QU0dVpfO9XVGOKKGF!V;Q5`xtF$Oc*;{5Q|&o*txGxq`F;A4N%aiK?9(}G zO0iwz%{4&LGqPG%z}8Fs47XRP|*KOJe3$|L)|+#io0gOE>3 zQ1;|+figiwMsHIbqgmU=EqaVMn1~%d;21x{19=MV%sln{?{?(g_|tZ3Nh^mg7L4wL zC~^Ua&g}0LSznaAU1FYdOei5}F`c)o`~zjz*4L;zn%Yw^8~x=kLn?t{d30K@12L@? z!zM?7$_DQakk-el9e>8awMRVJ-R{b2vZ6xvHV{r_T6atCl+3VYVfWn@T}!@0;XrJd z|9E_;Q_tl3io$*nwDPyp?6SVz4)0sZxbYdf7@TbwU~57JFe4LNqHk8vTTL5J%Sr_F zc4JaSm1{F(OAH^u)`rL;J;Nj9H$Yxepd#DdGon%ii-l2x1n4K^NqE|Jav!CGVaMxGQ+dXNRw z^4qtj3>s8W6(i5~mxRh{Qh??mz>;fwbDX)zJQR>>QQ%6cGC;O)Rj_?>>YvwCP{0+c+J zm??K|7VOSXdmYNr!*k+C&yXeNf5x48-W@o~W^_WxTu@b*Evo%N#@B%A_5LEIX=iJi z?+8}cd)mx^7W6sjW@T_`Gp)iD5&&#e(Emm=9fLv2}b9da;!D(aEvQB=rS=A zJzjqbs2Abbb40zdy07xts^CZ<9*T=Fpx^SK*QCv;!^0w$a-sUb9e|q*Nj!C1wHY-; z9Y7)Y`z%#oFUq#;Zf9JKg3_-?L!gCS^GCxLM~Iu8op*JEj+&@ zjUH$;-ccYbF770~Z~ss|=llNGr3kV2gA~ypC(&ia0noix{x(R8x=F2(MQwrBJDO{Owy;Le-?g?u#-pVOV};%_-~RRCOs-%1PZnQVconyTcoRTq_?i zb$q8TxWRnwe#UcrO=G?f@QOd`!o9q=KCMfGB%=oZ=&*% z|EIk#k81jC(~jEeYh7qxH)N4o-)ddhWZygWMN~u-5M)=`#0Zf!gaEOxtyb2e2(qi} zLO^x{1XKi+Kv0&1O;U*=LVy^S1PCN^Khc@#obR9Sn{&RIIdkUtherqs{+{Q)ulri= zkOHn+EN43?{br?=R>?gM$7DO=JSl5EVYnKY#r*DmB+|9PYo$F*GFgsF{Tuy?-Inpa zxWO1xPFRq*9Xuthwbvea4V8=wm=>ZJEEj@C>E%?TOFT6jGr)j%dHZan&OTN&i8IKs zh$m&1x+rwHMCQ8eiSmE-k7zRW7(k33g{6WRN%yX%JvToX%3*F~!O+qQ5FjSoC8W?r zeSr@gUF*25`jWx$+zS0+CO(uLw=Wt*2w!*Btvwd9d2oMUtv<+gNXwovwQ(|&z+{9t z%r|EI|hA!sO5EvRp=Rq5hi#F&+*WP+^ zG9I1?{Hg6YiyI&!7~nE)0T?_A#)@w;cJCq#tY4_q|X zzW|vPgzjzpE!QTh&Ocv33gS#efZvT-^9gkb-VtWhqm_1q!@9D;B*s4(2hAtWMD_M| zFyGlo$DI#nJ0tdJ2r+U7k89@@Xb=7y|0O%=m&u zT5@Vn1$U8qB~yo-!OyFn*)!a{THe09f#aG!$i|f!Zv`sbt7~?s1e6ge^X$#he~~n# z<&owF?vAb*>jGgg0)8f0M-%KP$sqLJ#m@tH1e%CuxRp{l*EaSYu08Xz5eLy5htm4b znX-sb1tuNU{_fNxku#U%p~4Sru%e^83YZg=VgA-6CdVM!kQ3DIYm9)(W2Dkb#@erI z26%=rN7BIqLD~Brbr|^MRquFZ+tNJ5&qMqCsg9dm>P1)3+Y9A*ZEL+=S%TS66WLq% z$1(Q8;LlS6GklrMs*o~fSEOd%^>yTk=%=YCp5czn(c1w++!uwRzPJRtJG%Jz69_nQ z+`a?i{p!1;easZ`tAfEQN~PU%!Iwepb(1+I>%S;;@^vq?<6oHjZE)G$6e@m2*1HFk z6!a7Qx(GvO#kBjh(%mFRT!bglN2XRhvdm%>@ln4@J~3$KV{d@3O40an-jOxD6)|D! z_b66?jG^7AP1mt4&e^Pvk(NOLb*kh^B}8|#DqH0Z*AC37gzF{|_oJ5Ht@VsQ(47bX zW9816g7jfX0CF$1*0czoYNQ@n-Ftg(_zbzMcp)yb(x-*JPtK=n)zd}G`58A*U#2>3 zVSL|+R6&Q9Fl^q)?x$B@L%9b@cj58CovVxQZ*jufbYfq^Bt5GY+3{h9B+3x5(bxP* z(CCi(Wt@Z`tTe?ZKYN^e&n#cSSgQ2IRR687k z1i#9Bgi*TP>`Bs!Ju;Vulruy7#N}wpBenu@QZlh7+n;|xZ6H@E^HjFF8RBdXbLvKJ_>rU{<;G z`FKqAC4kzT`Et}ZfuQP?PA$1B_yB6G71TsB(6Tq>khK7u4xmCiMlV)2nIjm#@H(EC=4X+ChLPhbyF;`R&CRA zxjegi;||f4%Lz@!4V4qv#DZm(VZ%Ym6QV1EEG0!b7U*fVH91xvLbnA?+xr}pqxWK^ zn9JQ+16u49p9FJJtKFnbTFncRX`rJ_waJ13M8Z#Tw=WfA3(Ka(e!y1=Hf<8jA2E_~#JRhp8c!@D zO_M`M5TwW0J2+w%2p4+dTTSfny-9+^VBFBFJ%yp3-yri&DOl(xiML8VzL1<_8dpu2 zmEimj@TQ}tD^$H?28w-eo0jmISen9P5EBK0g>q6TJ?z8Jg?JI?W3Chs}{zDN43V%Whr6w{kxeb!DPNCZTL~~)E7Vc-P5SpjYfMUH+K2v zG3P{IbeaF}0=54bMtUl>0Ni^ht6zQ{*X^%*)vCAj$k-TkThJW@{;7qG9cur?Rz*yA zV0s%7Ie6pWb6jocMmoq{NwDS*ZWa0S4t1R!*I8Mq{)AhA{6NI3YEx4qWxx0wrcilS zp>11GE@Q!s)hI*TaELh>MW86&I~?9isD5LoR2#ymnjwyhi!v=@WXNOK$lF=h_ zTW3pprSmkWc4G=@3+6_Aupi&HWq1ro$N&(BuW)bmg7qk~tUIIB_gbmJ>eFxSb*$o5 z+yfqG^lZEvvUygqEk#rTBIx~&6c9%ibE^qmTZ8V^*D*FxxYy>u;W z1gaMWWTrT*Q>D+MUw54_Dable4|x`?orXkzVq}pDn`KT13t7A6d^}>L0r<6N<(b*M z%}3+|FyVj@P8;M{^tQneI=W}bsMy~stX*6VAQO0yi*}KbLSu|w>yTdQExrm%<<3#y zr8z&HR11{ee@SYC-5H1`(e1pX#@l&TY?2*ZrrH-d@#w0_Cd^vqZ*_HHpq8WI0GyET zGF`E3AjoL}0Ck=|4dYZKFT6T?vmJYhf@l<$3As{c*aHb9Y&><)P6``d%z&T!S``BpfSi3zdVx0fw}s*D%Oc6wwFPZ zZpp7`3?E>(dBX$^mEC!oSbecQ7pW~8MY=8E_Njo0TYYLs0p|$W6EOL8AVV)L<Zic10WkIWZE2>P@`u4O#A71|O;%EJV z!=G3L@bj^+JL`EvJ2$QJ^Kj&8;1Rj7ff#;c*))31_fu^P6k3gE7jiT5F1GFHKt0=~ z{3`u1Wn}$n%P4~IT=3>QPVe7prLlMT#Cyr$3GqOFb%0;<`<(-Kt?sl72Csi}Km4S! z$>nn;4$?Sny7q|nG-v|)W}O~KjT}~KA{rf9*LT|t!`3W03&%2u)O zT3t(k5Xe_=2PoeCz31w{^!ynv*wJ+QN?*bcROq_lbmk3O*0n+s~(-@y}u$QH8#=66hAse_d86?%JXl!)pSxNhJ zEQkUmEB_LHO84b%qN(N6Ig3bF*NBTg_z3pvQ^W(Sd!N{usgo@~yO{+REiMPh zXWTU&)bJEnf5ak4`6thlTYaE!YHdzCzk1bcGop7_ESIhn=gizZmA2hir3LiQPPoF) zn4lS>vF1sAJvG8xAD=}!z#%a6g<*9sYx7%gCT0|r14?urG3@N{f=HrY1{Z?NZOEo>2S}-L=Pfuwmn;=->q~H zOBWkX$mT^19s`FyiR9`WQN0lLh%0*gQ0B`N$*(F@21qWOLjUB@Q^%e+1|Sd-DjHk( zD5N8||6-ct)MsB`7k~T~lkBAX0RkWLS>3yC#_ZK?l>jjfBLGLM1zdm!WL+q8gr!Hc zCuEp>^WO&|{2}$_)35W|Cyahh@H#&7-YVIPReIyQ7(eN@5KQvV{RI)R9 ztr|Hw^{p_5St4ug|%zbHh*1n!~cG9R8ZIV zsVB~^eLN`&&MkoKhz(UVZNw#xsMLi_n~3oLF@*46^;HsT>J|l$f!_V)jfA6DE~oBv zZDGxYAN4pQyn=}}*#IVr4O21fvqrjY)JQQqTP-8jqI9FgPDXv<{ckxZtE)9-6E_0; zkk_I#KA>ngn&Sg;>g=w~AWck9#19!cymEHT?YWsGf3t3WXIe6W!Q?o(zn8@PP%C* z=4j30oqa9o!ui%CDeFefO?V#k+*{4v{Nab$Fb(}6j%*&ux~Df_qKc7FwJf*4(DOIg zhNzd|j(f@9ADIx9#Ymc>-g#y?8Jmf5tDnC7opB_W7r|=MK0T74kYZpxA$^s3u-#al zRimjO^`frDc-Yz=iELosa22FJ^C*XHJutD5<0`$Ad7D^-FnlV4Bsbh?FV=IyZ^&gD z+l{EVXL6+lelsr?UKSnU7$zj?p;uU^739wLnzV^ps%|8@I$sR;IFhPGPR+K#MSZEU zJy&c?iVAaBF0<8(O;b1qutm(m_0LPQ^w!=FrC#MNEi6;mocZcu#~a^~J(|j1t}IWN zqIoULj{jj@%DRWOA+T(d`H&bIl-h)o`6vn-s&wB;W>*B3Jn)JHnq-Ys8#X${dN4kj zMM~^;nDqTotf;3(Oy(ud6omX-q-%>(DD>pyv9N`if&Ssch=J%g6z^jn?>dj@8LwQf zFA2|0Mv96k6sOAk5<&=1=Pilzl8-f&95)-l1UBN{y+H@BDI`wh@1q3SHLFYyZO08e zr+ciCKbW>pJ6Y#^ZI|z>tUQI#t?U!*bYH7)pBBzP>6_v-3MkkD2TKKqM>z3^vozGx z1{=g5Mi#2AG6B!@1nI#>$YGQgd64d6*4SXm&^m#&b0G&uYV}nd0~zAWYYzkC=L zR8Oj$Vtt+9MA0V3zx#OaEN!&8U^7A+uVeFw`eJT%tC_p;U6}qIaLZ2u1nh&?y(07A zc{JxIr*gt9h>%1m_k^cvY_rUFbMw%_kkan<6eP1V8Q^-|fN>}Y8T|$5k>~sGK)hk| zztJNhX$liG>D%Jy#iP@QnlE(1djf=+$ZgaJ&ov~N)saJm_REAiAH5WDR`2DvM?mv< z`sLLYJ+xs zlTo936j9tC#@KoO&^_A@a<@WE`p^#eme=oqrH7(b{^`b=NP^kd7qZZ870EG;rBu2k z>@=6Cvx2|N8aB|qth_q*`%Peges*V_#Y*Kd(i5=1G)d3*G6}*R_qXSnO!ZV(T992J z(p4QcIpHOkiYaL8*mWD@(YGix7f>yIE^;%HCuMi^ByT6q$zD-3j9D0%?(cV`mofCZ zUS@GF2h%g$7|Zn@9u|nF$#$6TSCVqaw!G1K-sQ00-N`ah<`VgMBBZ}(_PDRA_*mqr zFq|_sRefrwftzy3HBFv@qG9_I3|7pB(p9Wz)KNpC|WWl*zmMVE9fT=V;rq6(6za3U3}7P z$=E3Mgiy2il6q&3jkqYA)!$G$sVC}RCGTo8_0)abNjZC$v4YtX3{mA^qqKWu(;M5W6ru~Jx3sG1!lRJ6;Z7{g zsY2z0nSAz6WBciSQgTcIt!X?YTsj>|74Xs-t+29f>fL`I?DJm*C;p%Q-EH>ndTPnm z*yx-MgQLR`!b5fQxbngFrt2-dIphaTF*=CxXf9bF7vTNsALxM!Ba0^O^1kKbwHZf!63WH=@X5rrJ>v!%wbUXjpko4=dE?MsUWq z2wJIBbcWyb81lGT_--z>C189(Z;Gedls!lodZx^AxpMIhav*CMc3!&jn@_3x7I)RL zqpxVu24_T*W6@Qa^Z?)Z5NT7@O6V`UYSAbmCRxxa2| zA@)ri1UJbdH>O}Tg+V^RlBG%lr?Qy}Dk}Pab$=oVBSe<^4}UDVb!;V<7wg_ou5M~S z*97NNj9c~e3)kPXY!&FCdYCJhQvm&Y0Prt z+iDn&1G9fK8moE{X`V$C3sXM%MWCIu`m9T6$yOQJre)D@I8zn%QGGLCZI+B;adMdE zvSPwf%38jha4xnV>jz;?UQC29^^dx-anNlwB9c#K{?)y4{O_m@$m^}1Sw7_Z*1UZ& zFMa9a@t!0U8EH(uwPo~$D>)wThvw z2+8~+*fU$lvc5Cn+)#icIhuLoc73_(NvO4R{ozKySWs#*pi-XG@Uk%mn<+KO94emO z$i%oUO`&4nb_j%W!ZT2_Ao+f4zm5G0u{7aro9aj5MncE`sSbaaQOSjvBPTafzcGk6 zKBM3yo1ia5i5OaM%-XrXVV3{ybn|y%e4U4fkMPi4bj#U$3N}0XtUA4BDVk!DW}8<% zfl!H4y#$Iije0W(aK+Mcf(Mb^VxkDF$BmS&>~PT=6dk=f)g76s@;0=_Wz9V!OP$<+ zm4){6jyLxJuT#=uC^C{AZ+( zXlSE82}cIpC`zH7nXZg=9RQVznWr6gB)II14e9Jbu!EQGlf)*MDJqMV)_hcXNchPE zY$YYVL6@Ki$K%n=0CGj^820jenLNR&P{ zO=K8QmH591WWLS$U5ydCHFSSEpp3a1dh|^-IT^-^7|(Ciw57e9yS*rAib0vxr>}D( zGouKxy(*;EB^`l-g-G_oWxCKxkmmY!AZX)F<~H_8nXTjjVeXNaAi-xdXhBM*PO(~X zdcYms@J5qJ*D&SIUZAtA{O;^aX1ln>BKq%!8d>j&FRU&FI1(X#xbQr#4cSo#bBX%C zO|ir9QPp+$7p_CY#jEAXHdBL8hJFzJg`SzG(CzjV%>btEcOkUF+&h&j2DC5uC7v@- zY1h0ZCLmAHw^p0D`kxm6nQ~AS! zdoE_^OAc^*M;AG!d|&tH!;YmE;bVGnIi%0fUXRb(j)o!y-cfG#(ojFHhVN8{~kKft{leMj?Qht$`3&^7q`GKA_9>RV^_1KJwF z!>oB7Te+{Uwev1#eIrt0?O@e~8D_EGo}K>2y;Cw~m1QTqQz}~V`y6zA`Z7g${e({J z2yygB%3Af#%FP|=Ti9)9z1CYB}+QBX&5>6#-F((Nhtp3Ak5{p%38ssWOxYre_ zyH$GxQQ{+}zb^YGf6;L;<$a$~?TZwg;h7rIl8H%q?Iklr$ZYbB`{P$(i$Gjo+qwfc z8S}ZT(Rja>sg7BoqCek7qF_UY%gb{bN>e`fwj$kd$opSz{&02TbB~Gqklneo_s3BAQ0CYC^pzYEh_Cr~WTW`M*Rd=Szyp6n7lV*D+^- z=K#nGL2Jl$1^+1lD^kn6)nr^zuq=VWdC~*6gd>REk!Uz-3ylbuJbpo_spG%y#K^Jbc8m+$MOWfr2#bTZ-=<#To8agGffs_)-c!Fx zpLi2c1a?I-O@5;pdZwKd)9i;befh6WaT)(qvq9X~7PsSc88&y>ALW&4-> zROucR(i+Us`~XP2EVZf@fNrDc-6_uiTPuG*%D}dfVROZMi4{iPpu3t{yFDnq%w2zH zZRxq&Q^twFY8HUetVhS;L)sopj+@j3F+%zyb0ij3fy+@uVy)Kb@`=F?gXEUd*?e&grk@eJi&?V1~2-D!_3W6(3QfKXuW?aL2iCPK%w>v30k zyQOQWLJbs}(#`_eyp;reJ{7Xd%FiRFDH(RH5-8zlYx)%y8b^P1`MxM zOi@+Rf_JgI{7Ozu?(cm0BJ;+`QX-8p6*cduJctB_cT?bf`aH>>$}L{WnHu5RO_c_yg!Z${F@A`0jkQrQCAme zCE8+?jHnFjaTiC%qrx&pl#ylf1B!>(#VtynG6Z(_webVZM*CRq8Q6r`1+-hNie700 zZXTWooPy`BL%J>Ntalx1Lr~=|+KdrQ_*RC!IN>tv1=S-<6Xjq_2yo6J2RnBrTvfxh z`Q$v?{V}Z20}yU881oTfhEA|6Kl$c&pC2Y#<6_JV9-EBdN3Z=U_VVe@H9Uswh|Yv% z0V6c>2qp@#j1gQ$kD#jhV5JX5q3MbL+0;{1v5vKL=r(aiZY? zL8tSnmV-4owd|erOfGB}M?E$o=Vfj2XY~e~wM&#~vU%HYnSM=mPg$zlT3x(|@;6YF8l2cHA%-r(y1wg3fcEbIu>cgrmv{(Fbc~9V(d5`@S$IQQ**}NaMaccML3pzSOZ@+ocU)14kd44c3i#T$8 z_SxyutgzBv*DzwdkCgqNGe;RZ_*8_UhlP34-`qAIk7x!Gy~Pz(()5-0b~65 zh_&g;Jc^51Z#afhua|OA!+RKv@Xshdjk+L{a%{ik*{kBWyH-@iRUcF5Y6oLe8TDq z*pcfy#>a_Ki=cDf)+{#`?t_81E zFIy}ka331%@t+0X7MsPekk?)sCZX2J3$(VJiii>>`1wzjZ!sS3{Gt2vkAi3SPG@r* zM)%!n=o~$MH{{J`I#tujIQhyjO6E7Zeh8Kz-_~?1!o4b5op6g(!c>Kz@9V1SjFPS} zTVjMTp6BA;1N3{E61&`)S#n}kRxNV$en)u4HlBS~YPM4YHdMT=gt-HP_B**+gg1_3 zs#3amwmVmw-(UyqF+E-{ZgA66Q|E#jYnXO%m)7)*8I=<0Dn4eqvjlt?DRa&%9>T z`G(A;`5f9J+yFscUZiZz@IN&LmdQ!s=TA%ibq+U=UkHQ`)gY1!7#8tI94f zD9kRN;b2SKm5n3NLsBqOhKYtEr5e0aw$ z;ykL-+sF5kNjjoj!GOpMyj~|uI0~V>^qwi0@`%SL@fl} zEZHZ%k%%l~n7xW>rRUoXdGBD3EjFBImF&5i4u<`mWV~urdg-sIzKWuW+9KjU=iMoz z1r&@Q<%CoR(S9lq)bG?j&Q3eq4+O!EWONMtYED2Vtk1jJhV!$1zpa=)Q9yqAXOSJ+ z6wqX5Fag}L=h+5YapDaGQrnZ4V>;&VFw%9-+l*pQDv8rngP`}#Ec8-H!c|hs2qL=H z7F{&GU#u!mWcD|_T2B6y(b!+a+5$l?WY;C+xY%2tTVV<=G37g_Nqmi`x((Qy!C;2J z+1lhAibD^VQ*VSW@?2af>RG92u@C2;-vAw*M#mw0YP2=-hwH4sphz-gH8GBP$}q0~ znQ#>FWDkY;ab0gNCV$3gKRp^rDi6XLgRgfqJKz{JoSzW({9tdz@@N^RWof$`;Ts^Y z!vc70Q;po4%z} z)MMXw5LA@^J~ee=t$<>YiOJD4WP3;P&-FgMx4w8Ri1qCT=t9oQFSA)muKEl&LUEu2 z9TD!Rey_6X@9a$w6o}8*B5LW8-f(;12D45oz|9T6EDcE(x&VUQYDTffwB_yhIV8=P z8Q5f$>&RSVVESC?n4U3G4{U4+dsQ|hq~6E%7r6I$FS6~eCq=?fb(5_k;4M5!5pfS% ztx@(8Wo4!`MxLYLn*)_M)Z4;n3%-rj^R}vNqndjx_3Y9xxECSQ#lN=E~Je zW%79Ua3QRoUZ^6TTGH0+W4S2CYYdV~B1w{nxu8dO>gDBSFBturOA%Y4n-epo#K!4@ z``R}b`EE0?Kz#lP=YGe)^v22!8=&vY*mM0)^09k^yPv?+H4!gM4&_(7M{@swsYB31 zY9<2nqpnl;Bbe&rsej=7tWaj0P67-N`eA8C3I$`QKk&*9t!LV?FSl<()Hh)6ga)wf zKiQ1EsoCvq$ZmR`4G$`FH;16Vdk37|k;3jRO%V4sw2ETTd9&edQ!xoIt#iA&(ZERX z!(H_@PP5B}kD^`kZnudHOLIi%`tSfRAq;{%-00Of$teQAfa4JqkPTCRTwG+1DrWOb z>0On^$~6s(w_++PmpeCcHsJYrChZ~kHm^+%tyIuEYW)utTj5Z1AxNmWfniKk?T68< zl#^8S&#hM_>C#K+rf5BKdsXeyN|L;}PD4?pqqfUGOWutTAFE(85g`}fCfdU(x8`FxZ3>~n_CoF?8*0b<3QqLw5X zHsNfj5ayB&++j*I$awLCas!vuN9v8>I3~5U8~sG9nfHf2r{?h25%*V-ZM~fGZ6yI` zuU)*yv#Ewh4dp1IuL#A?4-85{J;3TDxIX{=l(?2&HKEwpLxT3_)?SYL(hFwLwLE@U z$CP+N_u9sd(CbTfSn+mNXqibX)toYhZ>e<{*L4S0>Rni=rf6*F-3Gme=X$3^=Y0b1 zE35xBz`{s`l$`uRHnPULKJNza`1Yg$Vhk%@m&&E$n#R67{e&a0NxZTUL0 zqTDD_>;rnmO1+BzV7&@R-I?wqsUM4?6mI5->~$W>FW*y2rTY_*VCP3xH$Eo2N9oS0 z!U}(ZUjW}6EM}8w`r(nM^KRYI;2mMjXBTk(8y1!VmN_>tv;+iXRc)vmhqqHu`Txb! zp|i^5JccnAM0pTbXI>l|#Tc%#MDGSHSJtjP@`HyL0j9olye=Tr@{3b_>}4fk-*3&; z7A;9Ydv6t)AIdlw@Pr+{{xoGmLG_2t7R1ga$;qXcMtk&!>J9SyR(e=J02`}lIAU{M zod>c3sL`Pez5d*e>5?~j$~)NmR(m#9%@OwE#_&`4=es#CNywK`OUZt*a(NTpnSi{4)dHKkLFFKuX)ZLNc zPVxlC^Ft35oVwmkxe!b@#rX%l4&#L?{iM^}OsNGwLw4^L7zkqM-KHIP@}hd0+l)mtg`i74_)^FRU3qsHpwT z#Z>8LhM-920WYLpsT=m=p(+DKt?;w1J{FA&pH4--1|6lKuHrD-;6(SXsUKOV@wuY~ z98yN;jG}3+$R_JFR@7#2c0$&|keRtUPR+0nNUVZgBKFA=Z$e8;R=CN2Cr>70q!2%v7yJTCj~o?gF> zQPI&NPYtH{q{^UhQGRVmtn8x3nu2q(XXOs?SzJTtNukU08PF12nJb8DRE-xfhM%5I z`3Q=p_rMnAVSWAr?)dGxMx84lcY)OL#9#Fqv8nY}e$xCp$TzJPk5X;23dgmXHW^4I zniIbxr&Dex3LRb}2Q9hx`49~jE#VI0ey`=YSg-$(FbC*dbGC$;Qu~& zj`F4QDd$b+IHvk@!x!SARnMW`*w9@Vxv%yLrf znAh1rb_?2BJ*;gESdAI?7~b}yjvkk4iGiCVt4d9J7nj>J?ha_BXE0S|gqatBh?={& zkr-0tp!2RilZXPP(9`3C6tk?c9Ep zvyF&|Jw2xh^TAL~1>RXE!u$M$R3$sm9ro*wMqH@&SySzh4ufJKXO1k<8qRD>_Qd*ye@+cPCoTY;k` zUc6UK%d)&Bh@bzqcxxhy#yH^El`6r@snwR?XydFnv@RgRquV(HG+OO}y@B0-+<`L% z&A2qDoj5DG+uBH1IpwwyzhP;fOc)JvE?3v^x{w6&s%g*1!R&xCvEfklZ7!aNeRD?) z&cO*p1j=_G)|H^W3uK<@JC}U9)1vajUAmOqIqtY>iVlPu68tZ7hg$MNnyXMiCVOM}{82(QBg!Du^OQM9h_dp@jfRh;toa1cj$4 zNJ$vRp#(w@0t5&FrA0~-MS4jLEkYmxA_NEt?*#8!Z@u;2pZCxCt(E+9>fYzOKYO3! z;;?a(8U#V#g5UR0r{nJ6+`SO=VDo-x7o-N=4fPH3_qpR6?rU^EIBEm5d%Xp8g_OON z-^}p6K<;_M)>*Ru+0^l-O@8Kw{t=O3aq;2DLx=7qS+Q};ziI0_Wm=SKf8PEf_r2fG z)4Bc?#_FV^%^}|=Z2y+)Qt45iR;k5568`gR&zrvo<~$EI{PJn@#Q`k?maPQ6Djhvs zesStfmSEX+x3CBxAR$zyD5&A6B5mTGE^kmc~w{C z-kZ~{A7|6WTGhDEhUhwe&yt*Q5FgrG94qE6v^=G8J(kw=3~pvzE4lfhv;015s=>Xt z;wQQP$FmA|o1lU6uh#wb|Ca~;BOaIy?RLEuw`_uF$m?Io$q%{znP6uwi~gC9nUh`- zY=oc-#ie;xS{{9B-1-=|rPIub*(OC&@N_WJ!lYAIA%6E}^CSG?62ESCj78w*BpLEI znp3u)Nz5q2TQ4ZbzYOf<6sm~5X+OX^X$CO!F7#VOzQbPpxz!tU@Rn@CiUf4>B)26b z%=V<7<7B#q8m)5WH+$iDGX(*@6;p;EZH{Sq1a?HgSvO{;nZf(7B&$Nu8{NN&PutX@2X#FK zFuNgLof%$Aaps8So2Zn?yGU+7HFl1txXg!VY1!iAQep#D(f3t`W631u4hZ^tOCTWPAY^v)`b{Yjb62(`Vt#8=zcqq1DB|vaZuyF(Q;G%@>W+?db%Wr~7s|nUc zVo+IN`ta_$Zt7^3cdTx0h+DzSZ|tlX3ciolKxuJ;*6Yn$Nnad9Z^lD=NV!0 zBOCTJ8}>DoULdGIP*rr3InkD$A2g!rat7C*=}Mw{9Yw3zBCyiJ$ekmZH@Nk{9`Cl! zf&F~iR%wzn)S@$cp{*$WG(%2#Uf7mEj>m>1C*^OYHzw2!jP--HNt2vwp5{5oXxLh1 z*(GGHTkMZVMB4krUc(h+?4k(tNK@xUMEjQ1b7r{DadxOm(ho_^f*pQWVCQ@Sc(;K& z9+2@XCHE&YUTcI6c20~{=M^4IEK$)v-y-&sk4&&<+a^Dz2*AENe}k_ksV+<)e&uQP zX=cE?4slGo4HMAscRiL~d<@?t=yuiTYzFeYp-Ca_;Ot$XWBx?C_vC+%q7W#PEyTll?6D~O8`J)CqnV3iqw;QcajVG&2r}jjx2HNrX16I?$KAbdSn_d2XivP? zydwyh+#4R&2eS_BCk$pEnB;J&P6U!?NA`_9mv$vDdcnMYKmT`N4(^!2v4*Q>F^AFR z$HA_LhAPV~b=Tm#7W)h~0U>q3BPzzjR+L8tbFQ`;s5@HH_>eyMOaRt4azu{~&EcNC z6$Ofqq4GlaN(*jt7D}VTP1zTT+aM_N-dx9xtj281PTgxgEPG=9P%$ant)TgH&D3Or zl{rcWf<84f;KRas##8*j1fh^L;)5=qKrPEE4AvK5i!-JQ$zq=@diFk1`wA|f-BfTr z5#S{X*>b(8D;+2$3=knxfxp`4)vi9i@Ca#|&jvhlEU&CH%BI?t)*p=0VT)Vkgebzb zY8g1>t8M0V^q6F!s>PlVF9DIC-8(77(DXTA)MJkm)Wcc(_Y;cNUL(=-u-Yo-mH|o3 zlf(e{A!WPcj`Pw$9lY*6qV#EAP15NnEmI3oNVAR5sZan5{+E882hQA~beO8fL>evJ z-_+XccXQz4KNsFqsw{JvpBh@mqN+|bvYeuZZ7Wc?c^Cw_u#>WJdnVH#+O$%GLx|eb ztpRAj=K15GiBfZbDW1d@piuKL&n%f4rB&EFY+)V++;-%Avl!wOkuDMA6HRC}1J-XL z=)YY2&z`l2s`P0dHLuX;H0C}+S}+d~wM3kN3@gCT=PA}6>f;z~e8qf4t0efI;;x&6 zH*+x6Y~A+pF+lDoi<3H&s@*SMDBAXO2&BEsv?65oQd&i@b>Ar zTB4NfMf}<*mL_qFqhqSRrB`yyGq`W)s&h_izjl!? znhf+3iXf9BXoZ`G-NTv3>NK*}Ei2{lb?C;nu_zE(&uu_tWn!`q?7u*aZ8crAodt|fQLcVvaZJGu6v;c@631@5 z^sKk;O6gt^k#x(WK>{*F@yXdb^=a7|1ct%Ra)zpI}vVLtu_O z`5t*D{X6lq4bYqMpLzyADT;+Dz!qHXOk8c9+l#&HK0TUY$vByf#=jeM(-U}^ALj_^ ze@2{J*F}Q*-iZM}iO6EBGaVq+$bkR6U!Uo^8vX1y+{D~qv7to|X{bLwq9L3mDHX{FEcE(?@8kiNgzr~a5Y z=>7Gp1ej`ypQ2+vqz%EX2vXx4L`r zdthoP=6->3CVs5|?>v9pF$u&xHG{ZM{vlC6Wf5$W{W(oUG7MZQ@O=C{yQdT?@ zV@aaU&ckdYXaNQ0QA&&SdHpn#%tR*bPLY8Dn69%+EdaeT?cGg_j#vlJ_}F6V#OidP zPYE^%uppz}tNU5++>>6z3(5m;yLk3(>r)Vqb_^20oe_((h@N0*8|0l*lENI+K`g1& z2<9zG5*#ujtM^-wg$h#FLqH3~%1q(3i@P;u3nfpVAm&$4N^~pd?4HZv26`)|Zvmfp zW?iRVr~AcA^*BHbLA_qT_`t>oaDVy1Mx@dPY}Q1v0v_ zd38RO^1*g_bFZtro|2*CqR&Lus5E?{I^U!lr8b->nqT-)x z#IdNzkYtr|c!kx~6ZJ0iE@h9)yw6;s_?N({JR?B$lAs8jcmCS+K&p}^C+<7R$=EtY zQ;c|%v)kORq3eWeUEPP*vHhj{5A?ryA#xN5mJc9Zjx8+TW=^ax8pbFLh_zi1?E#}hJnnYKT|M|pzG1XvJyE$DrK+_=2TnU{#4ut~X@vlq0eg9+ZBoZw z;X+2t=B6KwxCYoF#%U1wQ#PJoyk|ivoO65oonvkxf%uc}pC(H+YS#eJ^uFf`m-`iL zEM={N64Yw)qOe3fOiY#-BPTl(L1AovfwhC3C#RY})E};&4kWziDfWKM*XIC#IZ~ob zyZK8lNLy(=DEj9ebAL!0@2hJ0G0BgxzUwG5Idku&q%Y%$2hM}E=>8EduP@RTRQ1=o zCgnhXx%UUN;4@y@K;nHJlP~y> z7uL zk1u0KX_1fXI!jG4n#WOQ5Oiy*>XrXx3)7P)_$r6dae1*73n+g7TOCX^sKhouLdVC1 z-9pyIS%m#*r!`Eqv^IWeHTXhZ7OA|Im~HVJo%?c&W;+G?IwZgc6@G%2ZE)`GdOAJr z1xJT9m}b0khDy7A;AAU^nxKzyBiu8N|(*)(lfdhqw z4QI6XV74SJ?AP_^dJf~|T9qvg%og3OVK007h=%^=?UswT0Y&(cCt-4{V zN!Gq8Yw=26q_Y8+rOaKkpG1|jbCsG6yy4f!t*K~?Lzuj@BI4;+Z>SYrm66qNtop^tT|B#Y3Ogl0`Y>VO%!QJ zB0ODH-lZKY`y?ap8}erBR16x^257%#&xm(2cOY_1j7!Bo<)C@*PA$p#+-XtQheap8 zjnF%72EnKq@Hz@=n%d?%oC5;>s}oh&DC+HCb2f;MW3|8Tt;-U~;jiy65B!Hba71-Y t)x}}MH)`NH_y2$9{hx&%tV{2IKl-{jYzFZLfnsw51a3mm`1-@|e*>=d8l3Jm-uuJ-{srIF-U|z|U}f!`z0ZE1_jx}1{Awrl zg)R&R`w#GQ7*>qmdrk5`UotQ`SWwKRh(N!~m#$vYi~K!t7wl`;skhqToiG^d`_C`1 zrHTDR?uaee%12+hn?IJC|E!t)=H4$qJiCvyD~Qyzd1>!laQwT!e$vbSdB}7BH(CcA z4xBSsJ`l9GP3DH}au!~)81Q~wSd%iyDH4i`nlRjCW(v(JnSdJJ!Z!&pwB$g6?_`Eq z-GtLQ$?SxW^Z|=<$sM0@5uYcemJuCfIYiN^p$1sG^vMf zTFvy5l5BJ)wjaWN3K^`oDK-*qa}l`7i-t8+qU;OtZ{-(brmbVUk_pJs# z!9Tyb{~4lO@kEfl)y~#Nx@z3$2kACi47x0H^)xCP{Ize=NQSCM(n1F>N%CZ6LI4aM{7nJLk7de;fV3%g=gjU(S78=5Tt;e>vt|!&!=ZrN!zvJYq|yB z9*JJxWwwfpE&7E-Lm-*nyjO8aW+>6G2yw+xspyy%kYMdS?M9~kaPU7a4Qmy2z!dIKxbfL;vDh>UaiRO;-9q&As9gDVnE^qzp?m2@#g_+u3dx5u$FX~X~BYo z(kfr8V>T}>k|g55fgqq+{$q_H(bSV8uc3N-(&1L=UU#McX`Xp}B#mbY>#jt$#oSXd zJx<)5NjF)jD7JMC1{JEeTE}(B`|0p9*vx2l>NZQAwNP0*wK(GT%%wD8`nt6L+U(ms z%Y+lb8PW2uBzFcK&2>XZYE*l3^)m;ZtUJ%fej1M=%}=%qjx{x0e*4fwwAjGUis;-J zW_WT-9yyLJj>Nt_n)~{Zlht?f+U`2PrxwUg1m^n0U?jUVF9NYHj$#rS9Ew`9&M}7q z*QZH1rOE*$QmLi1tz{!Hc46r5p8bbj1JNKcYAY{w-CCs@Ghf$H)V${ns=Zri!X4?y z2?3N0>M(YI11`ieh*s$Jc@US#?uGZ2tW8#Crf+9b_v6zy{6GA4(}wnEsSzYqRm~CO zbCu?x7i@0x=?#kc+~fnNKB~sNIc#us{#`iwK_AXoUzsC!H9SpP)jV$Ew>S3>d-+b1 z1L11&!|nx9IO|jlzJ86}ODWE@Qeu&@-n<&H&0kd8MK z5${&vG8>Bw)D1(m_U*M^ewHd`^TW+%!ENj9!!$E)6`CD_Y`pq$z+Z$LE=+4!T{WJ( zinyMr!Ywr^nzKgjsK7Ll1ve_aTO#rG;vEsCok#S3x`jI~?fLGa+ru?k$)^@lcNQG6 zuc`$IX3iCv7Y;Zh;erh4R(PPJyXm+&3%i0dyH7=y??D>!a3b$h_)z)t-+ zAo-ZQ+@>MIrjfDAQJPM?k5dUOtk+`e{L}QcMeScM1h^$dapOrMpNSN~q%x-R2dbqb z!OAkje7RNAqXwDp6V}s30=utXaBVO)Q_qtR?i5U287!mTs+Uu)C2lQja{VL){AB4<49K@3;~0St znt_dxOR!%WYhvXEWWd)fM9b|_=&g_CjD%p;+A51e(XQ=qc}~QBcjA~DsJIIE>Wjc_ ziK#{A#vFm{wffwd(`g=`W%fE{v2oCm(c$gP`R-(>>qI;=McAXDhxB}&7c+Y4c3@p? zG>g1vnFpF}UCQq1R6o(DrD7C^#^C4^H-Es9wC7tNzJ6|#eyAI~!x*jaM?@cz&eidH zNR^JXCG})$E9iHwyC6~2lQ-1{fgPv-wM^q3h6QSLKYVcHeB>q(EnI^P<9>_gR?qC1 z6YjOXsz6%Ofq(^u*@x)FzIXEo6b%>vp-ZvH8R>rZT&zrMtFh(?9F{Kw`b!~G0~Vvv zjh9h1yUcntn;(q7d*RWsK#|L`uM(2J~0+i1yY4pDM@vxYZ`^W|J)e*UaL1%Ux!>8J#xr9 z`~e>tU>^9>L$X9at4n|VX9Bp%`>PPHRko%JA=O&c{gFrvYfMF@r;fSpl{_@$Ch@Gviu&9&xfRhA@~v__omSIi=DNMhG5FIT~hUeY$x-j#zo6% zB-0Ki7L`n_7&`XYjKj%g%-5UZ!lQrFn*Rq}_6qYEh(J&_oCm$mKL7YpC|$I2@X7u| z70%92e!jWMpks3QR=ZbN?jWt@8Ath|K{PQyZ?2e3Uz3^v`jZaanwHh}N>}U7r*YKO zc^IYxD&@g)r%aF{kLT!keOrC8DGhj&ZWP^8K>_*u=_=n&Gc{nI3IzwRsn>$iCNm{s zfoJRQm+q-sTkVxmQKYEGBcW`^Ku!k}QgW#K=Ux(E+a~X;y^YgtI+Fz%+1egKTo=d! z7!AK%>(LGnuCW;jl_1iZ^0Z;rjv>oDTom!`%pfQT)?E$!n>jHgmO61MYi~7HflQhe z7)2EDiC|(`b3)Kb4{->onC*{FscFEM1O-$XPAM5jBBA!b_kiNpz&`dQ`t90`wr!IG z0hTs1G*D{C+Tzw`fu`3yn5J;Y!fLUZ)?$-n>CGp%)zT_!iDqhvvk#!=FaykBCb)!d z-~?5`z4D`p_PxsV2J2G{vN&T5L9j}RnNo*o_H4DC`UmXczvmQ)h_)E^{LnMRI*(~B zW4ZoL6Ldp&BH$od3+R)fLw7DVg|Zt=MMzMC^PrY!JXKhr_72G!22f`E?fF9%mpAKBUxquu95>rIU()0~k zTKqQH$6hli5WCFP&?|p#a;zo!pLjRzFM0P~~SC z1DKQUwlv;C_t3z8v`rHGZOsUd0xDUJaRhH-X@Ds4mpEZjFF{NbD=NwDlQZvec5_J(kz)=fUk zdKCx=r8SyWuOgJg8RhuD1HOngV5dJh{nvi|zO@q%fiRO#&@B#fisF5Znr+={kV18; z+wK*nHkJOBiph&tDWK4?1j#l>nOM#mrri4LfVvgBYZXE&#HQyzrbyO$_4iY6=tm+? z0xnb)rJQRi-eetBQ{TNp3Iq~gm#{j6HkAqKizR;-Jo{E1Xjr5n*bBcXbBs#_6_6pc z;5aNHqr2r-0nO_MM#K3xLRy-eh(}6Q0g5B+;dSt7c?JRJXgm!V&M)l(B>ce92J(I_ zwYW(uG7lzsJC7#0L=Tud!RbGA5=5`0WG^SmUr<8ndcOER-R)%9uudc9bX_PgBk5pc z8e0Lhq(h9HkPuTuA|=BsFFv&3Kvn~r{mWO9RQT}!hopa>T;jTF+Lx6qlh*Gz z7Ma;V5V;;?ldKEg@>;H+<*p9!O3C99?}i}i;zd*nbC>4Sb!jz4K8KzOir@sW(3w{z zU&h+wEle{^=klOUm*3b1U@HX_wK5YUinyn2tOw;Cz)i7W4|Y2kPs%}&Jl{{?=HVl6 zJn{P(8qXSLW6rH=@PGU8sE}+3j6{aI}RB4Jq6!{!^?mx6k1Ec_Qele(C7wbpblx{brFYFq-@UXK;<_PXsN5+3LNcJ zcD9HAK*@#f;abqppN;7PeJunqzyQROgyl9)j2Iw`QKRwjgWB#@Z^%YBRZjq0b$qD{ z40G_jO7vNLJ;KrSsBiL8(D7K?p0N-C3qw7tmbKdaoWI#!ZxeuZ!6 z*0B)>elP%>S}t_FWjYcSI$Y&dqFa5pbo&;tcN9Rx@zk9NfXI$6oDcDL!z!JukF8r5 zzB?m}g_Nz-Haq4s)n>a`Y);=OecleH7Pwk!;vHUR^MvyY_qX00-SHL6?xHN#DgZ|m z5E*=)VzQ38V*zD7gN_8W`;a~tQen=nQv(Ni_u*^YwDBHu=Yu?je{x8?-^&| zSUCZc^h9KKb^bm(PeG&egxjd;=Mw^8#)xZKxyDgb9pCzNm1R`ASap+`h;0!N*y3ct zvT3RsY<2`NU>)C*4IGbWXYeC6Q{Fuu*v!7EKecQDBHxES3V09}sL`xWTgGa0x=;XiH*~55_)Vw|I7oxy4M4zxAn&}NR0}KjmvE?iL*xM^ zM#45*)=6y@(Ssn7sQa|X>GCmXAv-r3P#QKI2QZ5fEd(45=C?>hOo>(VSZHOq+B!%r zeL~c(X><7A(j{OmwB2?H;`Q=qMqsWyoVs)pl=vHd$xa9ksJ{_WM2*56bh21I+Z>l2 zW7)H1wGOBlAg#G6juDvcRf=h<5e%(CT`G+L?g9*DI0e^pcPKJz8uiScVT|~ts$!Lm zr=|hcN_Vmn{qsY{XStSVx%wUan8b2X_m!p}wgb4vFIs z10#D|pKTA3se2sl33hK!Q_^L xwcE8@7xu3YNkET3K#xMm{4Wu_whQ{>UmuzH)o#yT=)b$bw*`1Tav1vSzW@;Qq2vGn literal 8568 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 bUv~O`-!*a3WZSpMGeqE14}KonkNou?j@-mE diff --git a/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_FadeTransformMismatches.npz b/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_FadeTransformMismatches.npz index dd6aa6ad5ab1d20a133a7b677a8b4a88d0a0a6d4..46f7812c67775b2409196991bbcd6dd4532ee35e 100644 GIT binary patch delta 2706 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 IT|a^U0gn>q%K!iX diff --git a/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_FadeTransformMismatches_NothingToFade.npz b/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_FadeTransformMismatches_NothingToFade.npz index df36fde0196d67f39b53db317e24188b414b8d6c..8cd3384b90b361a341a5f65c01e37d2acff3e5a6 100644 GIT binary patch delta 43 rcmZoOZ!?z)@MdPwWnf_70AfXk%d_H7{D*>#QgYJFx(vFLt);yIGN2Ex delta 43 xcmZoOZ!?z)@MdNaVPIh30AfXk%d_H7e34>ca5$;Wuu)1*npuQFWU{riHvrML39SGC diff --git a/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_TransformMismatches.npz b/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingTex_TransformMismatches.npz index 1c2092478fadc0b45815bd5a1c38a3ab8d902299..646f6693ce2be2cf9ed8747c4a7bf2f86893fe2f 100644 GIT binary patch literal 8530 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 diff --git a/tests/test_graphical_units/control_data/updaters/LastFrameWhenCleared.npz b/tests/test_graphical_units/control_data/updaters/LastFrameWhenCleared.npz index 00a07ff8d86a0009c20a0c94a544fc517f7a41a2..3fd477dfe01cd3e23b18af7fd1b1c138faeee4ef 100644 GIT binary patch delta 43 scmZ1)v@}R6z?+#xmw|zS1BewF3LJl5`40sfrS@tt>oVw0zNO&}0823uW&i*H delta 43 xcmZ1)v@}R6z?+#xgn@y91BewF3LJl5nXJLUa3CO%VWZSu4Q3H$k;%6-yaDFS3qk+@ diff --git a/tests/test_graphical_units/control_data/updaters/UpdateSceneDuringAnimation.npz b/tests/test_graphical_units/control_data/updaters/UpdateSceneDuringAnimation.npz index 1613809ec2787f932393ff009450b2fbb09b124a..3ebf5abb19e780bd180a43795f8440c9340b691b 100644 GIT binary patch literal 10839 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 PR%P&O4n9@%&~N_%gK21O literal 10857 zcmeHNcUY5Ix{o?uQAG4AU;}hqWmIf~z)+GfHgqgt!H7T@M2ONcKmrMg4X{wGC@sMX ziUbrwO9*44peRJ8mm~&+0D%;OB#;p9`GDD-y?6I{cK^DwyCaX3^SwDa-^u&Fzj8k3 zy)(X91cSkJ!2gx7YdcGiG_8ff9Nw;n&4Vq1`JV9#^zl6D73Q@uC?s+kZ2rU*5DJ5$ zpnn6r)7Lz@qSu7r{I@T=aa{NODf4?C8^dEKF-U z&wArsEW6O=jwhKTZO>Pf4KxWtT4<^YYPlj+Us|nI>U)+dwliLkxgJDz;o$>fTd&sB zStrK_3M0+-wOQm+lNLw`0`>ICyZl{!|E2l4H>X_5PfNec=xH)JJGva#9=Z}?g8zJu zt#q__l`da^H5zN3;Y@9%{q%@&_?@ov%qQVEzsPA%SI{K~Hf(Y*c-Y8$(ls;te0`Z6 zoe6Wfb{vd6@It{qbo42nUAe> zeD5*jukR4;$5?m!U#&Wnt#yo>)lhv8JVloFoPRh`y^KB_*DdV`RKbC$K%{@ z2p7Jv7-U{`vZKpfVcAZ83_o5kJd)pa)yM#$3;Vh!5cTNawhMrA;v&=mP$v9ZPJQ)H z{wSw^u5=y5KgeG#mcE=}8p;CQ>%eudbBbog? z_!-&f56RBxvx{z*Gmzv;wydYRj#J{b{pK6pYxiH^l=TN!u@{PHI!FO?V|x9TqQS^% zhmOQZOg`~V5Ovs}@R8!m{IJ1S)uNfZ_unofIH553K=tF0+FNh;e3`j>XG57fcA;+^ zswl(M@Ie3WZ#Oy2dD_e?-ekYlp8R%nv-eQ;pFpK}7%=S69PQ^T64{s0+g_&#gf0ab zbzuGG?)eoQl~jaZ>(cyoKUu z_ki^SYr)rX?N}pYoLu00x%4V&U|Kf!wUOuYj?Ua-zMl$x#jYnKz|?0Jci`PCaubs$ zs&G{E$4X@q?rTBtkoJmA=c?|Fqx4ys2)akZB?-mWZ%0Ywj~LY+X{u~AQI}oZL`fMV zkdE0#o>*)haLS{q=M5>S<@rK|;A(|wlA^O8FE5d+a&H-(?LM^w$2GNHL-cC7FRM)C z%U+ePXU`JV=yZzP_e*`)2RUpPg>QFN0zs^Obak7kIif;&`Hm6~F7_Qdi7xMH7<(z?BF*0EBWn@L$^ zQefYE`G^U(wxC1dxdpci!FA}KnR#q%K%y!xcPzlB85IZUwE6BAH&ISKR59fvovbUO zFynA-%}3hw@2H^D>@oJ{Y}#mRjm$dzDtunT=D_+ln(}8D>%4a&|C4Cg@$Kb2LLtQK?PKRy_RLc;PTCRW*SBAHVy>+0G&htVhvc^zr${?VA?Uh)0hz~H>~ zn_#)(pLt_%Uwa6%jA(k^vGdjvD>+-N($pydT029kI||%Q)44MBkoTG|N(Wp3 z!2hZ;x=(^d>M`bI5{IRd9|Hr0PZDz2S;=7r2)9+lGQy9lm$5F9v>9D9GrtZ9c&OTp z1*AxM3B%E=sjEH_fRb2&Ox>@t;XjT zc+7N0L^BBLXQxLj`&P};-$d?x(yI@4$XB9 zDHXv!pkFxUGJ@N~Pvfze;Je?S!3!<)E_Uvk%dJrMt#Um8R_^Y{=&Kme?p9UyJ&NI4 zTr+ViFt<rOF6oN2?_!N`=JneZj2z0#W7BQjZbbj|OnALnf{9XEX|34TG-yP?7(4^kd6GmBCku#%B|WaG_l8|R z=eiXwf+%9k*ETnWgcT%8go5u{AWlf`W2R*yp72aJ{rd_@x`ZUoEoSq}e^p|Sva+&d zV+SuzFrEL{KL5|%_$gxyH97(>%D|=i38rl@yf_wWXnm5AYiHtV15)((Yc!o#zv z{;GYhwW>>#NZ}NSvb@j8N?f`i2>oFR=@VlOlht`%HbBStj#EsN4^S3Y>Mc9ow8i!X z)h(j`l}6bit?JbLV28F3vL~$v-N0t)N1mc8VYcV7qVJf`A6VOmO0LLWMq02{wzxV% zN=SWvNCPuvB(#%XM((};!A8=vO)>q0yW=Nb)m-E{q9i`XOIpj9$z0)H@`v&nw&EN8 zs-$Q3a578%LX>f9;JGho<%{F$c!4Q+$%+&6ci31QWF-c^x($ju~Vu)DN!3<7bRGJwJVc zApd(})8D1R0zEY7ScZ|?TCHgUDCgV^>Mj(jE*rRt6G=iI%weGXL~5?|9z zT9Y=O_}Z)q!jAAv31aN-?2)nfdBYSZ*H_Bcj%aF`y4{HbLEspJ;Oypx_v?Hrd$QUi zhTEt^m7wR7^1WOrVu#3Sr=rz3Y&)>;?d$M|2wla=_4*FMo>L?mU|US?SW=DP~@Sh{Ew3oM&G==pi9lUzH6?@BFekk+@jiaKXBby zAkhjdU4)Nmkult@^M}L2yQOX|F0ih{Vu@RjCggAQ{Kh}G;F`8zJ;AZ^LRsX0ee(8C zj>*H=46HkQ2B>x;ggPapx4%=Didg}1dV6IH^7&+!=950NG>ptE6wHeKrtt5%5Fy(1T)lbA_0cwxa-j`Br1K!H+#0-j^?4KdtLbID_-!Bf*o+6ovl z*Hj@Z4cF!ZTYb3A#dQ2l0u+SP#3eO@AuNyHr0FjBWhWS;bEkU}YAh#6e-KmB%48@t zYJCI5-YI_(4$xraO?cC4dQQ9k{7m8@^|DL|Iq4GZj&GZeg6X<$wpxn8az-8wyZ#KJ z_8~^qjmeNiW!Q$OWZ!N&$n#Z?q~G+WHGz*f={OEK-om~3u6y4mBE`20y857zN5-mi zg=sl=3=mEQgRNlRgJ8o+B95>oqui_djWC8=AI}8u6FD>>$+Du&VK8iUsZU%ZuTo~7 z9R*{71&?EliUM>dq1^Y&hA2Z=UtKXH4%7)X7;QxBO?Oqf*Sv8X0)huKE@7RJ#LIH_ zHpV^Q9=8bLW&vtsbdqq4sE^_{x;m=@YTkf^wsXcQms_lano<6#6OKZK}jmEV(x@AS8%Uv3azfd4U@?iyTBVGsBHRdBvL;P%2JF zPnB0ZpeK)&eUg}kcI@?SwfffSo59DHb{!PRVJ95bVzQD$6z2y8b!@0Gq8NnUFPDW~ zxyv|kcvd%c$;K$jxmvKm9uVHVWle>Z>@pU0YnVX;*)rG*wTxy{M2;ErR)%*V)iO8V z|C>&QY)Rx#1) zVM~`E&iZoaPr0i}q@f4*hEG)<=*x@c4oUvdZGY&te+}IxWp?Sa(}1?Wb)BP2J-uQ% zFyXZ2D4fr)NG&CH(_{$^dm*HT7x}uX7=MQM4kM}lomvD7f_Iut9Y@zwvuR3>wUOnI z{sxGb4?R*(2siB~qbU#{*R~Mm04;aoSE1-eWfeex{hT44(rv6E`GnkK4P9;n`~iY~ zLQwf5D9CBN=O`rHhWlB)*3_9B0la2M8{(DwttY(wQXj5_$v|oe6(}GDr%pWp-iaFF zgd43cl36;=h$mxuA0R+EjvE*4pylQR_%);ZH-a}B+%r({%LJ51Bt5E7FBHt4?rcT( zFp%~h9|E&UKl($|L?Hdfh7?AxSolSduv}>OBkZT_q8#nWRb|{HqMr-vYF{E8K`K42 z!h8Vz5NO|f2;KaX4S?Jo9ktmT9S3)q-4M}`K~~NB3%GBce}Y!-%3=hKY=`b|6wMi{ zuXORkp)ioThP%?Fxt_hL;b;H5uZ;%`6kV>z3q<^4d*Ib9UE4k4lI%}N=0bPH;=v!5 z!!<-jS;+oL&F^oAi5U<7SY}U!a01Xr11#o?XoYtiFeHk0U9zEY2i zuw&^l;u(B5o9?x5&$uCe=-NtQRk=Ug%rIlp>Udd30M;`pL5TvCxybNt0kVUsPiLi=qz$2hCql*U>#wp|C+=6efFs?XtI=R}O4-*&q-x z6v|-*x84wr^9-dR;bZl(Lso(%E$Imm_nD#=_KZjmd`G*%EaIkY9l2exwwGBjs1AH@ zYW?^gfNnitZvhUZ@bB-i*~hFvA8gVoDyGL|6eMxEUrmmGTv+LY)!PAx0j`7>J<{GQ z1cGP~`|R+Vc>lilS^Il*#_wkAeJv6+aHVmOBogf|BXj_VjvD>BP(!$wShO0d7mw#>W6P(J@lnkYSIRMyYoER>eS8`RhiS|nxMs^GeCw{&n{Q^&^+cgIOjR*XZ2;e+3p ziP_;eVt-q4o{+s@@wG^PG{kzJpRRj6t!4HY&$EWIa>BLz$1(LkI`Vi`6=L}LwT@pY zgXc&!>I!;Uj6Lv}JPEKq&@mEvBu^gfx|n7Z7E2wX&4vmNBBd=AqPRyl&0<42v5n#J ziT$EvW4kTmYqvQ>9g8O^)oYEQJ5<~d$n_0EI zA@rK%mger3!M>#Sl46Nx*>_=yc4Z%!u&qtk!<1V%Npq-n-d@n5j6LzF(=q$gnzOZK zf3nlATJOZAN?HApWxDS$jz3d3-2YbbW*h2h>RNmb2R0Ux1}^Wq!d*s1N^9Bwi|u}XpUsiJMe*mzeoHM6({| z`;W~-r7K?=@Pu!_uIGFh9xemTvTR->kLuoTK#CH!ZuafD#>Ut$_bw=%CMN5n(X-i0nR8PYk0whSuvs)*qmI8ETBGD*B3L$C7~`QPyEpn z0OXMYWFdr&^<`@RB>Uz3_LgOj8pW{RQ} z%%phIF(Ao{lO`oPSP*0bjH}Y}paBgxm{M@CkPwBuzE$JPf!h(&Nm4 z+99@R$?iMcuMjgh(&pks7Kcqnx^rR&?`7u z>Mtc3HiP9SwbHJPkNh=50Lk$+Z_p6F5caiqk|aQBylb9`yUIObk-{GLb~N9o@(9@N zi=z?BYs14bMU9wknPCChK!~m6hzalxA*2DGux*kjT=ew$GgIhUY_-*%+Ep4hET2fQ zwhG29I=xHk#w$JfBb1;#Ue-lv@UfJs1U*;A5Z#?E{Az4;apyw2IaKLx^OUU!$eA>+ z)he7pDFuR30w*Eq6;&3GACh(B$sA2fH(l6y^#E<^_yk^94kreWRm&O-c=vK=cK0U@ z7Zu5jz_AqBR{G4|5e{bY05yvrXW~8Bfx1rXh_zbPj);v0c?XfCp^EZ~dl2c7Ht=-K zA}&Jbd9N2RcQ+0FIZ*cARhxwV7 s8c*lF)21()@%J7K{mYuqPJ@2`>&HZ$_s;w;XmlF*vIjqn)zw6>oVw0o+|DQ091n!D*ylh delta 43 xcmaE$|3F_Vz?+#xgn@y91BewFG`IbH=_k&>;BZo#VWU)qII{?|$mFTw-T>x$3WNXv diff --git a/tests/test_graphical_units/control_data/updaters/ValueTracker.npz b/tests/test_graphical_units/control_data/updaters/ValueTracker.npz index 6fe743b5a5b8d9d0be402417dc7c227bd6408989..9ddafba54e6b613e099d5628399999ad19f1d31e 100644 GIT binary patch delta 43 rcmcb_e~Dizz?+#xmw|zS1BewFEOL{!|A&H&Qd#WGx(vFL+u6MVE(#Bj delta 43 xcmcb_e~Dizz?+#xgn@y91BewFEOL{!JFqh_G_XoCY?R7kXBJ@=ncU9q4FI)42sHoz diff --git a/tests/test_graphical_units/control_data/utils/pixel_error_threshold.npz b/tests/test_graphical_units/control_data/utils/pixel_error_threshold.npz index 3221041c4b9ba5a4d44bc141899a41444abfd916..204e542a8d79941394c85633be586d3d35554820 100644 GIT binary patch literal 1845 zcmWIWW@gc4U|`??Vnv2`hYxf9hXOtZ5r(v)#N5>Ql*E!my}W`-Mg{?f23AR+N(P3- zY+#Dv?FmCZ#y|#^3+qd}?$=Jz^$6Qk$RK-BBV^M?Z7#>Miw{Kj&R8`$eOIeId1jB; z>Yqh-xwjYihu+PbZPNR)P} zM6UX_i$UM=;_-|SbJcsoDr{oF>mKg!?Q@U2>qbVWOrlW#Mm4-%Y$YxuwW}T}c)Ol^_Fih+IU8H9 zOf*|o#$x^|=VUN??Ta-f)jfl+l#{9QU2ho@Mjr?UzYh5MhEE|wfFZzrko#a}{3(<_ zw3hw;o;qFmzb0SAOB4PyW1F#^8DpC}HFs)iM$M=hC8UIukP=ctN=OMQAtj`Ql#miq zLP|&pDIq1Kgp`mH8mNTwQfpI%KFRQ(vhlJ@VL<=^1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~f#)W$`?<78pA0A~KcwJuJA2L-0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009J)A*VG@n+%wJ=Rbc@ z(zShaIGz5=3IoOgm%&q}z(4D9n6hl<#~zWc&q&r+b0%%`@PX+rhb2e*)TF*z)UAD1 G+q(xbt8Rz@ diff --git a/tests/test_graphical_units/control_data/vector_scene/vector_to_coords.npz b/tests/test_graphical_units/control_data/vector_scene/vector_to_coords.npz index b85482146528b4f72053a4c423ac7defb374a647..324812f36d99aecbeaea6c7be88f74eb1e0597a7 100644 GIT binary patch literal 235273 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

      yO^&>$D4zVgp>JwQs+r2;^397)tkdkLlKNXE|K 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 literal 235257 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 Date: Thu, 26 Oct 2023 21:38:57 +1100 Subject: [PATCH 282/555] Fix: Fixed a bug in regards to empty inputs in AddTextLetterByLetter class. (#3404) * Misc: Just a class to test out some functions * Fix: Fixed a bug in AddTextLetterByLetter class * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix: Adjusted changes according to Ben's comments * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix: Removed imports * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Feat: Adjusted changes to AddTextLetterByLetter * Feat: Added test_creation * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/animation/creation.py | 5 ++++ tests/module/animation/test_creation.py | 34 +++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 tests/module/animation/test_creation.py diff --git a/manim/animation/creation.py b/manim/animation/creation.py index a2e7f8a362..f28c123025 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -563,6 +563,11 @@ def __init__( **kwargs, ) -> None: self.time_per_char = time_per_char + # Check for empty text using family_members_with_points() + if not text.family_members_with_points(): + raise ValueError( + f"The text mobject {text} does not seem to contain any characters." + ) if run_time is None: # minimum time per character is 1/frame_rate, otherwise # the animation does not finish. diff --git a/tests/module/animation/test_creation.py b/tests/module/animation/test_creation.py new file mode 100644 index 0000000000..3208ad1b41 --- /dev/null +++ b/tests/module/animation/test_creation.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +import numpy as np +import pytest + +from manim import AddTextLetterByLetter, Text, config + + +def test_non_empty_text_creation(): + """Check if AddTextLetterByLetter works for non-empty text.""" + s = Text("Hello") + anim = AddTextLetterByLetter(s) + assert anim.mobject.text == "Hello" + + +def test_empty_text_creation(): + """Ensure ValueError is raised for empty text.""" + with pytest.raises(ValueError, match="does not seem to contain any characters"): + AddTextLetterByLetter(Text("")) + + +def test_whitespace_text_creation(): + """Ensure ValueError is raised for whitespace-only text, assuming the whitespace characters have no points.""" + with pytest.raises(ValueError, match="does not seem to contain any characters"): + AddTextLetterByLetter(Text(" ")) + + +def test_run_time_for_non_empty_text(): + """Ensure the run_time is calculated correctly for non-empty text.""" + s = Text("Hello") + run_time_per_char = 0.1 + expected_run_time = np.max((1 / config.frame_rate, run_time_per_char)) * len(s.text) + anim = AddTextLetterByLetter(s, time_per_char=run_time_per_char) + assert anim.run_time == expected_run_time From 5193e1cfd1e8ce663daab70b59376de2ea2ca2c1 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 26 Oct 2023 14:29:21 +0200 Subject: [PATCH 283/555] Introduce new workflow creating a downloadable version of the documentation (#3417) * Revert "rtd: enable htmlzip build (#3355)" This reverts commit 571f79be2cf0eff8819aa5d0492d3542b76e5ab3. * use python3.11 to build docs * upgrade python version used in release publish workflow * new workflow for building downloadable docs * change event trigger for testing * sudo apt * rename release job; build html in poetry env * set GITHUB_PATH instead of PATH * introduce additional step * use correct binary path * forgot microtype * fonts-roboto + actually compress files correctly * fix asset path * Update .github/workflows/release-publish-documentation.yml Co-authored-by: Naveen M K * pull_request -> workflow_dispatch * Update .github/workflows/release-publish-documentation.yml --------- Co-authored-by: Naveen M K --- .github/workflows/python-publish.yml | 4 +- .../release-publish-documentation.yml | 84 +++++++++++++++++++ .readthedocs.yml | 4 - 3 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/release-publish-documentation.yml diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index e1e3d79c05..99ae512bbb 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -10,10 +10,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.8 + - name: Set up Python 3.11 uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: 3.11 - name: Install dependencies run: python -m pip install --upgrade poetry diff --git a/.github/workflows/release-publish-documentation.yml b/.github/workflows/release-publish-documentation.yml new file mode 100644 index 0000000000..56b68eef52 --- /dev/null +++ b/.github/workflows/release-publish-documentation.yml @@ -0,0 +1,84 @@ +name: Publish downloadable documentation + +on: + release: + types: [released] + workflow_dispatch: + +jobs: + build-and-publish-htmldocs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v4 + with: + python-version: 3.11 + + - name: Install system dependencies + run: | + sudo apt update && sudo apt install -y \ + pkg-config libcairo-dev libpango1.0-dev ffmpeg wget fonts-roboto + wget -qO- "https://yihui.org/tinytex/install-bin-unix.sh" | sh + echo ${HOME}/.TinyTeX/bin/x86_64-linux >> $GITHUB_PATH + + - name: Install LaTeX and Python dependencies + run: | + tlmgr install \ + babel-english ctex doublestroke dvisvgm frcursive fundus-calligra jknapltx \ + mathastext microtype physics preview ragged2e relsize rsfs setspace standalone \ + wasy wasysym + python -m pip install --upgrade poetry + poetry install + + - name: Build and package documentation + run: | + cd docs/ + poetry run make html + cd build/html/ + tar -czvf ../html-docs.tar.gz * + + - name: Store artifacts + uses: actions/upload-artifact@v3 + with: + path: ${{ github.workspace }}/manim/docs/build/html-docs.tar.gz + name: html-docs.tar.gz + + - name: Install Dependency + run: pip install requests + + - name: Get Upload URL + if: github.event == 'release' + id: create_release + shell: python + env: + access_token: ${{ secrets.GITHUB_TOKEN }} + tag_act: ${{ github.ref }} + run: | + import requests + import os + ref_tag = os.getenv('tag_act').split('/')[-1] + access_token = os.getenv('access_token') + headers = { + "Accept":"application/vnd.github.v3+json", + "Authorization": f"token {access_token}" + } + url = f"https://api.github.com/repos/ManimCommunity/manim/releases/tags/{ref_tag}" + c = requests.get(url,headers=headers) + upload_url=c.json()['upload_url'] + with open(os.getenv('GITHUB_OUTPUT'), 'w') as f: + print(f"upload_url={upload_url}", file=f) + print(f"tag_name={ref_tag[1:]}", file=f) + + - name: Upload Release Asset + if: github.event == 'release' + id: upload-release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ${{ github.workspace }}/manim/docs/build/html-docs.tar.gz + asset_name: manim-htmldocs-${{ steps.create_release.outputs.tag_name }}.tar.gz + asset_content_type: application/gzip diff --git a/.readthedocs.yml b/.readthedocs.yml index 3c93ef3d97..44b7408cbf 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,8 +1,4 @@ version: 2 - -formats: - - htmlzip - build: os: ubuntu-22.04 From b7eefca98f40b9fc658a5a52295161f7e620baa0 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 27 Oct 2023 09:28:23 +0200 Subject: [PATCH 284/555] Fix incorrect submobject count of multi-part Tex/MathTex mobjects by stopping them from adding empty submobjects (#3423) * do not add a VectorizedPoint as a submobject if SingleStringMathTex renders to empty SVG * test new behavior * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update tests/module/mobject/text/test_texmobject.py * Update tests/module/mobject/text/test_texmobject.py --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/text/tex_mobject.py | 4 ---- tests/module/mobject/text/test_texmobject.py | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index 71a31a72c4..dbdf6e3a50 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -344,10 +344,6 @@ def _break_up_by_substrings(self): curr_index + num_submobs + len("".join(self.arg_separator.split())) ) if num_submobs == 0: - # For cases like empty tex_strings, we want the corresponding - # part of the whole MathTex to be a VectorizedPoint - # positioned in the right part of the MathTex - sub_tex_mob.submobjects = [VectorizedPoint()] last_submob_index = min(curr_index, len(self.submobjects) - 1) sub_tex_mob.move_to(self.submobjects[last_submob_index], RIGHT) else: diff --git a/tests/module/mobject/text/test_texmobject.py b/tests/module/mobject/text/test_texmobject.py index c45681fad2..9103345d18 100644 --- a/tests/module/mobject/text/test_texmobject.py +++ b/tests/module/mobject/text/test_texmobject.py @@ -2,6 +2,7 @@ from pathlib import Path +import numpy as np import pytest from manim import MathTex, SingleStringMathTex, Tex, TexTemplate, config, tempconfig @@ -96,6 +97,23 @@ def test_tex_white_space_and_non_whitespace_args(): assert len(tex[3]) == len("".join(str_part_4.split())) +def test_multi_part_tex_with_empty_parts(): + """Check that if a Tex or MathTex Mobject with multiple + string arguments is created where some of the parts render + as empty SVGs, then the number of family members with points + should still be the same as the snipped in one singular part. + """ + tex_parts = ["(-1)", "^{", "0}"] + one_part_fomula = MathTex("".join(tex_parts)) + multi_part_formula = MathTex(*tex_parts) + + for one_part_glyph, multi_part_glyph in zip( + one_part_fomula.family_members_with_points(), + multi_part_formula.family_members_with_points(), + ): + np.testing.assert_allclose(one_part_glyph.points, multi_part_glyph.points) + + def test_tex_size(): """Check that the size of a :class:`Tex` string is not changed.""" text = Tex("what").center() From b7a8a2d4d84039c7b9d49669879f90e0e0c3561b Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Fri, 27 Oct 2023 12:59:12 +0530 Subject: [PATCH 285/555] CI: fix caching of cairo (#3419) I forgot to change the path after moving around the file. --- .github/scripts/ci_build_cairo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/scripts/ci_build_cairo.py b/.github/scripts/ci_build_cairo.py index 4a92b4e91f..469db7b452 100644 --- a/.github/scripts/ci_build_cairo.py +++ b/.github/scripts/ci_build_cairo.py @@ -26,7 +26,7 @@ VENV_NAME = "meson-venv" BUILD_DIR = "build" -INSTALL_PREFIX = Path(__file__).parent.parent / "third_party" / "cairo" +INSTALL_PREFIX = Path(__file__).parent.parent.parent / "third_party" / "cairo" logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s") logger = logging.getLogger(__name__) From 5d73525836e4e483bcefb69cb4e1fcfae5747a2f Mon Sep 17 00:00:00 2001 From: Jason Grace <110117391+JasonGrace2282@users.noreply.github.com> Date: Thu, 2 Nov 2023 11:23:30 -0400 Subject: [PATCH 286/555] Fix CSV reader adding empty lists in rendering summary (#3430) * Fix CSV reader adding empty files Fixes issue #3311 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/utils/docbuild/manim_directive.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/manim/utils/docbuild/manim_directive.py b/manim/utils/docbuild/manim_directive.py index 5b744985ca..c369464679 100644 --- a/manim/utils/docbuild/manim_directive.py +++ b/manim/utils/docbuild/manim_directive.py @@ -343,6 +343,9 @@ def _log_rendering_times(*args): print("\nRendering Summary\n-----------------\n") + # filter out empty lists caused by csv reader + data = [row for row in data if row] + max_file_length = max(len(row[0]) for row in data) for key, group in it.groupby(data, key=lambda row: row[0]): key = key.ljust(max_file_length + 1, ".") From 190ae5db53a76ac610d583394bc1e1fd0d236796 Mon Sep 17 00:00:00 2001 From: Nikhil Iyer Date: Thu, 2 Nov 2023 14:00:10 -0400 Subject: [PATCH 287/555] Fix None check order in _tree_layout (#3421) * Fix None check order in _tree_layout * add tests to test_graph.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/graph.py | 7 +++---- tests/module/mobject/test_graph.py | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/manim/mobject/graph.py b/manim/mobject/graph.py index 45ada61936..12082d5ad4 100644 --- a/manim/mobject/graph.py +++ b/manim/mobject/graph.py @@ -112,13 +112,12 @@ def _tree_layout( vertex_spacing: tuple | None = None, orientation: str = "down", ): - children = {root_vertex: list(T.neighbors(root_vertex))} - - if not nx.is_tree(T): - raise ValueError("The tree layout must be used with trees") if root_vertex is None: raise ValueError("The tree layout requires the root_vertex parameter") + if not nx.is_tree(T): + raise ValueError("The tree layout must be used with trees") + children = {root_vertex: list(T.neighbors(root_vertex))} # The following code is SageMath's tree layout implementation, taken from # https://github.com/sagemath/sage/blob/cc60cfebc4576fed8b01f0fc487271bdee3cefed/src/sage/graphs/graph_plot.py#L1447 diff --git a/tests/module/mobject/test_graph.py b/tests/module/mobject/test_graph.py index 5ae3eda4fb..b05d6b21d9 100644 --- a/tests/module/mobject/test_graph.py +++ b/tests/module/mobject/test_graph.py @@ -1,5 +1,7 @@ from __future__ import annotations +import pytest + from manim import DiGraph, Graph, Scene, Text, tempconfig @@ -100,3 +102,15 @@ def test_custom_animation_mobject_list(): scene.play(G.animate.remove_vertices(2)) assert str(G) == "Undirected graph on 3 vertices and 0 edges" assert scene.mobjects == [G] + + +def test_tree_layout_no_root_error(): + with pytest.raises(ValueError) as excinfo: + G = Graph([1, 2, 3], [(1, 2), (2, 3)], layout="tree") + assert str(excinfo.value) == "The tree layout requires the root_vertex parameter" + + +def test_tree_layout_not_tree_error(): + with pytest.raises(ValueError) as excinfo: + G = Graph([1, 2, 3], [(1, 2), (2, 3), (3, 1)], layout="tree", root_vertex=1) + assert str(excinfo.value) == "The tree layout must be used with trees" From 1b880996a9fe591065ade995609c67c0255c418d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 19:10:26 +0100 Subject: [PATCH 288/555] Bump teatimeguest/setup-texlive-action from 2 to 3 (#3431) Bumps [teatimeguest/setup-texlive-action](https://github.com/teatimeguest/setup-texlive-action) from 2 to 3. - [Release notes](https://github.com/teatimeguest/setup-texlive-action/releases) - [Commits](https://github.com/teatimeguest/setup-texlive-action/compare/v2...v3) --- updated-dependencies: - dependency-name: teatimeguest/setup-texlive-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 61913fcea7..9f385d50c5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,7 +65,7 @@ jobs: - name: Install Texlive (Linux) if: runner.os == 'Linux' - uses: teatimeguest/setup-texlive-action@v2 + uses: teatimeguest/setup-texlive-action@v3 with: cache: true packages: scheme-basic fontspec inputenc fontenc tipa mathrsfs calligra xcolor standalone preview doublestroke ms everysel setspace rsfs relsize ragged2e fundus-calligra microtype wasysym physics dvisvgm jknapltx wasy cm-super babel-english gnu-freefont mathastext cbfonts-fd xetex From 25bb3815288b8ef9df46295a2b23bcda0e47b84b Mon Sep 17 00:00:00 2001 From: Harald Schilly Date: Fri, 3 Nov 2023 19:39:18 +0100 Subject: [PATCH 289/555] bump dependencies -- see #3241 (#3433) --- poetry.lock | 1076 ++++++++++++------------------ pyproject.toml | 6 +- tests/interface/test_commands.py | 2 +- 3 files changed, 432 insertions(+), 652 deletions(-) diff --git a/poetry.lock b/poetry.lock index c930875781..611d37fa59 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 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 = [ @@ -44,7 +41,6 @@ files = [ name = "anyio" version = "4.0.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -66,7 +62,6 @@ trio = ["trio (>=0.22)"] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "main" optional = true python-versions = "*" files = [ @@ -78,7 +73,6 @@ files = [ name = "argon2-cffi" version = "23.1.0" description = "Argon2 for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -99,7 +93,6 @@ typing = ["mypy"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -137,7 +130,6 @@ tests = ["pytest"] name = "arrow" version = "1.3.0" description = "Better dates & times for Python" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -151,13 +143,12 @@ types-python-dateutil = ">=2.8.10" [package.extras] doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] -test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] [[package]] name = "astor" version = "0.8.1" description = "Read/rewrite/write Python ASTs" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ @@ -169,7 +160,6 @@ files = [ name = "astroid" version = "2.15.8" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -187,27 +177,26 @@ wrapt = [ [[package]] name = "asttokens" -version = "2.4.0" +version = "2.4.1" description = "Annotate AST trees with source code positions" -category = "main" optional = true python-versions = "*" files = [ - {file = "asttokens-2.4.0-py2.py3-none-any.whl", hash = "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69"}, - {file = "asttokens-2.4.0.tar.gz", hash = "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e"}, + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, ] [package.dependencies] six = ">=1.12.0" [package.extras] -test = ["astroid", "pytest"] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -224,14 +213,13 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte [[package]] name = "babel" -version = "2.13.0" +version = "2.13.1" description = "Internationalization utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.13.0-py3-none-any.whl", hash = "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec"}, - {file = "Babel-2.13.0.tar.gz", hash = "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210"}, + {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, + {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, ] [package.dependencies] @@ -244,7 +232,6 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "main" optional = true python-versions = "*" files = [ @@ -256,7 +243,6 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -275,7 +261,6 @@ lxml = ["lxml"] name = "black" version = "23.10.1" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -318,7 +303,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -337,7 +321,6 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -349,7 +332,6 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -414,7 +396,6 @@ pycparser = "*" name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -424,109 +405,107 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.1" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.1.tar.gz", hash = "sha256:d9137a876020661972ca6eec0766d81aef8a5627df628b664b234b73396e727e"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8aee051c89e13565c6bd366813c386939f8e928af93c29fda4af86d25b73d8f8"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:352a88c3df0d1fa886562384b86f9a9e27563d4704ee0e9d56ec6fcd270ea690"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:223b4d54561c01048f657fa6ce41461d5ad8ff128b9678cfe8b2ecd951e3f8a2"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f861d94c2a450b974b86093c6c027888627b8082f1299dfd5a4bae8e2292821"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1171ef1fc5ab4693c5d151ae0fdad7f7349920eabbaca6271f95969fa0756c2d"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28f512b9a33235545fbbdac6a330a510b63be278a50071a336afc1b78781b147"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0e842112fe3f1a4ffcf64b06dc4c61a88441c2f02f373367f7b4c1aa9be2ad5"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f9bc2ce123637a60ebe819f9fccc614da1bcc05798bbbaf2dd4ec91f3e08846"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f194cce575e59ffe442c10a360182a986535fd90b57f7debfaa5c845c409ecc3"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9a74041ba0bfa9bc9b9bb2cd3238a6ab3b7618e759b41bd15b5f6ad958d17605"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b578cbe580e3b41ad17b1c428f382c814b32a6ce90f2d8e39e2e635d49e498d1"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6db3cfb9b4fcecb4390db154e75b49578c87a3b9979b40cdf90d7e4b945656e1"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:debb633f3f7856f95ad957d9b9c781f8e2c6303ef21724ec94bea2ce2fcbd056"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-win32.whl", hash = "sha256:87071618d3d8ec8b186d53cb6e66955ef2a0e4fa63ccd3709c0c90ac5a43520f"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:e372d7dfd154009142631de2d316adad3cc1c36c32a38b16a4751ba78da2a397"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae4070f741f8d809075ef697877fd350ecf0b7c5837ed68738607ee0a2c572cf"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58e875eb7016fd014c0eea46c6fa92b87b62c0cb31b9feae25cbbe62c919f54d"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dbd95e300367aa0827496fe75a1766d198d34385a58f97683fe6e07f89ca3e3c"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de0b4caa1c8a21394e8ce971997614a17648f94e1cd0640fbd6b4d14cab13a72"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:985c7965f62f6f32bf432e2681173db41336a9c2611693247069288bcb0c7f8b"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a15c1fe6d26e83fd2e5972425a772cca158eae58b05d4a25a4e474c221053e2d"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae55d592b02c4349525b6ed8f74c692509e5adffa842e582c0f861751701a673"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be4d9c2770044a59715eb57c1144dedea7c5d5ae80c68fb9959515037cde2008"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:851cf693fb3aaef71031237cd68699dded198657ec1e76a76eb8be58c03a5d1f"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:31bbaba7218904d2eabecf4feec0d07469284e952a27400f23b6628439439fa7"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:871d045d6ccc181fd863a3cd66ee8e395523ebfbc57f85f91f035f50cee8e3d4"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:501adc5eb6cd5f40a6f77fbd90e5ab915c8fd6e8c614af2db5561e16c600d6f3"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f5fb672c396d826ca16a022ac04c9dce74e00a1c344f6ad1a0fdc1ba1f332213"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-win32.whl", hash = "sha256:bb06098d019766ca16fc915ecaa455c1f1cd594204e7f840cd6258237b5079a8"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8af5a8917b8af42295e86b64903156b4f110a30dca5f3b5aedea123fbd638bff"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7ae8e5142dcc7a49168f4055255dbcced01dc1714a90a21f87448dc8d90617d1"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5b70bab78accbc672f50e878a5b73ca692f45f5b5e25c8066d748c09405e6a55"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ceca5876032362ae73b83347be8b5dbd2d1faf3358deb38c9c88776779b2e2f"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34d95638ff3613849f473afc33f65c401a89f3b9528d0d213c7037c398a51296"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edbe6a5bf8b56a4a84533ba2b2f489d0046e755c29616ef8830f9e7d9cf5728"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6a02a3c7950cafaadcd46a226ad9e12fc9744652cc69f9e5534f98b47f3bbcf"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10b8dd31e10f32410751b3430996f9807fc4d1587ca69772e2aa940a82ab571a"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edc0202099ea1d82844316604e17d2b175044f9bcb6b398aab781eba957224bd"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b891a2f68e09c5ef989007fac11476ed33c5c9994449a4e2c3386529d703dc8b"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:71ef3b9be10070360f289aea4838c784f8b851be3ba58cf796262b57775c2f14"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:55602981b2dbf8184c098bc10287e8c245e351cd4fdcad050bd7199d5a8bf514"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:46fb9970aa5eeca547d7aa0de5d4b124a288b42eaefac677bde805013c95725c"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:520b7a142d2524f999447b3a0cf95115df81c4f33003c51a6ab637cbda9d0bf4"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-win32.whl", hash = "sha256:8ec8ef42c6cd5856a7613dcd1eaf21e5573b2185263d87d27c8edcae33b62a61"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:baec8148d6b8bd5cee1ae138ba658c71f5b03e0d69d5907703e3e1df96db5e41"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63a6f59e2d01310f754c270e4a257426fe5a591dc487f1983b3bbe793cf6bac6"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d6bfc32a68bc0933819cfdfe45f9abc3cae3877e1d90aac7259d57e6e0f85b1"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f3100d86dcd03c03f7e9c3fdb23d92e32abbca07e7c13ebd7ddfbcb06f5991f"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39b70a6f88eebe239fa775190796d55a33cfb6d36b9ffdd37843f7c4c1b5dc67"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e12f8ee80aa35e746230a2af83e81bd6b52daa92a8afaef4fea4a2ce9b9f4fa"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b6cefa579e1237ce198619b76eaa148b71894fb0d6bcf9024460f9bf30fd228"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:61f1e3fb621f5420523abb71f5771a204b33c21d31e7d9d86881b2cffe92c47c"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4f6e2a839f83a6a76854d12dbebde50e4b1afa63e27761549d006fa53e9aa80e"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:1ec937546cad86d0dce5396748bf392bb7b62a9eeb8c66efac60e947697f0e58"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:82ca51ff0fc5b641a2d4e1cc8c5ff108699b7a56d7f3ad6f6da9dbb6f0145b48"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:633968254f8d421e70f91c6ebe71ed0ab140220469cf87a9857e21c16687c034"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-win32.whl", hash = "sha256:c0c72d34e7de5604df0fde3644cc079feee5e55464967d10b24b1de268deceb9"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:63accd11149c0f9a99e3bc095bbdb5a464862d77a7e309ad5938fbc8721235ae"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5a3580a4fdc4ac05f9e53c57f965e3594b2f99796231380adb2baaab96e22761"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2465aa50c9299d615d757c1c888bc6fef384b7c4aec81c05a0172b4400f98557"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb7cd68814308aade9d0c93c5bd2ade9f9441666f8ba5aa9c2d4b389cb5e2a45"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91e43805ccafa0a91831f9cd5443aa34528c0c3f2cc48c4cb3d9a7721053874b"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:854cc74367180beb327ab9d00f964f6d91da06450b0855cbbb09187bcdb02de5"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c15070ebf11b8b7fd1bfff7217e9324963c82dbdf6182ff7050519e350e7ad9f"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4c99f98fc3a1835af8179dcc9013f93594d0670e2fa80c83aa36346ee763d2"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fb765362688821404ad6cf86772fc54993ec11577cd5a92ac44b4c2ba52155b"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dced27917823df984fe0c80a5c4ad75cf58df0fbfae890bc08004cd3888922a2"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a66bcdf19c1a523e41b8e9d53d0cedbfbac2e93c649a2e9502cb26c014d0980c"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ecd26be9f112c4f96718290c10f4caea6cc798459a3a76636b817a0ed7874e42"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f70fd716855cd3b855316b226a1ac8bdb3caf4f7ea96edcccc6f484217c9597"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:17a866d61259c7de1bdadef418a37755050ddb4b922df8b356503234fff7932c"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-win32.whl", hash = "sha256:548eefad783ed787b38cb6f9a574bd8664468cc76d1538215d510a3cd41406cb"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:45f053a0ece92c734d874861ffe6e3cc92150e32136dd59ab1fb070575189c97"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bc791ec3fd0c4309a753f95bb6c749ef0d8ea3aea91f07ee1cf06b7b02118f2f"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0c8c61fb505c7dad1d251c284e712d4e0372cef3b067f7ddf82a7fa82e1e9a93"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2c092be3885a1b7899cd85ce24acedc1034199d6fca1483fa2c3a35c86e43041"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2000c54c395d9e5e44c99dc7c20a64dc371f777faf8bae4919ad3e99ce5253e"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4cb50a0335382aac15c31b61d8531bc9bb657cfd848b1d7158009472189f3d62"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c30187840d36d0ba2893bc3271a36a517a717f9fd383a98e2697ee890a37c273"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe81b35c33772e56f4b6cf62cf4aedc1762ef7162a31e6ac7fe5e40d0149eb67"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0bf89afcbcf4d1bb2652f6580e5e55a840fdf87384f6063c4a4f0c95e378656"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:06cf46bdff72f58645434d467bf5228080801298fbba19fe268a01b4534467f5"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3c66df3f41abee950d6638adc7eac4730a306b022570f71dd0bd6ba53503ab57"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd805513198304026bd379d1d516afbf6c3c13f4382134a2c526b8b854da1c2e"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:9505dc359edb6a330efcd2be825fdb73ee3e628d9010597aa1aee5aa63442e97"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:31445f38053476a0c4e6d12b047b08ced81e2c7c712e5a1ad97bc913256f91b2"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-win32.whl", hash = "sha256:bd28b31730f0e982ace8663d108e01199098432a30a4c410d06fe08fdb9e93f4"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:555fe186da0068d3354cdf4bbcbc609b0ecae4d04c921cc13e209eece7720727"}, - {file = "charset_normalizer-3.3.1-py3-none-any.whl", hash = "sha256:800561453acdecedaac137bf09cd719c7a440b6800ec182f077bb8e7025fb708"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] name = "click" version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -541,7 +520,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-default-group" version = "1.2.4" description = "click_default_group" -category = "main" optional = false python-versions = ">=2.7" files = [ @@ -557,25 +535,23 @@ test = ["pytest"] [[package]] name = "cloup" -version = "0.13.1" +version = "2.1.2" description = "Adds features to Click: option groups, constraints, subcommand sections and help themes." -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "cloup-0.13.1-py2.py3-none-any.whl", hash = "sha256:04a29a483e122c04f401547dcbce451ce002ff3e392308122619d5b9009f321f"}, - {file = "cloup-0.13.1.tar.gz", hash = "sha256:ea0acc67eed994b86e79b70d76bc2ea525b7f98f3cd8e63696896d549597ef4d"}, + {file = "cloup-2.1.2-py2.py3-none-any.whl", hash = "sha256:2e2e5040f1e85f7f391487c1aeeb0cce3e7cfed3493e67fc2aabc683551ba7b7"}, + {file = "cloup-2.1.2.tar.gz", hash = "sha256:43f10e944056f3a1eea714cb67373beebebbefc3f4551428750392f3e04ac964"}, ] [package.dependencies] -click = ">=7.1,<9.0" +click = ">=8.0,<9.0" typing-extensions = {version = "*", markers = "python_version <= \"3.8\""} [[package]] 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 = [ @@ -587,7 +563,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 = [ @@ -607,7 +582,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 = [ @@ -622,7 +596,6 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] name = "contourpy" version = "1.1.1" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -694,7 +667,6 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "coverage" version = "7.3.2" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -760,35 +732,34 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.4" +version = "41.0.5" 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.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"}, + {file = "cryptography-41.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797"}, + {file = "cryptography-41.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5"}, + {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147"}, + {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696"}, + {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da"}, + {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20"}, + {file = "cryptography-41.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548"}, + {file = "cryptography-41.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d"}, + {file = "cryptography-41.0.5-cp37-abi3-win32.whl", hash = "sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936"}, + {file = "cryptography-41.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81"}, + {file = "cryptography-41.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1"}, + {file = "cryptography-41.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72"}, + {file = "cryptography-41.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88"}, + {file = "cryptography-41.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf"}, + {file = "cryptography-41.0.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e"}, + {file = "cryptography-41.0.5-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8"}, + {file = "cryptography-41.0.5-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179"}, + {file = "cryptography-41.0.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d"}, + {file = "cryptography-41.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1"}, + {file = "cryptography-41.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86"}, + {file = "cryptography-41.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723"}, + {file = "cryptography-41.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84"}, + {file = "cryptography-41.0.5.tar.gz", hash = "sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7"}, ] [package.dependencies] @@ -808,7 +779,6 @@ test-randomorder = ["pytest-randomly"] name = "cycler" version = "0.12.1" description = "Composable style cycles" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -822,77 +792,75 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "cython" -version = "3.0.4" +version = "3.0.5" 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.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:096cb461bf8d913a4327d93ea38d18bc3dbc577a71d805be04754e4b2cc2c45d"}, - {file = "Cython-3.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf671d712816b48fa2731799017ed68e5e440922d0c7e13dc825c226639ff766"}, - {file = "Cython-3.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beb367fd88fc6ba8c204786f680229106d99da72a60f5906c85fc8d73640b01a"}, - {file = "Cython-3.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6619264ed43d8d8819d4f1cdb8a62ab66f87e92f06f3ff3e2533fd95a9945e59"}, - {file = "Cython-3.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c0fb9e7cf9db38918f19a803fab9bc7b2ed3f33a9e8319c616c464a0a8501b8d"}, - {file = "Cython-3.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c214f6e88ecdc8ff5d13f0914890445fdaad21bddc34a90cd14aeb3ad5e55e2e"}, - {file = "Cython-3.0.4-cp310-cp310-win32.whl", hash = "sha256:c9b1322f0d8ce5445fcc3a625b966f10c4182190026713e217d6f38d29930cb1"}, - {file = "Cython-3.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:146bfaab567157f4aa34114a37e3f98a3d9c4527ee99d4fd730cab56482bd3cf"}, - {file = "Cython-3.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8e0f98d950987b0f9d5e10c41236bef5cb4fba701c6e680af0b9734faa3a85e"}, - {file = "Cython-3.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fe227d6d8e2ea030e82abc8a3e361e31447b66849f8c069caa783999e54a8f2"}, - {file = "Cython-3.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6da74000a672eac0d7cf02adc140b2f9c7d54eae6c196e615a1b5deb694d9203"}, - {file = "Cython-3.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48cda82eb82ad2014d2ad194442ed3c46156366be98e4e02f3e29742cdbf94a0"}, - {file = "Cython-3.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4355a2cb03b257773c0d2bb6af9818c72e836a9b09986e28f52e323d87b1fc67"}, - {file = "Cython-3.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:10b426adc3027d66303f5c7aa8b254d10ed80827ff5cce9e892d550b708dc044"}, - {file = "Cython-3.0.4-cp311-cp311-win32.whl", hash = "sha256:28de18f0d07eb34e2dd7b022ac30beab0fdd277846d07b7a08e69e6294f0762b"}, - {file = "Cython-3.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:9d31d76ed777a8a85be3f8f7f1cfef09b3bc33f6ec4abee1067dcef107f49778"}, - {file = "Cython-3.0.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d5a55749509c7f9f8a33bf9cc02cf76fd6564fcb38f486e43d2858145d735953"}, - {file = "Cython-3.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58cdfdd942cf5ffcee974aabfe9b9e26c0c1538fd31c1b03596d40405f7f4d40"}, - {file = "Cython-3.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b906997e7b98d7d29b84d10a5318993eba1aaff82ff7e1a0ac00254307913d7"}, - {file = "Cython-3.0.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f24114e1777604a28ae1c7a56a2c9964655f1031edecc448ad51e5abb19a279b"}, - {file = "Cython-3.0.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:07d0e69959f267b79ffd18ece8599711ad2f3d3ed1eddd0d4812d2a97de2b912"}, - {file = "Cython-3.0.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f7fcd93d15deceb2747b10266a39deccd94f257d610f3bbd52a7e16bc5908eda"}, - {file = "Cython-3.0.4-cp312-cp312-win32.whl", hash = "sha256:0aa2a6bb3ff67794d8d1dafaed22913adcbb327e96eca3ac44e2f3ba4a0ae446"}, - {file = "Cython-3.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:0021350f6d7022a37f598320460b84b2c0daccf6bb65641bbdbc8b990bdf4ad2"}, - {file = "Cython-3.0.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b72c426df1586f967b1c61d2f8236702d75c6bbf34abdc258a59e09155a16414"}, - {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a9262408f05eef039981479b38b38252d5b853992e5bc54a2d2dd05a2a0178e"}, - {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28af4e7dff1742cb0f0a4823102c89c62a2d94115b68f718145fcfe0763c6e21"}, - {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e8c144e2c5814e46868d1f81e2f4265ca1f314a8187d0420cd76e9563294cf8"}, - {file = "Cython-3.0.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:19a64bf2591272348ab08bcd4a5f884259cc3186f008c9038b8ec7d01f847fd5"}, - {file = "Cython-3.0.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fc96efa617184b8581a02663e261b41c13a605da8ef4ba1ed735bf46184f815e"}, - {file = "Cython-3.0.4-cp36-cp36m-win32.whl", hash = "sha256:15d52f7f9d08b264c042aa508bf457f53654b55f533e0262e146002b1c15d1cd"}, - {file = "Cython-3.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:0650460b5fd6f16da4186e0a769b47db5532601e306f3b5d17941283d5e36d24"}, - {file = "Cython-3.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b3ddfc6f05410095ec11491dde05f50973e501567d21cbfcf5832d95f141878a"}, - {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a0b92adfcac68dcf549daddec83c87a86995caa6f87bfb6f72de4797e1a6ad6"}, - {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ada3659608795bb36930d9a206b8dd6b865d85e2999a02ce8b34f3195d88301"}, - {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:061dec1be8d8b601b160582609a78eb08324a4ccf21bee0d04853a3e9dfcbefd"}, - {file = "Cython-3.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bc42004f181373cd3b39bbacfb71a5b0606ed6e4c199c940cca2212ba0f79525"}, - {file = "Cython-3.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f124ac9ee41e1bfdfb16f53f1db85de296cd2144a4e8fdee8c3560a8fe9b6d5d"}, - {file = "Cython-3.0.4-cp37-cp37m-win32.whl", hash = "sha256:48b35ab009227ee6188991b5666aae1936b82a944f707c042cef267709de12b5"}, - {file = "Cython-3.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:861979428f749faa9883dc4e11e8c3fc2c29bd0031cf49661604459b53ea7c66"}, - {file = "Cython-3.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c7a7dd7c50d07718a5ac2bdea166085565f7217cf1e030cc07c22a8b80a406a7"}, - {file = "Cython-3.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d40d4135f76fb0ed4caa2d422fdb4231616615698709d3c421ecc733f1ac7ca0"}, - {file = "Cython-3.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:207f53893ca22d8c8f5db533f38382eb7ddc2d0b4ab51699bf052423a6febdad"}, - {file = "Cython-3.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0422a40a58dcfbb54c8b4e125461d741031ff046bc678475cc7a6c801d2a7721"}, - {file = "Cython-3.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ef4b144c5b29b4ea0b40c401458b86df8d75382b2e5d03e9f67f607c05b516a9"}, - {file = "Cython-3.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0612439f810cc281e51fead69de0545c4d9772a1e82149c119d1aafc1f6210ba"}, - {file = "Cython-3.0.4-cp38-cp38-win32.whl", hash = "sha256:b86871862bd65806ba0d0aa2b9c77fcdcc6cbd8d36196688f4896a34bb626334"}, - {file = "Cython-3.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:6603a287188dcbc36358a73a7be43e8a2ecf0c6a06835bdfdd1b113943afdd6f"}, - {file = "Cython-3.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0fc9e974419cc0393072b1e9a669f71c3b34209636d2005ff8620687daa82b8c"}, - {file = "Cython-3.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e84988d384dfba678387ea7e4f68786c3703543018d473605d9299c69a07f197"}, - {file = "Cython-3.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36299ffd5663203c25d3a76980f077e23b6d4f574d142f0f43943f57be445639"}, - {file = "Cython-3.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8529cf09919263a6826adc04c5dde9f1406dd7920929b16be19ee9848110e353"}, - {file = "Cython-3.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8692249732d62e049df3884fa601b70fad3358703e137aceeb581e5860e7d9b7"}, - {file = "Cython-3.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f234bc46043856d118ebd94b13ea29df674503bc94ced3d81ca46a1ad5b5b9ae"}, - {file = "Cython-3.0.4-cp39-cp39-win32.whl", hash = "sha256:c2215f436ce3cce49e6e318cb8f7253cfc4d3bea690777c2a5dd52ae93342504"}, - {file = "Cython-3.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:003ccc40e0867770db0018274977d1874e4df64983d5e3e36937f107e0b2fdf6"}, - {file = "Cython-3.0.4-py2.py3-none-any.whl", hash = "sha256:e5e2859f97e9cceb8e70b0934c56157038b8b083245898593008162a70536d7e"}, - {file = "Cython-3.0.4.tar.gz", hash = "sha256:2e379b491ee985d31e5faaf050f79f4a8f59f482835906efe4477b33b4fbe9ff"}, + {file = "Cython-3.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4faf17ea6e8fc3065a862d4b24be84048fd58ed7abe59aa2f9141446a7a72335"}, + {file = "Cython-3.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1cab30c11880f38a27911b569ea38b0bd67fcf32f8a8a8519b613c70562dae2"}, + {file = "Cython-3.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4d4d92182002b2878adb3329de1ccb7f3f7571d3586f92602e790bfeab45d0"}, + {file = "Cython-3.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b94f58e05e69e1a43da551c8f532e9fad057df1641f0f8ae8f103d4ede5a80fe"}, + {file = "Cython-3.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a90f9c7b6635967eacafebe439d518b7dc720aaaf19cb9553f5aad03c13296f4"}, + {file = "Cython-3.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c95bd21d87b08c88fe5296381a5f39cd979a775bf1a1d7379a6ff87c703e510b"}, + {file = "Cython-3.0.5-cp310-cp310-win32.whl", hash = "sha256:ebc901131057c115a8868e14c1df6e56b9190df774b72664c03ebd858296bb81"}, + {file = "Cython-3.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:0759868b4a4d103578375e031e89abd578c26774d957ee4f591764ef8003b363"}, + {file = "Cython-3.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3679a6693456f5f7ccca9ab2a91408e99ee257e145024fe380da7c78a07e98b6"}, + {file = "Cython-3.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ad4eb2608661d63fb57c674dafb9955f5141d748d4579c7722c1a3c6b86a0c2"}, + {file = "Cython-3.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b37f4b0d983316242b4b9241ecbbe55220aa92af93ff04626441fe0ea90a54f9"}, + {file = "Cython-3.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34059c3ea6e342ba388cd9774a61761bb4200ca18bd475de65c9cc70ef4e0204"}, + {file = "Cython-3.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4db9eea298e982aee7ba12b3432c66eb2e91bb2f5d026bbd57c35698ea0f557f"}, + {file = "Cython-3.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:452679284c15a7d5a88bff675e1dd660349360f0665aea50be2d98b7650925f8"}, + {file = "Cython-3.0.5-cp311-cp311-win32.whl", hash = "sha256:2d6bb318ddce8b978c81cf78caf8b3836db84f6235d721952685e87871f506e4"}, + {file = "Cython-3.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:fcfd2255458a5779dbab813550695331d541b24f0ef831ace83f04f9516ddf26"}, + {file = "Cython-3.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0d9fcfc09d67218fce114fe9fd97bba4f9d56add0f775c588d8c626ed47f1aef"}, + {file = "Cython-3.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac1cf1f2ed01656b33618352f7e42bf75d027425b83cc96cfe13ce4b6cba5de"}, + {file = "Cython-3.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9d17a6ceb301c5dbd3820e62c1b10a4ad3a6eea3e07e7afaf736b5f490c2e32"}, + {file = "Cython-3.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd9cab3b862bec2b110886aedb11765e9deda363c4c7ab5ea205f3d8f143c411"}, + {file = "Cython-3.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:45277bb54c35b11bcdd6cf0f56eb950eb280b67146db0cb57853fb6334c6d11d"}, + {file = "Cython-3.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:77f4d001fb7a03a68b53be20571acd17452d1dda7907d9c325dff0cc704b1ef9"}, + {file = "Cython-3.0.5-cp312-cp312-win32.whl", hash = "sha256:57b44f789794d74c1feddae054dd045b9f601bdffd7288e069b4ca7ed607ec61"}, + {file = "Cython-3.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:05c4efd36879ff8020af00407e4c14246b894558ea41dc6486f60dd71601fc67"}, + {file = "Cython-3.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:048fe89c2c753c24e1a7a05496907173dab17e238c8dc3c7cad90b3679b0d846"}, + {file = "Cython-3.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c016b3e859b41cf4ce1b8107f364ad5a83c086f75ea4d8d3990b24691f626a1"}, + {file = "Cython-3.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f31d02b831d0fa9bf099b1b714b5a8252eabd8db34b7d33c48e7e808a2dabf9"}, + {file = "Cython-3.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:485f8a3087392e2287e2869adc0385b439f69b9cfbd262fdf39b00417690c988"}, + {file = "Cython-3.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:063220a6dc0909b576ef068c7e2acf5c608d64423a6d231aacb72d06352cd95b"}, + {file = "Cython-3.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:abb2362783521bd9a22fe69b2141abab4db97237665a36a034b161ddee5b3e72"}, + {file = "Cython-3.0.5-cp36-cp36m-win32.whl", hash = "sha256:a993002fe28c840dc29805fde7341c775b7878b311b85f21560fdebf220c247b"}, + {file = "Cython-3.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:13491f1bfcf020fd02751c4a55294aa8957e21b7ecd2542b0521a7aa50c58bb2"}, + {file = "Cython-3.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:45aaceb082ad89365f2f783a40db42359591ad55914fb298841196edf88afdc5"}, + {file = "Cython-3.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3e011fa2ae9e953fe1ab8394329a21bdb54357c7fe509bcfb02b88bc15bffbb"}, + {file = "Cython-3.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f18c13d5ed6fde5efd3b1c039f6a34296d1a0409bb00fbf45bec6f9bcf63ddf5"}, + {file = "Cython-3.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:039877e57dc10abf0d30d2de2c7476f0881d8ecef1f29bdeed1a6a06a8d89141"}, + {file = "Cython-3.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4fbc8f62b8d50f9a2eef99927a9dcb8d0a42e5a801ab14c2e4aeab622c88f54b"}, + {file = "Cython-3.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3cffbba1888f795de2103e6fb1482c8ea8d457e638fa813e090fe747f9e549bb"}, + {file = "Cython-3.0.5-cp37-cp37m-win32.whl", hash = "sha256:c18e125537a96e76c8c34201e5a9aad8625e3d872dd26a63155573462e54e185"}, + {file = "Cython-3.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:93502f45948ae8d7f874ba4c113b50cb6fb4ee664caa82e1ddc398500ee0ffb3"}, + {file = "Cython-3.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0a9206b0720f0cad3e70c018722f6d10e81b32e65477e14ffedd3fbfadfaddca"}, + {file = "Cython-3.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:530a474a79fa6c2127bb7e3ba00857b1f26a563615863f17b7434331aa3fe404"}, + {file = "Cython-3.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:115e76fbe9288119526b66963f614042222d1587f1ba5ddb90088215a3d2a25a"}, + {file = "Cython-3.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:035cb6930a8534f865a3f4616543f78bd27e4de9c3e117b2826e395085ffc4c0"}, + {file = "Cython-3.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:077d9a61e6042174dabf68b8e92c0a80f5aff529439ed314aa6e6a233af80b95"}, + {file = "Cython-3.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ba3f7b433c1721a43674c0889d5fad746bf608416c8f849343859e6d4d3a7113"}, + {file = "Cython-3.0.5-cp38-cp38-win32.whl", hash = "sha256:a95ed0e6f481462a3ff2be4c2e4ffffc5d00fc3884d4ccd1fe5b702d4938ec09"}, + {file = "Cython-3.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:f687539ead9fbc17f499e33ee20c1dc41598f70ad95edb4990c576447cec9d23"}, + {file = "Cython-3.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f6fcfef825edb44cf3c6ba2c091ad76a83da62ac9c79553e80e0c2a1f75eda2e"}, + {file = "Cython-3.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0d9431101f600d5a557d55989658cbfd02b7c0dcd1e4675dac8ad7e0da8ea5b"}, + {file = "Cython-3.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db21997270e943aee9cb7694112d24a4702fbe1977fbe53b3cb4db3d02be73d9"}, + {file = "Cython-3.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:808f56d4cd0511723b787c341f3cc995fd72893e608102268298c188f4a4f2e7"}, + {file = "Cython-3.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:dee39967168d6326ea2df56ad215a4d5049aa52f44cd5aad45bfb63d5b4fb9e5"}, + {file = "Cython-3.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b77f2b45535bcf3741592fa03183558bd42198b872c1584b896fa0ba5f2ac68d"}, + {file = "Cython-3.0.5-cp39-cp39-win32.whl", hash = "sha256:5742ef31e1e2c9a4824ef6b05af0f4949047a6f73af1d4b238ce12935174aede"}, + {file = "Cython-3.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:ada4852db0e33dbdd1425322db081d22b9725cb9f5eba42885467b4e2c4f2ac0"}, + {file = "Cython-3.0.5-py2.py3-none-any.whl", hash = "sha256:75206369504fc442c10a86ecf57b91592dca744e4592af22a47e9a774d53dd10"}, + {file = "Cython-3.0.5.tar.gz", hash = "sha256:39318348db488a2f24e7c84e08bdc82f2624853c0fea8b475ea0b70b27176492"}, ] [[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 = [ @@ -907,7 +875,6 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", name = "dearpygui" version = "1.10.1" description = "DearPyGui: A simple Python GUI Toolkit" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -935,7 +902,6 @@ files = [ name = "debugpy" version = "1.8.0" description = "An implementation of the Debug Adapter Protocol for Python" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -963,7 +929,6 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -975,7 +940,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 = [ @@ -987,7 +951,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 = [ @@ -1005,7 +968,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 = [ @@ -1020,7 +982,6 @@ graph = ["objgraph (>=1.7.2)"] name = "distlib" version = "0.3.7" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -1032,7 +993,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 = [ @@ -1040,23 +1000,10 @@ 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.3" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1071,7 +1018,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 = [ @@ -1084,14 +1030,13 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "executing" -version = "2.0.0" +version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" -category = "main" optional = true -python-versions = "*" +python-versions = ">=3.5" files = [ - {file = "executing-2.0.0-py2.py3-none-any.whl", hash = "sha256:06df6183df67389625f4e763921c6cf978944721abf3e714000200aab95b0657"}, - {file = "executing-2.0.0.tar.gz", hash = "sha256:0ff053696fdeef426cda5bd18eacd94f82c91f49823a2e9090124212ceea9b08"}, + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, ] [package.extras] @@ -1101,7 +1046,6 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth name = "fastjsonschema" version = "2.18.1" description = "Fastest Python implementation of JSON schema" -category = "main" optional = true python-versions = "*" files = [ @@ -1114,26 +1058,24 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.12.4" +version = "3.13.1" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.12.4-py3-none-any.whl", hash = "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4"}, - {file = "filelock-3.12.4.tar.gz", hash = "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"}, + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, ] [package.extras] -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)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] [[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 = [ @@ -1150,7 +1092,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 = [ @@ -1169,7 +1110,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 = [ @@ -1187,7 +1127,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 = [ @@ -1202,7 +1141,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 = [ @@ -1218,7 +1156,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 = [ @@ -1230,7 +1167,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 = [ @@ -1245,7 +1181,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 = [ @@ -1262,7 +1197,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 = [ @@ -1276,58 +1210,57 @@ flake8 = ">=3.7" [[package]] name = "fonttools" -version = "4.43.1" +version = "4.44.0" description = "Tools to manipulate font files" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.43.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf11e2cca121df35e295bd34b309046c29476ee739753bc6bc9d5050de319273"}, - {file = "fonttools-4.43.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10b3922875ffcba636674f406f9ab9a559564fdbaa253d66222019d569db869c"}, - {file = "fonttools-4.43.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f727c3e3d08fd25352ed76cc3cb61486f8ed3f46109edf39e5a60fc9fecf6ca"}, - {file = "fonttools-4.43.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad0b3f6342cfa14be996971ea2b28b125ad681c6277c4cd0fbdb50340220dfb6"}, - {file = "fonttools-4.43.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b7ad05b2beeebafb86aa01982e9768d61c2232f16470f9d0d8e385798e37184"}, - {file = "fonttools-4.43.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c54466f642d2116686268c3e5f35ebb10e49b0d48d41a847f0e171c785f7ac7"}, - {file = "fonttools-4.43.1-cp310-cp310-win32.whl", hash = "sha256:1e09da7e8519e336239fbd375156488a4c4945f11c4c5792ee086dd84f784d02"}, - {file = "fonttools-4.43.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cf9e974f63b1080b1d2686180fc1fbfd3bfcfa3e1128695b5de337eb9075cef"}, - {file = "fonttools-4.43.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5db46659cfe4e321158de74c6f71617e65dc92e54980086823a207f1c1c0e24b"}, - {file = "fonttools-4.43.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1952c89a45caceedf2ab2506d9a95756e12b235c7182a7a0fff4f5e52227204f"}, - {file = "fonttools-4.43.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c36da88422e0270fbc7fd959dc9749d31a958506c1d000e16703c2fce43e3d0"}, - {file = "fonttools-4.43.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bbbf8174501285049e64d174e29f9578495e1b3b16c07c31910d55ad57683d8"}, - {file = "fonttools-4.43.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d4071bd1c183b8d0b368cc9ed3c07a0f6eb1bdfc4941c4c024c49a35429ac7cd"}, - {file = "fonttools-4.43.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d21099b411e2006d3c3e1f9aaf339e12037dbf7bf9337faf0e93ec915991f43b"}, - {file = "fonttools-4.43.1-cp311-cp311-win32.whl", hash = "sha256:b84a1c00f832feb9d0585ca8432fba104c819e42ff685fcce83537e2e7e91204"}, - {file = "fonttools-4.43.1-cp311-cp311-win_amd64.whl", hash = "sha256:9a2f0aa6ca7c9bc1058a9d0b35483d4216e0c1bbe3962bc62ce112749954c7b8"}, - {file = "fonttools-4.43.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4d9740e3783c748521e77d3c397dc0662062c88fd93600a3c2087d3d627cd5e5"}, - {file = "fonttools-4.43.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:884ef38a5a2fd47b0c1291647b15f4e88b9de5338ffa24ee52c77d52b4dfd09c"}, - {file = "fonttools-4.43.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9648518ef687ba818db3fcc5d9aae27a369253ac09a81ed25c3867e8657a0680"}, - {file = "fonttools-4.43.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95e974d70238fc2be5f444fa91f6347191d0e914d5d8ae002c9aa189572cc215"}, - {file = "fonttools-4.43.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:34f713dad41aa21c637b4e04fe507c36b986a40f7179dcc86402237e2d39dcd3"}, - {file = "fonttools-4.43.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:360201d46165fc0753229afe785900bc9596ee6974833124f4e5e9f98d0f592b"}, - {file = "fonttools-4.43.1-cp312-cp312-win32.whl", hash = "sha256:bb6d2f8ef81ea076877d76acfb6f9534a9c5f31dc94ba70ad001267ac3a8e56f"}, - {file = "fonttools-4.43.1-cp312-cp312-win_amd64.whl", hash = "sha256:25d3da8a01442cbc1106490eddb6d31d7dffb38c1edbfabbcc8db371b3386d72"}, - {file = "fonttools-4.43.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8da417431bfc9885a505e86ba706f03f598c85f5a9c54f67d63e84b9948ce590"}, - {file = "fonttools-4.43.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:51669b60ee2a4ad6c7fc17539a43ffffc8ef69fd5dbed186a38a79c0ac1f5db7"}, - {file = "fonttools-4.43.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748015d6f28f704e7d95cd3c808b483c5fb87fd3eefe172a9da54746ad56bfb6"}, - {file = "fonttools-4.43.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a58eb5e736d7cf198eee94844b81c9573102ae5989ebcaa1d1a37acd04b33d"}, - {file = "fonttools-4.43.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6bb5ea9076e0e39defa2c325fc086593ae582088e91c0746bee7a5a197be3da0"}, - {file = "fonttools-4.43.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5f37e31291bf99a63328668bb83b0669f2688f329c4c0d80643acee6e63cd933"}, - {file = "fonttools-4.43.1-cp38-cp38-win32.whl", hash = "sha256:9c60ecfa62839f7184f741d0509b5c039d391c3aff71dc5bc57b87cc305cff3b"}, - {file = "fonttools-4.43.1-cp38-cp38-win_amd64.whl", hash = "sha256:fe9b1ec799b6086460a7480e0f55c447b1aca0a4eecc53e444f639e967348896"}, - {file = "fonttools-4.43.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13a9a185259ed144def3682f74fdcf6596f2294e56fe62dfd2be736674500dba"}, - {file = "fonttools-4.43.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2adca1b46d69dce4a37eecc096fe01a65d81a2f5c13b25ad54d5430ae430b13"}, - {file = "fonttools-4.43.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18eefac1b247049a3a44bcd6e8c8fd8b97f3cad6f728173b5d81dced12d6c477"}, - {file = "fonttools-4.43.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2062542a7565091cea4cc14dd99feff473268b5b8afdee564f7067dd9fff5860"}, - {file = "fonttools-4.43.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18a2477c62a728f4d6e88c45ee9ee0229405e7267d7d79ce1f5ce0f3e9f8ab86"}, - {file = "fonttools-4.43.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a7a06f8d95b7496e53af80d974d63516ffb263a468e614978f3899a6df52d4b3"}, - {file = "fonttools-4.43.1-cp39-cp39-win32.whl", hash = "sha256:10003ebd81fec0192c889e63a9c8c63f88c7d72ae0460b7ba0cd2a1db246e5ad"}, - {file = "fonttools-4.43.1-cp39-cp39-win_amd64.whl", hash = "sha256:e117a92b07407a061cde48158c03587ab97e74e7d73cb65e6aadb17af191162a"}, - {file = "fonttools-4.43.1-py3-none-any.whl", hash = "sha256:4f88cae635bfe4bbbdc29d479a297bb525a94889184bb69fa9560c2d4834ddb9"}, - {file = "fonttools-4.43.1.tar.gz", hash = "sha256:17dbc2eeafb38d5d0e865dcce16e313c58265a6d2d20081c435f84dc5a9d8212"}, + {file = "fonttools-4.44.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1cd1c6bb097e774d68402499ff66185190baaa2629ae2f18515a2c50b93db0c"}, + {file = "fonttools-4.44.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b9eab7f9837fdaa2a10a524fbcc2ec24bf60637c044b6e4a59c3f835b90f0fae"}, + {file = "fonttools-4.44.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f412954275e594f7a51c16f3b3edd850acb0d842fefc33856b63a17e18499a5"}, + {file = "fonttools-4.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50d25893885e80a5955186791eed5579f1e75921751539cc1dc3ffd1160b48cf"}, + {file = "fonttools-4.44.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:22ea8aa7b3712450b42b044702bd3a64fd118006bad09a6f94bd1b227088492e"}, + {file = "fonttools-4.44.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df40daa6c03b98652ffe8110ae014fe695437f6e1cb5a07e16ea37f40e73ac86"}, + {file = "fonttools-4.44.0-cp310-cp310-win32.whl", hash = "sha256:bca49da868e8bde569ef36f0cc1b6de21d56bf9c3be185c503b629c19a185287"}, + {file = "fonttools-4.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:dbac86d83d96099890e731cc2af97976ff2c98f4ba432fccde657c5653a32f1c"}, + {file = "fonttools-4.44.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e8ff7d19a6804bfd561cfcec9b4200dd1788e28f7de4be70189801530c47c1b3"}, + {file = "fonttools-4.44.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8a1fa9a718de0bc026979c93e1e9b55c5efde60d76f91561fd713387573817d"}, + {file = "fonttools-4.44.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05064f95aacdfc06f21e55096c964b2228d942b8675fa26995a2551f6329d2d"}, + {file = "fonttools-4.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31b38528f25bc662401e6ffae14b3eb7f1e820892fd80369a37155e3b636a2f4"}, + {file = "fonttools-4.44.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:05d7c4d2c95b9490e669f3cb83918799bf1c838619ac6d3bad9ea017cfc63f2e"}, + {file = "fonttools-4.44.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6999e80a125b0cd8e068d0210b63323f17338038c2ecd2e11b9209ec430fe7f2"}, + {file = "fonttools-4.44.0-cp311-cp311-win32.whl", hash = "sha256:a7aec7f5d14dfcd71fb3ebc299b3f000c21fdc4043079101777ed2042ba5b7c5"}, + {file = "fonttools-4.44.0-cp311-cp311-win_amd64.whl", hash = "sha256:518a945dbfe337744bfff31423c1430303b8813c5275dffb0f2577f0734a1189"}, + {file = "fonttools-4.44.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:59b6ad83cce067d10f4790c037a5904424f45bebb5e7be2eb2db90402f288267"}, + {file = "fonttools-4.44.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c2de1fb18198acd400c45ffe2aef5420c8d55fde903e91cba705596099550f3b"}, + {file = "fonttools-4.44.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f308b7a8d28208d54315d11d35f9888d6d607673dd4d42d60b463682ee0400"}, + {file = "fonttools-4.44.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66bc6efd829382f7a7e6cf33c2fb32b13edc8a239eb15f32acbf197dce7a0165"}, + {file = "fonttools-4.44.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a8b99713d3a0d0e876b6aecfaada5e7dc9fe979fcd90ef9fa0ba1d9b9aed03f2"}, + {file = "fonttools-4.44.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b63da598d9cbc52e2381f922da0e94d60c0429f92207bd3fb04d112fc82ea7cb"}, + {file = "fonttools-4.44.0-cp312-cp312-win32.whl", hash = "sha256:f611c97678604e302b725f71626edea113a5745a7fb557c958b39edb6add87d5"}, + {file = "fonttools-4.44.0-cp312-cp312-win_amd64.whl", hash = "sha256:58af428746fa73a2edcbf26aff33ac4ef3c11c8d75bb200eaea2f7e888d2de4e"}, + {file = "fonttools-4.44.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9ee8692e23028564c13d924004495f284df8ac016a19f17a87251210e1f1f928"}, + {file = "fonttools-4.44.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dab3d00d27b1a79ae4d4a240e8ceea8af0ff049fd45f05adb4f860d93744110d"}, + {file = "fonttools-4.44.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f53526668beccdb3409c6055a4ffe50987a7f05af6436fa55d61f5e7bd450219"}, + {file = "fonttools-4.44.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3da036b016c975c2d8c69005bdc4d5d16266f948a7fab950244e0f58301996a"}, + {file = "fonttools-4.44.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b99fe8ef4093f672d00841569d2d05691e50334d79f4d9c15c1265d76d5580d2"}, + {file = "fonttools-4.44.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d16d9634ff1e5cea2cf4a8cbda9026f766e4b5f30b48f8180f0e99133d3abfc"}, + {file = "fonttools-4.44.0-cp38-cp38-win32.whl", hash = "sha256:3d29509f6e05e8d725db59c2d8c076223d793e4e35773040be6632a0349f2f97"}, + {file = "fonttools-4.44.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4fa4f4bc8fd86579b8cdbe5e948f35d82c0eda0091c399d009b2a5a6b61c040"}, + {file = "fonttools-4.44.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c794de4086f06ae609b71ac944ec7deb09f34ecf73316fddc041087dd24bba39"}, + {file = "fonttools-4.44.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2db63941fee3122e31a21dd0f5b2138ce9906b661a85b63622421d3654a74ae2"}, + {file = "fonttools-4.44.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb01c49c8aa035d5346f46630209923d4927ed15c2493db38d31da9f811eb70d"}, + {file = "fonttools-4.44.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46c79af80a835410874683b5779b6c1ec1d5a285e11c45b5193e79dd691eb111"}, + {file = "fonttools-4.44.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6e6aa2d066f8dafd06d8d0799b4944b5d5a1f015dd52ac01bdf2895ebe169a0"}, + {file = "fonttools-4.44.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:63a3112f753baef8c6ac2f5f574bb9ac8001b86c8c0c0380039db47a7f512d20"}, + {file = "fonttools-4.44.0-cp39-cp39-win32.whl", hash = "sha256:54efed22b2799a85475e6840e907c402ba49892c614565dc770aa97a53621b2b"}, + {file = "fonttools-4.44.0-cp39-cp39-win_amd64.whl", hash = "sha256:2e91e19b583961979e2e5a701269d3cfc07418963bee717f8160b0a24332826b"}, + {file = "fonttools-4.44.0-py3-none-any.whl", hash = "sha256:b9beb0fa6ff3ea808ad4a6962d68ac0f140ddab080957b20d9e268e4d67fb335"}, + {file = "fonttools-4.44.0.tar.gz", hash = "sha256:4e90dd81b6e0d97ebfe52c0d12a17a9ef7f305d6bfbb93081265057d6092f252"}, ] [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 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"] +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 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres", "scipy"] lxml = ["lxml (>=4.0,<5)"] @@ -1337,14 +1270,13 @@ repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.0.0)"] +unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] 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 = [ @@ -1356,7 +1288,6 @@ files = [ name = "furo" version = "2022.9.29" description = "A clean customisable Sphinx documentation theme." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1374,7 +1305,6 @@ sphinx-basic-ng = "*" name = "gitdb" version = "4.0.11" description = "Git Object Database" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1389,7 +1319,6 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.40" description = "GitPython is a Python library used to interact with Git repositories" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1407,7 +1336,6 @@ test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre name = "glcontext" version = "2.5.0" description = "Portable OpenGL Context" -category = "main" optional = false python-versions = "*" files = [ @@ -1481,14 +1409,13 @@ files = [ [[package]] name = "identify" -version = "2.5.30" +version = "2.5.31" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.30-py2.py3-none-any.whl", hash = "sha256:afe67f26ae29bab007ec21b03d4114f41316ab9dd15aa8736a167481e108da54"}, - {file = "identify-2.5.30.tar.gz", hash = "sha256:f302a4256a15c849b91cfcdcec052a8ce914634b2f77ae87dad29cd749f2d88d"}, + {file = "identify-2.5.31-py2.py3-none-any.whl", hash = "sha256:90199cb9e7bd3c5407a9b7e81b4abec4bb9d249991c79439ec8af740afc6293d"}, + {file = "identify-2.5.31.tar.gz", hash = "sha256:7736b3c7a28233637e3c36550646fc6389bedd74ae84cb788200cc8e2dd60b75"}, ] [package.extras] @@ -1498,7 +1425,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1510,7 +1436,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 = [ @@ -1522,7 +1447,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1542,7 +1466,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "importlib-resources" version = "6.1.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1561,7 +1484,6 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1571,14 +1493,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.25.2" +version = "6.26.0" description = "IPython Kernel for Jupyter" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "ipykernel-6.25.2-py3-none-any.whl", hash = "sha256:2e2ee359baba19f10251b99415bb39de1e97d04e1fab385646f24f0596510b77"}, - {file = "ipykernel-6.25.2.tar.gz", hash = "sha256:f468ddd1f17acb48c8ce67fcfa49ba6d46d4f9ac0438c1f441be7c3d1372230b"}, + {file = "ipykernel-6.26.0-py3-none-any.whl", hash = "sha256:3ba3dc97424b87b31bb46586b5167b3161b32d7820b9201a9e698c71e271602c"}, + {file = "ipykernel-6.26.0.tar.gz", hash = "sha256:553856658eb8430bbe9653ea041a41bff63e9606fc4628873fc92a6cf3abd404"}, ] [package.dependencies] @@ -1587,7 +1508,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 = "*" @@ -1607,7 +1528,6 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" name = "ipython" version = "8.12.3" description = "IPython: Productive Interactive Computing" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1647,7 +1567,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 = [ @@ -1659,7 +1578,6 @@ files = [ name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1674,7 +1592,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 = [ @@ -1692,7 +1609,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 = [ @@ -1707,7 +1623,6 @@ numpy = "*" name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -1727,7 +1642,6 @@ testing = ["Django", "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 = [ @@ -1745,7 +1659,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 = [ @@ -1760,7 +1673,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 = [ @@ -1770,14 +1682,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.19.1" +version = "4.19.2" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jsonschema-4.19.1-py3-none-any.whl", hash = "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e"}, - {file = "jsonschema-4.19.1.tar.gz", hash = "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf"}, + {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, + {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, ] [package.dependencies] @@ -1804,7 +1715,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 = [ @@ -1818,39 +1728,36 @@ referencing = ">=0.28.0" [[package]] name = "jupyter-client" -version = "7.4.9" +version = "8.5.0" 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.5.0-py3-none-any.whl", hash = "sha256:c3877aac7257ec68d79b5c622ce986bd2a992ca42f6ddc9b4dd1da50e89f7028"}, + {file = "jupyter_client-8.5.0.tar.gz", hash = "sha256:e8754066510ce456358df363f97eae64b50860f30dc1fe8c6771440db3be9a63"}, ] [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.4.0" +version = "5.5.0" 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.4.0-py3-none-any.whl", hash = "sha256:66e252f675ac04dcf2feb6ed4afb3cd7f68cf92f483607522dc251f32d471571"}, - {file = "jupyter_core-5.4.0.tar.gz", hash = "sha256:e4b98344bb94ee2e3e6c4519a97d001656009f9cb2b7f2baf15b3c205770011d"}, + {file = "jupyter_core-5.5.0-py3-none-any.whl", hash = "sha256:e11e02cd8ae0a9de5c6c44abf5727df9f2581055afe00b22183f621ba3585805"}, + {file = "jupyter_core-5.5.0.tar.gz", hash = "sha256:880b86053bf298a8724994f95e99b99130659022a4f7f45f563084b6223861d3"}, ] [package.dependencies] @@ -1859,14 +1766,13 @@ pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_ traitlets = ">=5.3" [package.extras] -docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" version = "0.8.0" description = "Jupyter Event System library" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1890,14 +1796,13 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p [[package]] name = "jupyter-server" -version = "2.8.0" +version = "2.9.1" 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.8.0-py3-none-any.whl", hash = "sha256:c57270faa6530393ae69783a2d2f1874c718b9f109080581ea076b05713249fa"}, - {file = "jupyter_server-2.8.0.tar.gz", hash = "sha256:b11e2ba80667c75f55630faf8ac3d5809f8734f9006d65cce117c46a0a516ab8"}, + {file = "jupyter_server-2.9.1-py3-none-any.whl", hash = "sha256:21ad1a3d455d5a79ce4bef5201925cd17510c17898cf9d54e3ccfb6b12734948"}, + {file = "jupyter_server-2.9.1.tar.gz", hash = "sha256:9ba71be4b9c16e479e4c50c929f8ac4b1015baf90237a08681397a98c76c7e5e"}, ] [package.dependencies] @@ -1905,7 +1810,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" @@ -1929,7 +1834,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 = [ @@ -1949,7 +1853,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 = [ @@ -1969,7 +1872,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 = [ @@ -1989,7 +1891,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 = [ @@ -2009,7 +1910,6 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we name = "jupyterlab" version = "3.6.6" description = "JupyterLab computational environment" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2038,7 +1938,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 = [ @@ -2050,7 +1949,6 @@ files = [ name = "jupyterlab-server" version = "2.25.0" description = "A set of server components for JupyterLab and JupyterLab like applications." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2077,7 +1975,6 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v name = "kiwisolver" version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2191,7 +2088,6 @@ files = [ 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 = [ @@ -2237,7 +2133,6 @@ files = [ name = "manimpango" version = "0.5.0" description = "Bindings for Pango for using with Manim." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2263,7 +2158,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 = [ @@ -2338,7 +2232,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 = [ @@ -2363,7 +2256,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 = [ @@ -2433,7 +2325,6 @@ files = [ name = "matplotlib" version = "3.7.3" description = "Python plotting package" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2503,7 +2394,6 @@ setuptools_scm = ">=7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2518,7 +2408,6 @@ traitlets = "*" name = "mccabe" version = "0.6.1" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = "*" files = [ @@ -2530,7 +2419,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 = [ @@ -2550,7 +2438,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 = [ @@ -2562,7 +2449,6 @@ files = [ name = "mistune" version = "3.0.2" description = "A sane and fast Markdown parser with useful plugins and renderers" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2574,7 +2460,6 @@ files = [ name = "moderngl" version = "5.8.2" description = "ModernGL: High performance rendering for Python 3" -category = "main" optional = false python-versions = "*" files = [ @@ -2637,7 +2522,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 = [ @@ -2666,7 +2550,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 = [ @@ -2678,7 +2561,6 @@ files = [ name = "mypy" version = "0.931" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2717,7 +2599,6 @@ python2 = ["typed-ast (>=1.4.0,<2)"] 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 = [ @@ -2729,7 +2610,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 = [ @@ -2756,7 +2636,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 = [ @@ -2792,7 +2671,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 = [ @@ -2802,7 +2680,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" @@ -2813,14 +2691,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.9.2" +version = "7.10.0" description = "Converting Jupyter Notebooks" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "nbconvert-7.9.2-py3-none-any.whl", hash = "sha256:39fe4b8bdd1b0104fdd86fc8a43a9077ba64c720bda4c6132690d917a0a154ee"}, - {file = "nbconvert-7.9.2.tar.gz", hash = "sha256:e56cc7588acc4f93e2bb5a34ec69028e4941797b2bfaf6462f18a41d1cc258c9"}, + {file = "nbconvert-7.10.0-py3-none-any.whl", hash = "sha256:8cf1d95e569730f136feb85e4bba25bdcf3a63fefb122d854ddff6771c0ac933"}, + {file = "nbconvert-7.10.0.tar.gz", hash = "sha256:4bedff08848626be544de193b7594d98a048073f392178008ff4f171f5e21d26"}, ] [package.dependencies] @@ -2854,7 +2731,6 @@ webpdf = ["playwright"] name = "nbformat" version = "5.9.2" description = "The Jupyter Notebook format" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2876,7 +2752,6 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.5.8" description = "Patch asyncio to allow nested event loops" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2886,28 +2761,26 @@ files = [ [[package]] name = "networkx" -version = "2.8.8" +version = "3.1" 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"}, + {file = "networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36"}, + {file = "networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61"}, ] [package.extras] -default = ["matplotlib (>=3.4)", "numpy (>=1.19)", "pandas (>=1.3)", "scipy (>=1.8)"] -developer = ["mypy (>=0.982)", "pre-commit (>=2.20)"] -doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.2)", "pydata-sphinx-theme (>=0.11)", "sphinx (>=5.2)", "sphinx-gallery (>=0.11)", "texext (>=0.6.6)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.9)", "sympy (>=1.10)"] +default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"] +developer = ["mypy (>=1.1)", "pre-commit (>=3.2)"] +doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.13)", "sphinx (>=6.1)", "sphinx-gallery (>=0.12)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.10)", "sympy (>=1.10)"] test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] 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 = [ @@ -2920,14 +2793,13 @@ setuptools = "*" [[package]] name = "notebook" -version = "6.5.6" +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.6-py3-none-any.whl", hash = "sha256:c1e2eb2e3b6079a0552a04974883a48d04c3c05792170d64a4b23d707d453181"}, - {file = "notebook-6.5.6.tar.gz", hash = "sha256:b4625a4b7a597839dd3156b140d5ba2c7123761f98245a3290f67a8b8ee048d9"}, + {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, + {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, ] [package.dependencies] @@ -2935,14 +2807,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" @@ -2957,7 +2829,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 = [ @@ -2975,7 +2846,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 = [ @@ -3013,7 +2883,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 = [ @@ -3025,7 +2894,6 @@ files = [ name = "packaging" version = "23.2" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3037,7 +2905,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 = [ @@ -3049,7 +2916,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3065,7 +2931,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 = [ @@ -3077,7 +2942,6 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = true python-versions = "*" files = [ @@ -3092,7 +2956,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 = [ @@ -3104,7 +2967,6 @@ files = [ name = "pillow" version = "9.5.0" description = "Python Imaging Library (Fork)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3184,7 +3046,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 = [ @@ -3196,7 +3057,6 @@ files = [ name = "platformdirs" version = "3.11.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 = [ @@ -3212,7 +3072,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "pluggy" version = "1.3.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3228,7 +3087,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 = [ @@ -3245,14 +3103,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.17.1" +version = "0.18.0" description = "Python client for the Prometheus monitoring system." -category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, - {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, + {file = "prometheus_client-0.18.0-py3-none-any.whl", hash = "sha256:8de3ae2755f890826f4b6479e5571d4f74ac17a81345fe69a6778fdb92579184"}, + {file = "prometheus_client-0.18.0.tar.gz", hash = "sha256:35f7a8c22139e2bb7ca5a698e92d38145bc8dc74c1c0bf56f25cca886a764e17"}, ] [package.extras] @@ -3262,7 +3119,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 = [ @@ -3277,7 +3133,6 @@ wcwidth = "*" name = "psutil" version = "5.9.6" description = "Cross-platform lib for process and system monitoring in Python." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -3306,7 +3161,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 = [ @@ -3332,7 +3186,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 = [ @@ -3344,7 +3197,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "main" optional = true python-versions = "*" files = [ @@ -3359,7 +3211,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 = [ @@ -3371,7 +3222,6 @@ files = [ name = "pycairo" version = "1.25.1" description = "Python interface for cairo" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3396,7 +3246,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 = [ @@ -3408,7 +3257,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 = [ @@ -3420,7 +3268,6 @@ files = [ name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3438,7 +3285,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 = [ @@ -3450,7 +3296,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 = [ @@ -3462,7 +3307,6 @@ files = [ name = "pygithub" version = "1.59.1" description = "Use the full Github API v3" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3480,7 +3324,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 = [ @@ -3492,7 +3335,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 = [ @@ -3507,7 +3349,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 = [ @@ -3528,7 +3369,6 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] name = "pylint" version = "2.17.7" description = "python code static checker" -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -3558,7 +3398,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 = [ @@ -3585,7 +3424,6 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyobjc-core" version = "10.0" description = "Python<->ObjC Interoperability Module" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3602,7 +3440,6 @@ files = [ name = "pyobjc-framework-cocoa" version = "10.0" description = "Wrappers for the Cocoa frameworks on macOS" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3622,7 +3459,6 @@ pyobjc-core = ">=10.0" name = "pyparsing" 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 = [ @@ -3637,7 +3473,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyrr" version = "0.10.3" description = "3D mathematical functions using NumPy" -category = "main" optional = false python-versions = "*" files = [ @@ -3651,14 +3486,13 @@ numpy = "*" [[package]] name = "pytest" -version = "7.4.2" +version = "7.4.3" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, - {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, ] [package.dependencies] @@ -3676,7 +3510,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 = [ @@ -3695,7 +3528,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 = [ @@ -3711,7 +3543,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 = [ @@ -3733,7 +3564,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 = [ @@ -3748,7 +3578,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 = [ @@ -3760,7 +3589,6 @@ files = [ name = "pytz" version = "2023.3.post1" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -3772,7 +3600,6 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = true python-versions = "*" files = [ @@ -3796,7 +3623,6 @@ files = [ name = "pywinpty" version = "2.0.12" description = "Pseudo terminal support for Windows from Python." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3812,7 +3638,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3870,97 +3695,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 = [ @@ -3977,7 +3818,6 @@ sphinx = ">=1.3.1" name = "referencing" version = "0.30.2" description = "JSON Referencing + Python" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3993,7 +3833,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 = [ @@ -4015,7 +3854,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 = [ @@ -4029,7 +3867,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 = [ @@ -4044,7 +3881,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 = [ @@ -4056,7 +3892,6 @@ files = [ name = "rich" version = "13.6.0" 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 = [ @@ -4076,7 +3911,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "rpds-py" version = "0.10.6" description = "Python bindings to Rust's persistent data structures (rpds)" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4185,7 +4019,6 @@ files = [ 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 = [ @@ -4224,7 +4057,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 = [ @@ -4240,7 +4072,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 = [ @@ -4257,7 +4088,6 @@ win32 = ["pywin32"] name = "setuptools" version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4274,7 +4104,6 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar name = "setuptools-scm" version = "8.0.4" description = "the blessed package to manage your versions by scm tags" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4297,7 +4126,6 @@ test = ["build", "pytest", "rich", "wheel"] 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 = [ @@ -4309,7 +4137,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 = [ @@ -4365,7 +4192,6 @@ testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] name = "smmap" version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4377,7 +4203,6 @@ files = [ 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 = [ @@ -4389,7 +4214,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 = [ @@ -4401,7 +4225,6 @@ files = [ name = "soupsieve" version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4413,7 +4236,6 @@ files = [ name = "sphinx" version = "4.5.0" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4449,7 +4271,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 = [ @@ -4467,7 +4288,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 = [ @@ -4486,7 +4306,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 = [ @@ -4502,7 +4321,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 = [ @@ -4518,7 +4336,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 = [ @@ -4534,7 +4351,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 = [ @@ -4549,7 +4365,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 = [ @@ -4564,7 +4379,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 = [ @@ -4580,7 +4394,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 = [ @@ -4596,7 +4409,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 = [ @@ -4612,7 +4424,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 = [ @@ -4623,7 +4434,6 @@ files = [ name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "main" optional = true python-versions = "*" files = [ @@ -4643,7 +4453,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "svgelements" version = "1.9.6" description = "Svg Elements Parsing" -category = "main" optional = false python-versions = "*" files = [ @@ -4655,7 +4464,6 @@ files = [ 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 = [ @@ -4676,7 +4484,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 = [ @@ -4695,7 +4502,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 = [ @@ -4705,21 +4511,19 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.1" +version = "0.12.2" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"}, - {file = "tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"}, + {file = "tomlkit-0.12.2-py3-none-any.whl", hash = "sha256:eeea7ac7563faeab0a1ed8fe12c2e5a51c61f933f2502f7e9db0241a65163ad0"}, + {file = "tomlkit-0.12.2.tar.gz", hash = "sha256:df32fab589a81f0d7dc525a4267b6d7a64ee99619cbd1eeb0fae32c1dd426977"}, ] [[package]] name = "tornado" 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 = [ @@ -4740,7 +4544,6 @@ files = [ name = "tqdm" version = "4.66.1" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4759,25 +4562,23 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.11.2" +version = "5.13.0" description = "Traitlets Python configuration system" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "traitlets-5.11.2-py3-none-any.whl", hash = "sha256:98277f247f18b2c5cabaf4af369187754f4fb0e85911d473f72329db8a7f4fae"}, - {file = "traitlets-5.11.2.tar.gz", hash = "sha256:7564b5bf8d38c40fa45498072bf4dc5e8346eb087bbf1e2ae2d8774f6a0f078e"}, + {file = "traitlets-5.13.0-py3-none-any.whl", hash = "sha256:baf991e61542da48fe8aef8b779a9ea0aa38d8a54166ee250d5af5ecf4486619"}, + {file = "traitlets-5.13.0.tar.gz", hash = "sha256:9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.5.1)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "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 = [ @@ -4789,7 +4590,6 @@ files = [ name = "types-docutils" version = "0.20.0.3" description = "Typing stubs for docutils" -category = "dev" optional = false python-versions = "*" files = [ @@ -4801,7 +4601,6 @@ files = [ name = "types-pillow" version = "8.3.11" description = "Typing stubs for Pillow" -category = "dev" optional = false python-versions = "*" files = [ @@ -4813,7 +4612,6 @@ files = [ name = "types-protobuf" version = "3.20.4.6" description = "Typing stubs for protobuf" -category = "dev" optional = false python-versions = "*" files = [ @@ -4825,7 +4623,6 @@ files = [ name = "types-pygments" version = "2.16.0.0" description = "Typing stubs for Pygments" -category = "dev" optional = false python-versions = "*" files = [ @@ -4841,7 +4638,6 @@ types-setuptools = "*" name = "types-python-dateutil" version = "2.8.19.14" description = "Typing stubs for python-dateutil" -category = "main" optional = true python-versions = "*" files = [ @@ -4853,7 +4649,6 @@ files = [ name = "types-requests" version = "2.31.0.10" description = "Typing stubs for requests" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4868,7 +4663,6 @@ urllib3 = ">=2" name = "types-setuptools" version = "57.4.18" description = "Typing stubs for setuptools" -category = "dev" optional = false python-versions = "*" files = [ @@ -4880,7 +4674,6 @@ files = [ name = "typing-extensions" version = "4.8.0" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4892,7 +4685,6 @@ files = [ name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4907,7 +4699,6 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "urllib3" version = "2.0.7" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4925,7 +4716,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "virtualenv" version = "20.24.6" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4944,40 +4734,38 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "watchdog" -version = "2.3.1" +version = "3.0.0" description = "Filesystem events monitoring" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697"}, - {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42"}, - {file = "watchdog-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565"}, - {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16"}, - {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375"}, - {file = "watchdog-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab"}, - {file = "watchdog-2.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c"}, - {file = "watchdog-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f"}, - {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44"}, - {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131"}, - {file = "watchdog-2.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b"}, - {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc"}, - {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225"}, - {file = "watchdog-2.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43"}, - {file = "watchdog-2.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5"}, - {file = "watchdog-2.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd"}, - {file = "watchdog-2.3.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190"}, - {file = "watchdog-2.3.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf"}, - {file = "watchdog-2.3.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d"}, - {file = "watchdog-2.3.1-py3-none-manylinux2014_i686.whl", hash = "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79"}, - {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256"}, - {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad"}, - {file = "watchdog-2.3.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed"}, - {file = "watchdog-2.3.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc"}, - {file = "watchdog-2.3.1-py3-none-win32.whl", hash = "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf"}, - {file = "watchdog-2.3.1-py3-none-win_amd64.whl", hash = "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb"}, - {file = "watchdog-2.3.1-py3-none-win_ia64.whl", hash = "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96"}, - {file = "watchdog-2.3.1.tar.gz", hash = "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, ] [package.extras] @@ -4985,21 +4773,19 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcwidth" -version = "0.2.8" +version = "0.2.9" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = true python-versions = "*" files = [ - {file = "wcwidth-0.2.8-py2.py3-none-any.whl", hash = "sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704"}, - {file = "wcwidth-0.2.8.tar.gz", hash = "sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4"}, + {file = "wcwidth-0.2.9-py2.py3-none-any.whl", hash = "sha256:9a929bd8380f6cd9571a968a9c8f4353ca58d7cd812a4822bba831f8d685b223"}, + {file = "wcwidth-0.2.9.tar.gz", hash = "sha256:a675d1a4a2d24ef67096a04b85b02deeecd8e226f57b5e3a72dbb9ed99d27da8"}, ] [[package]] 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 = [ @@ -5015,7 +4801,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 = [ @@ -5027,7 +4812,6 @@ files = [ name = "websocket-client" version = "1.6.4" description = "WebSocket client for Python with low level API options" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -5044,7 +4828,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 = [ @@ -5129,7 +4912,6 @@ files = [ name = "y-py" version = "0.6.2" description = "Python bindings for the Y-CRDT built from yrs (Rust)" -category = "main" optional = true python-versions = "*" files = [ @@ -5213,7 +4995,6 @@ files = [ name = "ypy-websocket" version = "0.8.4" description = "WebSocket connector for Ypy" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5233,7 +5014,6 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] name = "zipp" version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5252,4 +5032,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "3499f5d56322e6bb4c2d55e9e0a69be42e574d519edb7387feacbb3dd88da652" +content-hash = "fcf22a432b1736dc21eeefb88afc680020c64357eb7f8b1ba4b4fa7d030debaa" diff --git a/pyproject.toml b/pyproject.toml index b7cbc99e4b..7b9f1a824f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,16 +37,16 @@ pydub = "^0.25.1" rich = ">=6.0,!=12.0.0" pycairo = "^1.21" manimpango = ">=0.5.0,<1.0.0" -networkx = "^2.5" +networkx = ">=2.5,<3.3" decorator = "^5.0.7" importlib-metadata = { version = "^4.10.0", python = "<3.8" } -watchdog = "^2.1.6" +watchdog = ">=2.1,<=3.0.0" jupyterlab = { version = "^3.0", optional = true } notebook = { version = "^6.4", optional = true } moderngl = "^5.6.3" moderngl-window = "^2.3.0" mapbox-earcut = "^1.0.0" -cloup = "^0.13.0" +cloup = ">=0.13,<2.2" requests = "^2.26.0" dearpygui = { version = "^1.3.1", optional = true } skia-pathops = "^0.7.0" diff --git a/tests/interface/test_commands.py b/tests/interface/test_commands.py index 995daf2c37..f2f68857e8 100644 --- a/tests/interface/test_commands.py +++ b/tests/interface/test_commands.py @@ -144,7 +144,7 @@ def test_manim_new_command(): expected_output = """\ Usage: manim new [OPTIONS] COMMAND [ARGS]... - (DEPRECATED) Create a new project or insert a new scene. + (Deprecated) Create a new project or insert a new scene. Options: --help Show this message and exit. From d77a47a233fd06f186a8367ab2626d1ea7c686fa Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Sat, 4 Nov 2023 00:49:11 +0100 Subject: [PATCH 290/555] Fix Typing (#3086) * first draft of color class + starting library conversion * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * changed everything to Manim color todo: figure out circular dependency in utils * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * first working draft of new color version * resolving conflicts * resolving conflicts * resolving conflicts * resolving conflicts * resolving conflicts * changed default internal value of ManimColor to np.ndarray[float] * starting to fix tests * fixed more tests and changed precision of manim color * removed premature color conversion * fixed some more tests * final test changes * fix doctests * fix for 3.8 * fixing ManimColor string representation * removing some unneccesary conversions * moved community constants to manim_colors.py and added more color standards * Added typing.py and typed bezier.py, core.py, constants.py fully * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed codeql complaints * add type ignore for np.allclose * fixed import in three_dimensions * added ignore for F401 back again in flake * added typings to coordinate_systems.py * Few improvements to `graphing/coordinate_systems.py` * added some typings to mobject/geometry/line.py * updated typings for mobject/geometry/line.py * Add missing imports to `line.py` * added typings to three_dimensions.py * Use `FunctionOverride` for animation overrides Fix type signature of `set_color_by_gradient` * Remove `TYPE_CHECKING` check Doc is failing * Revert "Remove `TYPE_CHECKING` check" Fails due to circular import * Use `Self` in `coordinate_systems.py` * Typehinted mobject.py and updated manim.typing.py * Typed VMobject * Type-hinted manim.mobject.geometry * math.cos->np.cos, etc & fixed incorrect typehints * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix missing annotations import * TypeAlias fix in typing.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Add ignore errors again to mypy because commits are not possible like this * Fix last typing issues * Update docs * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Only type check manim * Try fixing pre-commit * fix merge * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix compat * Fix compat again * Fix imports compat * Use union syntax * Use union syntax * Fix reduce_across_dimension * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Various test and merge fixes * Doc fixes * Last doc fix * Revert usage of np over math * Bump numpy version * Remove obsolete duplicate example * Fixed Incorrect Typehint in manim.constants * Fix docstring typo * More fixes Use mypy.ini instead of .mypy.ini Fix more docstrings Improve types in utils and constants * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * docs fixes * Add internal aliases * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix compat * line lengths in .rst file, formatting, typos * add docstring for space_ops:cross2d * add some more arrow tip typings (in a non-circular import causing way) * yes, this can be deleted * fix formatting of example * added docstring to bezier::inverse_interpolation * added docstring + test for bezier::match_interpolate * some improvements in coordinate_systems * Vector -> Vector3 * replaced np.ndarray with more appropriate type hints * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Apply feedback * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * revert to previous (new) version * fix doctest * fix ReST errors --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Alex Lembcke Co-authored-by: Viicos <65306057+Viicos@users.noreply.github.com> Co-authored-by: JasonGrace2282 Co-authored-by: Benjamin Hackl --- .flake8 | 7 +- .pre-commit-config.yaml | 3 +- docs/source/contributing/typings.rst | 110 ++-- manim/_config/__init__.py | 1 - manim/_config/logger_utils.py | 1 + manim/_config/utils.py | 4 +- manim/animation/changing.py | 1 - manim/animation/creation.py | 2 +- manim/animation/indication.py | 3 +- manim/camera/camera.py | 1 - manim/constants.py | 112 ++-- manim/mobject/geometry/arc.py | 198 ++++--- manim/mobject/geometry/boolean_ops.py | 16 +- manim/mobject/geometry/line.py | 110 ++-- manim/mobject/geometry/polygram.py | 35 +- manim/mobject/geometry/shape_matchers.py | 33 +- manim/mobject/geometry/tips.py | 61 +- manim/mobject/graphing/coordinate_systems.py | 215 ++++--- manim/mobject/mobject.py | 526 ++++++++++-------- manim/mobject/opengl/opengl_mobject.py | 10 +- .../opengl/opengl_vectorized_mobject.py | 12 +- manim/mobject/text/tex_mobject.py | 2 +- manim/mobject/text/text_mobject.py | 11 +- manim/mobject/three_d/three_d_utils.py | 21 +- manim/mobject/three_d/three_dimensions.py | 63 ++- manim/mobject/types/vectorized_mobject.py | 523 +++++++++-------- manim/typing.py | 133 +++++ manim/utils/bezier.py | 350 +++++++++--- manim/utils/color/core.py | 142 +++-- manim/utils/color/manim_colors.py | 162 +++--- manim/utils/space_ops.py | 48 +- .mypy.ini => mypy.ini | 81 ++- poetry.lock | 501 +++++++++++------ pyproject.toml | 5 +- 34 files changed, 2156 insertions(+), 1347 deletions(-) create mode 100644 manim/typing.py rename .mypy.ini => mypy.ini (51%) diff --git a/.flake8 b/.flake8 index 8d4f3309b0..15e385901c 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,7 +10,7 @@ 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 @@ -40,4 +41,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/.pre-commit-config.yaml b/.pre-commit-config.yaml index 225996766b..aa134edea8 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: @@ -69,6 +69,7 @@ repos: types-requests, types-setuptools, ] + files: ^manim/ - repo: https://github.com/codespell-project/codespell rev: v2.2.5 diff --git a/docs/source/contributing/typings.rst b/docs/source/contributing/typings.rst index 034f4b6faf..9880bfb3b7 100644 --- a/docs/source/contributing/typings.rst +++ b/docs/source/contributing/typings.rst @@ -2,102 +2,80 @@ 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 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. - 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``). +* Following `PEP 484 `_, + 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``. +* Always parametrize generics (``list[int]`` instead of ``list``, + ``type[Any]`` instead of ``type``, etc.). This also applies to callables: -.. 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``...) 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 a96440ba3b..e7b1d0cdc8 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/animation/changing.py b/manim/animation/changing.py index 0354a1c002..bb11cfc0a4 100644 --- a/manim/animation/changing.py +++ b/manim/animation/changing.py @@ -6,7 +6,6 @@ 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 ( diff --git a/manim/animation/creation.py b/manim/animation/creation.py index f28c123025..6f8173e35a 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -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): diff --git a/manim/animation/indication.py b/manim/animation/indication.py index fa3d801b24..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 @@ -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 b26e4aec0e..fe7f58ef23 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 diff --git a/manim/constants.py b/manim/constants.py index 1f6a8684e6..065a10fcfc 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -10,6 +10,8 @@ from cloup import Context from PIL.Image import Resampling +from manim.typing import Vector3 + __all__ = [ "SCENE_NOT_FOUND_MESSAGE", "CHOOSE_NUMBER_MESSAGE", @@ -77,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, @@ -120,80 +122,80 @@ } # Geometry: directions -ORIGIN: np.ndarray = 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: np.ndarray = 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: np.ndarray = 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: np.ndarray = 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: np.ndarray = 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: np.ndarray = 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: np.ndarray = 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: 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: 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: np.ndarray = UP + LEFT +UL: Vector3 = UP + LEFT """One step up plus one step left.""" -UR: np.ndarray = UP + RIGHT +UR: Vector3 = UP + RIGHT """One step up plus one step right.""" -DL: np.ndarray = DOWN + LEFT +DL: Vector3 = DOWN + LEFT """One step down plus one step left.""" -DR: np.ndarray = DOWN + RIGHT +DR: Vector3 = DOWN + RIGHT """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 @@ -236,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/geometry/arc.py b/manim/mobject/geometry/arc.py index 5672907187..9b724482c5 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -43,16 +43,16 @@ def construct(self): ] import itertools -import math import warnings -from typing import TYPE_CHECKING, Sequence +from typing import TYPE_CHECKING import numpy as np +from typing_extensions import 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.mobject.types.vectorized_mobject import VGroup, VMobject +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, @@ -63,9 +63,11 @@ 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 class TipableVMobject(VMobject, metaclass=ConvertToOpenGL): @@ -88,21 +90,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: 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 that the endpoints might need to be switched if it's a 'starting tip' or not. @@ -117,7 +124,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: type[tips.ArrowTip] | None = 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 +137,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: 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. """ @@ -150,7 +166,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: tips.ArrowTip, at_start: bool = False): # Last two control points, defining both # the end, and the tangency direction if at_start: @@ -177,7 +193,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: tips.ArrowTip, at_start: bool) -> Self: if self.get_length() == 0: # Zero length, put_start_and_end_on wouldn't work return self @@ -188,7 +204,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: tips.ArrowTip, at_start: bool) -> Self: if at_start: self.start_tip = tip else: @@ -197,15 +213,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 +233,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 +253,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) @@ -283,21 +299,21 @@ def __init__( radius: float = 1.0, start_angle: float = 0, angle: float = TAU / 4, - num_components=9, - arc_center=ORIGIN, + 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.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 +321,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 +333,9 @@ 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 +355,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 +378,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 +404,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 +431,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 +452,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 +465,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 +478,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 +518,7 @@ def __init__( radius: float | None = None, color: ParsableManimColor = RED, **kwargs, - ): + ) -> None: super().__init__( radius=radius, start_angle=0, @@ -508,7 +533,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 +580,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 +612,11 @@ 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 - ): + def from_three_points(p1: Point3D, p2: Point3D, p3: Point3D, **kwargs) -> Self: """Returns a circle passing through the specified three points. @@ -653,13 +676,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 +699,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 +792,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) @@ -823,15 +846,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__( @@ -843,7 +866,7 @@ def __init__( **kwargs, ) - def generate_points(self): + def generate_points(self) -> None: inner_arc, outer_arc = ( Arc( start_angle=self.start_angle, @@ -879,7 +902,9 @@ 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) @@ -911,12 +936,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 @@ -924,7 +949,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) @@ -959,7 +984,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) @@ -1045,12 +1077,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)] @@ -1188,7 +1220,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", @@ -1207,7 +1239,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..0bc33d70b0 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,9 @@ class _BooleanOps(VMobject, metaclass=ConvertToOpenGL): objects (:class:`~.VMobject`). """ - 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 +39,7 @@ def _convert_2d_to_3d_array( Returns ------- - typing.List[np.ndarray] + Point2D_Array A list of array converted to 3d. Example @@ -216,7 +212,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 +254,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 +307,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 ce556081f4..b958e55e19 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 import numpy as np +from typing_extensions import Self from manim import config from manim.constants import * @@ -26,19 +27,32 @@ 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 from manim.utils.space_ops import angle_of_vector, line_intersection, normalize +if TYPE_CHECKING: + from manim.typing import Point2D, Point3D, Vector + from manim.utils.color import ParsableManimColor + + from ..matrix import Matrix # Avoid circular import + class Line(TipableVMobject): - def __init__(self, start=LEFT, end=RIGHT, buff=0, path_arc=None, **kwargs): + def __init__( + self, + start: Point3D = LEFT, + end: Point3D = RIGHT, + 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, @@ -46,7 +60,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: Point3D, + end: Point3D, + 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) @@ -57,7 +77,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) -> Self: if buff == 0: return # @@ -72,7 +92,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: Point3D, end: Point3D) -> None: # If either start or end are Mobjects, this # gives their centers rough_start = self._pointify(start) @@ -86,9 +106,9 @@ def _set_start_and_end_attrs(self, start, end): 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. @@ -108,11 +128,11 @@ 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) -> 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: Point3D, end: Point3D) -> Self: """Sets starts and end coordinates of a line. Examples @@ -143,16 +163,16 @@ def construct(self): self.generate_points() return super().put_start_and_end_on(start, end) - def get_vector(self): + def get_vector(self) -> Vector: return self.get_end() - self.get_start() - def get_unit_vector(self): + def get_unit_vector(self) -> Vector: 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: Point3D) -> Vector: """Returns the projection of a point onto a line. Parameters @@ -166,10 +186,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: Point3D | None = None) -> Self: if about_point is None: about_point = self.get_start() @@ -180,7 +200,7 @@ def set_angle(self, angle, about_point=None): return self - def set_length(self, length): + def set_length(self, length: float) -> Self: return self.scale(length / self.get_length()) @@ -220,11 +240,11 @@ def construct(self): def __init__( self, - *args: Any, + *args, dash_length: float = DEFAULT_DASH_LENGTH, dashed_ratio: float = 0.5, **kwargs, - ): + ) -> None: self.dash_length = dash_length self.dashed_ratio = dashed_ratio super().__init__(*args, **kwargs) @@ -253,7 +273,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 @@ -269,7 +289,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 @@ -285,7 +305,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 @@ -298,7 +318,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 @@ -352,7 +372,7 @@ def __init__( length: float = 1, d_alpha: float = 1e-6, **kwargs, - ): + ) -> None: self.length = length self.d_alpha = d_alpha da = self.d_alpha @@ -394,7 +414,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) -> None: self.angle = angle super().__init__(**kwargs) self.set_points_as_corners([UP, UP + RIGHT, RIGHT]) @@ -492,13 +512,13 @@ 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, - ): + ) -> 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) @@ -509,7 +529,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) -> Self: r"""Scale an arrow, but keep stroke width and arrow tip size fixed. @@ -559,7 +579,7 @@ def scale(self, factor, scale_tips=False, **kwargs): 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 @@ -573,7 +593,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 @@ -593,7 +613,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: @@ -634,7 +654,7 @@ 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: Vector = RIGHT, buff: float = 0, **kwargs) -> None: self.buff = buff if len(direction) == 2: direction = np.hstack([direction, 0]) @@ -647,7 +667,7 @@ def coordinate_label( n_dim: int = 2, color: ParsableManimColor | None = None, **kwargs, - ): + ) -> Matrix: """Creates a label based on the coordinates of the vector. Parameters @@ -750,7 +770,7 @@ def construct(self): self.add(box, d1, d2, d3) """ - def __init__(self, *args: Any, **kwargs): + 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) @@ -871,8 +891,8 @@ def __init__( self, line1: Line, line2: Line, - radius: float = None, - quadrant: Sequence[int] = (1, 1), + radius: float | None = None, + quadrant: Point2D = (1, 1), other_angle: bool = False, dot: bool = False, dot_radius: float | None = None, @@ -880,7 +900,7 @@ def __init__( dot_color: ParsableManimColor = WHITE, elbow: bool = False, **kwargs, - ): + ) -> None: super().__init__(**kwargs) self.lines = (line1, line2) self.quadrant = quadrant @@ -1017,14 +1037,10 @@ 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 - ) -> Angle: + def from_three_points(A: Point3D, B: Point3D, C: Point3D, **kwargs) -> Angle: """The angle between the lines AB and BC. This constructs the angle :math:`\\angle ABC`. @@ -1099,5 +1115,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 + ) -> 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 5064ff737e..bf2a92bdb5 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -15,8 +15,9 @@ "Cutout", ] + from math import ceil -from typing import Iterable, Sequence +from typing import TYPE_CHECKING import numpy as np @@ -24,10 +25,16 @@ 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 +if TYPE_CHECKING: + from typing_extensions import Self + + from manim.typing import Point3D, Point3D_Array + from manim.utils.color import ParsableManimColor + class Polygram(VMobject, metaclass=ConvertToOpenGL): """A generalized :class:`Polygon`, allowing for disconnected sets of edges. @@ -64,7 +71,9 @@ 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: @@ -76,7 +85,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 @@ -98,7 +107,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 @@ -138,7 +147,7 @@ def round_corners( 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 @@ -303,7 +312,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) @@ -347,7 +356,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}. @@ -423,7 +432,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) @@ -495,7 +504,7 @@ def __init__( density: int = 2, start_angle: float | None = TAU / 4, **kwargs, - ): + ) -> None: inner_angle = TAU / (2 * n) if inner_radius is None: @@ -554,7 +563,7 @@ def construct(self): self.add(tri_group) """ - def __init__(self, **kwargs): + def __init__(self, **kwargs) -> None: super().__init__(n=3, **kwargs) @@ -664,7 +673,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) @@ -734,7 +743,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..296d9b9d9f 100644 --- a/manim/mobject/geometry/shape_matchers.py +++ b/manim/mobject/geometry/shape_matchers.py @@ -4,13 +4,17 @@ __all__ = ["SurroundingRectangle", "BackgroundRectangle", "Cross", "Underline"] +from typing import Any + +from typing_extensions import Self + 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, ManimColor, ParsableManimColor class SurroundingRectangle(RoundedRectangle): @@ -38,8 +42,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 +87,7 @@ def construct(self): def __init__( self, - mobject, + mobject: Mobject, color: ParsableManimColor | None = None, stroke_width: float = 0, stroke_opacity: float = 0, @@ -98,13 +107,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 +129,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 +162,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 +190,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 e002c89b49..385093b765 100644 --- a/manim/mobject/geometry/tips.py +++ b/manim/mobject/geometry/tips.py @@ -13,6 +13,8 @@ "StealthTip", ] +from typing import TYPE_CHECKING + import numpy as np from manim.constants import * @@ -22,6 +24,9 @@ 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. @@ -106,11 +111,11 @@ def construct(self): self.add(*big_arrows, *small_arrows, *labels) """ - 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. @@ -128,7 +133,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 @@ -144,7 +149,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 @@ -160,7 +165,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 @@ -176,7 +181,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 @@ -238,13 +243,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, @@ -264,7 +269,9 @@ 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) @@ -273,12 +280,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 @@ -290,7 +297,9 @@ 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) @@ -299,12 +308,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, @@ -320,5 +329,7 @@ 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/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index a4da38dcac..c2f5744ca8 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -14,9 +14,10 @@ import fractions as fr import numbers -from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence +from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence, TypeVar, overload import numpy as np +from typing_extensions import Self from manim import config from manim.constants import * @@ -54,6 +55,9 @@ if TYPE_CHECKING: from manim.mobject.mobject import Mobject + from manim.typing import ManimFloat, Point2D, Point3D, Vector3 + + LineType = TypeVar("LineType", bound=Line) class CoordinateSystem: @@ -108,12 +112,12 @@ 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, + ) -> None: self.dimension = dimension default_step = 1 @@ -141,13 +145,13 @@ 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) -> np.ndarray: + def polar_to_point(self, radius: float, azimuth: float) -> Point2D: r"""Gets a point from polar coordinates. Parameters @@ -178,7 +182,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 @@ -194,11 +198,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: Point3D): """Abbreviation for :meth:`point_to_coords`""" return self.point_to_coords(point) @@ -213,7 +219,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 +232,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 +297,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 @@ -370,9 +376,9 @@ def get_axis_labels(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, + ) -> Self: """Adds labels to the axes. Use ``Axes.coordinate_labels`` to access the coordinates after creation. @@ -426,15 +432,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 @@ -475,7 +505,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 @@ -589,8 +619,8 @@ 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. Parameters @@ -685,10 +715,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. @@ -737,7 +767,7 @@ def plot_parametric_curve( self, function: Callable[[float], np.ndarray], use_vectorized: bool = False, - **kwargs, + **kwargs: Any, ) -> ParametricFunction: """A parametric curve. @@ -784,8 +814,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. @@ -811,6 +841,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, @@ -828,8 +859,8 @@ def plot_surface( | Sequence[tuple[ParsableManimColor, float]] | None = None, colorscale_axis: int = 2, - **kwargs, - ): + **kwargs: Any, + ) -> Surface | OpenGLSurface: """Generates a surface based on a function. Parameters @@ -964,7 +995,9 @@ 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. @@ -980,7 +1013,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) @@ -997,7 +1030,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. @@ -1242,8 +1275,8 @@ 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. Parameters @@ -1359,7 +1392,9 @@ 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. @@ -1437,8 +1472,8 @@ def plot_antiderivative_graph( y_intercept: float = 0, samples: int = 50, use_vectorized: bool = False, - **kwargs, - ): + **kwargs: Any, + ) -> ParametricFunction: """Plots an antiderivative graph. Parameters @@ -1619,7 +1654,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. @@ -1678,7 +1713,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 @@ -1811,8 +1846,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) @@ -1879,7 +1914,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. @@ -1912,7 +1947,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. @@ -2161,8 +2196,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. @@ -2304,15 +2339,15 @@ 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_normal: Sequence[float] = DOWN, + z_axis_config: dict[str, Any] | None = None, + z_normal: Vector3 = 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: dict[str, Any], + ) -> None: super().__init__( x_range=x_range, x_length=x_length, @@ -2368,14 +2403,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: ( @@ -2395,8 +2430,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. @@ -2443,12 +2478,12 @@ 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=PI / 2, - rotation_axis=RIGHT, - **kwargs, + rotation: float = PI / 2, + rotation_axis: Vector3 = RIGHT, + **kwargs: Any, ) -> Mobject: """Generate a z-axis label. @@ -2630,11 +2665,11 @@ 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: dict[str, Any], ): # configs self.axis_config = { @@ -2679,7 +2714,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) @@ -2800,13 +2835,13 @@ 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[ManimFloat], **kwargs: Any) -> 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: 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: @@ -2900,13 +2935,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 @@ -2977,7 +3012,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) @@ -3057,13 +3092,13 @@ def get_axes(self) -> VGroup: """ return self.axes - def get_vector(self, coords, **kwargs): + 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 ) - def prepare_for_nonlinear_transform(self, num_inserted_curves=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: @@ -3074,7 +3109,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 @@ -3176,7 +3211,7 @@ def add_coordinates( self, r_values: Iterable[float] | None = None, a_values: Iterable[float] | None = None, - ): + ) -> Self: """Adds the coordinates. Parameters @@ -3189,7 +3224,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: Any) -> MathTex: constant_label = {"PI radians": r"\pi", "TAU radians": r"\tau"}[ self.azimuth_units ] @@ -3258,7 +3293,7 @@ def construct(self): """ - def __init__(self, **kwargs): + def __init__(self, **kwargs: Any) -> None: super().__init__( **kwargs, ) @@ -3284,7 +3319,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 @@ -3301,7 +3336,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) @@ -3319,7 +3354,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. @@ -3354,7 +3389,9 @@ 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 + ) -> Self: """Adds the labels produced from :meth:`~.NumberPlane.get_coordinate_labels` to the plane. Parameters diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 72faf99ea1..1afa091cca 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -7,29 +7,18 @@ import copy import itertools as it +import math import operator as op import random import sys import types import warnings from functools import partialmethod, reduce -from math import ceil from pathlib import Path -from typing import ( - TYPE_CHECKING, - Callable, - Dict, - Iterable, - List, - Optional, - Sequence, - Tuple, - Type, - TypeVar, - Union, -) +from typing import TYPE_CHECKING, Callable, Iterable, Literal, TypeVar, Union import numpy as np +from typing_extensions import Self, TypeAlias from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL @@ -52,10 +41,25 @@ # TODO: Explain array_attrs -Updater = Union[Callable[["Mobject"], None], Callable[["Mobject", float], None]] +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.typing import ( + FunctionOverride, + Image, + ManimFloat, + ManimInt, + MappingFunction, + PathFuncType, + Point3D, + Point3D_Array, + Vector, + Vector3, + ) + from ..animation.animation import Animation @@ -82,12 +86,12 @@ class Mobject: animation_overrides = {} @classmethod - def __init_subclass__(cls, **kwargs): + def __init_subclass__(cls, **kwargs) -> None: super().__init_subclass__(**kwargs) cls.animation_overrides: dict[ type[Animation], - Callable[[Mobject], Animation], + FunctionOverride, ] = {} cls._add_intrinsic_animation_overrides() cls._original__init__ = cls.__init__ @@ -95,20 +99,20 @@ 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) + self.color = ManimColor.parse(color) self.reset_points() self.generate_points() @@ -118,7 +122,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 @@ -138,7 +142,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. """ @@ -156,8 +160,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. @@ -186,7 +190,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 @@ -331,7 +335,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 @@ -340,30 +344,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`. @@ -449,7 +451,7 @@ def add(self, *mobjects: Mobject): self.submobjects = list_update(self.submobjects, unique_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)``, @@ -470,13 +472,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 @@ -532,7 +534,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. @@ -565,7 +567,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``. @@ -622,7 +624,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. @@ -670,7 +672,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 @@ -703,11 +705,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 @@ -740,11 +742,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 @@ -761,20 +763,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 @@ -782,17 +785,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`. @@ -807,7 +810,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) @@ -817,7 +820,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. @@ -854,7 +857,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. @@ -904,7 +907,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( @@ -912,7 +915,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 @@ -986,7 +989,7 @@ def construct(self): update_function(self) 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. @@ -1013,7 +1016,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 @@ -1039,7 +1042,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 @@ -1069,7 +1072,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. @@ -1096,7 +1099,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 @@ -1124,7 +1127,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 @@ -1146,7 +1149,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: Vector3) -> Self: """Shift by the given vectors. Parameters @@ -1172,7 +1175,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. @@ -1218,17 +1221,17 @@ def construct(self): ) return self - def rotate_about_origin(self, angle, axis=OUT, axes=[]): + 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, - axis=OUT, - about_point: Sequence[float] | None = None, + angle: float, + axis: Vector3 = 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( @@ -1236,7 +1239,7 @@ def rotate( ) return self - def flip(self, axis=UP, **kwargs): + def flip(self, axis: Vector3 = UP, **kwargs) -> Self: """Flips/Mirrors an mobject about its center. Examples @@ -1255,7 +1258,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 @@ -1263,7 +1266,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 @@ -1272,16 +1275,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 @@ -1293,9 +1296,11 @@ 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 ------- @@ -1327,7 +1332,9 @@ 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: 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)) alphas -= min(alphas) @@ -1339,12 +1346,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): @@ -1360,10 +1367,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 @@ -1380,7 +1387,7 @@ def pose_at_angle(self, **kwargs): # Positioning methods - def center(self): + def center(self) -> Self: """Moves the center of the mobject to the center of the scene. Returns @@ -1391,7 +1398,9 @@ def center(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: 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. """ @@ -1406,23 +1415,27 @@ 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: Vector3 = 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: Vector3 = 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: Vector3 = RIGHT, + buff: float = DEFAULT_MOBJECT_TO_MOBJECT_BUFFER, + aligned_edge: Vector3 = ORIGIN, + submobject_to_align: Mobject | None = None, + index_of_submobject_to_align: int | None = None, + coor_mask: Vector3 = np.array([1, 1, 1]), + ) -> Self: + """Move this :class:`~.Mobject` next to another's :class:`~.Mobject` or Point3D. Examples -------- @@ -1461,7 +1474,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)) @@ -1483,10 +1496,12 @@ 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 @@ -1496,7 +1511,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 @@ -1522,7 +1537,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 @@ -1548,7 +1563,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 @@ -1574,7 +1589,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 @@ -1600,36 +1615,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: 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, direction=ORIGIN): + 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, direction=ORIGIN): + 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, direction=ORIGIN): + 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) - 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) @@ -1637,11 +1652,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: 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): target = point_or_mobject.get_critical_point(aligned_edge) else: @@ -1650,7 +1665,9 @@ 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: @@ -1668,16 +1685,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): @@ -1703,7 +1720,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. @@ -1742,12 +1759,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 @@ -1756,7 +1773,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 @@ -1769,27 +1786,26 @@ def set_color( self.color = ManimColor.parse(color) return self - def set_color_by_gradient(self, *colors: Iterable[ParsableManimColor]): - """Set the color of this mobject's submobjects along the specified - gradient. - + def set_color_by_gradient(self, *colors: ParsableManimColor) -> Self: + """ Parameters ---------- colors - The colors to use for the gradient. Use like - ``set_color_by_gradient(RED, BLUE, GREEN)``. + The colors to use for the gradient. Use like `set_color_by_gradient(RED, BLUE, GREEN)`. + self.color = ManimColor.parse(color) + return self """ self.set_submobject_colors_by_gradient(*colors) return self 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, @@ -1813,11 +1829,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() @@ -1829,11 +1845,13 @@ 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) @@ -1842,7 +1860,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) @@ -1854,7 +1872,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 @@ -1863,14 +1881,14 @@ 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") self.become(self.saved_state) return self - def reduce_across_dimension(self, reduce_func, dim: int) -> float: + 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: @@ -1894,14 +1912,14 @@ def reduce_across_dimension(self, reduce_func, dim: int) -> float: rv = reduce_func([value, rv]) return rv - 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) -> np.ndarray: + def get_merged_array(self, array_attr: str) -> np.ndarray: """Return all of a given attribute from this mobject and all submobjects. May contain duplicates; the order is in a depth-first (pre-order) @@ -1912,7 +1930,7 @@ def get_merged_array(self, array_attr) -> np.ndarray: result = np.append(result, submob.get_merged_array(array_attr), axis=0) return result - def get_all_points(self) -> np.ndarray: + def get_all_points(self) -> Point3D_Array: """Return all points from this mobject and all submobjects. May contain duplicates; the order is in a depth-first (pre-order) @@ -1922,13 +1940,15 @@ def get_all_points(self) -> np.ndarray: # 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] @@ -1939,7 +1959,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: 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. @@ -1968,28 +1988,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: Vector3) -> 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: Vector3) -> 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: Vector3) -> 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 -------- @@ -2011,74 +2031,74 @@ 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( max, dim, ) - self.reduce_across_dimension(min, dim) - def get_coord(self, dim, direction=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=ORIGIN) -> np.float64: - """Returns x coordinate of the center of the :class:`~.Mobject` as ``float``""" + 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=ORIGIN) -> np.float64: - """Returns y coordinate of the center of the :class:`~.Mobject` as ``float``""" + 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=ORIGIN) -> np.float64: - """Returns z coordinate of the center of the :class:`~.Mobject` as ``float``""" + 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) - 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) @@ -2089,7 +2109,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() @@ -2104,51 +2124,53 @@ 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: Vector3 = 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, - ): + mobject_or_point: Mobject | Point3D, + direction: Vector3 = ORIGIN, + ) -> Self: """Aligns mobject to another :class:`~.Mobject` in a certain direction. Examples: @@ -2180,33 +2202,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) -> list[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: Vector3 = RIGHT, + buff: float = DEFAULT_MOBJECT_TO_MOBJECT_BUFFER, + center: bool = True, **kwargs, - ): + ) -> Self: """Sorts :class:`~.Mobject` next to each other on screen. Examples @@ -2235,14 +2257,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: Vector3 = 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 @@ -2348,15 +2370,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 = 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 = ceil(len(mobs) / cols) + rows = math.ceil(len(mobs) / cols) if cols is None: - cols = 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. @@ -2471,24 +2493,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 @@ -2512,10 +2538,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 @@ -2536,11 +2562,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 @@ -2559,7 +2585,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 @@ -2590,7 +2616,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: @@ -2599,10 +2625,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) @@ -2627,14 +2653,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 | None: if n == 0: return @@ -2657,10 +2683,16 @@ 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``. @@ -2685,7 +2717,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( @@ -2697,7 +2729,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` @@ -2754,7 +2786,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. @@ -2776,7 +2808,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( @@ -2827,8 +2859,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 ------- @@ -2850,13 +2882,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() @@ -2868,7 +2900,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", @@ -2879,7 +2911,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") @@ -2907,8 +2939,10 @@ 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 ( # is this to prevent circular import? + _MethodAnimation, + ) if self.overridden_animation: anim = self.overridden_animation @@ -2921,7 +2955,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/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index c02ddd5c72..3425fdd9e8 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 d486dc5c76..d0c62d893b 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -3,7 +3,7 @@ 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 @@ -22,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 ( @@ -136,6 +136,7 @@ def __init__( self.needs_new_triangulation = True self.triangulation = np.zeros(0, dtype="i4") self.orientation = 1 + self.fill_data = None self.stroke_data = None self.fill_shader_wrapper = None @@ -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/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index dbdf6e3a50..47cbe6cd96 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 * diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 497f03e560..3a2b0bd3df 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -462,7 +462,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 @@ -482,7 +482,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, @@ -737,7 +737,7 @@ def _text2settings(self, color: str): # setting_args requires values to be strings 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 for _, arg in t2xs } settings = self._get_settings_from_t2xs(t2xs, default_args) @@ -1307,7 +1307,7 @@ def font_size(self, font_val): else: self.scale(font_val / self.font_size) - def _text2hash(self, color: ManimColor): + def _text2hash(self, color: ParsableManimColor): """Generates ``sha256`` hash for file name.""" settings = ( "MARKUPPANGO" @@ -1324,8 +1324,9 @@ def _text2hash(self, color: ManimColor): hasher.update(id_str.encode()) return hasher.hexdigest()[:16] - def _text2svg(self, color: ManimColor): + def _text2svg(self, color: ParsableManimColor | None): """Convert the text to SVG using Pango.""" + color = ManimColor(color) size = self._font_size line_spacing = self.line_spacing size /= TEXT2SVG_ADJUSTMENT_FACTOR diff --git a/manim/mobject/three_d/three_d_utils.py b/manim/mobject/three_d/three_d_utils.py index 397e304af1..ec3af9ac05 100644 --- a/manim/mobject/three_d/three_d_utils.py +++ b/manim/mobject/three_d/three_d_utils.py @@ -14,40 +14,45 @@ ] +from typing import TYPE_CHECKING, Literal + import numpy as np 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 +68,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/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 1ff7df118d..1be9edf7dd 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -2,6 +2,9 @@ from __future__ import annotations +from manim.typing import Point3D, Vector3 +from manim.utils.color import BLUE, BLUE_D, BLUE_E, LIGHT_GREY, WHITE, interpolate_color + __all__ = [ "ThreeDVMobject", "Surface", @@ -16,9 +19,10 @@ "Torus", ] -from typing import Callable, Sequence +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 * @@ -113,7 +117,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 @@ -141,16 +145,9 @@ def __init__( self.make_jagged() def func(self, u: float, v: float) -> np.ndarray: - """The z values defining the :class:`Surface` being plotted. - - Returns - ------- - :class:`numpy.array` - The z values defining the :class:`Surface`. - """ 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] @@ -162,7 +159,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): @@ -197,8 +194,8 @@ def _setup_in_uv_space(self): self.set_fill_by_checkerboard(*self.checkerboard_colors) def set_fill_by_checkerboard( - self, *colors: Sequence[ParsableManimColor], opacity: float = None - ) -> Mobject: + self, *colors: Iterable[ParsableManimColor], opacity: float | None = None + ) -> Self: """Sets the fill_color of each face of :class:`Surface` in an alternating pattern. @@ -227,7 +224,7 @@ def set_fill_by_value( colorscale: list[ParsableManimColor] | ParsableManimColor | None = None, axis: int = 2, **kwargs, - ) -> Mobject: + ) -> Self: """Sets the color of each mobject of a parametric surface to a color relative to its axis-value. @@ -381,9 +378,9 @@ def construct(self): def __init__( self, - center: Sequence[float] = ORIGIN, + center: Point3D = ORIGIN, radius: float = 1, - resolution: Sequence[int] = None, + resolution: Sequence[int] | None = None, u_range: Sequence[float] = (0, TAU), v_range: Sequence[float] = (0, PI), **kwargs, @@ -459,7 +456,7 @@ def __init__( point: list | np.ndarray = ORIGIN, radius: float = DEFAULT_DOT_RADIUS, color: ParsableManimColor = WHITE, - resolution=(8, 8), + resolution: tuple[int, int] = (8, 8), **kwargs, ) -> None: super().__init__(center=point, radius=radius, resolution=resolution, **kwargs) @@ -551,7 +548,9 @@ def construct(self): self.add(prismSmall, prismLarge) """ - def __init__(self, dimensions: Sequence[int] = [3, 2, 1], **kwargs) -> None: + def __init__( + self, dimensions: tuple[float, float, float] | np.ndarray = [3, 2, 1], **kwargs + ) -> None: self.dimensions = dimensions super().__init__(**kwargs) @@ -609,8 +608,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) @@ -662,7 +661,7 @@ def func(self, u: float, v: float) -> np.ndarray: ], ) - 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) @@ -821,7 +820,7 @@ def add_bases(self) -> None: 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) @@ -910,7 +909,7 @@ def __init__( start: np.ndarray = LEFT, end: np.ndarray = RIGHT, thickness: float = 0.02, - color: ParsableManimColor = None, + color: ParsableManimColor | None = None, **kwargs, ): self.thickness = thickness @@ -952,7 +951,9 @@ def set_start_and_end_attrs( self.shift((self.start + self.end) / 2) def pointify( - self, mob_or_point: Mobject | float, direction: np.ndarray = None + self, + mob_or_point: Mobject | Point3D, + direction: Vector3 = None, ) -> np.ndarray: """Gets a point representing the center of the :class:`Mobjects <.Mobject>`. @@ -998,7 +999,11 @@ def get_end(self) -> np.ndarray: @classmethod def parallel_to( - cls, line: Line3D, point: Sequence[float] = ORIGIN, length: float = 5, **kwargs + cls, + line: Line3D, + point: Vector3 = ORIGIN, + length: float = 5, + **kwargs, ) -> Line3D: """Returns a line parallel to another line going through a given point. @@ -1042,7 +1047,11 @@ def construct(self): @classmethod def perpendicular_to( - cls, line: Line3D, point: Sequence[float] = ORIGIN, length: float = 5, **kwargs + cls, + line: Line3D, + point: Vector3 = ORIGIN, + length: float = 5, + **kwargs, ) -> Line3D: """Returns a line perpendicular to another line going through a given point. @@ -1191,7 +1200,7 @@ def __init__( minor_radius: float = 1, u_range: Sequence[float] = (0, TAU), v_range: Sequence[float] = (0, TAU), - resolution: Sequence[int] = None, + resolution: tuple[int, int] | None = None, **kwargs, ) -> None: if config.renderer == RendererType.OPENGL: diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index da8e560b59..6048fe4c67 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -14,11 +14,21 @@ import itertools as it import sys -import typing -from typing import Callable, Sequence +from typing import ( + TYPE_CHECKING, + Callable, + Generator, + Hashable, + Iterable, + Literal, + Mapping, + Sequence, +) import numpy as np +import numpy.typing as npt 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 @@ -41,6 +51,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 ( + BezierPoints, + CubicBezierPoints, + ManimFloat, + MappingFunction, + Point2D, + Point3D, + Point3D_Array, + QuadraticBezierPoints, + RGBA_Array_Float, + Vector3, + Zeros, + ) + # TODO # - Change cubic curve groups to have 4 points instead of 3 # - Change sub_path idea accordingly @@ -80,24 +105,24 @@ 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: Vector3 = 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 @@ -107,22 +132,24 @@ def __init__( 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: 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 ) - 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] @@ -137,18 +164,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, @@ -178,7 +205,9 @@ 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 | Iterable[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. @@ -189,8 +218,10 @@ 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: npt.NDArray[RGBA_Array_Float] = np.array( [c.to_rgba_with_alpha(o) for c, o in zip(*make_even(colors, opacities))], ) @@ -203,8 +234,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) @@ -230,7 +264,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 @@ -270,6 +304,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 @@ -277,11 +312,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) @@ -305,7 +340,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 @@ -315,16 +350,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: Vector3 | 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, @@ -348,7 +383,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(), @@ -372,7 +407,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: @@ -387,18 +422,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) @@ -409,13 +444,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 @@ -424,7 +459,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 @@ -432,59 +467,63 @@ def get_fill_opacity(self): return self.get_fill_opacities()[0] # TODO: Does this just do a copy? - def get_fill_colors(self): + # TODO: I have the feeling that this function should not return None, does that have any usage ? + 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) -> npt.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) -> npt.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: Vector3, family: bool = True) -> Self: """Sets the direction of the applied sheen. Parameters @@ -509,10 +548,12 @@ 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: Vector3 = direction return self - def rotate_sheen_direction(self, angle: float, axis: np.ndarray = OUT, family=True): + def rotate_sheen_direction( + self, angle: float, axis: Vector3 = OUT, family: bool = True + ) -> Self: """Rotates the direction of the applied sheen. Parameters @@ -543,7 +584,9 @@ 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: Vector3 | None = None, family: bool = True + ) -> Self: """Applies a color gradient from a direction. Parameters @@ -569,7 +612,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 @@ -580,13 +623,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) -> Vector3: 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: @@ -598,8 +641,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) @@ -608,26 +651,28 @@ 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): - 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( 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. @@ -646,11 +691,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. @@ -678,17 +723,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 @@ -700,23 +745,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! @@ -745,9 +791,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 @@ -769,7 +815,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 @@ -792,7 +838,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. @@ -835,28 +881,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 @@ -881,12 +927,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". @@ -896,7 +942,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() @@ -908,7 +954,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:] @@ -920,18 +966,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(): @@ -940,7 +986,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) @@ -952,15 +998,15 @@ def apply_function(self, function): def rotate( self, angle: float, - axis: np.ndarray = OUT, - about_point: Sequence[float] | None = None, + axis: Vector3 = 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. @@ -992,10 +1038,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 @@ -1021,10 +1067,14 @@ 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 gen_cubic_bezier_tuples_from_points(self, points: np.ndarray) -> tuple: + def get_cubic_bezier_tuples_from_points( + self, points: Point3D_Array + ) -> npt.NDArray[Point3D_Array]: + return np.array(self.gen_cubic_bezier_tuples_from_points(points)) + + 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 ..]) @@ -1039,23 +1089,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) -> npt.NDArray[Point3D_Array]: return self.get_cubic_bezier_tuples_from_points(self.points) def _gen_subpaths_from_points( self, - points: np.ndarray, - filter_func: typing.Callable[[int], bool], - ) -> tuple: + points: Point3D_Array, + filter_func: Callable[[int], bool], + ) -> 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. @@ -1073,7 +1123,7 @@ def _gen_subpaths_from_points( Returns ------- - typing.Tuple + Generator[Point3D_Array] subpaths formed by the points. """ nppcc = self.n_points_per_cubic_curve @@ -1085,7 +1135,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, @@ -1093,25 +1143,27 @@ 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 @@ -1121,14 +1173,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) -> typing.Callable[[float], np.ndarray]: + def get_nth_curve_function(self, n: int) -> Callable[[float], Point3D]: """Returns the expression of the nth curve. Parameters @@ -1138,7 +1190,7 @@ def get_nth_curve_function(self, n: int) -> typing.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)) @@ -1147,7 +1199,7 @@ def get_nth_curve_length_pieces( self, n: int, sample_points: int | None = None, - ) -> np.ndarray: + ) -> npt.NDArray[ManimFloat]: """Returns the array of short line lengths used for length approximation. Parameters @@ -1159,7 +1211,6 @@ def get_nth_curve_length_pieces( Returns ------- - np.ndarray The short length-pieces of the nth curve. """ if sample_points is None: @@ -1200,7 +1251,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], Point3D], float]: """Returns the expression of the nth curve along with its (approximate) length. Parameters @@ -1212,7 +1263,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. @@ -1230,19 +1281,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, - ) -> typing.Iterable[typing.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. """ @@ -1253,7 +1304,7 @@ def get_curve_functions( def get_curve_functions_with_lengths( self, **kwargs - ) -> typing.Iterable[tuple[typing.Callable[[float], np.ndarray], float]]: + ) -> Generator[tuple[Callable[[float], Point3D], float]]: """Gets the functions and lengths of the curves for the mobject. Parameters @@ -1263,7 +1314,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. """ @@ -1272,7 +1323,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 @@ -1318,7 +1369,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. @@ -1372,7 +1423,7 @@ def proportion_from_point( return alpha - def get_anchors_and_handles(self) -> typing.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 @@ -1380,50 +1431,52 @@ def get_anchors_and_handles(self) -> typing.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. @@ -1447,7 +1500,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. @@ -1518,7 +1571,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 @@ -1542,7 +1595,9 @@ 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 + ) -> 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 @@ -1554,7 +1609,6 @@ def insert_n_curves_to_point_list(self, n: int, points: np.ndarray) -> np.ndarra Returns ------- - np.ndarray Points generated. """ @@ -1597,7 +1651,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) @@ -1610,14 +1664,16 @@ 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: Point3D | 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", @@ -1641,7 +1697,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) @@ -1698,7 +1754,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. @@ -1726,7 +1782,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. @@ -1746,7 +1802,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 @@ -1771,7 +1827,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. @@ -1850,21 +1906,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 @@ -1916,21 +1967,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 | typing.Sequence[VMobject]): + def __setitem__(self, key: int, value: VMobject | Sequence[VMobject]) -> None: """Override the [] operator for item assignment. Parameters @@ -2057,27 +2108,25 @@ 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, - ): + ) -> 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: ( - typing.Mapping[typing.Hashable, VMobject] - | typing.Iterable[tuple[typing.Hashable, VMobject]] + 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` @@ -2105,7 +2154,7 @@ def add( return self - def remove(self, key: typing.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` @@ -2133,7 +2182,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 @@ -2155,7 +2204,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) -> None: """Override the [] operator for item assignment. Parameters @@ -2180,7 +2229,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 @@ -2212,7 +2261,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 @@ -2236,7 +2285,7 @@ def __contains__(self, key: typing.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 @@ -2254,7 +2303,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) -> 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. @@ -2299,14 +2348,14 @@ def add_key_value_pair(self, key: typing.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__( @@ -2320,17 +2369,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])) @@ -2351,7 +2400,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: @@ -2360,7 +2409,7 @@ def __init__(self, vmobject, **kwargs): 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 @@ -2480,14 +2529,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 new file mode 100644 index 0000000000..495f199758 --- /dev/null +++ b/manim/typing.py @@ -0,0 +1,133 @@ +from __future__ import annotations + +from os import PathLike +from typing import Callable, Tuple, Union + +import numpy as np +import numpy.typing as npt +from typing_extensions import TypeAlias + +# 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] + +HSV_Array_Float: TypeAlias = RGB_Array_Float +HSV_Tuple_Float: TypeAlias = RGB_Tuple_Float + +ManimColorInternal: TypeAlias = npt.NDArray[ManimColorDType] + +# Point Types + +PointDType: TypeAlias = ManimFloat +""" DType for all points. """ + +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 +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, ...]`.""" + +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) +""" + +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) +""" + +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 +Vector3: TypeAlias = npt.NDArray[PointDType] +""" `shape: (3,)` A Vector `[float, float, float]`. """ + +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, ...], ...]`. """ + +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[..., None] +"""Function type returning an animation for the specified Mobject.""" + + +# Misc +PathFuncType: TypeAlias = Callable[[Point3D, Point3D, float], Point3D] +"""Function mapping two points and an alpha value to a new point""" + +MappingFunction: TypeAlias = Callable[[Point3D], Point3D] +"""A function mapping a Point3D to another Point3D""" + +Image: TypeAlias = np.ndarray +"""An Image""" + +StrPath: TypeAlias = "str | PathLike[str]" +StrOrBytesPath: TypeAlias = "str | bytes | PathLike[str] | PathLike[bytes]" diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index ce5fff437f..938e7362b5 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -2,6 +2,17 @@ from __future__ import annotations +from manim.typing import ( + BezierPoints, + ColVector, + MatrixMN, + Point3D, + Point3D_Array, + PointDType, + QuadraticBezierPoints, + QuadraticBezierPoints_Array, +) + __all__ = [ "bezier", "partial_bezier_points", @@ -20,11 +31,11 @@ ] -import typing from functools import reduce -from typing import Iterable +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 @@ -32,8 +43,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 +54,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): - points = np.asarray(points, dtype=np.float64) +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 @@ -118,10 +142,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: np.ndarray, 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 @@ -143,10 +167,10 @@ def split_quadratic_bezier(points: np.ndarray, 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 @@ -178,8 +202,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,7 +258,21 @@ def quadratic_bezier_remap( # Linear interpolation variants -def interpolate(start: np.ndarray, end: np.ndarray, alpha: float) -> np.ndarray: + + +@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 @@ -244,52 +282,192 @@ def integer_interpolate( 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. + + Example + ------- + + .. code-block:: pycon + + >>> integer, residue = integer_interpolate(start=0, end=10, alpha=0.46) + >>> np.allclose((integer, residue), (4, 0.6)) + True """ 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: float, end: float) -> float: + ... + + +@overload +def mid(start: Point3D, end: Point3D) -> Point3D: + ... + + +def mid(start: float | Point3D, end: 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: float) -> float: + ... + + +@overload +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 +) -> 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) +@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: 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), + old_alpha, # 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 +479,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 +492,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 +512,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 +525,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 +540,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 +552,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 +570,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 +585,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): @@ -419,7 +597,9 @@ def closed_curve_solve_func(b: np.ndarray) -> np.ndarray: 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. @@ -438,7 +618,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 +668,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,15 +688,15 @@ def get_quadratic_approximation_of_cubic(a0, h0, h1, a1): return result -def is_closed(points: tuple[np.ndarray, np.ndarray]) -> bool: - return np.allclose(points[0], points[-1]) +def is_closed(points: Point3D_Array) -> bool: + return np.allclose(points[0], points[-1]) # type: ignore 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, -) -> np.ndarray: + point: Point3D, + control_points: BezierPoints, + 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. @@ -583,21 +765,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 = 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 2994504ce5..cdd75ad9ae 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -3,43 +3,55 @@ This module contains the implementation of :class:`.ManimColor`, the data structure internally used to represent colors. -""" +The preferred way of using these colors is by importing their constants from manim: -from __future__ import annotations +.. code-block:: pycon -# logger = _config.logger -import colorsys -import random -from typing import Any, Sequence, Union + >>> from manim import RED, GREEN, BLUE + >>> print(RED) + #FC6255 -import numpy as np -from typing_extensions import Literal, TypeAlias +Note this way uses the name of the colors in UPPERCASE. -from ...utils.space_ops import normalize +.. note:: -ManimColorDType: TypeAlias = np.float64 -ManimFloat: TypeAlias = np.float64 -ManimInt: TypeAlias = np.int64 + The colors of type "C" have an alias equal to the colorname without a letter, + e.g. GREEN = GREEN_C +""" -RGB_Array_Float: TypeAlias = "np.ndarray[Literal[3], np.dtype[ManimFloat]]" -RGB_Tuple_Float: TypeAlias = "tuple[float, float, float]" +from __future__ import annotations -RGB_Array_Int: TypeAlias = "np.ndarray[Literal[3], np.dtype[ManimInt]]" -RGB_Tuple_Int: TypeAlias = "tuple[int, int, int]" +import colorsys -RGBA_Array_Float: TypeAlias = "np.ndarray[Literal[4], np.dtype[ManimFloat]]" -RGBA_Tuple_Float: TypeAlias = "tuple[float, float, float, float]" +# logger = _config.logger +import random +import re +from typing import Any, Sequence, TypeVar, Union, overload -RGBA_Array_Int: TypeAlias = "np.ndarray[Literal[4], np.dtype[ManimInt]]" -RGBA_Tuple_Int: TypeAlias = "tuple[int, int, int, int]" +import numpy as np +import numpy.typing as npt +from typing_extensions import Self, TypeAlias + +from manim.typing import ( + HSV_Array_Float, + HSV_Tuple_Float, + 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, +) -HSV_Array_Float: TypeAlias = RGB_Array_Float -HSV_Tuple_Float: TypeAlias = RGB_Tuple_Float +from ...utils.space_ops import normalize -ManimColorInternal: TypeAlias = "np.ndarray[Literal[4], np.dtype[ManimColorDType]]" +# import manim._config as _config -import re re_hex = re.compile("((?<=#)|(?<=0x))[A-F0-9]{6,8}", re.IGNORECASE) @@ -83,7 +95,7 @@ class ManimColor: def __init__( self, - value: ParsableManimColor, + value: ParsableManimColor | None, alpha: float = 1.0, ) -> None: if value is None: @@ -514,7 +526,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:: @@ -539,7 +551,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:: @@ -559,7 +571,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 @@ -579,7 +591,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 @@ -597,12 +609,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. @@ -688,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` @@ -722,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 @@ -738,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 @@ -756,7 +789,9 @@ 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 @@ -772,7 +807,9 @@ 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 @@ -788,7 +825,9 @@ 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 @@ -820,7 +859,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 @@ -837,15 +876,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 @@ -880,7 +919,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 @@ -894,8 +933,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 @@ -915,7 +954,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 @@ -923,7 +962,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) @@ -939,8 +978,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) @@ -962,10 +1000,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/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/manim/utils/space_ops.py b/manim/utils/space_ops.py index f24360cc75..16af964e74 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 Point3D_Array, Vector + __all__ = [ "quaternion_mult", "quaternion_from_angle_axis", @@ -37,7 +39,6 @@ import itertools as it -import math from typing import Sequence import numpy as np @@ -108,7 +109,7 @@ def quaternion_from_angle_axis( """ 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)] def angle_axis_from_quaternion(quaternion: Sequence[float]) -> Sequence[float]: @@ -256,7 +257,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], @@ -540,10 +541,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]: """ @@ -621,7 +622,38 @@ def shoelace_direction(x_y: np.ndarray) -> str: return "CW" if area > 0 else "CCW" -def cross2d(a, b): +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 + -------- + .. 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] else: diff --git a/.mypy.ini b/mypy.ini similarity index 51% rename from .mypy.ini rename to mypy.ini index 48cad442f4..a4707261b7 100644 --- a/.mypy.ini +++ b/mypy.ini @@ -1,34 +1,90 @@ [mypy] -show_error_codes = True +strict = False +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 +# 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 -# ignore most files; should be checked once proper types have been implemented -[mypy-manim.__main__] +[mypy-manim._config.*] +ignore_errors = True + +[mypy-manim.animation.*] ignore_errors = True [mypy-manim.camera.*] ignore_errors = True -[mypy-manim.scene.*] +[mypy-manim.cli.*] ignore_errors = True [mypy-manim.cli.cfg.*] ignore_errors = True +[mypy-manim.gui.*] +ignore_errors = True + [mypy-manim.mobject.*] ignore_errors = True -[mypy-manim._config.*] +[mypy-manim.plugins.*] ignore_errors = True -[mypy-manim.utils.*] +[mypy-manim.renderer.*] ignore_errors = True -[mypy-manim.utils.color] -ignore_errors = False +[mypy-manim.scene.*] +ignore_errors = True -[mypy-manim.animation.*] +[mypy-manim.utils.*] +ignore_errors = True + +[mypy-manim.__main__] ignore_errors = True + # ---------------- We can't properly type this ------------------------ [mypy-manim.grpc.*] @@ -40,10 +96,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 @@ -66,9 +118,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/poetry.lock b/poetry.lock index 611d37fa59..0ded9d0217 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 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 = [ @@ -15,6 +16,7 @@ files = [ name = "aiosqlite" version = "0.19.0" description = "asyncio bridge to the standard sqlite3 module" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -30,6 +32,7 @@ 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 = [ @@ -41,6 +44,7 @@ files = [ name = "anyio" version = "4.0.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -62,6 +66,7 @@ trio = ["trio (>=0.22)"] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" +category = "main" optional = true python-versions = "*" files = [ @@ -73,6 +78,7 @@ files = [ name = "argon2-cffi" version = "23.1.0" description = "Argon2 for Python" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -93,6 +99,7 @@ typing = ["mypy"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -130,6 +137,7 @@ tests = ["pytest"] name = "arrow" version = "1.3.0" description = "Better dates & times for Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -143,12 +151,13 @@ types-python-dateutil = ">=2.8.10" [package.extras] doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] -test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] +test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] [[package]] name = "astor" version = "0.8.1" description = "Read/rewrite/write Python ASTs" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ @@ -160,6 +169,7 @@ files = [ name = "astroid" version = "2.15.8" description = "An abstract syntax tree for Python with inference support." +category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -179,6 +189,7 @@ wrapt = [ name = "asttokens" version = "2.4.1" description = "Annotate AST trees with source code positions" +category = "main" optional = true python-versions = "*" files = [ @@ -197,6 +208,7 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -215,6 +227,7 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.13.1" description = "Internationalization utilities" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -232,6 +245,7 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" +category = "main" optional = true python-versions = "*" files = [ @@ -243,6 +257,7 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" +category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -261,6 +276,7 @@ lxml = ["lxml"] name = "black" version = "23.10.1" description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -303,6 +319,7 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -321,6 +338,7 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -332,6 +350,7 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -396,6 +415,7 @@ pycparser = "*" name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -407,6 +427,7 @@ files = [ name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -506,6 +527,7 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -520,6 +542,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-default-group" version = "1.2.4" description = "click_default_group" +category = "main" optional = false python-versions = ">=2.7" files = [ @@ -537,6 +560,7 @@ test = ["pytest"] name = "cloup" version = "2.1.2" description = "Adds features to Click: option groups, constraints, subcommand sections and help themes." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -552,6 +576,7 @@ 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 = [ @@ -563,6 +588,7 @@ 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 = [ @@ -582,6 +608,7 @@ 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 = [ @@ -596,6 +623,7 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] name = "contourpy" version = "1.1.1" description = "Python library for calculating contours of 2D quadrilateral grids" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -667,6 +695,7 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "coverage" version = "7.3.2" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -734,6 +763,7 @@ toml = ["tomli"] name = "cryptography" version = "41.0.5" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -779,6 +809,7 @@ test-randomorder = ["pytest-randomly"] name = "cycler" version = "0.12.1" description = "Composable style cycles" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -794,6 +825,7 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] name = "cython" version = "3.0.5" 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 = [ @@ -861,6 +893,7 @@ files = [ 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 = [ @@ -875,6 +908,7 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", name = "dearpygui" version = "1.10.1" description = "DearPyGui: A simple Python GUI Toolkit" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -902,6 +936,7 @@ files = [ name = "debugpy" version = "1.8.0" description = "An implementation of the Debug Adapter Protocol for Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -929,6 +964,7 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -940,6 +976,7 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -951,6 +988,7 @@ files = [ name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -968,6 +1006,7 @@ 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 = [ @@ -982,6 +1021,7 @@ graph = ["objgraph (>=1.7.2)"] name = "distlib" version = "0.3.7" description = "Distribution utilities" +category = "dev" optional = false python-versions = "*" files = [ @@ -993,6 +1033,7 @@ 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 = [ @@ -1000,10 +1041,23 @@ 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.3" description = "Backport of PEP 654 (exception groups)" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1018,6 +1072,7 @@ test = ["pytest (>=6)"] name = "execnet" version = "2.0.2" description = "execnet: rapid multi-Python deployment" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1032,6 +1087,7 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] name = "executing" version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" +category = "main" optional = true python-versions = ">=3.5" files = [ @@ -1046,6 +1102,7 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth name = "fastjsonschema" version = "2.18.1" description = "Fastest Python implementation of JSON schema" +category = "main" optional = true python-versions = "*" files = [ @@ -1060,6 +1117,7 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "filelock" version = "3.13.1" description = "A platform independent file lock." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1076,6 +1134,7 @@ typing = ["typing-extensions (>=4.8)"] 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 = [ @@ -1092,6 +1151,7 @@ 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 = [ @@ -1110,6 +1170,7 @@ 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 = [ @@ -1127,6 +1188,7 @@ 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 = [ @@ -1141,6 +1203,7 @@ flake8 = ">=3.0,<3.2.0 || >3.2.0" name = "flake8-docstrings" version = "1.7.0" description = "Extension for flake8 which uses pydocstyle to check docstrings" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1156,6 +1219,7 @@ pydocstyle = ">=2.1" name = "flake8-plugin-utils" version = "1.3.3" description = "The package provides base classes and utils for flake8 plugin writing" +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1167,6 +1231,7 @@ files = [ name = "flake8-pytest-style" version = "1.7.2" description = "A flake8 plugin checking common style issues or inconsistencies with pytest-based tests." +category = "dev" optional = false python-versions = ">=3.7.2,<4.0.0" files = [ @@ -1181,6 +1246,7 @@ 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 = [ @@ -1197,6 +1263,7 @@ 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 = [ @@ -1212,6 +1279,7 @@ flake8 = ">=3.7" name = "fonttools" version = "4.44.0" description = "Tools to manipulate font files" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1277,6 +1345,7 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +category = "main" optional = true python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -1288,6 +1357,7 @@ files = [ name = "furo" version = "2022.9.29" description = "A clean customisable Sphinx documentation theme." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1305,6 +1375,7 @@ sphinx-basic-ng = "*" name = "gitdb" version = "4.0.11" description = "Git Object Database" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1319,6 +1390,7 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.40" description = "GitPython is a Python library used to interact with Git repositories" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1336,6 +1408,7 @@ test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre name = "glcontext" version = "2.5.0" description = "Portable OpenGL Context" +category = "main" optional = false python-versions = "*" files = [ @@ -1411,6 +1484,7 @@ files = [ name = "identify" version = "2.5.31" description = "File identification library for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1425,6 +1499,7 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1436,6 +1511,7 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1447,6 +1523,7 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1466,6 +1543,7 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "importlib-resources" version = "6.1.0" description = "Read resources from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1484,6 +1562,7 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1495,6 +1574,7 @@ files = [ name = "ipykernel" version = "6.26.0" description = "IPython Kernel for Jupyter" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1508,7 +1588,7 @@ comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" @@ -1528,6 +1608,7 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" name = "ipython" version = "8.12.3" description = "IPython: Productive Interactive Computing" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1567,6 +1648,7 @@ 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 = [ @@ -1578,6 +1660,7 @@ files = [ name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1592,6 +1675,7 @@ 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 = [ @@ -1609,6 +1693,7 @@ 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 = [ @@ -1623,6 +1708,7 @@ numpy = "*" name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -1642,6 +1728,7 @@ testing = ["Django", "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 = [ @@ -1659,6 +1746,7 @@ 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 = [ @@ -1673,6 +1761,7 @@ 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 = [ @@ -1684,6 +1773,7 @@ files = [ name = "jsonschema" version = "4.19.2" description = "An implementation of JSON Schema validation for Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1715,6 +1805,7 @@ 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 = [ @@ -1728,31 +1819,34 @@ referencing = ">=0.28.0" [[package]] name = "jupyter-client" -version = "8.5.0" +version = "7.4.9" description = "Jupyter protocol implementation and client libraries" +category = "main" optional = true -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "jupyter_client-8.5.0-py3-none-any.whl", hash = "sha256:c3877aac7257ec68d79b5c622ce986bd2a992ca42f6ddc9b4dd1da50e89f7028"}, - {file = "jupyter_client-8.5.0.tar.gz", hash = "sha256:e8754066510ce456358df363f97eae64b50860f30dc1fe8c6771440db3be9a63"}, + {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, + {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, ] [package.dependencies] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +entrypoints = "*" +jupyter-core = ">=4.9.2" +nest-asyncio = ">=1.5.4" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" -traitlets = ">=5.3" +traitlets = "*" [package.extras] -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"] +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"] [[package]] name = "jupyter-core" version = "5.5.0" description = "Jupyter core package. A base package on which Jupyter projects rely." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1773,6 +1867,7 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyter-events" version = "0.8.0" description = "Jupyter Event System library" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1798,6 +1893,7 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p name = "jupyter-server" version = "2.9.1" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1810,7 +1906,7 @@ anyio = ">=3.1.0" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" jupyter-events = ">=0.6.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" @@ -1834,6 +1930,7 @@ 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 = [ @@ -1853,6 +1950,7 @@ 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 = [ @@ -1872,6 +1970,7 @@ 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 = [ @@ -1891,6 +1990,7 @@ 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 = [ @@ -1910,6 +2010,7 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we name = "jupyterlab" version = "3.6.6" description = "JupyterLab computational environment" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1938,6 +2039,7 @@ 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 = [ @@ -1949,6 +2051,7 @@ files = [ name = "jupyterlab-server" version = "2.25.0" description = "A set of server components for JupyterLab and JupyterLab like applications." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1975,6 +2078,7 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v name = "kiwisolver" version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2088,6 +2192,7 @@ files = [ 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 = [ @@ -2133,6 +2238,7 @@ files = [ name = "manimpango" version = "0.5.0" description = "Bindings for Pango for using with Manim." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2158,6 +2264,7 @@ files = [ name = "mapbox-earcut" version = "1.0.1" description = "Python bindings for the mapbox earcut C++ polygon triangulation library." +category = "main" optional = false python-versions = "*" files = [ @@ -2232,6 +2339,7 @@ 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 = [ @@ -2256,6 +2364,7 @@ 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 = [ @@ -2279,16 +2388,6 @@ 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"}, @@ -2325,6 +2424,7 @@ files = [ name = "matplotlib" version = "3.7.3" description = "Python plotting package" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2394,6 +2494,7 @@ setuptools_scm = ">=7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" +category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2408,6 +2509,7 @@ traitlets = "*" name = "mccabe" version = "0.6.1" description = "McCabe checker, plugin for flake8" +category = "dev" optional = false python-versions = "*" files = [ @@ -2419,6 +2521,7 @@ 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 = [ @@ -2438,6 +2541,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2449,6 +2553,7 @@ files = [ name = "mistune" version = "3.0.2" description = "A sane and fast Markdown parser with useful plugins and renderers" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2460,6 +2565,7 @@ files = [ name = "moderngl" version = "5.8.2" description = "ModernGL: High performance rendering for Python 3" +category = "main" optional = false python-versions = "*" files = [ @@ -2522,6 +2628,7 @@ 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 = [ @@ -2550,6 +2657,7 @@ 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 = [ @@ -2557,48 +2665,11 @@ files = [ {file = "multipledispatch-1.0.0.tar.gz", hash = "sha256:5c839915465c68206c3e9c473357908216c28383b425361e5d144594bf85a7e0"}, ] -[[package]] -name = "mypy" -version = "0.931" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.6" -files = [ - {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"}, -] - -[package.dependencies] -mypy-extensions = ">=0.4.3" -tomli = ">=1.1.0" -typing-extensions = ">=3.10" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -python2 = ["typed-ast (>=1.4.0,<2)"] - [[package]] 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 = [ @@ -2610,6 +2681,7 @@ 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 = [ @@ -2636,6 +2708,7 @@ 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 = [ @@ -2671,6 +2744,7 @@ 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 = [ @@ -2680,7 +2754,7 @@ files = [ [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" nbformat = ">=5.1" traitlets = ">=5.4" @@ -2693,6 +2767,7 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= name = "nbconvert" version = "7.10.0" description = "Converting Jupyter Notebooks" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2731,6 +2806,7 @@ webpdf = ["playwright"] name = "nbformat" version = "5.9.2" description = "The Jupyter Notebook format" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2752,6 +2828,7 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.5.8" description = "Patch asyncio to allow nested event loops" +category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2763,6 +2840,7 @@ files = [ name = "networkx" version = "3.1" description = "Python package for creating and manipulating graphs and networks" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2781,6 +2859,7 @@ 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 = [ @@ -2793,13 +2872,14 @@ setuptools = "*" [[package]] name = "notebook" -version = "6.5.4" +version = "6.5.6" description = "A web-based notebook environment for interactive computing" +category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, - {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, + {file = "notebook-6.5.6-py3-none-any.whl", hash = "sha256:c1e2eb2e3b6079a0552a04974883a48d04c3c05792170d64a4b23d707d453181"}, + {file = "notebook-6.5.6.tar.gz", hash = "sha256:b4625a4b7a597839dd3156b140d5ba2c7123761f98245a3290f67a8b8ee048d9"}, ] [package.dependencies] @@ -2807,14 +2887,14 @@ argon2-cffi = "*" ipykernel = "*" ipython-genutils = "*" jinja2 = "*" -jupyter-client = ">=5.3.4" +jupyter-client = ">=5.3.4,<8" jupyter-core = ">=4.6.1" nbclassic = ">=0.4.7" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" prometheus-client = "*" -pyzmq = ">=17" +pyzmq = ">=17,<25" Send2Trash = ">=1.8.0" terminado = ">=0.8.3" tornado = ">=6.1" @@ -2829,6 +2909,7 @@ 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 = [ @@ -2846,6 +2927,7 @@ 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 = [ @@ -2883,6 +2965,7 @@ 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 = [ @@ -2894,6 +2977,7 @@ files = [ name = "packaging" version = "23.2" description = "Core utilities for Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2905,6 +2989,7 @@ 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 = [ @@ -2916,6 +3001,7 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2931,6 +3017,7 @@ 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 = [ @@ -2942,6 +3029,7 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." +category = "main" optional = true python-versions = "*" files = [ @@ -2956,6 +3044,7 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" +category = "main" optional = true python-versions = "*" files = [ @@ -2967,6 +3056,7 @@ files = [ name = "pillow" version = "9.5.0" description = "Python Imaging Library (Fork)" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3046,6 +3136,7 @@ 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 = [ @@ -3057,6 +3148,7 @@ files = [ name = "platformdirs" version = "3.11.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 = [ @@ -3072,6 +3164,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "pluggy" version = "1.3.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3087,6 +3180,7 @@ 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 = [ @@ -3105,6 +3199,7 @@ virtualenv = ">=20.10.0" name = "prometheus-client" version = "0.18.0" description = "Python client for the Prometheus monitoring system." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3119,6 +3214,7 @@ 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 = [ @@ -3133,6 +3229,7 @@ wcwidth = "*" name = "psutil" version = "5.9.6" description = "Cross-platform lib for process and system monitoring in Python." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -3161,6 +3258,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "psutil-wheels" version = "5.8.0" description = "Cross-platform lib for process and system monitoring in Python." +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3186,6 +3284,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "unittest2", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" +category = "main" optional = true python-versions = "*" files = [ @@ -3197,6 +3296,7 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" +category = "main" optional = true python-versions = "*" files = [ @@ -3211,6 +3311,7 @@ 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 = [ @@ -3222,6 +3323,7 @@ files = [ name = "pycairo" version = "1.25.1" description = "Python interface for cairo" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3246,6 +3348,7 @@ 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 = [ @@ -3257,6 +3360,7 @@ 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 = [ @@ -3268,6 +3372,7 @@ files = [ name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3285,6 +3390,7 @@ toml = ["tomli (>=1.2.3)"] name = "pydub" version = "0.25.1" description = "Manipulate audio with an simple and easy high level interface" +category = "main" optional = false python-versions = "*" files = [ @@ -3296,6 +3402,7 @@ 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 = [ @@ -3307,6 +3414,7 @@ files = [ name = "pygithub" version = "1.59.1" description = "Use the full Github API v3" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3324,6 +3432,7 @@ requests = ">=2.14.0" name = "pyglet" version = "2.0.9" description = "Cross-platform windowing and multimedia library" +category = "main" optional = false python-versions = "*" files = [ @@ -3335,6 +3444,7 @@ 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 = [ @@ -3349,6 +3459,7 @@ 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 = [ @@ -3369,6 +3480,7 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] name = "pylint" version = "2.17.7" description = "python code static checker" +category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -3398,6 +3510,7 @@ 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 = [ @@ -3424,6 +3537,7 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyobjc-core" version = "10.0" description = "Python<->ObjC Interoperability Module" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3440,6 +3554,7 @@ files = [ name = "pyobjc-framework-cocoa" version = "10.0" description = "Wrappers for the Cocoa frameworks on macOS" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3459,6 +3574,7 @@ pyobjc-core = ">=10.0" name = "pyparsing" 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 = [ @@ -3473,6 +3589,7 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyrr" version = "0.10.3" description = "3D mathematical functions using NumPy" +category = "main" optional = false python-versions = "*" files = [ @@ -3488,6 +3605,7 @@ numpy = "*" name = "pytest" version = "7.4.3" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3510,6 +3628,7 @@ 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 = [ @@ -3528,6 +3647,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-forked" version = "1.6.0" description = "run tests in isolated forked subprocesses" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3543,6 +3663,7 @@ pytest = ">=3.10" name = "pytest-xdist" version = "2.5.0" description = "pytest xdist plugin for distributed testing and loop-on-failing modes" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3564,6 +3685,7 @@ 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 = [ @@ -3578,6 +3700,7 @@ six = ">=1.5" name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3589,6 +3712,7 @@ files = [ name = "pytz" version = "2023.3.post1" description = "World timezone definitions, modern and historical" +category = "main" optional = false python-versions = "*" files = [ @@ -3600,6 +3724,7 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" +category = "main" optional = true python-versions = "*" files = [ @@ -3623,6 +3748,7 @@ files = [ name = "pywinpty" version = "2.0.12" description = "Pseudo terminal support for Windows from Python." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3638,6 +3764,7 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3695,113 +3822,97 @@ files = [ [[package]] name = "pyzmq" -version = "25.1.1" +version = "24.0.1" description = "Python bindings for 0MQ" +category = "main" optional = true python-versions = ">=3.6" files = [ - {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"}, + {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\""} +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 = [ @@ -3818,6 +3929,7 @@ sphinx = ">=1.3.1" name = "referencing" version = "0.30.2" description = "JSON Referencing + Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3833,6 +3945,7 @@ rpds-py = ">=0.7.0" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3854,6 +3967,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "restructuredtext-lint" version = "1.4.0" description = "reStructuredText linter" +category = "dev" optional = false python-versions = "*" files = [ @@ -3867,6 +3981,7 @@ docutils = ">=0.11,<1.0" name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3881,6 +3996,7 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3892,6 +4008,7 @@ files = [ name = "rich" version = "13.6.0" 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 = [ @@ -3911,6 +4028,7 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "rpds-py" version = "0.10.6" description = "Python bindings to Rust's persistent data structures (rpds)" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4019,6 +4137,7 @@ files = [ 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 = [ @@ -4057,6 +4176,7 @@ 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 = [ @@ -4072,6 +4192,7 @@ 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 = [ @@ -4088,6 +4209,7 @@ win32 = ["pywin32"] name = "setuptools" version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4104,6 +4226,7 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar name = "setuptools-scm" version = "8.0.4" description = "the blessed package to manage your versions by scm tags" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4126,6 +4249,7 @@ test = ["build", "pytest", "rich", "wheel"] 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 = [ @@ -4137,6 +4261,7 @@ 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 = [ @@ -4192,6 +4317,7 @@ testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] name = "smmap" version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4203,6 +4329,7 @@ files = [ 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 = [ @@ -4214,6 +4341,7 @@ 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 = [ @@ -4225,6 +4353,7 @@ files = [ name = "soupsieve" version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4236,6 +4365,7 @@ files = [ name = "sphinx" version = "4.5.0" description = "Python documentation generator" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4271,6 +4401,7 @@ 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 = [ @@ -4288,6 +4419,7 @@ 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 = [ @@ -4306,6 +4438,7 @@ 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 = [ @@ -4321,6 +4454,7 @@ 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 = [ @@ -4336,6 +4470,7 @@ 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 = [ @@ -4351,6 +4486,7 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -4365,6 +4501,7 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-programoutput" version = "0.17" description = "Sphinx extension to include program output" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" files = [ @@ -4379,6 +4516,7 @@ 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 = [ @@ -4394,6 +4532,7 @@ 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 = [ @@ -4409,6 +4548,7 @@ 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 = [ @@ -4424,6 +4564,7 @@ sphinx = ">=4.0" name = "srt" version = "3.5.3" description = "A tiny library for parsing, modifying, and composing SRT files." +category = "main" optional = false python-versions = ">=2.7" files = [ @@ -4434,6 +4575,7 @@ files = [ name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" +category = "main" optional = true python-versions = "*" files = [ @@ -4453,6 +4595,7 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "svgelements" version = "1.9.6" description = "Svg Elements Parsing" +category = "main" optional = false python-versions = "*" files = [ @@ -4464,6 +4607,7 @@ files = [ 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 = [ @@ -4484,6 +4628,7 @@ 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 = [ @@ -4502,6 +4647,7 @@ test = ["flake8", "isort", "pytest"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4513,6 +4659,7 @@ files = [ name = "tomlkit" version = "0.12.2" description = "Style preserving TOML library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4524,6 +4671,7 @@ files = [ name = "tornado" 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 = [ @@ -4544,6 +4692,7 @@ files = [ name = "tqdm" version = "4.66.1" description = "Fast, Extensible Progress Meter" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4564,6 +4713,7 @@ telegram = ["requests"] name = "traitlets" version = "5.13.0" description = "Traitlets Python configuration system" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4579,6 +4729,7 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "pre-commit", "pytest (>=7.0, name = "types-decorator" version = "0.1.7" description = "Typing stubs for decorator" +category = "dev" optional = false python-versions = "*" files = [ @@ -4590,6 +4741,7 @@ files = [ name = "types-docutils" version = "0.20.0.3" description = "Typing stubs for docutils" +category = "dev" optional = false python-versions = "*" files = [ @@ -4599,19 +4751,21 @@ files = [ [[package]] name = "types-pillow" -version = "8.3.11" +version = "9.5.0.6" description = "Typing stubs for Pillow" +category = "dev" optional = false python-versions = "*" files = [ - {file = "types-Pillow-8.3.11.tar.gz", hash = "sha256:aa96a739184f48f69e6f30218400623fc5a95f5fec199c447663a32538440405"}, - {file = "types_Pillow-8.3.11-py3-none-any.whl", hash = "sha256:998189334e616b1dd42c9634669efbf726184039e96e9a23ec95246e0ecff3fc"}, + {file = "types-Pillow-9.5.0.6.tar.gz", hash = "sha256:6a0cad40686e5c35fe7ada70f52bd3970395d31ece33486609e5420e820a9e4e"}, + {file = "types_Pillow-9.5.0.6-py3-none-any.whl", hash = "sha256:1d238abaa9d529b04941d805b7f4d3f7df30702bb14521ec507617f117406fb4"}, ] [[package]] name = "types-protobuf" version = "3.20.4.6" description = "Typing stubs for protobuf" +category = "dev" optional = false python-versions = "*" files = [ @@ -4623,6 +4777,7 @@ files = [ name = "types-pygments" version = "2.16.0.0" description = "Typing stubs for Pygments" +category = "dev" optional = false python-versions = "*" files = [ @@ -4638,6 +4793,7 @@ types-setuptools = "*" name = "types-python-dateutil" version = "2.8.19.14" description = "Typing stubs for python-dateutil" +category = "main" optional = true python-versions = "*" files = [ @@ -4649,6 +4805,7 @@ files = [ name = "types-requests" version = "2.31.0.10" description = "Typing stubs for requests" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4663,6 +4820,7 @@ urllib3 = ">=2" name = "types-setuptools" version = "57.4.18" description = "Typing stubs for setuptools" +category = "dev" optional = false python-versions = "*" files = [ @@ -4674,6 +4832,7 @@ files = [ name = "typing-extensions" version = "4.8.0" description = "Backported and Experimental Type Hints for Python 3.8+" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4685,6 +4844,7 @@ files = [ name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4699,6 +4859,7 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "urllib3" version = "2.0.7" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4716,6 +4877,7 @@ zstd = ["zstandard (>=0.18.0)"] name = "virtualenv" version = "20.24.6" description = "Virtual Python Environment builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4736,6 +4898,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "watchdog" version = "3.0.0" description = "Filesystem events monitoring" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4775,6 +4938,7 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.9" description = "Measures the displayed width of unicode strings in a terminal" +category = "main" optional = true python-versions = "*" files = [ @@ -4786,6 +4950,7 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4801,6 +4966,7 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" +category = "main" optional = true python-versions = "*" files = [ @@ -4812,6 +4978,7 @@ files = [ name = "websocket-client" version = "1.6.4" description = "WebSocket client for Python with low level API options" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4828,6 +4995,7 @@ 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 = [ @@ -4912,6 +5080,7 @@ files = [ name = "y-py" version = "0.6.2" description = "Python bindings for the Y-CRDT built from yrs (Rust)" +category = "main" optional = true python-versions = "*" files = [ @@ -4995,6 +5164,7 @@ files = [ name = "ypy-websocket" version = "0.8.4" description = "WebSocket connector for Ypy" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5014,6 +5184,7 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] name = "zipp" version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5032,4 +5203,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "fcf22a432b1736dc21eeefb88afc680020c64357eb7f8b1ba4b4fa7d030debaa" +content-hash = "aeec95f223cfa390c61f8ffa470c01d9417c286022443c3560e5e30b467b7060" diff --git a/pyproject.toml b/pyproject.toml index 7b9f1a824f..57eb56b605 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,12 +78,11 @@ pygithub = "^1" flake8 = "^3.9.0" isort = "^5.8.0" pytest-xdist = "^2.2" -mypy = "^0.931" 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" From 652f1b3d6a031ec6151755e576ffc2315831dfc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Bla=C5=BEej?= <6208643+vaclavblazej@users.noreply.github.com> Date: Sat, 4 Nov 2023 13:36:22 +0000 Subject: [PATCH 291/555] fix: issue with ImageMobject bounding box (#3340) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: fix an issue with ImageMobject bounding box A missing point resulted in smaller bounding box causing issues it to be smaller when the object is rotated. Added the missing fourth point to ImageMobject points and altered call from camera. Filled in docstring that used to propagate from superclass, saying that ImageMobject has no points. * add a test to check that rotating an image to and from doesn't change it * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: Václav Blažej Co-authored-by: Naveen M K Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/camera/camera.py | 2 +- manim/mobject/types/image_mobject.py | 3 ++- tests/test_graphical_units/test_img_and_svg.py | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/manim/camera/camera.py b/manim/camera/camera.py index fe7f58ef23..902793cdb3 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -965,7 +965,7 @@ def display_image_mobject( The Pixel array to put the imagemobject in. """ corner_coords = self.points_to_pixel_coords(image_mobject, image_mobject.points) - ul_coords, ur_coords, dl_coords = corner_coords + ul_coords, ur_coords, dl_coords, _ = corner_coords right_vect = ur_coords - ul_coords down_vect = dl_coords - ul_coords center_coords = ul_coords + (right_vect + down_vect) / 2 diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index 5cefb1ac93..cb0248d3a5 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -86,12 +86,13 @@ def set_resampling_algorithm(self, resampling_algorithm: int): return self def reset_points(self): - # Corresponding corners of image are fixed to these 3 points + """Sets :attr:`points` to be the four image corners.""" self.points = np.array( [ UP + LEFT, UP + RIGHT, DOWN + LEFT, + DOWN + RIGHT, ], ) self.center() diff --git a/tests/test_graphical_units/test_img_and_svg.py b/tests/test_graphical_units/test_img_and_svg.py index b234431abb..b2ae820cb6 100644 --- a/tests/test_graphical_units/test_img_and_svg.py +++ b/tests/test_graphical_units/test_img_and_svg.py @@ -284,3 +284,20 @@ def test_ImageInterpolation(scene): scene.add(img1, img2, img3, img4, img5) [s.shift(4 * LEFT + pos * 2 * RIGHT) for pos, s in enumerate(scene.mobjects)] scene.wait() + + +def test_ImageMobject_points_length(): + file_path = get_svg_resource("tree_img_640x351.png") + im1 = ImageMobject(file_path) + assert len(im1.points) == 4 + + +def test_ImageMobject_rotation(): + # see https://github.com/ManimCommunity/manim/issues/3067 + # rotating an image to and from the same angle should not change the image + file_path = get_svg_resource("tree_img_640x351.png") + im1 = ImageMobject(file_path) + im2 = im1.copy() + im1.rotate(PI / 2) + im1.rotate(-PI / 2) + np.testing.assert_array_equal(im1.points, im2.points) From 8fe16659157b2f4dfe1458f112cc06f3de0c231b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Eertmans?= Date: Sat, 4 Nov 2023 14:36:51 +0100 Subject: [PATCH 292/555] chore(deps): add Python 3.12 support (#3395) * chore(deps): add Python 3.11 and 3.12 support chore(deps): update lock file chore(deps): remove colour fix(deps): force NumPy version fix(deps): relax constraints chore(deps): update lock file * fix(deps): make poetry happy * fix(ci): skia pathops on 3.12 * fix(test): doctest skip * disable python 3.8 pipeline * removed get_parameters, replaced by direct call to inspect * black --------- Co-authored-by: Benjamin Hackl --- .github/workflows/ci.yml | 2 +- manim/animation/speedmodifier.py | 6 +- manim/mobject/mobject.py | 17 +- manim/mobject/opengl/opengl_mobject.py | 4 +- manim/renderer/shader.py | 4 +- manim/utils/simple_functions.py | 18 -- poetry.lock | 349 +++++++++++++++++-------- pyproject.toml | 18 +- 8 files changed, 277 insertions(+), 141 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9f385d50c5..53e3b4d87a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-22.04, macos-latest, windows-latest] - python: ["3.8", "3.9", "3.10", "3.11"] + python: ["3.9", "3.10", "3.11", "3.12"] steps: - name: Checkout the repository diff --git a/manim/animation/speedmodifier.py b/manim/animation/speedmodifier.py index 8aa71646b2..93685f6426 100644 --- a/manim/animation/speedmodifier.py +++ b/manim/animation/speedmodifier.py @@ -2,13 +2,12 @@ from __future__ import annotations +import inspect import types from typing import Callable from numpy import piecewise -from manim.utils.simple_functions import get_parameters - from ..animation.animation import Animation, Wait, prepare_animation from ..animation.composition import AnimationGroup from ..mobject.mobject import Mobject, Updater, _AnimationBuilder @@ -260,8 +259,7 @@ def add_updater( :class:`.ChangeSpeed` :meth:`.Mobject.add_updater` """ - parameters = get_parameters(update_function) - if "dt" in parameters: + if "dt" in inspect.signature(update_function).parameters: mobject.add_updater( lambda mob, dt: update_function( mob, ChangeSpeed.dt if ChangeSpeed.is_changing_dt else dt diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 1afa091cca..6a1f18c4c1 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -6,6 +6,7 @@ import copy +import inspect import itertools as it import math import operator as op @@ -36,7 +37,6 @@ from ..utils.exceptions import MultiAnimationOverrideException from ..utils.iterables import list_update, remove_list_redundancies from ..utils.paths import straight_path -from ..utils.simple_functions import get_parameters from ..utils.space_ops import angle_between_vectors, normalize, rotation_matrix # TODO: Explain array_attrs @@ -847,8 +847,7 @@ def update(self, dt: float = 0, recursive: bool = True) -> Self: if self.updating_suspended: return self for updater in self.updaters: - parameters = get_parameters(updater) - if "dt" in parameters: + if "dt" in inspect.signature(updater).parameters: updater(self, dt) else: updater(self) @@ -873,7 +872,11 @@ def get_time_based_updaters(self) -> list[TimeBasedUpdater]: :meth:`has_time_based_updater` """ - return [updater for updater in self.updaters if "dt" in get_parameters(updater)] + return [ + updater + for updater in self.updaters + if "dt" in inspect.signature(updater).parameters + ] def has_time_based_updater(self) -> bool: """Test if ``self`` has a time based updater. @@ -889,7 +892,9 @@ def has_time_based_updater(self) -> bool: :meth:`get_time_based_updaters` """ - return any("dt" in get_parameters(updater) for updater in self.updaters) + return any( + "dt" in inspect.signature(updater).parameters for updater in self.updaters + ) def get_updaters(self) -> list[Updater]: """Return all updaters. @@ -982,7 +987,7 @@ def construct(self): else: self.updaters.insert(index, update_function) if call_updater: - parameters = get_parameters(update_function) + parameters = inspect.signature(update_function).parameters if "dt" in parameters: update_function(self, 0) else: diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 3425fdd9e8..a94c3ad391 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -1,6 +1,7 @@ from __future__ import annotations import copy +import inspect import itertools as it import random import sys @@ -37,7 +38,6 @@ uniq_chain, ) from manim.utils.paths import straight_path -from manim.utils.simple_functions import get_parameters from manim.utils.space_ops import ( angle_between_vectors, normalize, @@ -1383,7 +1383,7 @@ def get_family_updaters(self): return list(it.chain(*(sm.get_updaters() for sm in self.get_family()))) def add_updater(self, update_function, index=None, call_updater=False): - if "dt" in get_parameters(update_function): + if "dt" in inspect.signature(update_function).parameters: updater_list = self.time_based_updaters else: updater_list = self.non_time_updaters diff --git a/manim/renderer/shader.py b/manim/renderer/shader.py index 892ccb5892..85b9dad14a 100644 --- a/manim/renderer/shader.py +++ b/manim/renderer/shader.py @@ -1,5 +1,6 @@ from __future__ import annotations +import inspect import re import textwrap from pathlib import Path @@ -9,7 +10,6 @@ from .. import config from ..utils import opengl -from ..utils.simple_functions import get_parameters SHADER_FOLDER = Path(__file__).parent / "shaders" shader_program_cache: dict = {} @@ -199,7 +199,7 @@ def get_updaters(self): return self.time_based_updaters + self.non_time_updaters def add_updater(self, update_function, index=None, call_updater=True): - if "dt" in get_parameters(update_function): + if "dt" in inspect.signature(update_function).parameters: updater_list = self.time_based_updaters else: updater_list = self.non_time_updaters diff --git a/manim/utils/simple_functions.py b/manim/utils/simple_functions.py index 2a4a7afed6..72a0f8ddbd 100644 --- a/manim/utils/simple_functions.py +++ b/manim/utils/simple_functions.py @@ -6,7 +6,6 @@ "binary_search", "choose", "clip", - "get_parameters", "sigmoid", ] @@ -117,23 +116,6 @@ def clip(a, min_a, max_a): return a -def get_parameters(function: Callable) -> MappingProxyType[str, inspect.Parameter]: - """Return the parameters of ``function`` as an ordered mapping of parameters' - names to their corresponding ``Parameter`` objects. - - Examples - -------- - :: - - >>> get_parameters(get_parameters) - mappingproxy(OrderedDict([('function', )])) - - >>> tuple(get_parameters(choose)) - ('n', 'k') - """ - return inspect.signature(function).parameters - - def sigmoid(x: float) -> float: r"""Returns the output of the logistic function. diff --git a/poetry.lock b/poetry.lock index 0ded9d0217..03465d2035 100644 --- a/poetry.lock +++ b/poetry.lock @@ -237,6 +237,7 @@ files = [ [package.dependencies] pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} +setuptools = {version = "*", markers = "python_version >= \"3.12\""} [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] @@ -682,7 +683,10 @@ files = [ ] [package.dependencies] -numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""} +numpy = [ + {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""}, + {version = ">=1.26.0rc1,<2.0", markers = "python_version >= \"3.12\""}, +] [package.extras] bokeh = ["bokeh", "selenium"] @@ -2961,6 +2965,48 @@ files = [ {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, ] +[[package]] +name = "numpy" +version = "1.26.1" +description = "Fundamental package for array computing in Python" +category = "main" +optional = false +python-versions = "<3.13,>=3.9" +files = [ + {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, + {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, + {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, + {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, + {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, + {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, + {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, + {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, + {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, + {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, + {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, + {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, + {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, + {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, + {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, +] + [[package]] name = "overrides" version = "7.4.0" @@ -4026,111 +4072,111 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.10.6" +version = "0.12.0" description = "Python bindings to Rust's persistent data structures (rpds)" category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "rpds_py-0.10.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6"}, - {file = "rpds_py-0.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c"}, - {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b"}, - {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9"}, - {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063"}, - {file = "rpds_py-0.10.6-cp310-none-win32.whl", hash = "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad"}, - {file = "rpds_py-0.10.6-cp310-none-win_amd64.whl", hash = "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7"}, - {file = "rpds_py-0.10.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069"}, - {file = "rpds_py-0.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532"}, - {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c"}, - {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066"}, - {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281"}, - {file = "rpds_py-0.10.6-cp311-none-win32.whl", hash = "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116"}, - {file = "rpds_py-0.10.6-cp311-none-win_amd64.whl", hash = "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57"}, - {file = "rpds_py-0.10.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6"}, - {file = "rpds_py-0.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a"}, - {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6"}, - {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d"}, - {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586"}, - {file = "rpds_py-0.10.6-cp312-none-win32.whl", hash = "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02"}, - {file = "rpds_py-0.10.6-cp312-none-win_amd64.whl", hash = "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2"}, - {file = "rpds_py-0.10.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53"}, - {file = "rpds_py-0.10.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4"}, - {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977"}, - {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b"}, - {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801"}, - {file = "rpds_py-0.10.6-cp38-none-win32.whl", hash = "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1"}, - {file = "rpds_py-0.10.6-cp38-none-win_amd64.whl", hash = "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf"}, - {file = "rpds_py-0.10.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5"}, - {file = "rpds_py-0.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014"}, - {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7"}, - {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647"}, - {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3"}, - {file = "rpds_py-0.10.6-cp39-none-win32.whl", hash = "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d"}, - {file = "rpds_py-0.10.6-cp39-none-win_amd64.whl", hash = "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971"}, - {file = "rpds_py-0.10.6.tar.gz", hash = "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, + {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, + {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, + {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, + {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, + {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, + {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, + {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, + {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, + {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, + {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, + {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, ] [[package]] @@ -4172,6 +4218,49 @@ dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +[[package]] +name = "scipy" +version = "1.11.3" +description = "Fundamental algorithms for scientific computing in Python" +category = "main" +optional = false +python-versions = "<3.13,>=3.9" +files = [ + {file = "scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0"}, + {file = "scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3"}, + {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc"}, + {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1"}, + {file = "scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88"}, + {file = "scipy-1.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929"}, + {file = "scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165"}, + {file = "scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a"}, + {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3"}, + {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221"}, + {file = "scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d"}, + {file = "scipy-1.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820"}, + {file = "scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15"}, + {file = "scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7"}, + {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc"}, + {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6"}, + {file = "scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280"}, + {file = "scipy-1.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6"}, + {file = "scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83"}, + {file = "scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e"}, + {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917"}, + {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156"}, + {file = "scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0"}, + {file = "scipy-1.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2"}, + {file = "scipy-1.11.3.tar.gz", hash = "sha256:bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd"}, +] + +[package.dependencies] +numpy = ">=1.21.6,<1.28.0" + +[package.extras] +dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + [[package]] name = "screeninfo" version = "0.8.1" @@ -4209,7 +4298,7 @@ win32 = ["pywin32"] name = "setuptools" version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4313,6 +4402,58 @@ files = [ [package.extras] testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] +[[package]] +name = "skia-pathops" +version = "0.8.0.post1" +description = "Python access to operations on paths using the Skia library" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "skia-pathops-0.8.0.post1.zip", hash = "sha256:a056249de2f61fa55116b9ee55513c6a36b878aee00c91450e404d1606485cbb"}, + {file = "skia_pathops-0.8.0.post1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:952a03a19e687caa341ce6966eac03b167de8faea48574d3cf4bb758c2cefcfb"}, + {file = "skia_pathops-0.8.0.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:003efdbbc4400fffba00e0f9523b6b762269d7e257a6ad45cefbe4844fe04e4a"}, + {file = "skia_pathops-0.8.0.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77e8b60380a94bc277a50177f70392646e0cce83c5c8fa8ab5817d813eef0224"}, + {file = "skia_pathops-0.8.0.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d7b3361338f80bea1529698c2c66df1bdffc89339b90257d9a8e8e1cbda7f2c"}, + {file = "skia_pathops-0.8.0.post1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ccd03685b08e2ba7e65005911f0eac224eec3eabff18f9aeb8d757188dc5cbb"}, + {file = "skia_pathops-0.8.0.post1-cp310-cp310-win32.whl", hash = "sha256:e273b565544b801219bbea6b32c5b1f3f9c2ce4f43870700a859174aa1f6564b"}, + {file = "skia_pathops-0.8.0.post1-cp310-cp310-win_amd64.whl", hash = "sha256:35b3f990e9f0fc861e962b9bca959ab0de68c095959e0dccc21d7e5076141c12"}, + {file = "skia_pathops-0.8.0.post1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:934fafd7e8552b40cf7c6a02b8d3b40ead6dff2f2c0426a26e4b9a031b880a65"}, + {file = "skia_pathops-0.8.0.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:db4e3a9af2bbd76d2522909cf6d32c84a0a5c6e1f8d3eff18305a960b3645293"}, + {file = "skia_pathops-0.8.0.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8973b7dccc96a9273b529f1ccea70f6d05e5b4ff90d0fe7e424a4fcff2134bd6"}, + {file = "skia_pathops-0.8.0.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27861201a5eabcd50b1d4c94be9cd28749d9236cbbab797e5ca6a293b6c15178"}, + {file = "skia_pathops-0.8.0.post1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30cb3286ff91325f1ae452f9d1bc58b92e4a5c5beeca3bd17b269c6376a0dbfa"}, + {file = "skia_pathops-0.8.0.post1-cp311-cp311-win32.whl", hash = "sha256:960a387300550a4fed0a66d5c29d26a02d9df965caf9e5ccd1eeef4e225b06c6"}, + {file = "skia_pathops-0.8.0.post1-cp311-cp311-win_amd64.whl", hash = "sha256:8235e313199be4b250ed32799d3de5a4be7ed60ecd62f19d426518814e6853a7"}, + {file = "skia_pathops-0.8.0.post1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3dc8febcb792c2542f05e12a3cee409ae421cdf865878c19d7b525291fa93348"}, + {file = "skia_pathops-0.8.0.post1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25fd0e8a18bc021f5b0b9cab37d607ea5c61f503b9e860d223906954b0c53c43"}, + {file = "skia_pathops-0.8.0.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9005f5dc5b162cac0d782e9adb5ecb304ab7ae5c873d2ed2a9895e89bf660ee2"}, + {file = "skia_pathops-0.8.0.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7b6873b65b682f8cf94a3baf8fccf98219f689e09a08967075bda36da128d57"}, + {file = "skia_pathops-0.8.0.post1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a4f111f55811ab9f8cb4ee057823db95355c8a424a2c2272ccda56ec0c48ba4"}, + {file = "skia_pathops-0.8.0.post1-cp312-cp312-win32.whl", hash = "sha256:69ff7abe4ba02b0c7159ae04d8173b4186336f3809d512e660f5569f39e08572"}, + {file = "skia_pathops-0.8.0.post1-cp312-cp312-win_amd64.whl", hash = "sha256:bc8792c342795c8d90a71d7df641513372954562b3a851b21c501400dba60dcc"}, + {file = "skia_pathops-0.8.0.post1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a5e7dd0b372c72a2c4b15505c31c1cfa0476ae2b46c8d52932a3278653e0afc4"}, + {file = "skia_pathops-0.8.0.post1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08d73f6a6568e1ac486c927035166d9c3bcb6c60bcc10c081d626c05397d2c21"}, + {file = "skia_pathops-0.8.0.post1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ecece9b39ca2d4ed03bc49364f291f8e94bcd832cbd1e23d5539570d6f22daf"}, + {file = "skia_pathops-0.8.0.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2af80580d722032e650ffa535173e58c16ac7a222eb8886786c9b6f6b7e1df63"}, + {file = "skia_pathops-0.8.0.post1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:27746a5d18c908f54778654be5a09c2af52b5655977b04650089c962c1700c25"}, + {file = "skia_pathops-0.8.0.post1-cp38-cp38-win32.whl", hash = "sha256:dab68a6ca259e87a3787ebdb18ebb198711419894cd591d01d3599e036847823"}, + {file = "skia_pathops-0.8.0.post1-cp38-cp38-win_amd64.whl", hash = "sha256:4c97ae7c611b39641de0aaf7340441615327480eb90dea3ca03dc3ca6aa82b44"}, + {file = "skia_pathops-0.8.0.post1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:307a94ba2f72601273c187f7fa934b1747dbfeb348dca175c7b40873823711a1"}, + {file = "skia_pathops-0.8.0.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5d7acb97291c2107046027fb0671870b7ca0428f55fc550a13cf262d621b8f17"}, + {file = "skia_pathops-0.8.0.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:434037b8b5ab1824b79d09d2e19a80ad8d2561018d5fb1d167b320e0bb1be7ac"}, + {file = "skia_pathops-0.8.0.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a3f62afaef14e4a1f02aef3c8d194a04d7735a0e2c700bb4ce39b6c42e8c1ea"}, + {file = "skia_pathops-0.8.0.post1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:143da8261ea047d0752f406448216cf490e4642a9798e7adfadd0bed855c464a"}, + {file = "skia_pathops-0.8.0.post1-cp39-cp39-win32.whl", hash = "sha256:83091a316bc5d24ee02ba9f4ca5b690478d1b43a50285bd8afcf623a3f58e87e"}, + {file = "skia_pathops-0.8.0.post1-cp39-cp39-win_amd64.whl", hash = "sha256:01939106a9aa8e756dd4bf376f16fd9ce616cda16aed1ab34d13e67a498db0aa"}, + {file = "skia_pathops-0.8.0.post1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c5b66e5644a4f791e3b1fb1e78559130c042f15f744bc1867c18f9268aafab3"}, + {file = "skia_pathops-0.8.0.post1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d48fd852f3ac7e30f6221ff93e0cfb8593ea897027fd6b36987479eb406fb22"}, + {file = "skia_pathops-0.8.0.post1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed911ba99e2113574b6314d424696e6e302d427c65136ff8df14359bacb794c7"}, +] + +[package.extras] +testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] + [[package]] name = "smmap" version = "5.0.1" @@ -5202,5 +5343,5 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" -python-versions = ">=3.8,<3.12" -content-hash = "aeec95f223cfa390c61f8ffa470c01d9417c286022443c3560e5e30b467b7060" +python-versions = ">=3.8,<3.13" +content-hash = "f788f9df53cc5fb0e5a245af943b3ddd3215532b98a5c571ce2a5b75d8e67e23" diff --git a/pyproject.toml b/pyproject.toml index 57eb56b605..2b993070cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,7 @@ classifiers= [ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Natural Language :: English", ] exclude = ["scripts/","logo/","readme-assets/"] @@ -26,12 +27,18 @@ packages = [ ] [tool.poetry.dependencies] -python = ">=3.8,<3.12" +python = ">=3.8,<3.13" click = ">=7.2,<=9.0" click-default-group = "^1.2.2" -numpy = ">=1.22" +numpy = [ + { version = "^1.22", python = "<3.12" }, + { version = "^1.26", python = ">=3.12" } +] Pillow = ">=9.1,<10.0" -scipy = "^1.7.3" +scipy = [ + { version = "^1.7.3", python = "<3.12" }, + { version = "^1.11", python = ">=3.12" } +] tqdm = "^4.62.3" pydub = "^0.25.1" rich = ">=6.0,!=12.0.0" @@ -49,7 +56,10 @@ mapbox-earcut = "^1.0.0" cloup = ">=0.13,<2.2" requests = "^2.26.0" dearpygui = { version = "^1.3.1", optional = true } -skia-pathops = "^0.7.0" +skia-pathops = [ + { version = "^0.7.0", python = "<3.12" }, + { version = "^0.8.0.post1", python = ">=3.12" } +] isosurfaces = "0.1.0" srt = "^3.5.0" screeninfo = "^0.8" From 3962a12cd87e8663b9bc3285b50761bc4ffd52be Mon Sep 17 00:00:00 2001 From: Jason Grace <110117391+JasonGrace2282@users.noreply.github.com> Date: Sat, 4 Nov 2023 10:05:17 -0400 Subject: [PATCH 293/555] Added ability to remove non-svg LaTeX files (#3322) * Added ability to remove latex junk (default True) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fixed tests (hopefully), and whitelisted .tex * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * reverted weird changes from merge * See previous commit message * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fixed logs-too-long test * Fixed log output * Fixed typo ;) * deleted unused variable * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * moved latex deletion to tex_file_writing.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * removed changes in scene files * Added caching based on LaTeX expression .svg * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Deleted unused function in delete_old_tex * make if condition more readable Co-authored-by: Benjamin Hackl * cleaned up svg file check * changed blacklist -> whitelist for file endings * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Reverted docstring change * Updated delete_non_svg files docstring * Changed list to a set * Update manim/_config/utils.py * Update manim/cli/render/global_options.py * added one test for the no_latex_cleanup config option --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl Co-authored-by: Tristan Schulz --- manim/_config/utils.py | 9 ++++++ manim/cli/render/global_options.py | 6 ++++ manim/utils/tex_file_writing.py | 31 ++++++++++++++++++-- tests/module/mobject/text/test_texmobject.py | 14 +++++++++ 4 files changed, 58 insertions(+), 2 deletions(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index e7b1d0cdc8..f7778ae169 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -309,6 +309,7 @@ class MyScene(Scene): "write_to_movie", "zero_pad", "force_window", + "no_latex_cleanup", } def __init__(self) -> None: @@ -580,6 +581,7 @@ def digest_parser(self, parser: configparser.ConfigParser) -> ManimConfig: "use_projection_stroke_shaders", "enable_wireframe", "force_window", + "no_latex_cleanup", ]: setattr(self, key, parser["CLI"].getboolean(key, fallback=False)) @@ -756,6 +758,7 @@ def digest_args(self, args: argparse.Namespace) -> ManimConfig: "enable_wireframe", "force_window", "dry_run", + "no_latex_cleanup", ]: if hasattr(args, key): attr = getattr(args, key) @@ -960,6 +963,12 @@ def digest_file(self, filename: str | os.PathLike) -> ManimConfig: doc="Set to force window when using the opengl renderer", ) + no_latex_cleanup = property( + lambda self: self._d["no_latex_cleanup"], + lambda self, val: self._set_boolean("no_latex_cleanup", val), + doc="Prevents deletion of .aux, .dvi, and .log files produced by Tex and MathTex.", + ) + @property def verbosity(self): """Logger verbosity; "DEBUG", "INFO", "WARNING", "ERROR", or "CRITICAL" (-v).""" diff --git a/manim/cli/render/global_options.py b/manim/cli/render/global_options.py index b17e4671c2..17c754e623 100644 --- a/manim/cli/render/global_options.py +++ b/manim/cli/render/global_options.py @@ -102,4 +102,10 @@ def validate_gui_location(ctx, param, value): help="Renders animations without outputting image or video files and disables the window", default=False, ), + option( + "--no_latex_cleanup", + is_flag=True, + help="Prevents deletion of .aux, .dvi, and .log files produced by Tex and MathTex.", + default=False, + ), ) diff --git a/manim/utils/tex_file_writing.py b/manim/utils/tex_file_writing.py index 0f419bb9e9..c7758f899e 100644 --- a/manim/utils/tex_file_writing.py +++ b/manim/utils/tex_file_writing.py @@ -13,6 +13,7 @@ import re import unicodedata from pathlib import Path +from typing import Iterable from manim.utils.tex import TexTemplate @@ -51,19 +52,28 @@ def tex_to_svg_file( if tex_template is None: tex_template = config["tex_template"] tex_file = generate_tex_file(expression, environment, tex_template) + + # check if svg already exists + svg_file = tex_file.with_suffix(".svg") + if svg_file.exists(): + return svg_file + dvi_file = compile_tex( tex_file, tex_template.tex_compiler, tex_template.output_format, ) - return convert_to_svg(dvi_file, tex_template.output_format) + svg_file = convert_to_svg(dvi_file, tex_template.output_format) + if not config["no_latex_cleanup"]: + delete_nonsvg_files() + return svg_file def generate_tex_file( expression: str, environment: str | None = None, tex_template: TexTemplate | None = None, -): +) -> Path: """Takes a tex expression (and an optional tex environment), and returns a fully formed tex file ready for compilation. @@ -251,6 +261,23 @@ def convert_to_svg(dvi_file: Path, extension: str, page: int = 1): return result +def delete_nonsvg_files(additional_endings: Iterable[str] = ()) -> None: + """Deletes every file that does not have a suffix in ``(".svg", ".tex", *additional_endings)`` + + Parameters: + ----------- + additional_endings + Additional endings to whitelist + """ + + tex_dir = config.get_dir("tex_dir") + file_suffix_whitelist = {".svg", ".tex", *additional_endings} + + for f in tex_dir.iterdir(): + if f.suffix not in file_suffix_whitelist: + f.unlink() + + def print_all_tex_errors(log_file: Path, tex_compiler: str, tex_file: Path) -> None: if not log_file.exists(): raise RuntimeError( diff --git a/tests/module/mobject/text/test_texmobject.py b/tests/module/mobject/text/test_texmobject.py index 9103345d18..a3cf26c355 100644 --- a/tests/module/mobject/text/test_texmobject.py +++ b/tests/module/mobject/text/test_texmobject.py @@ -212,3 +212,17 @@ def test_tempconfig_resetting_tex_template(): assert config.tex_template.preamble == "Custom preamble!" assert config.tex_template.preamble != "Custom preamble!" + + +def test_tex_garbage_collection(tmpdir, monkeypatch): + monkeypatch.chdir(tmpdir) + Path(tmpdir, "media").mkdir() + + with tempconfig({"media_dir": "media"}): + tex_without_log = Tex("Hello World!") # f7bc61042256dea9.tex + assert Path("media", "Tex", "f7bc61042256dea9.tex").exists() + assert not Path("media", "Tex", "f7bc61042256dea9.log").exists() + + with tempconfig({"media_dir": "media", "no_latex_cleanup": True}): + tex_with_log = Tex("Hello World, again!") # 3ef79eaaa2d0b15b.tex + assert Path("media", "Tex", "3ef79eaaa2d0b15b.log").exists() From 20028cef46b326d24f974ee05fc2162cc917f81a Mon Sep 17 00:00:00 2001 From: Uwe Zimmermann Date: Sat, 4 Nov 2023 15:07:24 +0100 Subject: [PATCH 294/555] feat: DecimalNumber() - added spacing between values and unit (#3366) * feat: DecimalNumber() - added spacing between values and unit * Update manim/mobject/text/numbers.py Co-authored-by: Benjamin Hackl * Update manim/mobject/text/numbers.py Co-authored-by: Benjamin Hackl * Update manim/mobject/text/numbers.py Co-authored-by: Benjamin Hackl * Update manim/mobject/text/numbers.py Co-authored-by: Benjamin Hackl * Update manim/mobject/text/numbers.py Co-authored-by: Benjamin Hackl * Update manim/mobject/text/numbers.py Co-authored-by: Benjamin Hackl * Update manim/mobject/text/numbers.py Co-authored-by: Benjamin Hackl --------- Co-authored-by: Tristan Schulz Co-authored-by: Benjamin Hackl --- manim/mobject/text/numbers.py | 51 ++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/manim/mobject/text/numbers.py b/manim/mobject/text/numbers.py index f5eff7fada..10bf2e7829 100644 --- a/manim/mobject/text/numbers.py +++ b/manim/mobject/text/numbers.py @@ -22,6 +22,34 @@ class DecimalNumber(VMobject, metaclass=ConvertToOpenGL): """An mobject representing a decimal number. + Parameters + ---------- + number + The numeric value to be displayed. It can later be modified using :meth:`.set_value`. + num_decimal_places + The number of decimal places after the decimal separator. Values are automatically rounded. + mob_class + The class for rendering digits and units, by default :class:`.MathTex`. + include_sign + Set to ``True`` to include a sign for positive numbers and zero. + group_with_commas + When ``True`` thousands groups are separated by commas for readability. + digit_buff_per_font_unit + Additional spacing between digits. Scales with font size. + show_ellipsis + When a number has been truncated by rounding, indicate with an ellipsis (``...``). + unit + A unit string which can be placed to the right of the numerical values. + unit_buff_per_font_unit + An additional spacing between the numerical values and the unit. A value + of ``unit_buff_per_font_unit=0.003`` gives a decent spacing. Scales with font size. + include_background_rectangle + Adds a background rectangle to increase contrast on busy scenes. + edge_to_fix + Assuring right- or left-alignment of the full object. + font_size + Size of the font. + Examples -------- @@ -34,6 +62,8 @@ def construct(self): show_ellipsis=True, num_decimal_places=3, include_sign=True, + unit=r"\text{M-Units}", + unit_buff_per_font_unit=0.003 ) square = Square().to_edge(UP) @@ -59,6 +89,7 @@ def __init__( digit_buff_per_font_unit: float = 0.001, show_ellipsis: bool = False, unit: str | None = None, # Aligned to bottom unless it starts with "^" + unit_buff_per_font_unit: float = 0, include_background_rectangle: bool = False, edge_to_fix: Sequence[float] = LEFT, font_size: float = DEFAULT_FONT_SIZE, @@ -75,6 +106,7 @@ def __init__( self.digit_buff_per_font_unit = digit_buff_per_font_unit self.show_ellipsis = show_ellipsis self.unit = unit + self.unit_buff_per_font_unit = unit_buff_per_font_unit self.include_background_rectangle = include_background_rectangle self.edge_to_fix = edge_to_fix self._font_size = font_size @@ -89,6 +121,7 @@ def __init__( "digit_buff_per_font_unit": digit_buff_per_font_unit, "show_ellipsis": show_ellipsis, "unit": unit, + "unit_buff_per_font_unit": unit_buff_per_font_unit, "include_background_rectangle": include_background_rectangle, "edge_to_fix": edge_to_fix, "font_size": font_size, @@ -130,15 +163,25 @@ def _set_submobjects_from_number(self, number): self._string_to_mob("\\dots", SingleStringMathTex, color=self.color), ) - if self.unit is not None: - self.unit_sign = self._string_to_mob(self.unit, SingleStringMathTex) - self.add(self.unit_sign) - self.arrange( buff=self.digit_buff_per_font_unit * self._font_size, aligned_edge=DOWN, ) + if self.unit is not None: + self.unit_sign = self._string_to_mob(self.unit, SingleStringMathTex) + self.add( + self.unit_sign.next_to( + self, + direction=RIGHT, + buff=(self.unit_buff_per_font_unit + self.digit_buff_per_font_unit) + * self._font_size, + aligned_edge=DOWN, + ) + ) + + self.move_to(ORIGIN) + # Handle alignment of parts that should be aligned # to the bottom for i, c in enumerate(num_string): From adfef5e7a527babc10f0e515d90a4771454578b3 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Sat, 11 Nov 2023 02:22:43 +0530 Subject: [PATCH 295/555] Add option to run examples directly with binder (#3427) * Add option to run examples directly with binder The minified JS is from https://github.com/naveen521kk/manim-binder * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * slight style changes * update the js file to fix on chrome Signed-off-by: Naveen M K * show the run button as an cursor * make the video to be 100% of the width * Update manim/utils/docbuild/manim_directive.py Co-authored-by: Benjamin Hackl * Add a "Make interactive" button instead of "Run" button Clicking on the "Make interactive" button show the code-editor and "run" button * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * update margin for run interactive button --------- Signed-off-by: Naveen M K Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- docs/source/_static/custom.css | 19 ++++++++++++ docs/source/_static/manim-binder.min.js | 3 ++ .../_static/manim-binder.min.js.LICENSE.txt | 6 ++++ docs/source/_static/manim-binder.min.js.map | 1 + docs/source/conf.py | 4 +-- manim/utils/docbuild/manim_directive.py | 30 ++++++++++++++++++- 6 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 docs/source/_static/manim-binder.min.js create mode 100644 docs/source/_static/manim-binder.min.js.LICENSE.txt create mode 100644 docs/source/_static/manim-binder.min.js.map diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css index 59e8cb3e35..2b17007fdc 100644 --- a/docs/source/_static/custom.css +++ b/docs/source/_static/custom.css @@ -82,3 +82,22 @@ h4, h5, h6{ .sidebar-tree a.internal.reference { display: table-cell; } + +.manim-binder-button { + text-transform: capitalize; + padding: 10px 20px; + margin: 10px 0; +} + +.manim-binder-wrapper { + background-color: var(--color-code-background); + color: var(--color-code-foreground); +} + +.manim-binder-title { + margin-top: 0; +} + +.manim-binder-button-wrapper { + margin: 0px 10px; +} diff --git a/docs/source/_static/manim-binder.min.js b/docs/source/_static/manim-binder.min.js new file mode 100644 index 0000000000..2e076c9645 --- /dev/null +++ b/docs/source/_static/manim-binder.min.js @@ -0,0 +1,3 @@ +/*! For license information please see manim-binder.min.js.LICENSE.txt */ +(()=>{var __webpack_modules__={5067:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ActivityMonitor=void 0;const n=i(6424);t.ActivityMonitor=class{constructor(e){this._timer=-1,this._timeout=-1,this._isDisposed=!1,this._activityStopped=new n.Signal(this),e.signal.connect(this._onSignalFired,this),this._timeout=e.timeout||1e3}get activityStopped(){return this._activityStopped}get timeout(){return this._timeout}set timeout(e){this._timeout=e}get isDisposed(){return this._isDisposed}dispose(){this._isDisposed||(this._isDisposed=!0,n.Signal.clearData(this))}_onSignalFired(e,t){clearTimeout(this._timer),this._sender=e,this._args=t,this._timer=setTimeout((()=>{this._activityStopped.emit({sender:this._sender,args:this._args})}),this._timeout)}}},4251:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),s(i(5067),t),s(i(6742),t),s(i(5366),t),s(i(6470),t),s(i(5675),t),s(i(5571),t),s(i(1735),t),s(i(1152),t),s(i(5248),t)},6742:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},5366:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MarkdownCodeBlocks=void 0,function(e){e.CODE_BLOCK_MARKER="```";const t=[".markdown",".mdown",".mkdn",".md",".mkd",".mdwn",".mdtxt",".mdtext",".text",".txt",".Rmd"];class i{constructor(e){this.startLine=e,this.code="",this.endLine=-1}}e.MarkdownCodeBlock=i,e.isMarkdown=function(e){return t.indexOf(e)>-1},e.findMarkdownCodeBlocks=function(t){if(!t||""===t)return[];const n=t.split("\n"),s=[];let r=null;for(let t=0;te===t||n&&e===n))},e.isDisabled=function(t){const i=t.indexOf(":");let n="";return-1!==i&&(n=t.slice(0,i)),e.disabled.some((e=>e===t||n&&e===n))}}(Extension=PageConfig.Extension||(PageConfig.Extension={}))})(PageConfig=exports.PageConfig||(exports.PageConfig={}))},5675:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PathExt=void 0;const n=i(2005);!function(e){function t(e){return 0===e.indexOf("/")&&(e=e.slice(1)),e}e.join=function(...e){const i=n.posix.join(...e);return"."===i?"":t(i)},e.basename=function(e,t){return n.posix.basename(e,t)},e.dirname=function(e){const i=t(n.posix.dirname(e));return"."===i?"":i},e.extname=function(e){return n.posix.extname(e)},e.normalize=function(e){return""===e?"":t(n.posix.normalize(e))},e.resolve=function(...e){return t(n.posix.resolve(...e))},e.relative=function(e,i){return t(n.posix.relative(e,i))},e.normalizeExtension=function(e){return e.length>0&&0!==e.indexOf(".")&&(e=`.${e}`),e},e.removeSlash=t}(t.PathExt||(t.PathExt={}))},5571:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.signalToPromise=void 0;const n=i(3911);t.signalToPromise=function(e,t){const i=new n.PromiseDelegate;function s(){e.disconnect(r)}function r(e,t){s(),i.resolve([e,t])}return e.connect(r),(null!=t?t:0)>0&&setTimeout((()=>{s(),i.reject(`Signal not emitted within ${t} ms.`)}),t),i.promise}},1735:(e,t)=>{"use strict";var i;Object.defineProperty(t,"__esModule",{value:!0}),t.Text=void 0,(i=t.Text||(t.Text={})).jsIndexToCharIndex=function(e,t){return e},i.charIndexToJsIndex=function(e,t){return e},i.camelCase=function(e,t=!1){return e.replace(/^(\w)|[\s-_:]+(\w)/g,(function(e,i,n){return n?n.toUpperCase():t?i.toUpperCase():i.toLowerCase()}))},i.titleCase=function(e){return(e||"").toLowerCase().split(" ").map((e=>e.charAt(0).toUpperCase()+e.slice(1))).join(" ")}},1152:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Time=void 0;const i=[{name:"years",milliseconds:31536e6},{name:"months",milliseconds:2592e6},{name:"days",milliseconds:864e5},{name:"hours",milliseconds:36e5},{name:"minutes",milliseconds:6e4},{name:"seconds",milliseconds:1e3}];var n;(n=t.Time||(t.Time={})).formatHuman=function(e){const t=document.documentElement.lang||"en",n=new Intl.RelativeTimeFormat(t,{numeric:"auto"}),s=new Date(e).getTime()-Date.now();for(let e of i){const t=Math.ceil(s/e.milliseconds);if(0!==t)return n.format(t,e.name)}return n.format(0,"seconds")},n.format=function(e){const t=document.documentElement.lang||"en";return new Intl.DateTimeFormat(t,{dateStyle:"short",timeStyle:"short"}).format(new Date(e))}},5248:function(e,t,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.URLExt=void 0;const s=i(2005),r=n(i(2296));!function(e){function t(e){if("undefined"!=typeof document&&document){const t=document.createElement("a");return t.href=e,t}return(0,r.default)(e)}function i(...e){let t=(0,r.default)(e[0],{});const i=""===t.protocol&&t.slashes;i&&(t=(0,r.default)(e[0],"https:"+e[0]));const n=`${i?"":t.protocol}${t.slashes?"//":""}${t.auth}${t.auth?"@":""}${t.host}`,o=s.posix.join(`${n&&"/"!==t.pathname[0]?"/":""}${t.pathname}`,...e.slice(1));return`${n}${"."===o?"":o}`}e.parse=t,e.getHostName=function(e){return(0,r.default)(e).hostname},e.normalize=function(e){return e&&t(e).toString()},e.join=i,e.encodeParts=function(e){return i(...e.split("/").map(encodeURIComponent))},e.objectToQueryString=function(e){const t=Object.keys(e).filter((e=>e.length>0));return t.length?"?"+t.map((t=>{const i=encodeURIComponent(String(e[t]));return t+(i?"="+i:"")})).join("&"):""},e.queryStringToObject=function(e){return e.replace(/^\?/,"").split("&").reduce(((e,t)=>{const[i,n]=t.split("=");return i.length>0&&(e[i]=decodeURIComponent(n||"")),e}),{})},e.isLocal=function(e){const{protocol:i}=t(e);return(!i||0!==e.toLowerCase().indexOf(i))&&0!==e.indexOf("/")}}(t.URLExt||(t.URLExt={}))},7524:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BaseManager=void 0;const n=i(6424),s=i(538);t.BaseManager=class{constructor(e){var t;this._isDisposed=!1,this._disposed=new n.Signal(this),this.serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:s.ServerConnection.makeSettings()}get disposed(){return this._disposed}get isDisposed(){return this._isDisposed}get isActive(){return!0}dispose(){this.isDisposed||(this._disposed.emit(void 0),n.Signal.clearData(this))}}},4011:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BuildManager=void 0;const n=i(4251),s=i(538);t.BuildManager=class{constructor(e={}){var t;this._url="",this.serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:s.ServerConnection.makeSettings();const{baseUrl:i,appUrl:r}=this.serverSettings;this._url=n.URLExt.join(i,r,"api/build")}get isAvailable(){return"true"===n.PageConfig.getOption("buildAvailable").toLowerCase()}get shouldCheck(){return"true"===n.PageConfig.getOption("buildCheck").toLowerCase()}getStatus(){const{_url:e,serverSettings:t}=this;return s.ServerConnection.makeRequest(e,{},t).then((e=>{if(200!==e.status)throw new s.ServerConnection.ResponseError(e);return e.json()})).then((e=>{if("string"!=typeof e.status)throw new Error("Invalid data");if("string"!=typeof e.message)throw new Error("Invalid data");return e}))}build(){const{_url:e,serverSettings:t}=this;return s.ServerConnection.makeRequest(e,{method:"POST"},t).then((e=>{if(400===e.status)throw new s.ServerConnection.ResponseError(e,"Build aborted");if(200!==e.status){const t=`Build failed with ${e.status}.\n\n If you are experiencing the build failure after installing an extension (or trying to include previously installed extension after updating JupyterLab) please check the extension repository for new installation instructions as many extensions migrated to the prebuilt extensions system which no longer requires rebuilding JupyterLab (but uses a different installation procedure, typically involving a package manager such as 'pip' or 'conda').\n\n If you specifically intended to install a source extension, please run 'jupyter lab build' on the server for full output.`;throw new s.ServerConnection.ResponseError(e,t)}}))}cancel(){const{_url:e,serverSettings:t}=this;return s.ServerConnection.makeRequest(e,{method:"DELETE"},t).then((e=>{if(204!==e.status)throw new s.ServerConnection.ResponseError(e)}))}}},7302:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConfigWithDefaults=t.ConfigSection=void 0;const n=i(4251),s=i(5247);(t.ConfigSection||(t.ConfigSection={})).create=function(e){const t=new r(e);return t.load().then((()=>t))};class r{constructor(e){var t;this._url="unknown";const i=this.serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:s.ServerConnection.makeSettings();this._url=n.URLExt.join(i.baseUrl,"api/config",encodeURIComponent(e.name))}get data(){return this._data}async load(){const e=await s.ServerConnection.makeRequest(this._url,{},this.serverSettings);if(200!==e.status)throw await s.ServerConnection.ResponseError.create(e);this._data=await e.json()}async update(e){this._data={...this._data,...e};const t={method:"PATCH",body:JSON.stringify(e)},i=await s.ServerConnection.makeRequest(this._url,t,this.serverSettings);if(200!==i.status)throw await s.ServerConnection.ResponseError.create(i);return this._data=await i.json(),this._data}}t.ConfigWithDefaults=class{constructor(e){var t,i;this._className="",this._section=e.section,this._defaults=null!==(t=e.defaults)&&void 0!==t?t:{},this._className=null!==(i=e.className)&&void 0!==i?i:""}get(e){const t=this._classData();return e in t?t[e]:this._defaults[e]}set(e,t){const i={};if(i[e]=t,this._className){const e={};return e[this._className]=i,this._section.update(e)}return this._section.update(i)}_classData(){const e=this._section.data;return this._className&&this._className in e?e[this._className]:e}}},1708:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Drive=t.ContentsManager=t.Contents=void 0;const o=i(4251),a=i(6424),l=i(5247),h=r(i(3394));var c,d;(d=t.Contents||(t.Contents={})).validateContentsModel=function(e){h.validateContentsModel(e)},d.validateCheckpointModel=function(e){h.validateCheckpointModel(e)},t.ContentsManager=class{constructor(e={}){var t,i;this._isDisposed=!1,this._additionalDrives=new Map,this._fileChanged=new a.Signal(this);const n=this.serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:l.ServerConnection.makeSettings();this._defaultDrive=null!==(i=e.defaultDrive)&&void 0!==i?i:new u({serverSettings:n}),this._defaultDrive.fileChanged.connect(this._onFileChanged,this)}get fileChanged(){return this._fileChanged}get isDisposed(){return this._isDisposed}dispose(){this.isDisposed||(this._isDisposed=!0,a.Signal.clearData(this))}addDrive(e){this._additionalDrives.set(e.name,e),e.fileChanged.connect(this._onFileChanged,this)}getSharedModelFactory(e){var t;const[i]=this._driveForPath(e);return null!==(t=null==i?void 0:i.sharedModelFactory)&&void 0!==t?t:null}localPath(e){const t=e.split("/"),i=t[0].split(":");return 1!==i.length&&this._additionalDrives.has(i[0])?o.PathExt.join(i.slice(1).join(":"),...t.slice(1)):o.PathExt.removeSlash(e)}normalize(e){const t=e.split(":");return 1===t.length?o.PathExt.normalize(e):`${t[0]}:${o.PathExt.normalize(t.slice(1).join(":"))}`}resolvePath(e,t){const i=this.driveName(e),n=this.localPath(e),s=o.PathExt.resolve("/",n,t);return i?`${i}:${s}`:s}driveName(e){const t=e.split("/")[0].split(":");return 1===t.length?"":this._additionalDrives.has(t[0])?t[0]:""}get(e,t){const[i,n]=this._driveForPath(e);return i.get(n,t).then((e=>{const t=[];if("directory"===e.type&&e.content){for(const n of e.content)t.push({...n,path:this._toGlobalPath(i,n.path)});return{...e,path:this._toGlobalPath(i,n),content:t,serverPath:e.path}}return{...e,path:this._toGlobalPath(i,n),serverPath:e.path}}))}getDownloadUrl(e){const[t,i]=this._driveForPath(e);return t.getDownloadUrl(i)}newUntitled(e={}){if(e.path){const t=this.normalize(e.path),[i,n]=this._driveForPath(t);return i.newUntitled({...e,path:n}).then((e=>({...e,path:o.PathExt.join(t,e.name),serverPath:e.path})))}return this._defaultDrive.newUntitled(e)}delete(e){const[t,i]=this._driveForPath(e);return t.delete(i)}rename(e,t){const[i,n]=this._driveForPath(e),[s,r]=this._driveForPath(t);if(i!==s)throw Error("ContentsManager: renaming files must occur within a Drive");return i.rename(n,r).then((e=>({...e,path:this._toGlobalPath(i,r),serverPath:e.path})))}save(e,t={}){const i=this.normalize(e),[n,s]=this._driveForPath(e);return n.save(s,{...t,path:s}).then((e=>({...e,path:i,serverPath:e.path})))}copy(e,t){const[i,n]=this._driveForPath(e),[s,r]=this._driveForPath(t);if(i===s)return i.copy(n,r).then((e=>({...e,path:this._toGlobalPath(i,e.path),serverPath:e.path})));throw Error("Copying files between drives is not currently implemented")}createCheckpoint(e){const[t,i]=this._driveForPath(e);return t.createCheckpoint(i)}listCheckpoints(e){const[t,i]=this._driveForPath(e);return t.listCheckpoints(i)}restoreCheckpoint(e,t){const[i,n]=this._driveForPath(e);return i.restoreCheckpoint(n,t)}deleteCheckpoint(e,t){const[i,n]=this._driveForPath(e);return i.deleteCheckpoint(n,t)}_toGlobalPath(e,t){return e===this._defaultDrive?o.PathExt.removeSlash(t):`${e.name}:${o.PathExt.removeSlash(t)}`}_driveForPath(e){const t=this.driveName(e),i=this.localPath(e);return t?[this._additionalDrives.get(t),i]:[this._defaultDrive,i]}_onFileChanged(e,t){var i,n;if(e===this._defaultDrive)this._fileChanged.emit(t);else{let s=null,r=null;(null===(i=t.newValue)||void 0===i?void 0:i.path)&&(s={...t.newValue,path:this._toGlobalPath(e,t.newValue.path)}),(null===(n=t.oldValue)||void 0===n?void 0:n.path)&&(r={...t.oldValue,path:this._toGlobalPath(e,t.oldValue.path)}),this._fileChanged.emit({type:t.type,newValue:s,oldValue:r})}}};class u{constructor(e={}){var t,i,n;this._isDisposed=!1,this._fileChanged=new a.Signal(this),this.name=null!==(t=e.name)&&void 0!==t?t:"Default",this._apiEndpoint=null!==(i=e.apiEndpoint)&&void 0!==i?i:"api/contents",this.serverSettings=null!==(n=e.serverSettings)&&void 0!==n?n:l.ServerConnection.makeSettings()}get fileChanged(){return this._fileChanged}get isDisposed(){return this._isDisposed}dispose(){this.isDisposed||(this._isDisposed=!0,a.Signal.clearData(this))}async get(e,t){let i=this._getUrl(e);if(t){"notebook"===t.type&&delete t.format;const e=t.content?"1":"0",n={...t,content:e};i+=o.URLExt.objectToQueryString(n)}const n=this.serverSettings,s=await l.ServerConnection.makeRequest(i,{},n);if(200!==s.status)throw await l.ServerConnection.ResponseError.create(s);const r=await s.json();return h.validateContentsModel(r),r}getDownloadUrl(e){const t=this.serverSettings.baseUrl;let i=o.URLExt.join(t,"files",o.URLExt.encodeParts(e));const n=document.cookie.match("\\b_xsrf=([^;]*)\\b");if(n){const e=new URL(i);e.searchParams.append("_xsrf",n[1]),i=e.toString()}return Promise.resolve(i)}async newUntitled(e={}){var t;let i="{}";e&&(e.ext&&(e.ext=c.normalizeExtension(e.ext)),i=JSON.stringify(e));const n=this.serverSettings,s=this._getUrl(null!==(t=e.path)&&void 0!==t?t:""),r={method:"POST",body:i},o=await l.ServerConnection.makeRequest(s,r,n);if(201!==o.status)throw await l.ServerConnection.ResponseError.create(o);const a=await o.json();return h.validateContentsModel(a),this._fileChanged.emit({type:"new",oldValue:null,newValue:a}),a}async delete(e){const t=this._getUrl(e),i=this.serverSettings,n=await l.ServerConnection.makeRequest(t,{method:"DELETE"},i);if(204!==n.status)throw await l.ServerConnection.ResponseError.create(n);this._fileChanged.emit({type:"delete",oldValue:{path:e},newValue:null})}async rename(e,t){const i=this.serverSettings,n=this._getUrl(e),s={method:"PATCH",body:JSON.stringify({path:t})},r=await l.ServerConnection.makeRequest(n,s,i);if(200!==r.status)throw await l.ServerConnection.ResponseError.create(r);const o=await r.json();return h.validateContentsModel(o),this._fileChanged.emit({type:"rename",oldValue:{path:e},newValue:o}),o}async save(e,t={}){const i=this.serverSettings,n=this._getUrl(e),s={method:"PUT",body:JSON.stringify(t)},r=await l.ServerConnection.makeRequest(n,s,i);if(200!==r.status&&201!==r.status)throw await l.ServerConnection.ResponseError.create(r);const o=await r.json();return h.validateContentsModel(o),this._fileChanged.emit({type:"save",oldValue:null,newValue:o}),o}async copy(e,t){const i=this.serverSettings,n=this._getUrl(t),s={method:"POST",body:JSON.stringify({copy_from:e})},r=await l.ServerConnection.makeRequest(n,s,i);if(201!==r.status)throw await l.ServerConnection.ResponseError.create(r);const o=await r.json();return h.validateContentsModel(o),this._fileChanged.emit({type:"new",oldValue:null,newValue:o}),o}async createCheckpoint(e){const t=this._getUrl(e,"checkpoints"),i=await l.ServerConnection.makeRequest(t,{method:"POST"},this.serverSettings);if(201!==i.status)throw await l.ServerConnection.ResponseError.create(i);const n=await i.json();return h.validateCheckpointModel(n),n}async listCheckpoints(e){const t=this._getUrl(e,"checkpoints"),i=await l.ServerConnection.makeRequest(t,{},this.serverSettings);if(200!==i.status)throw await l.ServerConnection.ResponseError.create(i);const n=await i.json();if(!Array.isArray(n))throw new Error("Invalid Checkpoint list");for(let e=0;eo.URLExt.encodeParts(e))),i=this.serverSettings.baseUrl;return o.URLExt.join(i,this._apiEndpoint,...t)}}t.Drive=u,function(e){e.normalizeExtension=function(e){return e.length>0&&0!==e.indexOf(".")&&(e=`.${e}`),e}}(c||(c={}))},3394:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateCheckpointModel=t.validateContentsModel=void 0;const n=i(3247);t.validateContentsModel=function(e){(0,n.validateProperty)(e,"name","string"),(0,n.validateProperty)(e,"path","string"),(0,n.validateProperty)(e,"type","string"),(0,n.validateProperty)(e,"created","string"),(0,n.validateProperty)(e,"last_modified","string"),(0,n.validateProperty)(e,"mimetype","object"),(0,n.validateProperty)(e,"content","object"),(0,n.validateProperty)(e,"format","object")},t.validateCheckpointModel=function(e){(0,n.validateProperty)(e,"id","string"),(0,n.validateProperty)(e,"last_modified","string")}},5657:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventManager=void 0;const n=i(4251),s=i(9044),r=i(6424),o=i(538),a="api/events";t.EventManager=class{constructor(e={}){var t;this._socket=null,this.serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:o.ServerConnection.makeSettings(),this._poll=new s.Poll({factory:()=>this._subscribe()}),this._stream=new r.Stream(this),this._poll.start()}get isDisposed(){return this._poll.isDisposed}get stream(){return this._stream}dispose(){if(this.isDisposed)return;this._poll.dispose();const e=this._socket;e&&(this._socket=null,e.onopen=()=>{},e.onerror=()=>{},e.onmessage=()=>{},e.onclose=()=>{},e.close()),r.Signal.clearData(this),this._stream.stop()}async emit(e){const{serverSettings:t}=this,{baseUrl:i,token:s}=t,{makeRequest:r,ResponseError:l}=o.ServerConnection,h=n.URLExt.join(i,a)+(s?`?token=${s}`:""),c={body:JSON.stringify(e),method:"POST"},d=await r(h,c,t);if(204!==d.status)throw new l(d)}_subscribe(){return new Promise(((e,t)=>{if(this.isDisposed)return;const{token:i,WebSocket:s,wsUrl:r}=this.serverSettings,o=n.URLExt.join(r,a,"subscribe")+(i?`?token=${encodeURIComponent(i)}`:""),l=this._socket=new s(o),h=this._stream;l.onclose=()=>t(new Error("EventManager socket closed")),l.onmessage=e=>e.data&&h.emit(JSON.parse(e.data))}))}}},5247:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),s(i(7524),t),s(i(7302),t),s(i(1708),t),s(i(5657),t),s(i(5674),t),s(i(3490),t),s(i(7797),t),s(i(538),t),s(i(3561),t),s(i(9188),t),s(i(3185),t),s(i(1014),t),s(i(9090),t),s(i(6624),t)},8341:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.CommHandler=void 0;const o=i(1122),a=r(i(1736));class l extends o.DisposableDelegate{constructor(e,t,i,n){super(n),this._target="",this._id="",this._id=t,this._target=e,this._kernel=i}get commId(){return this._id}get targetName(){return this._target}get onClose(){return this._onClose}set onClose(e){this._onClose=e}get onMsg(){return this._onMsg}set onMsg(e){this._onMsg=e}open(e,t,i=[]){if(this.isDisposed||this._kernel.isDisposed)throw new Error("Cannot open");const n=a.createMessage({msgType:"comm_open",channel:"shell",username:this._kernel.username,session:this._kernel.clientId,content:{comm_id:this._id,target_name:this._target,data:null!=e?e:{}},metadata:t,buffers:i});return this._kernel.sendShellMessage(n,!1,!0)}send(e,t,i=[],n=!0){if(this.isDisposed||this._kernel.isDisposed)throw new Error("Cannot send");const s=a.createMessage({msgType:"comm_msg",channel:"shell",username:this._kernel.username,session:this._kernel.clientId,content:{comm_id:this._id,data:e},metadata:t,buffers:i});return this._kernel.sendShellMessage(s,!1,n)}close(e,t,i=[]){if(this.isDisposed||this._kernel.isDisposed)throw new Error("Cannot close");const n=a.createMessage({msgType:"comm_close",channel:"shell",username:this._kernel.username,session:this._kernel.clientId,content:{comm_id:this._id,data:null!=e?e:{}},metadata:t,buffers:i}),s=this._kernel.sendShellMessage(n,!1,!0),r=this._onClose;return r&&r(a.createMessage({msgType:"comm_close",channel:"iopub",username:this._kernel.username,session:this._kernel.clientId,content:{comm_id:this._id,data:null!=e?e:{}},metadata:t,buffers:i})),this.dispose(),s}}t.CommHandler=l},5306:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.KernelConnection=void 0;const o=i(4251),a=i(3911),l=i(6424),h=i(5247),c=i(8341),d=r(i(1736)),u=i(217),p=i(8206),f=r(i(776)),m=i(3490),g=r(i(9753)),v="_RESTARTING_";class O{constructor(e){var t,i,n,s;this._createSocket=(e=!0)=>{this._errorIfDisposed(),this._clearSocket(),this._updateConnectionStatus("connecting");const t=this.serverSettings,i=o.URLExt.join(t.wsUrl,g.KERNEL_SERVICE_URL,encodeURIComponent(this._id)),n=i.replace(/^((?:\w+:)?\/\/)(?:[^@\/]+@)/,"$1");console.debug(`Starting WebSocket: ${n}`);let s=o.URLExt.join(i,"channels?session_id="+encodeURIComponent(this._clientId));const r=t.token;t.appendToken&&""!==r&&(s+=`&token=${encodeURIComponent(r)}`);const a=e?this._supportedProtocols:[];this._ws=new t.WebSocket(s,a),this._ws.binaryType="arraybuffer";let l=!1;const c=async e=>{var i,n;if(!this._isDisposed){this._reason="",this._model=void 0;try{const i=await g.getKernelModel(this._id,t);this._model=i,"dead"===(null==i?void 0:i.execution_state)?this._updateStatus("dead"):this._onWSClose(e)}catch(t){if(t instanceof h.ServerConnection.NetworkError||503===(null===(i=t.response)||void 0===i?void 0:i.status)||424===(null===(n=t.response)||void 0===n?void 0:n.status)){const t=1e3*b.getRandomIntInclusive(10,30);setTimeout(c,t,e)}else this._reason="Kernel died unexpectedly",this._updateStatus("dead")}}},d=async e=>{l||(l=!0,await c(e))};this._ws.onmessage=this._onWSMessage,this._ws.onopen=this._onWSOpen,this._ws.onclose=d,this._ws.onerror=d},this._onWSOpen=e=>{if(""!==this._ws.protocol&&!this._supportedProtocols.includes(this._ws.protocol))throw console.log("Server selected unknown kernel wire protocol:",this._ws.protocol),this._updateStatus("dead"),new Error(`Unknown kernel wire protocol: ${this._ws.protocol}`);this._selectedProtocol=this._ws.protocol,this._ws.onclose=this._onWSClose,this._ws.onerror=this._onWSClose,this._updateConnectionStatus("connected")},this._onWSMessage=e=>{let t;try{t=(0,p.deserialize)(e.data,this._ws.protocol),f.validateMessage(t)}catch(e){throw e.message=`Kernel message validation error: ${e.message}`,e}this._kernelSession=t.header.session,this._msgChain=this._msgChain.then((()=>this._handleMessage(t))).catch((e=>{e.message.startsWith("Canceled future for ")&&console.error(e)})),this._anyMessage.emit({msg:t,direction:"recv"})},this._onWSClose=e=>{this.isDisposed||this._reconnect()},this._id="",this._name="",this._status="unknown",this._connectionStatus="connecting",this._kernelSession="",this._isDisposed=!1,this._ws=null,this._username="",this._reconnectLimit=7,this._reconnectAttempt=0,this._reconnectTimeout=null,this._supportedProtocols=Object.values(d.supportedKernelWebSocketProtocols),this._selectedProtocol="",this._futures=new Map,this._comms=new Map,this._targetRegistry=Object.create(null),this._info=new a.PromiseDelegate,this._pendingMessages=[],this._statusChanged=new l.Signal(this),this._connectionStatusChanged=new l.Signal(this),this._disposed=new l.Signal(this),this._iopubMessage=new l.Signal(this),this._anyMessage=new l.Signal(this),this._pendingInput=new l.Signal(this),this._unhandledMessage=new l.Signal(this),this._displayIdToParentIds=new Map,this._msgIdToDisplayIds=new Map,this._msgChain=Promise.resolve(),this._hasPendingInput=!1,this._reason="",this._noOp=()=>{},this._name=e.model.name,this._id=e.model.id,this.serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:h.ServerConnection.makeSettings(),this._clientId=null!==(i=e.clientId)&&void 0!==i?i:a.UUID.uuid4(),this._username=null!==(n=e.username)&&void 0!==n?n:"",this.handleComms=null===(s=e.handleComms)||void 0===s||s,this._createSocket()}get disposed(){return this._disposed}get statusChanged(){return this._statusChanged}get connectionStatusChanged(){return this._connectionStatusChanged}get iopubMessage(){return this._iopubMessage}get unhandledMessage(){return this._unhandledMessage}get model(){return this._model||{id:this.id,name:this.name,reason:this._reason}}get anyMessage(){return this._anyMessage}get pendingInput(){return this._pendingInput}get id(){return this._id}get name(){return this._name}get username(){return this._username}get clientId(){return this._clientId}get status(){return this._status}get connectionStatus(){return this._connectionStatus}get isDisposed(){return this._isDisposed}get info(){return this._info.promise}get spec(){return this._specPromise||(this._specPromise=m.KernelSpecAPI.getSpecs(this.serverSettings).then((e=>e.kernelspecs[this._name]))),this._specPromise}clone(e={}){return new O({model:this.model,username:this.username,serverSettings:this.serverSettings,handleComms:!1,...e})}dispose(){this.isDisposed||(this._isDisposed=!0,this._disposed.emit(),this._updateConnectionStatus("disconnected"),this._clearKernelState(),this._pendingMessages=[],this._clearSocket(),l.Signal.clearData(this))}sendShellMessage(e,t=!1,i=!0){return this._sendKernelShellControl(u.KernelShellFutureHandler,e,t,i)}sendControlMessage(e,t=!1,i=!0){return this._sendKernelShellControl(u.KernelControlFutureHandler,e,t,i)}_sendKernelShellControl(e,t,i=!1,n=!0){this._sendMessage(t),this._anyMessage.emit({msg:t,direction:"send"});const s=new e((()=>{const e=t.header.msg_id;this._futures.delete(e);const i=this._msgIdToDisplayIds.get(e);i&&(i.forEach((t=>{const i=this._displayIdToParentIds.get(t);if(i){const n=i.indexOf(e);if(-1===n)return;1===i.length?this._displayIdToParentIds.delete(t):(i.splice(n,1),this._displayIdToParentIds.set(t,i))}})),this._msgIdToDisplayIds.delete(e))}),t,i,n,this);return this._futures.set(t.header.msg_id,s),s}_sendMessage(e,t=!0){if("dead"===this.status)throw new Error("Kernel is dead");if((""===this._kernelSession||this._kernelSession===v)&&d.isInfoRequestMsg(e)){if("connected"===this.connectionStatus)return void this._ws.send((0,p.serialize)(e,this._ws.protocol));throw new Error("Could not send message: status is not connected")}if(t&&this._pendingMessages.length>0)this._pendingMessages.push(e);else if("connected"===this.connectionStatus&&this._kernelSession!==v)this._ws.send((0,p.serialize)(e,this._ws.protocol));else{if(!t)throw new Error("Could not send message");this._pendingMessages.push(e)}}async interrupt(){if(this.hasPendingInput=!1,"dead"===this.status)throw new Error("Kernel is dead");return g.interruptKernel(this.id,this.serverSettings)}async restart(){if("dead"===this.status)throw new Error("Kernel is dead");this._updateStatus("restarting"),this._clearKernelState(),this._kernelSession=v,await g.restartKernel(this.id,this.serverSettings),await this.reconnect(),this.hasPendingInput=!1}reconnect(){this._errorIfDisposed();const e=new a.PromiseDelegate,t=(i,n)=>{"connected"===n?(e.resolve(),this.connectionStatusChanged.disconnect(t,this)):"disconnected"===n&&(e.reject(new Error("Kernel connection disconnected")),this.connectionStatusChanged.disconnect(t,this))};return this.connectionStatusChanged.connect(t,this),this._reconnectAttempt=0,this._reconnect(),e.promise}async shutdown(){"dead"!==this.status&&await g.shutdownKernel(this.id,this.serverSettings),this.handleShutdown()}handleShutdown(){this._updateStatus("dead"),this.dispose()}async requestKernelInfo(){const e=d.createMessage({msgType:"kernel_info_request",channel:"shell",username:this._username,session:this._clientId,content:{}});let t;try{t=await b.handleShellMessage(this,e)}catch(e){if(this.isDisposed)return;throw e}if(this._errorIfDisposed(),t)return void 0===t.content.status&&(t.content.status="ok"),"ok"!==t.content.status?(this._info.reject("Kernel info reply errored"),t):(this._info.resolve(t.content),this._kernelSession=t.header.session,t)}requestComplete(e){const t=d.createMessage({msgType:"complete_request",channel:"shell",username:this._username,session:this._clientId,content:e});return b.handleShellMessage(this,t)}requestInspect(e){const t=d.createMessage({msgType:"inspect_request",channel:"shell",username:this._username,session:this._clientId,content:e});return b.handleShellMessage(this,t)}requestHistory(e){const t=d.createMessage({msgType:"history_request",channel:"shell",username:this._username,session:this._clientId,content:e});return b.handleShellMessage(this,t)}requestExecute(e,t=!0,i){const n=d.createMessage({msgType:"execute_request",channel:"shell",username:this._username,session:this._clientId,content:{silent:!1,store_history:!0,user_expressions:{},allow_stdin:!0,stop_on_error:!1,...e},metadata:i});return this.sendShellMessage(n,!0,t)}requestDebug(e,t=!0){const i=d.createMessage({msgType:"debug_request",channel:"control",username:this._username,session:this._clientId,content:e});return this.sendControlMessage(i,!0,t)}requestIsComplete(e){const t=d.createMessage({msgType:"is_complete_request",channel:"shell",username:this._username,session:this._clientId,content:e});return b.handleShellMessage(this,t)}requestCommInfo(e){const t=d.createMessage({msgType:"comm_info_request",channel:"shell",username:this._username,session:this._clientId,content:e});return b.handleShellMessage(this,t)}sendInputReply(e,t){const i=d.createMessage({msgType:"input_reply",channel:"stdin",username:this._username,session:this._clientId,content:e});i.parent_header=t,this._sendMessage(i),this._anyMessage.emit({msg:i,direction:"send"}),this.hasPendingInput=!1}createComm(e,t=a.UUID.uuid4()){if(!this.handleComms)throw new Error("Comms are disabled on this kernel connection");if(this._comms.has(t))throw new Error("Comm is already created");const i=new c.CommHandler(e,t,this,(()=>{this._unregisterComm(t)}));return this._comms.set(t,i),i}hasComm(e){return this._comms.has(e)}registerCommTarget(e,t){this.handleComms&&(this._targetRegistry[e]=t)}removeCommTarget(e,t){this.handleComms&&(this.isDisposed||this._targetRegistry[e]!==t||delete this._targetRegistry[e])}registerMessageHook(e,t){var i;const n=null===(i=this._futures)||void 0===i?void 0:i.get(e);n&&n.registerMessageHook(t)}removeMessageHook(e,t){var i;const n=null===(i=this._futures)||void 0===i?void 0:i.get(e);n&&n.removeMessageHook(t)}removeInputGuard(){this.hasPendingInput=!1}async _handleDisplayId(e,t){var i,n;const s=t.parent_header.msg_id;let r=this._displayIdToParentIds.get(e);if(r){const e={header:a.JSONExt.deepCopy(t.header),parent_header:a.JSONExt.deepCopy(t.parent_header),metadata:a.JSONExt.deepCopy(t.metadata),content:a.JSONExt.deepCopy(t.content),channel:t.channel,buffers:t.buffers?t.buffers.slice():[]};e.header.msg_type="update_display_data",await Promise.all(r.map((async t=>{const i=this._futures&&this._futures.get(t);i&&await i.handleMsg(e)})))}if("update_display_data"===t.header.msg_type)return!0;r=null!==(i=this._displayIdToParentIds.get(e))&&void 0!==i?i:[],-1===r.indexOf(s)&&r.push(s),this._displayIdToParentIds.set(e,r);const o=null!==(n=this._msgIdToDisplayIds.get(s))&&void 0!==n?n:[];return-1===o.indexOf(s)&&o.push(s),this._msgIdToDisplayIds.set(s,o),!1}_clearSocket(){null!==this._ws&&(this._ws.onopen=this._noOp,this._ws.onclose=this._noOp,this._ws.onerror=this._noOp,this._ws.onmessage=this._noOp,this._ws.close(),this._ws=null)}_updateStatus(e){this._status!==e&&"dead"!==this._status&&(this._status=e,b.logKernelStatus(this),this._statusChanged.emit(e),"dead"===e&&this.dispose())}_sendPending(){for(;"connected"===this.connectionStatus&&this._kernelSession!==v&&this._pendingMessages.length>0;)this._sendMessage(this._pendingMessages[0],!1),this._pendingMessages.shift()}_clearKernelState(){this._kernelSession="",this._pendingMessages=[],this._futures.forEach((e=>{e.dispose()})),this._comms.forEach((e=>{e.dispose()})),this._msgChain=Promise.resolve(),this._futures=new Map,this._comms=new Map,this._displayIdToParentIds.clear(),this._msgIdToDisplayIds.clear()}_assertCurrentMessage(e){if(this._errorIfDisposed(),e.header.session!==this._kernelSession)throw new Error(`Canceling handling of old message: ${e.header.msg_type}`)}async _handleCommOpen(e){this._assertCurrentMessage(e);const t=e.content,i=new c.CommHandler(t.target_name,t.comm_id,this,(()=>{this._unregisterComm(t.comm_id)}));this._comms.set(t.comm_id,i);try{const n=await b.loadObject(t.target_name,t.target_module,this._targetRegistry);await n(i,e)}catch(e){throw i.close(),console.error("Exception opening new comm"),e}}async _handleCommClose(e){this._assertCurrentMessage(e);const t=e.content,i=this._comms.get(t.comm_id);if(!i)return void console.error("Comm not found for comm id "+t.comm_id);this._unregisterComm(i.commId);const n=i.onClose;n&&await n(e),i.dispose()}async _handleCommMsg(e){this._assertCurrentMessage(e);const t=e.content,i=this._comms.get(t.comm_id);if(!i)return;const n=i.onMsg;n&&await n(e)}_unregisterComm(e){this._comms.delete(e)}_updateConnectionStatus(e){if(this._connectionStatus!==e){if(this._connectionStatus=e,"connecting"!==e&&(this._reconnectAttempt=0,clearTimeout(this._reconnectTimeout)),"dead"!==this.status)if("connected"===e){let e=this._kernelSession===v,t=this.requestKernelInfo(),i=!1,n=()=>{i||(i=!0,e&&this._kernelSession===v&&(this._kernelSession=""),clearTimeout(s),this._pendingMessages.length>0&&this._sendPending())};t.then(n);let s=setTimeout(n,3e3)}else this._updateStatus("unknown");this._connectionStatusChanged.emit(e)}}async _handleMessage(e){var t,i;let n=!1;if(e.parent_header&&"iopub"===e.channel&&(d.isDisplayDataMsg(e)||d.isUpdateDisplayDataMsg(e)||d.isExecuteResultMsg(e))){const i=(null!==(t=e.content.transient)&&void 0!==t?t:{}).display_id;i&&(n=await this._handleDisplayId(i,e),this._assertCurrentMessage(e))}if(!n&&e.parent_header){const t=e.parent_header,n=null===(i=this._futures)||void 0===i?void 0:i.get(t.msg_id);if(n)await n.handleMsg(e),this._assertCurrentMessage(e);else{const i=t.session===this.clientId;"iopub"!==e.channel&&i&&this._unhandledMessage.emit(e)}}if("iopub"===e.channel){switch(e.header.msg_type){case"status":{const t=e.content.execution_state;"restarting"===t&&Promise.resolve().then((async()=>{this._updateStatus("autorestarting"),this._clearKernelState(),await this.reconnect()})),this._updateStatus(t);break}case"comm_open":this.handleComms&&await this._handleCommOpen(e);break;case"comm_msg":this.handleComms&&await this._handleCommMsg(e);break;case"comm_close":this.handleComms&&await this._handleCommClose(e)}this.isDisposed||(this._assertCurrentMessage(e),this._iopubMessage.emit(e))}}_reconnect(){if(this._errorIfDisposed(),clearTimeout(this._reconnectTimeout),this._reconnectAttempt{if(t){if("undefined"==typeof requirejs)throw new Error("requirejs not found");requirejs([t],(i=>{void 0===i[e]?s(new Error(`Object '${e}' not found in module '${t}'`)):n(i[e])}),s)}else(null==i?void 0:i[e])?n(i[e]):s(new Error(`Object '${e}' not found in registry`))}))},e.getRandomIntInclusive=function(e,t){return e=Math.ceil(e),t=Math.floor(t),Math.floor(Math.random()*(t-e+1))+e}}(b||(b={}))},217:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.KernelShellFutureHandler=t.KernelControlFutureHandler=t.KernelFutureHandler=void 0;const o=i(3911),a=i(1122),l=r(i(1736));class h extends a.DisposableDelegate{constructor(e,t,i,n,s){super(e),this._status=0,this._stdin=c.noOp,this._iopub=c.noOp,this._reply=c.noOp,this._done=new o.PromiseDelegate,this._hooks=new c.HookList,this._disposeOnDone=!0,this._msg=t,i||this._setFlag(c.KernelFutureFlag.GotReply),this._disposeOnDone=n,this._kernel=s}get msg(){return this._msg}get done(){return this._done.promise}get onReply(){return this._reply}set onReply(e){this._reply=e}get onIOPub(){return this._iopub}set onIOPub(e){this._iopub=e}get onStdin(){return this._stdin}set onStdin(e){this._stdin=e}registerMessageHook(e){if(this.isDisposed)throw new Error("Kernel future is disposed");this._hooks.add(e)}removeMessageHook(e){this.isDisposed||this._hooks.remove(e)}sendInputReply(e,t){this._kernel.sendInputReply(e,t)}dispose(){this._stdin=c.noOp,this._iopub=c.noOp,this._reply=c.noOp,this._hooks=null,this._testFlag(c.KernelFutureFlag.IsDone)||(this._done.promise.catch((()=>{})),this._done.reject(new Error(`Canceled future for ${this.msg.header.msg_type} message before replies were done`))),super.dispose()}async handleMsg(e){switch(e.channel){case"control":case"shell":e.channel===this.msg.channel&&e.parent_header.msg_id===this.msg.header.msg_id&&await this._handleReply(e);break;case"stdin":await this._handleStdin(e);break;case"iopub":await this._handleIOPub(e)}}async _handleReply(e){const t=this._reply;t&&await t(e),this._replyMsg=e,this._setFlag(c.KernelFutureFlag.GotReply),this._testFlag(c.KernelFutureFlag.GotIdle)&&this._handleDone()}async _handleStdin(e){this._kernel.hasPendingInput=!0;const t=this._stdin;t&&await t(e)}async _handleIOPub(e){const t=await this._hooks.process(e),i=this._iopub;t&&i&&await i(e),l.isStatusMsg(e)&&"idle"===e.content.execution_state&&(this._setFlag(c.KernelFutureFlag.GotIdle),this._testFlag(c.KernelFutureFlag.GotReply)&&this._handleDone())}_handleDone(){this._testFlag(c.KernelFutureFlag.IsDone)||(this._setFlag(c.KernelFutureFlag.IsDone),this._done.resolve(this._replyMsg),this._disposeOnDone&&this.dispose())}_testFlag(e){return 0!=(this._status&e)}_setFlag(e){this._status|=e}}var c;t.KernelFutureHandler=h,t.KernelControlFutureHandler=class extends h{},t.KernelShellFutureHandler=class extends h{},function(e){e.noOp=()=>{};const t="function"==typeof requestAnimationFrame?requestAnimationFrame:setImmediate;let i;e.HookList=class{constructor(){this._hooks=[]}add(e){this.remove(e),this._hooks.push(e)}remove(e){const t=this._hooks.indexOf(e);t>=0&&(this._hooks[t]=null,this._scheduleCompact())}async process(e){await this._processing;const t=new o.PromiseDelegate;let i;this._processing=t.promise;for(let n=this._hooks.length-1;n>=0;n--){const s=this._hooks[n];if(null!==s){try{i=await s(e)}catch(e){i=!0,console.error(e)}if(!1===i)return t.resolve(void 0),!1}}return t.resolve(void 0),!0}_scheduleCompact(){this._compactScheduled||(this._compactScheduled=!0,t((()=>{this._processing=this._processing.then((()=>{this._compactScheduled=!1,this._compact()}))})))}_compact(){let e=0;for(let t=0,i=this._hooks.length;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},2298:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.KernelManager=void 0;const n=i(9044),s=i(6424),r=i(5247),o=i(7524),a=i(9753),l=i(5306);class h extends o.BaseManager{constructor(e={}){var t;super(e),this._isReady=!1,this._kernelConnections=new Set,this._models=new Map,this._runningChanged=new s.Signal(this),this._connectionFailure=new s.Signal(this),this._pollModels=new n.Poll({auto:!1,factory:()=>this.requestRunning(),frequency:{interval:1e4,backoff:!0,max:3e5},name:"@jupyterlab/services:KernelManager#models",standby:null!==(t=e.standby)&&void 0!==t?t:"when-hidden"}),this._ready=(async()=>{await this._pollModels.start(),await this._pollModels.tick,this._isReady=!0})()}get isReady(){return this._isReady}get ready(){return this._ready}get runningChanged(){return this._runningChanged}get connectionFailure(){return this._connectionFailure}dispose(){this.isDisposed||(this._models.clear(),this._kernelConnections.forEach((e=>e.dispose())),this._pollModels.dispose(),super.dispose())}connectTo(e){var t;const{id:i}=e.model;let n=null===(t=e.handleComms)||void 0===t||t;if(void 0===e.handleComms)for(const e of this._kernelConnections)if(e.id===i&&e.handleComms){n=!1;break}const s=new l.KernelConnection({handleComms:n,...e,serverSettings:this.serverSettings});return this._onStarted(s),this._models.has(i)||this.refreshRunning().catch((()=>{})),s}running(){return this._models.values()}async refreshRunning(){await this._pollModels.refresh(),await this._pollModels.tick}async startNew(e={},t={}){const i=await(0,a.startNew)(e,this.serverSettings);return this.connectTo({...t,model:i})}async shutdown(e){await(0,a.shutdownKernel)(e,this.serverSettings),await this.refreshRunning()}async shutdownAll(){await this.refreshRunning(),await Promise.all([...this._models.keys()].map((e=>(0,a.shutdownKernel)(e,this.serverSettings)))),await this.refreshRunning()}async findById(e){return this._models.has(e)||await this.refreshRunning(),this._models.get(e)}async requestRunning(){var e,t;let i;try{i=await(0,a.listRunning)(this.serverSettings)}catch(i){throw(i instanceof r.ServerConnection.NetworkError||503===(null===(e=i.response)||void 0===e?void 0:e.status)||424===(null===(t=i.response)||void 0===t?void 0:t.status))&&this._connectionFailure.emit(i),i}this.isDisposed||this._models.size===i.length&&i.every((e=>{const t=this._models.get(e.id);return!!t&&t.connections===e.connections&&t.execution_state===e.execution_state&&t.last_activity===e.last_activity&&t.name===e.name&&t.reason===e.reason&&t.traceback===e.traceback}))||(this._models=new Map(i.map((e=>[e.id,e]))),this._kernelConnections.forEach((e=>{this._models.has(e.id)||e.handleShutdown()})),this._runningChanged.emit(i))}_onStarted(e){this._kernelConnections.add(e),e.statusChanged.connect(this._onStatusChanged,this),e.disposed.connect(this._onDisposed,this)}_onDisposed(e){this._kernelConnections.delete(e),this.refreshRunning().catch((()=>{}))}_onStatusChanged(e,t){"dead"===t&&this.refreshRunning().catch((()=>{}))}}t.KernelManager=h,function(e){e.NoopManager=class extends e{constructor(){super(...arguments),this._readyPromise=new Promise((()=>{}))}get isActive(){return!1}get parentReady(){return super.ready}async startNew(e={},t={}){return Promise.reject(new Error("Not implemented in no-op Kernel Manager"))}connectTo(e){throw new Error("Not implemented in no-op Kernel Manager")}async shutdown(e){return Promise.reject(new Error("Not implemented in no-op Kernel Manager"))}get ready(){return this.parentReady.then((()=>this._readyPromise))}async requestRunning(){return Promise.resolve()}}}(h=t.KernelManager||(t.KernelManager={}))},1736:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.supportedKernelWebSocketProtocols=t.isInputReplyMsg=t.isInputRequestMsg=t.isDebugReplyMsg=t.isDebugRequestMsg=t.isExecuteReplyMsg=t.isInfoRequestMsg=t.isCommMsgMsg=t.isCommCloseMsg=t.isCommOpenMsg=t.isDebugEventMsg=t.isClearOutputMsg=t.isStatusMsg=t.isErrorMsg=t.isExecuteResultMsg=t.isExecuteInputMsg=t.isUpdateDisplayDataMsg=t.isDisplayDataMsg=t.isStreamMsg=t.createMessage=void 0;const n=i(3911);t.createMessage=function(e){var t,i,s,r,o;return{buffers:null!==(t=e.buffers)&&void 0!==t?t:[],channel:e.channel,content:e.content,header:{date:(new Date).toISOString(),msg_id:null!==(i=e.msgId)&&void 0!==i?i:n.UUID.uuid4(),msg_type:e.msgType,session:e.session,username:null!==(s=e.username)&&void 0!==s?s:"",version:"5.2"},metadata:null!==(r=e.metadata)&&void 0!==r?r:{},parent_header:null!==(o=e.parentHeader)&&void 0!==o?o:{}}},t.isStreamMsg=function(e){return"stream"===e.header.msg_type},t.isDisplayDataMsg=function(e){return"display_data"===e.header.msg_type},t.isUpdateDisplayDataMsg=function(e){return"update_display_data"===e.header.msg_type},t.isExecuteInputMsg=function(e){return"execute_input"===e.header.msg_type},t.isExecuteResultMsg=function(e){return"execute_result"===e.header.msg_type},t.isErrorMsg=function(e){return"error"===e.header.msg_type},t.isStatusMsg=function(e){return"status"===e.header.msg_type},t.isClearOutputMsg=function(e){return"clear_output"===e.header.msg_type},t.isDebugEventMsg=function(e){return"debug_event"===e.header.msg_type},t.isCommOpenMsg=function(e){return"comm_open"===e.header.msg_type},t.isCommCloseMsg=function(e){return"comm_close"===e.header.msg_type},t.isCommMsgMsg=function(e){return"comm_msg"===e.header.msg_type},t.isInfoRequestMsg=function(e){return"kernel_info_request"===e.header.msg_type},t.isExecuteReplyMsg=function(e){return"execute_reply"===e.header.msg_type},t.isDebugRequestMsg=function(e){return"debug_request"===e.header.msg_type},t.isDebugReplyMsg=function(e){return"debug_reply"===e.header.msg_type},t.isInputRequestMsg=function(e){return"input_request"===e.header.msg_type},t.isInputReplyMsg=function(e){return"input_reply"===e.header.msg_type},(t.supportedKernelWebSocketProtocols||(t.supportedKernelWebSocketProtocols={})).v1KernelWebsocketJupyterOrg="v1.kernel.websocket.jupyter.org"},9753:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getKernelModel=t.shutdownKernel=t.interruptKernel=t.restartKernel=t.startNew=t.listRunning=t.KERNEL_SERVICE_URL=void 0;const n=i(538),s=i(4251),r=i(776);t.KERNEL_SERVICE_URL="api/kernels",t.listRunning=async function(e=n.ServerConnection.makeSettings()){const i=s.URLExt.join(e.baseUrl,t.KERNEL_SERVICE_URL),o=await n.ServerConnection.makeRequest(i,{},e);if(200!==o.status)throw await n.ServerConnection.ResponseError.create(o);const a=await o.json();return(0,r.validateModels)(a),a},t.startNew=async function(e={},i=n.ServerConnection.makeSettings()){const o=s.URLExt.join(i.baseUrl,t.KERNEL_SERVICE_URL),a={method:"POST",body:JSON.stringify(e)},l=await n.ServerConnection.makeRequest(o,a,i);if(201!==l.status)throw await n.ServerConnection.ResponseError.create(l);const h=await l.json();return(0,r.validateModel)(h),h},t.restartKernel=async function(e,i=n.ServerConnection.makeSettings()){const o=s.URLExt.join(i.baseUrl,t.KERNEL_SERVICE_URL,encodeURIComponent(e),"restart"),a=await n.ServerConnection.makeRequest(o,{method:"POST"},i);if(200!==a.status)throw await n.ServerConnection.ResponseError.create(a);const l=await a.json();(0,r.validateModel)(l)},t.interruptKernel=async function(e,i=n.ServerConnection.makeSettings()){const r=s.URLExt.join(i.baseUrl,t.KERNEL_SERVICE_URL,encodeURIComponent(e),"interrupt"),o=await n.ServerConnection.makeRequest(r,{method:"POST"},i);if(204!==o.status)throw await n.ServerConnection.ResponseError.create(o)},t.shutdownKernel=async function(e,i=n.ServerConnection.makeSettings()){const r=s.URLExt.join(i.baseUrl,t.KERNEL_SERVICE_URL,encodeURIComponent(e)),o=await n.ServerConnection.makeRequest(r,{method:"DELETE"},i);if(404===o.status){const t=`The kernel "${e}" does not exist on the server`;console.warn(t)}else if(204!==o.status)throw await n.ServerConnection.ResponseError.create(o)},t.getKernelModel=async function(e,i=n.ServerConnection.makeSettings()){const o=s.URLExt.join(i.baseUrl,t.KERNEL_SERVICE_URL,encodeURIComponent(e)),a=await n.ServerConnection.makeRequest(o,{},i);if(404===a.status)return;if(200!==a.status)throw await n.ServerConnection.ResponseError.create(a);const l=await a.json();return(0,r.validateModel)(l),l}},8206:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.deserialize=t.serialize=void 0;const o=r(i(1736));var a;t.serialize=function(e,t=""){return t===o.supportedKernelWebSocketProtocols.v1KernelWebsocketJupyterOrg?a.serializeV1KernelWebsocketJupyterOrg(e):a.serializeDefault(e)},t.deserialize=function(e,t=""){return t===o.supportedKernelWebSocketProtocols.v1KernelWebsocketJupyterOrg?a.deserializeV1KernelWebsocketJupyterOrg(e):a.deserializeDefault(e)},function(e){e.deserializeV1KernelWebsocketJupyterOrg=function(e){let t;const i=new DataView(e),n=Number(i.getBigUint64(0,!0));let s=[];for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateModels=t.validateModel=t.validateMessage=void 0;const n=i(3247),s=["username","version","session","msg_id","msg_type"],r={stream:{name:"string",text:"string"},display_data:{data:"object",metadata:"object"},execute_input:{code:"string",execution_count:"number"},execute_result:{execution_count:"number",data:"object",metadata:"object"},error:{ename:"string",evalue:"string",traceback:"object"},status:{execution_state:["string",["starting","idle","busy","restarting","dead"]]},clear_output:{wait:"boolean"},comm_open:{comm_id:"string",target_name:"string",data:"object"},comm_msg:{comm_id:"string",data:"object"},comm_close:{comm_id:"string"},shutdown_reply:{restart:"boolean"}};function o(e){(0,n.validateProperty)(e,"name","string"),(0,n.validateProperty)(e,"id","string")}t.validateMessage=function(e){(0,n.validateProperty)(e,"metadata","object"),(0,n.validateProperty)(e,"content","object"),(0,n.validateProperty)(e,"channel","string"),function(e){for(let t=0;to(e)))}},3490:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return s(t,e),t},o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),t.KernelSpecAPI=t.KernelSpec=void 0;const a=r(i(6060));t.KernelSpec=a;const l=r(i(1598));t.KernelSpecAPI=l,o(i(7307),t)},6060:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7307:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.KernelSpecManager=void 0;const o=i(3911),a=i(9044),l=i(6424),h=r(i(1598)),c=i(7524);class d extends c.BaseManager{constructor(e={}){var t;super(e),this._isReady=!1,this._connectionFailure=new l.Signal(this),this._specs=null,this._specsChanged=new l.Signal(this),this._ready=Promise.all([this.requestSpecs()]).then((e=>{})).catch((e=>{})).then((()=>{this.isDisposed||(this._isReady=!0)})),this._pollSpecs=new a.Poll({auto:!1,factory:()=>this.requestSpecs(),frequency:{interval:61e3,backoff:!0,max:3e5},name:"@jupyterlab/services:KernelSpecManager#specs",standby:null!==(t=e.standby)&&void 0!==t?t:"when-hidden"}),this.ready.then((()=>{this._pollSpecs.start()}))}get isReady(){return this._isReady}get ready(){return this._ready}get specs(){return this._specs}get specsChanged(){return this._specsChanged}get connectionFailure(){return this._connectionFailure}dispose(){this._pollSpecs.dispose(),super.dispose()}async refreshSpecs(){await this._pollSpecs.refresh(),await this._pollSpecs.tick}async requestSpecs(){const e=await h.getSpecs(this.serverSettings);this.isDisposed||o.JSONExt.deepEqual(e,this._specs)||(this._specs=e,this._specsChanged.emit(e))}}t.KernelSpecManager=d},1598:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getSpecs=void 0;const n=i(538),s=i(4286),r=i(4251);t.getSpecs=async function(e=n.ServerConnection.makeSettings()){const t=r.URLExt.join(e.baseUrl,"api/kernelspecs"),i=await n.ServerConnection.makeRequest(t,{},e);if(200!==i.status)throw await n.ServerConnection.ResponseError.create(i);const o=await i.json();return(0,s.validateSpecModels)(o)}},4286:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateSpecModels=t.validateSpecModel=void 0;const n=i(3247);function s(e){const t=e.spec;if(!t)throw new Error("Invalid kernel spec");(0,n.validateProperty)(e,"name","string"),(0,n.validateProperty)(e,"resources","object"),(0,n.validateProperty)(t,"language","string"),(0,n.validateProperty)(t,"display_name","string"),(0,n.validateProperty)(t,"argv","array");let i=null;t.hasOwnProperty("metadata")&&((0,n.validateProperty)(t,"metadata","object"),i=t.metadata);let s=null;return t.hasOwnProperty("env")&&((0,n.validateProperty)(t,"env","object"),s=t.env),{name:e.name,resources:e.resources,language:t.language,display_name:t.display_name,argv:t.argv,metadata:i,env:s}}t.validateSpecModel=s,t.validateSpecModels=function(e){if(!e.hasOwnProperty("kernelspecs"))throw new Error("No kernelspecs found");let t=Object.keys(e.kernelspecs);const i=Object.create(null);let n=e.default;for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ServiceManager=void 0;const n=i(6424),s=i(4011),r=i(1708),o=i(5657),a=i(5674),l=i(3490),h=i(6624),c=i(538),d=i(3561),u=i(9188),p=i(3185),f=i(1014),m=i(9090);t.ServiceManager=class{constructor(e={}){var t,i;this._isDisposed=!1,this._connectionFailure=new n.Signal(this),this._isReady=!1;const g=e.defaultDrive,v=null!==(t=e.serverSettings)&&void 0!==t?t:c.ServerConnection.makeSettings(),O={defaultDrive:g,serverSettings:v,standby:null!==(i=e.standby)&&void 0!==i?i:"when-hidden"};this.serverSettings=v,this.contents=e.contents||new r.ContentsManager(O),this.events=e.events||new o.EventManager(O),this.kernels=e.kernels||new a.KernelManager(O),this.sessions=e.sessions||new d.SessionManager({...O,kernelManager:this.kernels}),this.settings=e.settings||new u.SettingManager(O),this.terminals=e.terminals||new p.TerminalManager(O),this.builder=e.builder||new s.BuildManager(O),this.workspaces=e.workspaces||new m.WorkspaceManager(O),this.nbconvert=e.nbconvert||new h.NbConvertManager(O),this.kernelspecs=e.kernelspecs||new l.KernelSpecManager(O),this.user=e.user||new f.UserManager(O),this.kernelspecs.connectionFailure.connect(this._onConnectionFailure,this),this.sessions.connectionFailure.connect(this._onConnectionFailure,this),this.terminals.connectionFailure.connect(this._onConnectionFailure,this);const b=[this.sessions.ready,this.kernelspecs.ready];this.terminals.isAvailable()&&b.push(this.terminals.ready),this._readyPromise=Promise.all(b).then((()=>{this._isReady=!0}))}get connectionFailure(){return this._connectionFailure}get isDisposed(){return this._isDisposed}dispose(){this.isDisposed||(this._isDisposed=!0,n.Signal.clearData(this),this.contents.dispose(),this.events.dispose(),this.sessions.dispose(),this.terminals.dispose())}get isReady(){return this._isReady}get ready(){return this._readyPromise}_onConnectionFailure(e,t){this._connectionFailure.emit(t)}}},6624:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NbConvertManager=void 0;const n=i(4251),s=i(538),r=i(3911);t.NbConvertManager=class{constructor(e={}){var t;this._exportFormats=null,this.serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:s.ServerConnection.makeSettings()}async fetchExportFormats(){this._requestingFormats=new r.PromiseDelegate,this._exportFormats=null;const e=this.serverSettings.baseUrl,t=n.URLExt.join(e,"api/nbconvert"),{serverSettings:i}=this,o=await s.ServerConnection.makeRequest(t,{},i);if(200!==o.status)throw await s.ServerConnection.ResponseError.create(o);const a=await o.json(),l={};return Object.keys(a).forEach((function(e){const t=a[e].output_mimetype;l[e]={output_mimetype:t}})),this._exportFormats=l,this._requestingFormats.resolve(l),l}async getExportFormats(e=!0){return this._requestingFormats?this._requestingFormats.promise:e||!this._exportFormats?await this.fetchExportFormats():this._exportFormats}}},538:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ServerConnection=void 0;const n=i(4251);let s;var r,o;s="undefined"==typeof window?i(8354):WebSocket,function(e){e.makeSettings=function(e){return o.makeSettings(e)},e.makeRequest=function(e,t,i){return o.handleRequest(e,t,i)};class t extends Error{static async create(e){try{const i=await e.json(),{message:n,traceback:s}=i;return s&&console.error(s),new t(e,null!=n?n:t._defaultMessage(e),null!=s?s:"")}catch(i){return console.debug(i),new t(e)}}constructor(e,i=t._defaultMessage(e),n=""){super(i),this.response=e,this.traceback=n}static _defaultMessage(e){return`Invalid response: ${e.status} ${e.statusText}`}}e.ResponseError=t;class i extends TypeError{constructor(e){super(e.message),this.stack=e.stack}}e.NetworkError=i}(r=t.ServerConnection||(t.ServerConnection={})),function(e){e.makeSettings=function(e={}){var t;const i=n.PageConfig.getBaseUrl(),r=n.PageConfig.getWsUrl(),o=n.URLExt.normalize(e.baseUrl)||i;let a=e.wsUrl;return a||o!==i||(a=r),a||0!==o.indexOf("http")||(a="ws"+o.slice(4)),a=null!=a?a:r,{init:{cache:"no-store",credentials:"same-origin"},fetch,Headers,Request,WebSocket:s,token:n.PageConfig.getToken(),appUrl:n.PageConfig.getOption("appUrl"),appendToken:"undefined"==typeof window||"undefined"!=typeof process&&void 0!==(null===(t=null===process||void 0===process?void 0:{})||void 0===t?void 0:t.JEST_WORKER_ID)||n.URLExt.getHostName(i)!==n.URLExt.getHostName(a),...e,baseUrl:o,wsUrl:a}},e.handleRequest=function(e,t,i){var n;if(0!==e.indexOf(i.baseUrl))throw new Error("Can only be used for notebook server requests");"no-store"===(null!==(n=t.cache)&&void 0!==n?n:i.init.cache)&&(e+=(/\?/.test(e)?"&":"?")+(new Date).getTime());const s=new i.Request(e,{...i.init,...t});let o=!1;if(i.token&&(o=!0,s.headers.append("Authorization",`token ${i.token}`)),"undefined"!=typeof document&&(null===document||void 0===document?void 0:document.cookie)){const e=function(e){const t=document.cookie.match("\\b_xsrf=([^;]*)\\b");return null==t?void 0:t[1]}();void 0!==e&&(o=!0,s.headers.append("X-XSRFToken",e))}return!s.headers.has("Content-Type")&&o&&s.headers.set("Content-Type","application/json"),i.fetch.call(null,s).catch((e=>{throw new r.NetworkError(e)}))}}(o||(o={}))},6512:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SessionConnection=void 0;const n=i(6424),s=i(5247),r=i(1975),o=i(3911);t.SessionConnection=class{constructor(e){var t,i,r,a;this._id="",this._path="",this._name="",this._type="",this._kernel=null,this._isDisposed=!1,this._disposed=new n.Signal(this),this._kernelChanged=new n.Signal(this),this._statusChanged=new n.Signal(this),this._connectionStatusChanged=new n.Signal(this),this._pendingInput=new n.Signal(this),this._iopubMessage=new n.Signal(this),this._unhandledMessage=new n.Signal(this),this._anyMessage=new n.Signal(this),this._propertyChanged=new n.Signal(this),this._id=e.model.id,this._name=e.model.name,this._path=e.model.path,this._type=e.model.type,this._username=null!==(t=e.username)&&void 0!==t?t:"",this._clientId=null!==(i=e.clientId)&&void 0!==i?i:o.UUID.uuid4(),this._connectToKernel=e.connectToKernel,this._kernelConnectionOptions=null!==(r=e.kernelConnectionOptions)&&void 0!==r?r:{},this.serverSettings=null!==(a=e.serverSettings)&&void 0!==a?a:s.ServerConnection.makeSettings(),this.setupKernel(e.model.kernel)}get disposed(){return this._disposed}get kernelChanged(){return this._kernelChanged}get statusChanged(){return this._statusChanged}get connectionStatusChanged(){return this._connectionStatusChanged}get pendingInput(){return this._pendingInput}get iopubMessage(){return this._iopubMessage}get unhandledMessage(){return this._unhandledMessage}get anyMessage(){return this._anyMessage}get propertyChanged(){return this._propertyChanged}get id(){return this._id}get kernel(){return this._kernel}get path(){return this._path}get type(){return this._type}get name(){return this._name}get model(){return{id:this.id,kernel:this.kernel&&{id:this.kernel.id,name:this.kernel.name},path:this._path,type:this._type,name:this._name}}get isDisposed(){return this._isDisposed}update(e){const t=this.model;if(this._path=e.path,this._name=e.name,this._type=e.type,null===this._kernel&&null!==e.kernel||null!==this._kernel&&null===e.kernel||null!==this._kernel&&null!==e.kernel&&this._kernel.id!==e.kernel.id){null!==this._kernel&&this._kernel.dispose();const t=this._kernel||null;this.setupKernel(e.kernel);const i=this._kernel||null;this._kernelChanged.emit({name:"kernel",oldValue:t,newValue:i})}this._handleModelChange(t)}dispose(){if(!this.isDisposed){if(this._isDisposed=!0,this._disposed.emit(),this._kernel){this._kernel.dispose();const e=this._kernel;this._kernel=null;const t=this._kernel;this._kernelChanged.emit({name:"kernel",oldValue:e,newValue:t})}n.Signal.clearData(this)}}async setPath(e){if(this.isDisposed)throw new Error("Session is disposed");await this._patch({path:e})}async setName(e){if(this.isDisposed)throw new Error("Session is disposed");await this._patch({name:e})}async setType(e){if(this.isDisposed)throw new Error("Session is disposed");await this._patch({type:e})}async changeKernel(e){if(this.isDisposed)throw new Error("Session is disposed");return await this._patch({kernel:e}),this.kernel}async shutdown(){if(this.isDisposed)throw new Error("Session is disposed");await(0,r.shutdownSession)(this.id,this.serverSettings),this.dispose()}setupKernel(e){if(null===e)return void(this._kernel=null);const t=this._connectToKernel({...this._kernelConnectionOptions,model:e,username:this._username,clientId:this._clientId,serverSettings:this.serverSettings});this._kernel=t,t.statusChanged.connect(this.onKernelStatus,this),t.connectionStatusChanged.connect(this.onKernelConnectionStatus,this),t.pendingInput.connect(this.onPendingInput,this),t.unhandledMessage.connect(this.onUnhandledMessage,this),t.iopubMessage.connect(this.onIOPubMessage,this),t.anyMessage.connect(this.onAnyMessage,this)}onKernelStatus(e,t){this._statusChanged.emit(t)}onKernelConnectionStatus(e,t){this._connectionStatusChanged.emit(t)}onPendingInput(e,t){this._pendingInput.emit(t)}onIOPubMessage(e,t){this._iopubMessage.emit(t)}onUnhandledMessage(e,t){this._unhandledMessage.emit(t)}onAnyMessage(e,t){this._anyMessage.emit(t)}async _patch(e){const t=await(0,r.updateSession)({...e,id:this._id},this.serverSettings);return this.update(t),t}_handleModelChange(e){e.name!==this._name&&this._propertyChanged.emit("name"),e.type!==this._type&&this._propertyChanged.emit("type"),e.path!==this._path&&this._propertyChanged.emit("path")}}},3561:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return s(t,e),t},o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),t.SessionAPI=t.Session=void 0;const a=r(i(7993));t.Session=a;const l=r(i(1975));t.SessionAPI=l,o(i(8137),t)},8137:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SessionManager=void 0;const n=i(9044),s=i(6424),r=i(538),o=i(7524),a=i(6512),l=i(1975);class h extends o.BaseManager{constructor(e){var t;super(e),this._isReady=!1,this._sessionConnections=new Set,this._models=new Map,this._runningChanged=new s.Signal(this),this._connectionFailure=new s.Signal(this),this._connectToKernel=e=>this._kernelManager.connectTo(e),this._kernelManager=e.kernelManager,this._pollModels=new n.Poll({auto:!1,factory:()=>this.requestRunning(),frequency:{interval:1e4,backoff:!0,max:3e5},name:"@jupyterlab/services:SessionManager#models",standby:null!==(t=e.standby)&&void 0!==t?t:"when-hidden"}),this._ready=(async()=>{await this._pollModels.start(),await this._pollModels.tick,this._kernelManager.isActive&&await this._kernelManager.ready,this._isReady=!0})()}get isReady(){return this._isReady}get ready(){return this._ready}get runningChanged(){return this._runningChanged}get connectionFailure(){return this._connectionFailure}dispose(){this.isDisposed||(this._models.clear(),this._sessionConnections.forEach((e=>e.dispose())),this._pollModels.dispose(),super.dispose())}connectTo(e){const t=new a.SessionConnection({...e,connectToKernel:this._connectToKernel,serverSettings:this.serverSettings});return this._onStarted(t),this._models.has(e.model.id)||this.refreshRunning().catch((()=>{})),t}running(){return this._models.values()}async refreshRunning(){await this._pollModels.refresh(),await this._pollModels.tick}async startNew(e,t={}){const i=await(0,l.startSession)(e,this.serverSettings);return await this.refreshRunning(),this.connectTo({...t,model:i})}async shutdown(e){await(0,l.shutdownSession)(e,this.serverSettings),await this.refreshRunning()}async shutdownAll(){await this.refreshRunning(),await Promise.all([...this._models.keys()].map((e=>(0,l.shutdownSession)(e,this.serverSettings)))),await this.refreshRunning()}async stopIfNeeded(e){try{const t=(await(0,l.listRunning)(this.serverSettings)).filter((t=>t.path===e));if(1===t.length){const e=t[0].id;await this.shutdown(e)}}catch(e){}}async findById(e){return this._models.has(e)||await this.refreshRunning(),this._models.get(e)}async findByPath(e){for(const t of this._models.values())if(t.path===e)return t;await this.refreshRunning();for(const t of this._models.values())if(t.path===e)return t}async requestRunning(){var e,t;let i;try{i=await(0,l.listRunning)(this.serverSettings)}catch(i){throw(i instanceof r.ServerConnection.NetworkError||503===(null===(e=i.response)||void 0===e?void 0:e.status)||424===(null===(t=i.response)||void 0===t?void 0:t.status))&&this._connectionFailure.emit(i),i}this.isDisposed||this._models.size===i.length&&i.every((e=>{var t,i,n,s;const r=this._models.get(e.id);return!!r&&(null===(t=r.kernel)||void 0===t?void 0:t.id)===(null===(i=e.kernel)||void 0===i?void 0:i.id)&&(null===(n=r.kernel)||void 0===n?void 0:n.name)===(null===(s=e.kernel)||void 0===s?void 0:s.name)&&r.name===e.name&&r.path===e.path&&r.type===e.type}))||(this._models=new Map(i.map((e=>[e.id,e]))),this._sessionConnections.forEach((e=>{this._models.has(e.id)?e.update(this._models.get(e.id)):e.dispose()})),this._runningChanged.emit(i))}_onStarted(e){this._sessionConnections.add(e),e.disposed.connect(this._onDisposed,this),e.propertyChanged.connect(this._onChanged,this),e.kernelChanged.connect(this._onChanged,this)}_onDisposed(e){this._sessionConnections.delete(e),this.refreshRunning().catch((()=>{}))}_onChanged(){this.refreshRunning().catch((()=>{}))}}t.SessionManager=h,function(e){e.NoopManager=class extends e{constructor(){super(...arguments),this._readyPromise=new Promise((()=>{}))}get isActive(){return!1}get parentReady(){return super.ready}async startNew(e,t={}){return Promise.reject(new Error("Not implemented in no-op Session Manager"))}connectTo(e){throw Error("Not implemented in no-op Session Manager")}get ready(){return this.parentReady.then((()=>this._readyPromise))}async shutdown(e){return Promise.reject(new Error("Not implemented in no-op Session Manager"))}async requestRunning(){return Promise.resolve()}}}(h=t.SessionManager||(t.SessionManager={}))},1975:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.updateSession=t.startSession=t.getSessionModel=t.shutdownSession=t.getSessionUrl=t.listRunning=t.SESSION_SERVICE_URL=void 0;const n=i(538),s=i(4251),r=i(9590);function o(e,i){return s.URLExt.join(e,t.SESSION_SERVICE_URL,i)}t.SESSION_SERVICE_URL="api/sessions",t.listRunning=async function(e=n.ServerConnection.makeSettings()){const i=s.URLExt.join(e.baseUrl,t.SESSION_SERVICE_URL),o=await n.ServerConnection.makeRequest(i,{},e);if(200!==o.status)throw await n.ServerConnection.ResponseError.create(o);const a=await o.json();if(!Array.isArray(a))throw new Error("Invalid Session list");return a.forEach((e=>{(0,r.updateLegacySessionModel)(e),(0,r.validateModel)(e)})),a},t.getSessionUrl=o,t.shutdownSession=async function(e,t=n.ServerConnection.makeSettings()){var i;const s=o(t.baseUrl,e),r=await n.ServerConnection.makeRequest(s,{method:"DELETE"},t);if(404===r.status){const t=null!==(i=(await r.json()).message)&&void 0!==i?i:`The session "${e}"" does not exist on the server`;console.warn(t)}else{if(410===r.status)throw new n.ServerConnection.ResponseError(r,"The kernel was deleted but the session was not");if(204!==r.status)throw await n.ServerConnection.ResponseError.create(r)}},t.getSessionModel=async function(e,t=n.ServerConnection.makeSettings()){const i=o(t.baseUrl,e),s=await n.ServerConnection.makeRequest(i,{},t);if(200!==s.status)throw await n.ServerConnection.ResponseError.create(s);const a=await s.json();return(0,r.updateLegacySessionModel)(a),(0,r.validateModel)(a),a},t.startSession=async function(e,i=n.ServerConnection.makeSettings()){const o=s.URLExt.join(i.baseUrl,t.SESSION_SERVICE_URL),a={method:"POST",body:JSON.stringify(e)},l=await n.ServerConnection.makeRequest(o,a,i);if(201!==l.status)throw await n.ServerConnection.ResponseError.create(l);const h=await l.json();return(0,r.updateLegacySessionModel)(h),(0,r.validateModel)(h),h},t.updateSession=async function(e,t=n.ServerConnection.makeSettings()){const i=o(t.baseUrl,e.id),s={method:"PATCH",body:JSON.stringify(e)},a=await n.ServerConnection.makeRequest(i,s,t);if(200!==a.status)throw await n.ServerConnection.ResponseError.create(a);const l=await a.json();return(0,r.updateLegacySessionModel)(l),(0,r.validateModel)(l),l}},7993:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},9590:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateModels=t.updateLegacySessionModel=t.validateModel=void 0;const n=i(776),s=i(3247);function r(e){(0,s.validateProperty)(e,"id","string"),(0,s.validateProperty)(e,"type","string"),(0,s.validateProperty)(e,"name","string"),(0,s.validateProperty)(e,"path","string"),(0,s.validateProperty)(e,"kernel","object"),(0,n.validateModel)(e.kernel)}t.validateModel=r,t.updateLegacySessionModel=function(e){void 0===e.path&&void 0!==e.notebook&&(e.path=e.notebook.path,e.type="notebook",e.name="")},t.validateModels=function(e){if(!Array.isArray(e))throw new Error("Invalid session list");e.forEach((e=>r(e)))}},9188:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SettingManager=void 0;const n=i(4251),s=i(5895),r=i(538);class o extends s.DataConnector{constructor(e={}){var t;super(),this.serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:r.ServerConnection.makeSettings()}async fetch(e){if(!e)throw new Error("Plugin `id` parameter is required for settings fetch.");const{serverSettings:t}=this,{baseUrl:i,appUrl:n}=t,{makeRequest:s,ResponseError:o}=r.ServerConnection,l=i+n,h=a.url(l,e),c=await s(h,{},t);if(200!==c.status)throw await o.create(c);return c.json()}async list(e){var t,i,n,s;const{serverSettings:o}=this,{baseUrl:l,appUrl:h}=o,{makeRequest:c,ResponseError:d}=r.ServerConnection,u=l+h,p=a.url(u,"","ids"===e),f=await c(p,{},o);if(200!==f.status)throw new d(f);const m=await f.json(),g=null!==(i=null===(t=null==m?void 0:m.settings)||void 0===t?void 0:t.map((e=>e.id)))&&void 0!==i?i:[];let v=[];return e||(v=null!==(s=null===(n=null==m?void 0:m.settings)||void 0===n?void 0:n.map((e=>(e.data={composite:{},user:{}},e))))&&void 0!==s?s:[]),{ids:g,values:v}}async save(e,t){const{serverSettings:i}=this,{baseUrl:n,appUrl:s}=i,{makeRequest:o,ResponseError:l}=r.ServerConnection,h=n+s,c=a.url(h,e),d={body:JSON.stringify({raw:t}),method:"PUT"},u=await o(c,d,i);if(204!==u.status)throw new l(u)}}var a;t.SettingManager=o,function(e){e.url=function(e,t,i){const s=i?n.URLExt.objectToQueryString({ids_only:!0}):"";return`${n.URLExt.join(e,"api/settings",t)}${s}`}}(a||(a={}))},8354:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=WebSocket},7685:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TerminalConnection=void 0;const n=i(4251),s=i(3911),r=i(6424),o=i(5247),a=i(7384);class l{constructor(e){var t;this._createSocket=()=>{this._errorIfDisposed(),this._clearSocket(),this._updateConnectionStatus("connecting");const e=this._name,t=this.serverSettings;let i=n.URLExt.join(t.wsUrl,"terminals","websocket",encodeURIComponent(e));const s=t.token;t.appendToken&&""!==s&&(i+=`?token=${encodeURIComponent(s)}`),this._ws=new t.WebSocket(i),this._ws.onmessage=this._onWSMessage,this._ws.onclose=this._onWSClose,this._ws.onerror=this._onWSClose},this._onWSMessage=e=>{if(this._isDisposed)return;const t=JSON.parse(e.data);"disconnect"===t[0]&&this.dispose(),"connecting"!==this._connectionStatus?this._messageReceived.emit({type:t[0],content:t.slice(1)}):"setup"===t[0]&&this._updateConnectionStatus("connected")},this._onWSClose=e=>{console.warn(`Terminal websocket closed: ${e.code}`),this.isDisposed||this._reconnect()},this._connectionStatus="connecting",this._connectionStatusChanged=new r.Signal(this),this._isDisposed=!1,this._disposed=new r.Signal(this),this._messageReceived=new r.Signal(this),this._reconnectTimeout=null,this._ws=null,this._noOp=()=>{},this._reconnectLimit=7,this._reconnectAttempt=0,this._pendingMessages=[],this._name=e.model.name,this.serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:o.ServerConnection.makeSettings(),this._createSocket()}get disposed(){return this._disposed}get messageReceived(){return this._messageReceived}get name(){return this._name}get model(){return{name:this._name}}get isDisposed(){return this._isDisposed}dispose(){this._isDisposed||(this._isDisposed=!0,this._disposed.emit(),this._updateConnectionStatus("disconnected"),this._clearSocket(),r.Signal.clearData(this))}send(e){this._sendMessage(e)}_sendMessage(e,t=!0){if(!this._isDisposed&&e.content)if("connected"===this.connectionStatus&&this._ws){const t=[e.type,...e.content];this._ws.send(JSON.stringify(t))}else{if(!t)throw new Error(`Could not send message: ${JSON.stringify(e)}`);this._pendingMessages.push(e)}}_sendPending(){for(;"connected"===this.connectionStatus&&this._pendingMessages.length>0;)this._sendMessage(this._pendingMessages[0],!1),this._pendingMessages.shift()}reconnect(){this._errorIfDisposed();const e=new s.PromiseDelegate,t=(i,n)=>{"connected"===n?(e.resolve(),this.connectionStatusChanged.disconnect(t,this)):"disconnected"===n&&(e.reject(new Error("Terminal connection disconnected")),this.connectionStatusChanged.disconnect(t,this))};return this.connectionStatusChanged.connect(t,this),this._reconnectAttempt=0,this._reconnect(),e.promise}_reconnect(){if(this._errorIfDisposed(),clearTimeout(this._reconnectTimeout),this._reconnectAttempt{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TerminalManager=void 0;const n=i(9044),s=i(6424),r=i(5247),o=i(7524),a=i(7384),l=i(7685);class h extends o.BaseManager{constructor(e={}){var t;if(super(e),this._isReady=!1,this._names=[],this._terminalConnections=new Set,this._runningChanged=new s.Signal(this),this._connectionFailure=new s.Signal(this),!this.isAvailable())return this._ready=Promise.reject("Terminals unavailable"),void this._ready.catch((e=>{}));this._pollModels=new n.Poll({auto:!1,factory:()=>this.requestRunning(),frequency:{interval:1e4,backoff:!0,max:3e5},name:"@jupyterlab/services:TerminalManager#models",standby:null!==(t=e.standby)&&void 0!==t?t:"when-hidden"}),this._ready=(async()=>{await this._pollModels.start(),await this._pollModels.tick,this._isReady=!0})()}get isReady(){return this._isReady}get ready(){return this._ready}get runningChanged(){return this._runningChanged}get connectionFailure(){return this._connectionFailure}dispose(){this.isDisposed||(this._names.length=0,this._terminalConnections.forEach((e=>e.dispose())),this._pollModels.dispose(),super.dispose())}isAvailable(){return(0,a.isAvailable)()}connectTo(e){const t=new l.TerminalConnection({...e,serverSettings:this.serverSettings});return this._onStarted(t),this._names.includes(e.model.name)||this.refreshRunning().catch((()=>{})),t}running(){return this._models[Symbol.iterator]()}async refreshRunning(){await this._pollModels.refresh(),await this._pollModels.tick}async startNew(e){const t=await(0,a.startNew)(this.serverSettings,null==e?void 0:e.name,null==e?void 0:e.cwd);return await this.refreshRunning(),this.connectTo({model:t})}async shutdown(e){await(0,a.shutdownTerminal)(e,this.serverSettings),await this.refreshRunning()}async shutdownAll(){await this.refreshRunning(),await Promise.all(this._names.map((e=>(0,a.shutdownTerminal)(e,this.serverSettings)))),await this.refreshRunning()}async requestRunning(){var e,t;let i;try{i=await(0,a.listRunning)(this.serverSettings)}catch(i){throw(i instanceof r.ServerConnection.NetworkError||503===(null===(e=i.response)||void 0===e?void 0:e.status)||424===(null===(t=i.response)||void 0===t?void 0:t.status))&&this._connectionFailure.emit(i),i}if(this.isDisposed)return;const n=i.map((({name:e})=>e)).sort();n!==this._names&&(this._names=n,this._terminalConnections.forEach((e=>{n.includes(e.name)||e.dispose()})),this._runningChanged.emit(this._models))}_onStarted(e){this._terminalConnections.add(e),e.disposed.connect(this._onDisposed,this)}_onDisposed(e){this._terminalConnections.delete(e),this.refreshRunning().catch((()=>{}))}get _models(){return this._names.map((e=>({name:e})))}}t.TerminalManager=h,function(e){e.NoopManager=class extends e{constructor(){super(...arguments),this._readyPromise=new Promise((()=>{}))}get isActive(){return!1}get parentReady(){return super.ready}get ready(){return this.parentReady.then((()=>this._readyPromise))}async startNew(e){return Promise.reject(new Error("Not implemented in no-op Terminal Manager"))}connectTo(e){throw Error("Not implemented in no-op Terminal Manager")}async shutdown(e){return Promise.reject(new Error("Not implemented in no-op Terminal Manager"))}async requestRunning(){return Promise.resolve()}}}(h=t.TerminalManager||(t.TerminalManager={}))},7384:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shutdownTerminal=t.listRunning=t.startNew=t.isAvailable=t.TERMINAL_SERVICE_URL=void 0;const n=i(4251),s=i(538);function r(){return"true"===String(n.PageConfig.getOption("terminalsAvailable")).toLowerCase()}var o;t.TERMINAL_SERVICE_URL="api/terminals",t.isAvailable=r,t.startNew=async function(e=s.ServerConnection.makeSettings(),i,r){o.errorIfNotAvailable();const a=n.URLExt.join(e.baseUrl,t.TERMINAL_SERVICE_URL),l={method:"POST",body:JSON.stringify({name:i,cwd:r})},h=await s.ServerConnection.makeRequest(a,l,e);if(200!==h.status)throw await s.ServerConnection.ResponseError.create(h);return await h.json()},t.listRunning=async function(e=s.ServerConnection.makeSettings()){o.errorIfNotAvailable();const i=n.URLExt.join(e.baseUrl,t.TERMINAL_SERVICE_URL),r=await s.ServerConnection.makeRequest(i,{},e);if(200!==r.status)throw await s.ServerConnection.ResponseError.create(r);const a=await r.json();if(!Array.isArray(a))throw new Error("Invalid terminal list");return a},t.shutdownTerminal=async function(e,i=s.ServerConnection.makeSettings()){var r;o.errorIfNotAvailable();const a=n.URLExt.join(i.baseUrl,t.TERMINAL_SERVICE_URL,e),l=await s.ServerConnection.makeRequest(a,{method:"DELETE"},i);if(404===l.status){const t=null!==(r=(await l.json()).message)&&void 0!==r?r:`The terminal session "${e}"" does not exist on the server`;console.warn(t)}else if(204!==l.status)throw await s.ServerConnection.ResponseError.create(l)},function(e){e.errorIfNotAvailable=function(){if(!r())throw new Error("Terminals Unavailable")}}(o||(o={}))},3828:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isAvailable=void 0;const n=i(7384);Object.defineProperty(t,"isAvailable",{enumerable:!0,get:function(){return n.isAvailable}})},1014:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UserManager=void 0;const n=i(4251),s=i(3911),r=i(9044),o=i(6424),a=i(538),l=i(7524),h="@jupyterlab/services:UserManager#user";class c extends l.BaseManager{constructor(e={}){var t;super(e),this._isReady=!1,this._userChanged=new o.Signal(this),this._connectionFailure=new o.Signal(this),this._ready=this.requestUser().then((()=>{this.isDisposed||(this._isReady=!0)})).catch((e=>new Promise((()=>{})))),this._pollSpecs=new r.Poll({auto:!1,factory:()=>this.requestUser(),frequency:{interval:61e3,backoff:!0,max:3e5},name:h,standby:null!==(t=e.standby)&&void 0!==t?t:"when-hidden"}),this.ready.then((()=>{this._pollSpecs.start()}))}get isReady(){return this._isReady}get ready(){return this._ready}get identity(){return this._identity}get permissions(){return this._permissions}get userChanged(){return this._userChanged}get connectionFailure(){return this._connectionFailure}dispose(){this._pollSpecs.dispose(),super.dispose()}async refreshUser(){await this._pollSpecs.refresh(),await this._pollSpecs.tick}async requestUser(){if(this.isDisposed)return;const{baseUrl:e}=this.serverSettings,{makeRequest:t,ResponseError:i}=a.ServerConnection,r=n.URLExt.join(e,"api/me"),o=await t(r,{},this.serverSettings);if(200!==o.status)throw await i.create(o);const l={identity:this._identity,permissions:this._permissions},c=await o.json(),u=c.identity,{localStorage:p}=window,f=p.getItem(h);if(f&&(!u.initials||!u.color)){const e=JSON.parse(f);u.initials=u.initials||e.initials||u.name.substring(0,1),u.color=u.color||e.color||d.getRandomColor()}s.JSONExt.deepEqual(c,l)||(this._identity=u,this._permissions=c.permissions,p.setItem(h,JSON.stringify(u)),this._userChanged.emit(c))}}var d;t.UserManager=c,function(e){const t=["var(--jp-collaborator-color1)","var(--jp-collaborator-color2)","var(--jp-collaborator-color3)","var(--jp-collaborator-color4)","var(--jp-collaborator-color5)","var(--jp-collaborator-color6)","var(--jp-collaborator-color7)"];e.getRandomColor=()=>t[Math.floor(Math.random()*t.length)]}(d||(d={}))},3247:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateProperty=void 0,t.validateProperty=function(e,t,i,n=[]){if(!e.hasOwnProperty(t))throw Error(`Missing property '${t}'`);const s=e[t];if(void 0!==i){let e=!0;switch(i){case"array":e=Array.isArray(s);break;case"object":e=void 0!==s;break;default:e=typeof s===i}if(!e)throw new Error(`Property '${t}' is not of type '${i}'`);if(n.length>0){let e=!0;switch(i){case"string":case"number":case"boolean":e=n.includes(s);break;default:e=n.findIndex((e=>e===s))>=0}if(!e)throw new Error(`Property '${t}' is not one of the valid values ${JSON.stringify(n)}`)}}}},9090:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WorkspaceManager=void 0;const n=i(4251),s=i(5895),r=i(538);class o extends s.DataConnector{constructor(e={}){var t;super(),this.serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:r.ServerConnection.makeSettings()}async fetch(e){const{serverSettings:t}=this,{baseUrl:i,appUrl:n}=t,{makeRequest:s,ResponseError:o}=r.ServerConnection,l=i+n,h=a.url(l,e),c=await s(h,{},t);if(200!==c.status)throw await o.create(c);return c.json()}async list(){const{serverSettings:e}=this,{baseUrl:t,appUrl:i}=e,{makeRequest:n,ResponseError:s}=r.ServerConnection,o=t+i,l=a.url(o,""),h=await n(l,{},e);if(200!==h.status)throw await s.create(h);return(await h.json()).workspaces}async remove(e){const{serverSettings:t}=this,{baseUrl:i,appUrl:n}=t,{makeRequest:s,ResponseError:o}=r.ServerConnection,l=i+n,h=a.url(l,e),c=await s(h,{method:"DELETE"},t);if(204!==c.status)throw await o.create(c)}async save(e,t){const{serverSettings:i}=this,{baseUrl:n,appUrl:s}=i,{makeRequest:o,ResponseError:l}=r.ServerConnection,h=n+s,c=a.url(h,e),d={body:JSON.stringify(t),method:"PUT"},u=await o(c,d,i);if(204!==u.status)throw await l.create(u)}}var a;t.WorkspaceManager=o,function(e){e.url=function(e,t){return n.URLExt.join(e,"api/workspaces",t)}}(a||(a={}))},1150:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DataConnector=void 0,t.DataConnector=class{async list(e){throw new Error("DataConnector#list method has not been implemented.")}async remove(e){throw new Error("DataConnector#remove method has not been implemented.")}async save(e,t){throw new Error("DataConnector#save method has not been implemented.")}}},5895:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),s(i(1150),t),s(i(4995),t),s(i(2763),t),s(i(4611),t),s(i(2594),t)},4995:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},2763:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RestorablePool=void 0;const n=i(3911),s=i(4050),r=i(6424);var o;t.RestorablePool=class{constructor(e){this._added=new r.Signal(this),this._current=null,this._currentChanged=new r.Signal(this),this._hasRestored=!1,this._isDisposed=!1,this._objects=new Set,this._restore=null,this._restored=new n.PromiseDelegate,this._updated=new r.Signal(this),this.namespace=e.namespace}get added(){return this._added}get current(){return this._current}set current(e){this._current!==e&&null!==e&&this._objects.has(e)&&(this._current=e,this._currentChanged.emit(this._current))}get currentChanged(){return this._currentChanged}get isDisposed(){return this._isDisposed}get restored(){return this._restored.promise}get size(){return this._objects.size}get updated(){return this._updated}async add(e){var t,i;if(e.isDisposed){const t="A disposed object cannot be added.";throw console.warn(t,e),new Error(t)}if(this._objects.has(e)){const t="This object already exists in the pool.";throw console.warn(t,e),new Error(t)}if(this._objects.add(e),e.disposed.connect(this._onInstanceDisposed,this),!o.injectedProperty.get(e)){if(this._restore){const{connector:n}=this._restore,s=this._restore.name(e);if(s){const r=`${this.namespace}:${s}`,a=null===(i=(t=this._restore).args)||void 0===i?void 0:i.call(t,e);o.nameProperty.set(e,r),await n.save(r,{data:a})}}this._added.emit(e)}}dispose(){this.isDisposed||(this._current=null,this._isDisposed=!0,this._objects.clear(),r.Signal.clearData(this))}find(e){const t=this._objects.values();for(const i of t)if(e(i))return i}forEach(e){this._objects.forEach(e)}filter(e){const t=[];return this.forEach((i=>{e(i)&&t.push(i)})),t}inject(e){return o.injectedProperty.set(e,!0),this.add(e)}has(e){return this._objects.has(e)}async restore(e){if(this._hasRestored)throw new Error("This pool has already been restored.");this._hasRestored=!0;const{command:t,connector:i,registry:n,when:s}=e,r=this.namespace,o=s?[i.list(r)].concat(s):[i.list(r)];this._restore=e;const[a]=await Promise.all(o),l=await Promise.all(a.ids.map((async(e,s)=>{const r=a.values[s],o=r&&r.data;return void 0===o?i.remove(e):n.execute(t,o).catch((()=>i.remove(e)))})));return this._restored.resolve(),l}async save(e){var t,i;const n=o.injectedProperty.get(e);if(!this._restore||!this.has(e)||n)return;const{connector:s}=this._restore,r=this._restore.name(e),a=o.nameProperty.get(e),l=r?`${this.namespace}:${r}`:"";if(a&&a!==l&&await s.remove(a),o.nameProperty.set(e,l),l){const n=null===(i=(t=this._restore).args)||void 0===i?void 0:i.call(t,e);await s.save(l,{data:n})}a!==l&&this._updated.emit(e)}_onInstanceDisposed(e){if(this._objects.delete(e),e===this._current&&(this._current=null,this._currentChanged.emit(this._current)),o.injectedProperty.get(e))return;if(!this._restore)return;const{connector:t}=this._restore,i=o.nameProperty.get(e);i&&t.remove(i)}},function(e){e.injectedProperty=new s.AttachedProperty({name:"injected",create:()=>!1}),e.nameProperty=new s.AttachedProperty({name:"name",create:()=>""})}(o||(o={}))},4611:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StateDB=void 0;const n=i(6424);class s{constructor(e={}){this._changed=new n.Signal(this);const{connector:t,transform:i}=e;this._connector=t||new s.Connector,this._ready=i?i.then((e=>{const{contents:t,type:i}=e;switch(i){case"cancel":default:return;case"clear":return this._clear();case"merge":return this._merge(t||{});case"overwrite":return this._overwrite(t||{})}})):Promise.resolve(void 0)}get changed(){return this._changed}async clear(){await this._ready,await this._clear()}async fetch(e){return await this._ready,this._fetch(e)}async list(e){return await this._ready,this._list(e)}async remove(e){await this._ready,await this._remove(e),this._changed.emit({id:e,type:"remove"})}async save(e,t){await this._ready,await this._save(e,t),this._changed.emit({id:e,type:"save"})}async toJSON(){await this._ready;const{ids:e,values:t}=await this._list();return t.reduce(((t,i,n)=>(t[e[n]]=i,t)),{})}async _clear(){await Promise.all((await this._list()).ids.map((e=>this._remove(e))))}async _fetch(e){const t=await this._connector.fetch(e);if(t)return JSON.parse(t).v}async _list(e=""){const{ids:t,values:i}=await this._connector.list(e);return{ids:t,values:i.map((e=>JSON.parse(e).v))}}async _merge(e){await Promise.all(Object.keys(e).map((t=>e[t]&&this._save(t,e[t]))))}async _overwrite(e){await this._clear(),await this._merge(e)}async _remove(e){return this._connector.remove(e)}async _save(e,t){return this._connector.save(e,JSON.stringify({v:t}))}}t.StateDB=s,function(e){e.Connector=class{constructor(){this._storage={}}async fetch(e){return this._storage[e]}async list(e=""){return Object.keys(this._storage).reduce(((t,i)=>(""!==e&&e!==i.split(":")[0]||(t.ids.push(i),t.values.push(this._storage[i])),t)),{ids:[],values:[]})}async remove(e){delete this._storage[e]}async save(e,t){this._storage[e]=t}}}(s=t.StateDB||(t.StateDB={}))},2594:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.IStateDB=void 0;const n=i(3911);t.IStateDB=new n.Token("@jupyterlab/coreutils:IStateDB",'A service for the JupyterLab state database.\n Use this if you want to store data that will persist across page loads.\n See "state database" for more information.')},7564:(e,t,i)=>{"use strict";var n,s,r;function*o(){}function a(e,t){let i=0;for(const n of e)if(t(n,i++))return n}function l(e,t){let i;for(const n of e)void 0!==i?t(n,i)>0&&(i=n):i=n;return i}function h(e,t){let i=0;for(const n of e)if(!1===t(n,i++))return!1;return!0}function c(e,t){let i=0;for(const n of e)if(t(n,i++))return!0;return!1}function*d(e,t){let i=0;for(const n of e)yield t(n,i++)}function*u(e){if("function"==typeof e.retro)yield*e.retro();else for(let t=e.length-1;t>-1;t--)yield e[t]}i.d(t,{Fp:()=>l,G:()=>c,RO:()=>n,UI:()=>d,cS:()=>o,kf:()=>r,kh:()=>u,sE:()=>a,yW:()=>h}),function(e){function t(e,t,i=0,n=-1){let s,r=e.length;if(0===r)return-1;i=i<0?Math.max(0,i+r):Math.min(i,r-1),s=(n=n<0?Math.max(0,n+r):Math.min(n,r-1))=i)return;let n=e[t];for(let n=t+1;n0;){let n=a>>1,s=o+n;i(e[s],t)<0?(o=s+1,a-=n+1):a=n}return o},e.upperBound=function(e,t,i,n=0,s=-1){let r=e.length;if(0===r)return 0;let o=n=n<0?Math.max(0,n+r):Math.min(n,r-1),a=(s=s<0?Math.max(0,s+r):Math.min(s,r-1))-n+1;for(;a>0;){let n=a>>1,s=o+n;i(e[s],t)>0?a=n:(o=s+1,a-=n+1)}return o},e.shallowEqual=function(e,t,i){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0,s=e.length;n=o&&(i=s<0?o-1:o),void 0===n?n=s<0?-1:o:n<0?n=Math.max(n+o,s<0?-1:0):n>=o&&(n=s<0?o-1:o),r=s<0&&n>=i||s>0&&i>=n?0:s<0?Math.floor((n-i+1)/s+1):Math.floor((n-i-1)/s+1);let a=[];for(let t=0;t=(n=n<0?Math.max(0,n+s):Math.min(n,s-1)))return;let o=n-i+1;if(t>0?t%=o:t<0&&(t=(t%o+o)%o),0===t)return;let a=i+t;r(e,i,a-1),r(e,a,n),r(e,i,n)},e.fill=function(e,t,i=0,n=-1){let s,r=e.length;if(0!==r){i=i<0?Math.max(0,i+r):Math.min(i,r-1),s=(n=n<0?Math.max(0,n+r):Math.min(n,r-1))t;--i)e[i]=e[i-1];e[t]=i},e.removeAt=o,e.removeFirstOf=function(e,i,n=0,s=-1){let r=t(e,i,n,s);return-1!==r&&o(e,r),r},e.removeLastOf=function(e,t,n=-1,s=0){let r=i(e,t,n,s);return-1!==r&&o(e,r),r},e.removeAllOf=function(e,t,i=0,n=-1){let s=e.length;if(0===s)return 0;i=i<0?Math.max(0,i+s):Math.min(i,s-1),n=n<0?Math.max(0,n+s):Math.min(n,s-1);let r=0;for(let o=0;o=i&&o<=n&&e[o]===t||n=i)&&e[o]===t?r++:r>0&&(e[o-r]=e[o]);return r>0&&(e.length=s-r),r},e.removeFirstWhere=function(e,t,i=0,s=-1){let r,a=n(e,t,i,s);return-1!==a&&(r=o(e,a)),{index:a,value:r}},e.removeLastWhere=function(e,t,i=-1,n=0){let r,a=s(e,t,i,n);return-1!==a&&(r=o(e,a)),{index:a,value:r}},e.removeAllWhere=function(e,t,i=0,n=-1){let s=e.length;if(0===s)return 0;i=i<0?Math.max(0,i+s):Math.min(i,s-1),n=n<0?Math.max(0,n+s):Math.min(n,s-1);let r=0;for(let o=0;o=i&&o<=n&&t(e[o],o)||n=i)&&t(e[o],o)?r++:r>0&&(e[o-r]=e[o]);return r>0&&(e.length=s-r),r}}(n||(n={})),function(e){e.rangeLength=function(e,t,i){return 0===i?1/0:e>t&&i>0||et?1:0}}(r||(r={}))},3911:function(e,t){!function(e){"use strict";e.JSONExt=void 0,function(e){function t(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e}function i(e){return Array.isArray(e)}function n(e,s){if(e===s)return!0;if(t(e)||t(s))return!1;let r=i(e),o=i(s);return r===o&&(r&&o?function(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let i=0,s=e.length;i>>0),e[i]=255&t,t>>>=8}e.Random=void 0,(e.Random||(e.Random={})).getRandomValues=(()=>{const e="undefined"!=typeof window&&(window.crypto||window.msCrypto)||null;return e&&"function"==typeof e.getRandomValues?function(t){return e.getRandomValues(t)}:t})(),e.UUID=void 0,(e.UUID||(e.UUID={})).uuid4=function(e){const t=new Uint8Array(16),i=new Array(256);for(let e=0;e<16;++e)i[e]="0"+e.toString(16);for(let e=16;e<256;++e)i[e]=e.toString(16);return function(){return e(t),t[6]=64|15&t[6],t[8]=128|63&t[8],i[t[0]]+i[t[1]]+i[t[2]]+i[t[3]]+"-"+i[t[4]]+i[t[5]]+"-"+i[t[6]]+i[t[7]]+"-"+i[t[8]]+i[t[9]]+"-"+i[t[10]]+i[t[11]]+i[t[12]]+i[t[13]]+i[t[14]]+i[t[15]]}}(e.Random.getRandomValues),e.MimeData=class{constructor(){this._types=[],this._values=[]}types(){return this._types.slice()}hasData(e){return-1!==this._types.indexOf(e)}getData(e){let t=this._types.indexOf(e);return-1!==t?this._values[t]:void 0}setData(e,t){this.clearData(e),this._types.push(e),this._values.push(t)}clearData(e){let t=this._types.indexOf(e);-1!==t&&(this._types.splice(t,1),this._values.splice(t,1))}clear(){this._types.length=0,this._values.length=0}},e.PromiseDelegate=class{constructor(){this.promise=new Promise(((e,t)=>{this._resolve=e,this._reject=t}))}resolve(e){(0,this._resolve)(e)}reject(e){(0,this._reject)(e)}},e.Token=class{constructor(e,t){this.name=e,this.description=null!=t?t:"",this._tokenStructuralPropertyT=null}}}(t)},1122:(e,t,i)=>{"use strict";i.r(t),i.d(t,{DisposableDelegate:()=>s,DisposableSet:()=>o,ObservableDisposableDelegate:()=>r,ObservableDisposableSet:()=>a});var n=i(6424);class s{constructor(e){this._fn=e}get isDisposed(){return!this._fn}dispose(){if(!this._fn)return;let e=this._fn;this._fn=null,e()}}class r extends s{constructor(){super(...arguments),this._disposed=new n.Signal(this)}get disposed(){return this._disposed}dispose(){this.isDisposed||(super.dispose(),this._disposed.emit(void 0),n.Signal.clearData(this))}}class o{constructor(){this._isDisposed=!1,this._items=new Set}get isDisposed(){return this._isDisposed}dispose(){this._isDisposed||(this._isDisposed=!0,this._items.forEach((e=>{e.dispose()})),this._items.clear())}contains(e){return this._items.has(e)}add(e){this._items.add(e)}remove(e){this._items.delete(e)}clear(){this._items.clear()}}!function(e){e.from=function(t){let i=new e;for(const e of t)i.add(e);return i}}(o||(o={}));class a extends o{constructor(){super(...arguments),this._disposed=new n.Signal(this)}get disposed(){return this._disposed}dispose(){this.isDisposed||(super.dispose(),this._disposed.emit(void 0),n.Signal.clearData(this))}}!function(e){e.from=function(t){let i=new e;for(const e of t)i.add(e);return i}}(a||(a={}))},9044:(e,t,i)=>{"use strict";i.r(t),i.d(t,{Debouncer:()=>l,Poll:()=>o,RateLimiter:()=>a,Throttler:()=>h});var n,s=i(3911),r=i(6424);class o{constructor(e){var t;this._disposed=new r.Signal(this),this._lingered=0,this._tick=new s.PromiseDelegate,this._ticked=new r.Signal(this),this._factory=e.factory,this._linger=null!==(t=e.linger)&&void 0!==t?t:n.DEFAULT_LINGER,this._standby=e.standby||n.DEFAULT_STANDBY,this._state={...n.DEFAULT_STATE,timestamp:(new Date).getTime()};const i=e.frequency||{},o=Math.max(i.interval||0,i.max||0,n.DEFAULT_FREQUENCY.max);this.frequency={...n.DEFAULT_FREQUENCY,...i,max:o},this.name=e.name||n.DEFAULT_NAME,"auto"in e&&!e.auto||setTimeout((()=>this.start()))}get disposed(){return this._disposed}get frequency(){return this._frequency}set frequency(e){if(this.isDisposed||s.JSONExt.deepEqual(e,this.frequency||{}))return;let{backoff:t,interval:i,max:n}=e;if(i=Math.round(i),n=Math.round(n),"number"==typeof t&&t<1)throw new Error("Poll backoff growth factor must be at least 1");if((i<0||i>n)&&i!==o.NEVER)throw new Error("Poll interval must be between 0 and max");if(n>o.MAX_INTERVAL&&n!==o.NEVER)throw new Error(`Max interval must be less than ${o.MAX_INTERVAL}`);this._frequency={backoff:t,interval:i,max:n}}get isDisposed(){return"disposed"===this.state.phase}get standby(){return this._standby}set standby(e){this.isDisposed||this.standby===e||(this._standby=e)}get state(){return this._state}get tick(){return this._tick.promise}get ticked(){return this._ticked}async*[Symbol.asyncIterator](){for(;!this.isDisposed;)yield this.state,await this.tick.catch((()=>{}))}dispose(){this.isDisposed||(this._state={...n.DISPOSED_STATE,timestamp:(new Date).getTime()},this._tick.promise.catch((e=>{})),this._tick.reject(new Error(`Poll (${this.name}) is disposed.`)),this._disposed.emit(void 0),r.Signal.clearData(this))}refresh(){return this.schedule({cancel:({phase:e})=>"refreshed"===e,interval:o.IMMEDIATE,phase:"refreshed"})}async schedule(e={}){if(this.isDisposed)return;if(e.cancel&&e.cancel(this.state))return;const t=this._tick,i=new s.PromiseDelegate,n={interval:this.frequency.interval,payload:null,phase:"standby",timestamp:(new Date).getTime(),...e};this._state=n,this._tick=i,clearTimeout(this._timeout),this._ticked.emit(this.state),t.resolve(this),await t.promise,n.interval!==o.NEVER?this._timeout=setTimeout((()=>{this.isDisposed||this.tick!==i.promise||this._execute()}),n.interval):this._timeout=void 0}start(){return this.schedule({cancel:({phase:e})=>"constructed"!==e&&"standby"!==e&&"stopped"!==e,interval:o.IMMEDIATE,phase:"started"})}stop(){return this.schedule({cancel:({phase:e})=>"stopped"===e,interval:o.NEVER,phase:"stopped"})}get hidden(){return n.hidden}_execute(){let e="function"==typeof this.standby?this.standby():this.standby;if("never"===e?e=!1:"when-hidden"===e&&(this.hidden?e=++this._lingered>this._linger:(this._lingered=0,e=!1)),e)return void this.schedule();const t=this.tick;this._factory(this.state).then((e=>{this.isDisposed||this.tick!==t||this.schedule({payload:e,phase:"rejected"===this.state.phase?"reconnected":"resolved"})})).catch((e=>{this.isDisposed||this.tick!==t||this.schedule({interval:n.sleep(this.frequency,this.state),payload:e,phase:"rejected"})}))}}!function(e){e.IMMEDIATE=0,e.MAX_INTERVAL=2147483647,e.NEVER=1/0}(o||(o={})),function(e){e.DEFAULT_BACKOFF=3,e.DEFAULT_FREQUENCY={backoff:!0,interval:1e3,max:3e4},e.DEFAULT_LINGER=1,e.DEFAULT_NAME="unknown",e.DEFAULT_STANDBY="when-hidden",e.DEFAULT_STATE={interval:o.NEVER,payload:null,phase:"constructed",timestamp:new Date(0).getTime()},e.DISPOSED_STATE={interval:o.NEVER,payload:null,phase:"disposed",timestamp:new Date(0).getTime()},e.sleep=function(t,i){const{backoff:n,interval:s,max:r}=t;if(s===o.NEVER)return s;const a=!0===n?e.DEFAULT_BACKOFF:!1===n?1:n,l=function(e,t){return e=Math.ceil(e),t=Math.floor(t),Math.floor(Math.random()*(t-e+1))+e}(s,i.interval*a);return Math.min(r,l)},e.hidden="undefined"!=typeof document&&(document.addEventListener("visibilitychange",(()=>{e.hidden="hidden"===document.visibilityState})),document.addEventListener("pagehide",(()=>{e.hidden="hidden"===document.visibilityState})),"hidden"===document.visibilityState)}(n||(n={}));class a{constructor(e,t=500){this.args=void 0,this.payload=null,this.limit=t,this.poll=new o({auto:!1,factory:async()=>{const{args:t}=this;return this.args=void 0,e(...t)},frequency:{backoff:!1,interval:o.NEVER,max:o.NEVER},standby:"never"}),this.payload=new s.PromiseDelegate,this.poll.ticked.connect(((e,t)=>{const{payload:i}=this;return"resolved"===t.phase?(this.payload=new s.PromiseDelegate,void i.resolve(t.payload)):"rejected"===t.phase||"stopped"===t.phase?(this.payload=new s.PromiseDelegate,i.promise.catch((e=>{})),void i.reject(t.payload)):void 0}),this)}get isDisposed(){return null===this.payload}dispose(){this.isDisposed||(this.args=void 0,this.payload=null,this.poll.dispose())}async stop(){return this.poll.stop()}}class l extends a{invoke(...e){return this.args=e,this.poll.schedule({interval:this.limit,phase:"invoked"}),this.payload.promise}}class h extends a{constructor(e,t){super(e,"number"==typeof t?t:t&&t.limit),this._trailing=!1,"number"!=typeof t&&t&&"trailing"===t.edge&&(this._trailing=!0),this._interval=this._trailing?this.limit:o.IMMEDIATE}invoke(...e){const t="invoked"!==this.poll.state.phase;return(t||this._trailing)&&(this.args=e),t&&this.poll.schedule({interval:this._interval,phase:"invoked"}),this.payload.promise}}},4050:(e,t,i)=>{"use strict";i.r(t),i.d(t,{AttachedProperty:()=>n});class n{constructor(e){this._pid=s.nextPID(),this.name=e.name,this._create=e.create,this._coerce=e.coerce||null,this._compare=e.compare||null,this._changed=e.changed||null}get(e){let t,i=s.ensureMap(e);return t=this._pid in i?i[this._pid]:i[this._pid]=this._createValue(e),t}set(e,t){let i,n=s.ensureMap(e);i=this._pid in n?n[this._pid]:n[this._pid]=this._createValue(e);let r=this._coerceValue(e,t);this._maybeNotify(e,i,n[this._pid]=r)}coerce(e){let t,i=s.ensureMap(e);t=this._pid in i?i[this._pid]:i[this._pid]=this._createValue(e);let n=this._coerceValue(e,t);this._maybeNotify(e,t,i[this._pid]=n)}_createValue(e){return(0,this._create)(e)}_coerceValue(e,t){let i=this._coerce;return i?i(e,t):t}_compareValue(e,t){let i=this._compare;return i?i(e,t):e===t}_maybeNotify(e,t,i){let n=this._changed;n&&!this._compareValue(t,i)&&n(e,t,i)}}var s;!function(e){e.clearData=function(e){s.ownerData.delete(e)}}(n||(n={})),function(e){e.ownerData=new WeakMap,e.nextPID=(()=>{let e=0;return()=>`pid-${`${Math.random()}`.slice(2)}-${e++}`})(),e.ensureMap=function(t){let i=e.ownerData.get(t);return i||(i=Object.create(null),e.ownerData.set(t,i),i)}}(s||(s={}))},6424:(e,t,i)=>{"use strict";i.r(t),i.d(t,{Signal:()=>o,Stream:()=>a});var n,s=i(7564),r=i(3911);class o{constructor(e){this.sender=e}connect(e,t){return n.connect(this,e,t)}disconnect(e,t){return n.disconnect(this,e,t)}emit(e){n.emit(this,e)}}!function(e){e.disconnectBetween=function(e,t){n.disconnectBetween(e,t)},e.disconnectSender=function(e){n.disconnectSender(e)},e.disconnectReceiver=function(e){n.disconnectReceiver(e)},e.disconnectAll=function(e){n.disconnectAll(e)},e.clearData=function(e){n.disconnectAll(e)},e.getExceptionHandler=function(){return n.exceptionHandler},e.setExceptionHandler=function(e){let t=n.exceptionHandler;return n.exceptionHandler=e,t}}(o||(o={}));class a extends o{constructor(){super(...arguments),this._pending=new r.PromiseDelegate}async*[Symbol.asyncIterator](){let e=this._pending;for(;;)try{const{args:t,next:i}=await e.promise;e=i,yield t}catch(e){return}}emit(e){const t=this._pending,i=this._pending=new r.PromiseDelegate;t.resolve({args:e,next:i}),super.emit(e)}stop(){this._pending.promise.catch((()=>{})),this._pending.reject("stop"),this._pending=new r.PromiseDelegate}}!function(e){function t(e){let t=n.get(e);if(t&&0!==t.length){for(const e of t){if(!e.signal)continue;let t=e.thisArg||e.slot;e.signal=null,c(r.get(t))}c(t)}}function i(e){let t=r.get(e);if(t&&0!==t.length){for(const e of t){if(!e.signal)continue;let t=e.signal.sender;e.signal=null,c(n.get(t))}c(t)}}e.exceptionHandler=e=>{console.error(e)},e.connect=function(e,t,i){i=i||void 0;let s=n.get(e.sender);if(s||(s=[],n.set(e.sender,s)),l(s,e,t,i))return!1;let o=i||t,a=r.get(o);a||(a=[],r.set(o,a));let h={signal:e,slot:t,thisArg:i};return s.push(h),a.push(h),!0},e.disconnect=function(e,t,i){i=i||void 0;let s=n.get(e.sender);if(!s||0===s.length)return!1;let o=l(s,e,t,i);if(!o)return!1;let a=i||t,h=r.get(a);return o.signal=null,c(s),c(h),!0},e.disconnectBetween=function(e,t){let i=n.get(e);if(!i||0===i.length)return;let s=r.get(t);if(s&&0!==s.length){for(const t of s)t.signal&&t.signal.sender===e&&(t.signal=null);c(i),c(s)}},e.disconnectSender=t,e.disconnectReceiver=i,e.disconnectAll=function(e){t(e),i(e)},e.emit=function(e,t){let i=n.get(e.sender);if(i&&0!==i.length)for(let n=0,s=i.length;ne.signal===t&&e.slot===i&&e.thisArg===n))}function h(t,i){let{signal:n,slot:s,thisArg:r}=t;try{s.call(r,n.sender,i)}catch(t){e.exceptionHandler(t)}}function c(e){0===o.size&&a(d),o.add(e)}function d(){o.forEach(u),o.clear()}function u(e){s.RO.removeAllWhere(e,p)}function p(e){return null===e.signal}}(n||(n={}))},2454:e=>{"use strict";var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===i}(e)}(e)},i="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function n(e,t){return!1!==t.clone&&t.isMergeableObject(e)?a((i=e,Array.isArray(i)?[]:{}),e,t):e;var i}function s(e,t,i){return e.concat(t).map((function(e){return n(e,i)}))}function r(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function o(e,t){try{return t in e}catch(e){return!1}}function a(e,i,l){(l=l||{}).arrayMerge=l.arrayMerge||s,l.isMergeableObject=l.isMergeableObject||t,l.cloneUnlessOtherwiseSpecified=n;var h=Array.isArray(i);return h===Array.isArray(e)?h?l.arrayMerge(e,i,l):function(e,t,i){var s={};return i.isMergeableObject(e)&&r(e).forEach((function(t){s[t]=n(e[t],i)})),r(t).forEach((function(r){(function(e,t){return o(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,r)||(o(e,r)&&i.isMergeableObject(t[r])?s[r]=function(e,t){if(!t.customMerge)return a;var i=t.customMerge(e);return"function"==typeof i?i:a}(r,i)(e[r],t[r],i):s[r]=n(t[r],i))})),s}(e,i,l):n(i,l)}a.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,i){return a(e,i,t)}),{})};var l=a;e.exports=l},8002:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.attributeNames=t.elementNames=void 0,t.elementNames=new Map([["altglyph","altGlyph"],["altglyphdef","altGlyphDef"],["altglyphitem","altGlyphItem"],["animatecolor","animateColor"],["animatemotion","animateMotion"],["animatetransform","animateTransform"],["clippath","clipPath"],["feblend","feBlend"],["fecolormatrix","feColorMatrix"],["fecomponenttransfer","feComponentTransfer"],["fecomposite","feComposite"],["feconvolvematrix","feConvolveMatrix"],["fediffuselighting","feDiffuseLighting"],["fedisplacementmap","feDisplacementMap"],["fedistantlight","feDistantLight"],["fedropshadow","feDropShadow"],["feflood","feFlood"],["fefunca","feFuncA"],["fefuncb","feFuncB"],["fefuncg","feFuncG"],["fefuncr","feFuncR"],["fegaussianblur","feGaussianBlur"],["feimage","feImage"],["femerge","feMerge"],["femergenode","feMergeNode"],["femorphology","feMorphology"],["feoffset","feOffset"],["fepointlight","fePointLight"],["fespecularlighting","feSpecularLighting"],["fespotlight","feSpotLight"],["fetile","feTile"],["feturbulence","feTurbulence"],["foreignobject","foreignObject"],["glyphref","glyphRef"],["lineargradient","linearGradient"],["radialgradient","radialGradient"],["textpath","textPath"]]),t.attributeNames=new Map([["definitionurl","definitionURL"],["attributename","attributeName"],["attributetype","attributeType"],["basefrequency","baseFrequency"],["baseprofile","baseProfile"],["calcmode","calcMode"],["clippathunits","clipPathUnits"],["diffuseconstant","diffuseConstant"],["edgemode","edgeMode"],["filterunits","filterUnits"],["glyphref","glyphRef"],["gradienttransform","gradientTransform"],["gradientunits","gradientUnits"],["kernelmatrix","kernelMatrix"],["kernelunitlength","kernelUnitLength"],["keypoints","keyPoints"],["keysplines","keySplines"],["keytimes","keyTimes"],["lengthadjust","lengthAdjust"],["limitingconeangle","limitingConeAngle"],["markerheight","markerHeight"],["markerunits","markerUnits"],["markerwidth","markerWidth"],["maskcontentunits","maskContentUnits"],["maskunits","maskUnits"],["numoctaves","numOctaves"],["pathlength","pathLength"],["patterncontentunits","patternContentUnits"],["patterntransform","patternTransform"],["patternunits","patternUnits"],["pointsatx","pointsAtX"],["pointsaty","pointsAtY"],["pointsatz","pointsAtZ"],["preservealpha","preserveAlpha"],["preserveaspectratio","preserveAspectRatio"],["primitiveunits","primitiveUnits"],["refx","refX"],["refy","refY"],["repeatcount","repeatCount"],["repeatdur","repeatDur"],["requiredextensions","requiredExtensions"],["requiredfeatures","requiredFeatures"],["specularconstant","specularConstant"],["specularexponent","specularExponent"],["spreadmethod","spreadMethod"],["startoffset","startOffset"],["stddeviation","stdDeviation"],["stitchtiles","stitchTiles"],["surfacescale","surfaceScale"],["systemlanguage","systemLanguage"],["tablevalues","tableValues"],["targetx","targetX"],["targety","targetY"],["textlength","textLength"],["viewbox","viewBox"],["viewtarget","viewTarget"],["xchannelselector","xChannelSelector"],["ychannelselector","yChannelSelector"],["zoomandpan","zoomAndPan"]])},2721:function(e,t,i){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,i=1,n=arguments.length;i";case a.Comment:return"\x3c!--"+e.data+"--\x3e";case a.CDATA:return function(e){return""}(e);case a.Script:case a.Style:case a.Tag:return function(e,t){var i;"foreign"===t.xmlMode&&(e.name=null!==(i=h.elementNames.get(e.name))&&void 0!==i?i:e.name,e.parent&&f.has(e.parent.name)&&(t=n(n({},t),{xmlMode:!1}))),!t.xmlMode&&m.has(e.name)&&(t=n(n({},t),{xmlMode:"foreign"}));var s="<"+e.name,r=function(e,t){if(e)return Object.keys(e).map((function(i){var n,s,r=null!==(n=e[i])&&void 0!==n?n:"";return"foreign"===t.xmlMode&&(i=null!==(s=h.attributeNames.get(i))&&void 0!==s?s:i),t.emptyAttrs||t.xmlMode||""!==r?i+'="'+(!1!==t.decodeEntities?l.encodeXML(r):r.replace(/"/g,"""))+'"':i})).join(" ")}(e.attribs,t);return r&&(s+=" "+r),0===e.children.length&&(t.xmlMode?!1!==t.selfClosingTags:t.selfClosingTags&&d.has(e.name))?(t.xmlMode||(s+=" "),s+="/>"):(s+=">",e.children.length>0&&(s+=u(e.children,t)),!t.xmlMode&&d.has(e.name)||(s+="")),s}(e,t);case a.Text:return function(e,t){var i=e.data||"";return!1===t.decodeEntities||!t.xmlMode&&e.parent&&c.has(e.parent.name)||(i=l.encodeXML(i)),i}(e,t)}}t.default=u;var f=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),m=new Set(["svg","math"])},3706:(e,t)=>{"use strict";var i;Object.defineProperty(t,"__esModule",{value:!0}),t.Doctype=t.CDATA=t.Tag=t.Style=t.Script=t.Comment=t.Directive=t.Text=t.Root=t.isTag=t.ElementType=void 0,function(e){e.Root="root",e.Text="text",e.Directive="directive",e.Comment="comment",e.Script="script",e.Style="style",e.Tag="tag",e.CDATA="cdata",e.Doctype="doctype"}(i=t.ElementType||(t.ElementType={})),t.isTag=function(e){return e.type===i.Tag||e.type===i.Script||e.type===i.Style},t.Root=i.Root,t.Text=i.Text,t.Directive=i.Directive,t.Comment=i.Comment,t.Script=i.Script,t.Style=i.Style,t.Tag=i.Tag,t.CDATA=i.CDATA,t.Doctype=i.Doctype},9425:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(t,i);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,s)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),t.DomHandler=void 0;var r=i(3706),o=i(4862);s(i(4862),t);var a=/\s+/g,l={normalizeWhitespace:!1,withStartIndices:!1,withEndIndices:!1,xmlMode:!1},h=function(){function e(e,t,i){this.dom=[],this.root=new o.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null,"function"==typeof t&&(i=t,t=l),"object"==typeof e&&(t=e,e=void 0),this.callback=null!=e?e:null,this.options=null!=t?t:l,this.elementCB=null!=i?i:null}return e.prototype.onparserinit=function(e){this.parser=e},e.prototype.onreset=function(){this.dom=[],this.root=new o.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null},e.prototype.onend=function(){this.done||(this.done=!0,this.parser=null,this.handleCallback(null))},e.prototype.onerror=function(e){this.handleCallback(e)},e.prototype.onclosetag=function(){this.lastNode=null;var e=this.tagStack.pop();this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),this.elementCB&&this.elementCB(e)},e.prototype.onopentag=function(e,t){var i=this.options.xmlMode?r.ElementType.Tag:void 0,n=new o.Element(e,t,void 0,i);this.addNode(n),this.tagStack.push(n)},e.prototype.ontext=function(e){var t=this.options.normalizeWhitespace,i=this.lastNode;if(i&&i.type===r.ElementType.Text)t?i.data=(i.data+e).replace(a," "):i.data+=e,this.options.withEndIndices&&(i.endIndex=this.parser.endIndex);else{t&&(e=e.replace(a," "));var n=new o.Text(e);this.addNode(n),this.lastNode=n}},e.prototype.oncomment=function(e){if(this.lastNode&&this.lastNode.type===r.ElementType.Comment)this.lastNode.data+=e;else{var t=new o.Comment(e);this.addNode(t),this.lastNode=t}},e.prototype.oncommentend=function(){this.lastNode=null},e.prototype.oncdatastart=function(){var e=new o.Text(""),t=new o.NodeWithChildren(r.ElementType.CDATA,[e]);this.addNode(t),e.parent=t,this.lastNode=e},e.prototype.oncdataend=function(){this.lastNode=null},e.prototype.onprocessinginstruction=function(e,t){var i=new o.ProcessingInstruction(e,t);this.addNode(i)},e.prototype.handleCallback=function(e){if("function"==typeof this.callback)this.callback(e,this.dom);else if(e)throw e},e.prototype.addNode=function(e){var t=this.tagStack[this.tagStack.length-1],i=t.children[t.children.length-1];this.options.withStartIndices&&(e.startIndex=this.parser.startIndex),this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),t.children.push(e),i&&(e.prev=i,i.next=e),e.parent=t,this.lastNode=null},e}();t.DomHandler=h,t.default=h},4862:function(e,t,i){"use strict";var n,s=this&&this.__extends||(n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},n(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function i(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}),r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,i=1,n=arguments.length;i0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!1,configurable:!0}),t}(l);t.NodeWithChildren=p;var f=function(e){function t(t){return e.call(this,o.ElementType.Root,t)||this}return s(t,e),t}(p);t.Document=f;var m=function(e){function t(t,i,n,s){void 0===n&&(n=[]),void 0===s&&(s="script"===t?o.ElementType.Script:"style"===t?o.ElementType.Style:o.ElementType.Tag);var r=e.call(this,s,n)||this;return r.name=t,r.attribs=i,r}return s(t,e),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributes",{get:function(){var e=this;return Object.keys(this.attribs).map((function(t){var i,n;return{name:t,value:e.attribs[t],namespace:null===(i=e["x-attribsNamespace"])||void 0===i?void 0:i[t],prefix:null===(n=e["x-attribsPrefix"])||void 0===n?void 0:n[t]}}))},enumerable:!1,configurable:!0}),t}(p);function g(e){return(0,o.isTag)(e)}function v(e){return e.type===o.ElementType.CDATA}function O(e){return e.type===o.ElementType.Text}function b(e){return e.type===o.ElementType.Comment}function _(e){return e.type===o.ElementType.Directive}function y(e){return e.type===o.ElementType.Root}function w(e,t){var i;if(void 0===t&&(t=!1),O(e))i=new c(e.data);else if(b(e))i=new d(e.data);else if(g(e)){var n=t?x(e.children):[],s=new m(e.name,r({},e.attribs),n);n.forEach((function(e){return e.parent=s})),null!=e.namespace&&(s.namespace=e.namespace),e["x-attribsNamespace"]&&(s["x-attribsNamespace"]=r({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(s["x-attribsPrefix"]=r({},e["x-attribsPrefix"])),i=s}else if(v(e)){n=t?x(e.children):[];var a=new p(o.ElementType.CDATA,n);n.forEach((function(e){return e.parent=a})),i=a}else if(y(e)){n=t?x(e.children):[];var l=new f(n);n.forEach((function(e){return e.parent=l})),e["x-mode"]&&(l["x-mode"]=e["x-mode"]),i=l}else{if(!_(e))throw new Error("Not implemented yet: ".concat(e.type));var h=new u(e.name,e.data);null!=e["x-name"]&&(h["x-name"]=e["x-name"],h["x-publicId"]=e["x-publicId"],h["x-systemId"]=e["x-systemId"]),i=h}return i.startIndex=e.startIndex,i.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(i.sourceCodeLocation=e.sourceCodeLocation),i}function x(e){for(var t=e.map((function(e){return w(e,!0)})),i=1;i{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getFeed=void 0;var n=i(3017),s=i(9319);t.getFeed=function(e){var t=l(d,e);return t?"feed"===t.name?function(e){var t,i=e.children,n={type:"atom",items:(0,s.getElementsByTagName)("entry",i).map((function(e){var t,i=e.children,n={media:a(i)};c(n,"id","id",i),c(n,"title","title",i);var s=null===(t=l("link",i))||void 0===t?void 0:t.attribs.href;s&&(n.link=s);var r=h("summary",i)||h("content",i);r&&(n.description=r);var o=h("updated",i);return o&&(n.pubDate=new Date(o)),n}))};c(n,"id","id",i),c(n,"title","title",i);var r=null===(t=l("link",i))||void 0===t?void 0:t.attribs.href;r&&(n.link=r),c(n,"description","subtitle",i);var o=h("updated",i);return o&&(n.updated=new Date(o)),c(n,"author","email",i,!0),n}(t):function(e){var t,i,n=null!==(i=null===(t=l("channel",e.children))||void 0===t?void 0:t.children)&&void 0!==i?i:[],r={type:e.name.substr(0,3),id:"",items:(0,s.getElementsByTagName)("item",e.children).map((function(e){var t=e.children,i={media:a(t)};c(i,"id","guid",t),c(i,"title","title",t),c(i,"link","link",t),c(i,"description","description",t);var n=h("pubDate",t);return n&&(i.pubDate=new Date(n)),i}))};c(r,"title","title",n),c(r,"link","link",n),c(r,"description","description",n);var o=h("lastBuildDate",n);return o&&(r.updated=new Date(o)),c(r,"author","managingEditor",n,!0),r}(t):null};var r=["url","type","lang"],o=["fileSize","bitrate","framerate","samplingrate","channels","duration","height","width"];function a(e){return(0,s.getElementsByTagName)("media:content",e).map((function(e){for(var t=e.attribs,i={medium:t.medium,isDefault:!!t.isDefault},n=0,s=r;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.uniqueSort=t.compareDocumentPosition=t.removeSubsets=void 0;var n=i(9425);function s(e,t){var i=[],s=[];if(e===t)return 0;for(var r=(0,n.hasChildren)(e)?e:e.parent;r;)i.unshift(r),r=r.parent;for(r=(0,n.hasChildren)(t)?t:t.parent;r;)s.unshift(r),r=r.parent;for(var o=Math.min(i.length,s.length),a=0;ah.indexOf(d)?l===t?20:4:l===e?10:2}t.removeSubsets=function(e){for(var t=e.length;--t>=0;){var i=e[t];if(t>0&&e.lastIndexOf(i,t-1)>=0)e.splice(t,1);else for(var n=i.parent;n;n=n.parent)if(e.includes(n)){e.splice(t,1);break}}return e},t.compareDocumentPosition=s,t.uniqueSort=function(e){return(e=e.filter((function(e,t,i){return!i.includes(e,t+1)}))).sort((function(e,t){var i=s(e,t);return 2&i?-1:4&i?1:0})),e}},5030:function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),s=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),t.hasChildren=t.isDocument=t.isComment=t.isText=t.isCDATA=t.isTag=void 0,s(i(3017),t),s(i(8563),t),s(i(378),t),s(i(1446),t),s(i(9319),t),s(i(6850),t),s(i(9904),t);var r=i(9425);Object.defineProperty(t,"isTag",{enumerable:!0,get:function(){return r.isTag}}),Object.defineProperty(t,"isCDATA",{enumerable:!0,get:function(){return r.isCDATA}}),Object.defineProperty(t,"isText",{enumerable:!0,get:function(){return r.isText}}),Object.defineProperty(t,"isComment",{enumerable:!0,get:function(){return r.isComment}}),Object.defineProperty(t,"isDocument",{enumerable:!0,get:function(){return r.isDocument}}),Object.defineProperty(t,"hasChildren",{enumerable:!0,get:function(){return r.hasChildren}})},9319:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getElementsByTagType=t.getElementsByTagName=t.getElementById=t.getElements=t.testElement=void 0;var n=i(9425),s=i(1446),r={tag_name:function(e){return"function"==typeof e?function(t){return(0,n.isTag)(t)&&e(t.name)}:"*"===e?n.isTag:function(t){return(0,n.isTag)(t)&&t.name===e}},tag_type:function(e){return"function"==typeof e?function(t){return e(t.type)}:function(t){return t.type===e}},tag_contains:function(e){return"function"==typeof e?function(t){return(0,n.isText)(t)&&e(t.data)}:function(t){return(0,n.isText)(t)&&t.data===e}}};function o(e,t){return"function"==typeof t?function(i){return(0,n.isTag)(i)&&t(i.attribs[e])}:function(i){return(0,n.isTag)(i)&&i.attribs[e]===t}}function a(e,t){return function(i){return e(i)||t(i)}}function l(e){var t=Object.keys(e).map((function(t){var i=e[t];return Object.prototype.hasOwnProperty.call(r,t)?r[t](i):o(t,i)}));return 0===t.length?null:t.reduce(a)}t.testElement=function(e,t){var i=l(e);return!i||i(t)},t.getElements=function(e,t,i,n){void 0===n&&(n=1/0);var r=l(e);return r?(0,s.filter)(r,t,i,n):[]},t.getElementById=function(e,t,i){return void 0===i&&(i=!0),Array.isArray(t)||(t=[t]),(0,s.findOne)(o("id",e),t,i)},t.getElementsByTagName=function(e,t,i,n){return void 0===i&&(i=!0),void 0===n&&(n=1/0),(0,s.filter)(r.tag_name(e),t,i,n)},t.getElementsByTagType=function(e,t,i,n){return void 0===i&&(i=!0),void 0===n&&(n=1/0),(0,s.filter)(r.tag_type(e),t,i,n)}},378:(e,t)=>{"use strict";function i(e){if(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.parent){var t=e.parent.children;t.splice(t.lastIndexOf(e),1)}}Object.defineProperty(t,"__esModule",{value:!0}),t.prepend=t.prependChild=t.append=t.appendChild=t.replaceElement=t.removeElement=void 0,t.removeElement=i,t.replaceElement=function(e,t){var i=t.prev=e.prev;i&&(i.next=t);var n=t.next=e.next;n&&(n.prev=t);var s=t.parent=e.parent;if(s){var r=s.children;r[r.lastIndexOf(e)]=t}},t.appendChild=function(e,t){if(i(t),t.next=null,t.parent=e,e.children.push(t)>1){var n=e.children[e.children.length-2];n.next=t,t.prev=n}else t.prev=null},t.append=function(e,t){i(t);var n=e.parent,s=e.next;if(t.next=s,t.prev=e,e.next=t,t.parent=n,s){if(s.prev=t,n){var r=n.children;r.splice(r.lastIndexOf(s),0,t)}}else n&&n.children.push(t)},t.prependChild=function(e,t){if(i(t),t.parent=e,t.prev=null,1!==e.children.unshift(t)){var n=e.children[1];n.prev=t,t.next=n}else t.next=null},t.prepend=function(e,t){i(t);var n=e.parent;if(n){var s=n.children;s.splice(s.indexOf(e),0,t)}e.prev&&(e.prev.next=t),t.parent=n,t.prev=e.prev,t.next=e,e.prev=t}},1446:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.findAll=t.existsOne=t.findOne=t.findOneChild=t.find=t.filter=void 0;var n=i(9425);function s(e,t,i,r){for(var o=[],a=0,l=t;a0){var c=s(e,h.children,i,r);if(o.push.apply(o,c),(r-=c.length)<=0)break}}return o}t.filter=function(e,t,i,n){return void 0===i&&(i=!0),void 0===n&&(n=1/0),Array.isArray(t)||(t=[t]),s(e,t,i,n)},t.find=s,t.findOneChild=function(e,t){return t.find(e)},t.findOne=function e(t,i,s){void 0===s&&(s=!0);for(var r=null,o=0;o0&&(r=e(t,a.children)))}return r},t.existsOne=function e(t,i){return i.some((function(i){return(0,n.isTag)(i)&&(t(i)||i.children.length>0&&e(t,i.children))}))},t.findAll=function(e,t){for(var i,s,r=[],o=t.filter(n.isTag);s=o.shift();){var a=null===(i=s.children)||void 0===i?void 0:i.filter(n.isTag);a&&a.length>0&&o.unshift.apply(o,a),e(s)&&r.push(s)}return r}},3017:function(e,t,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.innerText=t.textContent=t.getText=t.getInnerHTML=t.getOuterHTML=void 0;var s=i(9425),r=n(i(2721)),o=i(3706);function a(e,t){return(0,r.default)(e,t)}t.getOuterHTML=a,t.getInnerHTML=function(e,t){return(0,s.hasChildren)(e)?e.children.map((function(e){return a(e,t)})).join(""):""},t.getText=function e(t){return Array.isArray(t)?t.map(e).join(""):(0,s.isTag)(t)?"br"===t.name?"\n":e(t.children):(0,s.isCDATA)(t)?e(t.children):(0,s.isText)(t)?t.data:""},t.textContent=function e(t){return Array.isArray(t)?t.map(e).join(""):(0,s.hasChildren)(t)&&!(0,s.isComment)(t)?e(t.children):(0,s.isText)(t)?t.data:""},t.innerText=function e(t){return Array.isArray(t)?t.map(e).join(""):(0,s.hasChildren)(t)&&(t.type===o.ElementType.Tag||(0,s.isCDATA)(t))?e(t.children):(0,s.isText)(t)?t.data:""}},8563:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.prevElementSibling=t.nextElementSibling=t.getName=t.hasAttrib=t.getAttributeValue=t.getSiblings=t.getParent=t.getChildren=void 0;var n=i(9425),s=[];function r(e){var t;return null!==(t=e.children)&&void 0!==t?t:s}function o(e){return e.parent||null}t.getChildren=r,t.getParent=o,t.getSiblings=function(e){var t=o(e);if(null!=t)return r(t);for(var i=[e],n=e.prev,s=e.next;null!=n;)i.unshift(n),n=n.prev;for(;null!=s;)i.push(s),s=s.next;return i},t.getAttributeValue=function(e,t){var i;return null===(i=e.attribs)||void 0===i?void 0:i[t]},t.hasAttrib=function(e,t){return null!=e.attribs&&Object.prototype.hasOwnProperty.call(e.attribs,t)&&null!=e.attribs[t]},t.getName=function(e){return e.name},t.nextElementSibling=function(e){for(var t=e.next;null!==t&&!(0,n.isTag)(t);)t=t.next;return t},t.prevElementSibling=function(e){for(var t=e.prev;null!==t&&!(0,n.isTag)(t);)t=t.prev;return t}},4080:function(e,t,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.decodeHTML=t.decodeHTMLStrict=t.decodeXML=void 0;var s=n(i(2810)),r=n(i(2836)),o=n(i(8689)),a=n(i(7826)),l=/&(?:[a-zA-Z0-9]+|#[xX][\da-fA-F]+|#\d+);/g;function h(e){var t=d(e);return function(e){return String(e).replace(l,t)}}t.decodeXML=h(o.default),t.decodeHTMLStrict=h(s.default);var c=function(e,t){return e65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+String.fromCharCode(e)};t.default=function(e){return e>=55296&&e<=57343||e>1114111?"�":(e in s.default&&(e=s.default[e]),r(e))}},956:function(e,t,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.escapeUTF8=t.escape=t.encodeNonAsciiHTML=t.encodeHTML=t.encodeXML=void 0;var s=c(n(i(8689)).default),r=d(s);t.encodeXML=g(s);var o,a,l=c(n(i(2810)).default),h=d(l);function c(e){return Object.keys(e).sort().reduce((function(t,i){return t[e[i]]="&"+i+";",t}),{})}function d(e){for(var t=[],i=[],n=0,s=Object.keys(e);n1?p(e):e.charCodeAt(0)).toString(16).toUpperCase()+";"}var m=new RegExp(r.source+"|"+u.source,"g");function g(e){return function(t){return t.replace(m,(function(t){return e[t]||f(t)}))}}t.escape=function(e){return e.replace(m,f)},t.escapeUTF8=function(e){return e.replace(r,f)}},2593:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodeXMLStrict=t.decodeHTML5Strict=t.decodeHTML4Strict=t.decodeHTML5=t.decodeHTML4=t.decodeHTMLStrict=t.decodeHTML=t.decodeXML=t.encodeHTML5=t.encodeHTML4=t.escapeUTF8=t.escape=t.encodeNonAsciiHTML=t.encodeHTML=t.encodeXML=t.encode=t.decodeStrict=t.decode=void 0;var n=i(4080),s=i(956);t.decode=function(e,t){return(!t||t<=0?n.decodeXML:n.decodeHTML)(e)},t.decodeStrict=function(e,t){return(!t||t<=0?n.decodeXML:n.decodeHTMLStrict)(e)},t.encode=function(e,t){return(!t||t<=0?s.encodeXML:s.encodeHTML)(e)};var r=i(956);Object.defineProperty(t,"encodeXML",{enumerable:!0,get:function(){return r.encodeXML}}),Object.defineProperty(t,"encodeHTML",{enumerable:!0,get:function(){return r.encodeHTML}}),Object.defineProperty(t,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return r.encodeNonAsciiHTML}}),Object.defineProperty(t,"escape",{enumerable:!0,get:function(){return r.escape}}),Object.defineProperty(t,"escapeUTF8",{enumerable:!0,get:function(){return r.escapeUTF8}}),Object.defineProperty(t,"encodeHTML4",{enumerable:!0,get:function(){return r.encodeHTML}}),Object.defineProperty(t,"encodeHTML5",{enumerable:!0,get:function(){return r.encodeHTML}});var o=i(4080);Object.defineProperty(t,"decodeXML",{enumerable:!0,get:function(){return o.decodeXML}}),Object.defineProperty(t,"decodeHTML",{enumerable:!0,get:function(){return o.decodeHTML}}),Object.defineProperty(t,"decodeHTMLStrict",{enumerable:!0,get:function(){return o.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML4",{enumerable:!0,get:function(){return o.decodeHTML}}),Object.defineProperty(t,"decodeHTML5",{enumerable:!0,get:function(){return o.decodeHTML}}),Object.defineProperty(t,"decodeHTML4Strict",{enumerable:!0,get:function(){return o.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML5Strict",{enumerable:!0,get:function(){return o.decodeHTMLStrict}}),Object.defineProperty(t,"decodeXMLStrict",{enumerable:!0,get:function(){return o.decodeXML}})},3419:e=>{"use strict";e.exports=e=>{if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}},995:function(e,t,i){"use strict";var n,s=this&&this.__extends||(n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},n(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function i(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}),r=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&r(t,e,i);return o(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.parseFeed=t.FeedHandler=void 0;var h,c,d=l(i(9425)),u=a(i(5030)),p=i(7361);!function(e){e[e.image=0]="image",e[e.audio=1]="audio",e[e.video=2]="video",e[e.document=3]="document",e[e.executable=4]="executable"}(h||(h={})),function(e){e[e.sample=0]="sample",e[e.full=1]="full",e[e.nonstop=2]="nonstop"}(c||(c={}));var f=function(e){function t(t,i){return"object"==typeof t&&(i=t=void 0),e.call(this,t,i)||this}return s(t,e),t.prototype.onend=function(){var e,t,i=v(y,this.dom);if(i){var n={};if("feed"===i.name){var s=i.children;n.type="atom",_(n,"id","id",s),_(n,"title","title",s);var r=b("href",v("link",s));r&&(n.link=r),_(n,"description","subtitle",s),(o=O("updated",s))&&(n.updated=new Date(o)),_(n,"author","email",s,!0),n.items=g("entry",s).map((function(e){var t={},i=e.children;_(t,"id","id",i),_(t,"title","title",i);var n=b("href",v("link",i));n&&(t.link=n);var s=O("summary",i)||O("content",i);s&&(t.description=s);var r=O("updated",i);return r&&(t.pubDate=new Date(r)),t.media=m(i),t}))}else{var o;s=null!==(t=null===(e=v("channel",i.children))||void 0===e?void 0:e.children)&&void 0!==t?t:[],n.type=i.name.substr(0,3),n.id="",_(n,"title","title",s),_(n,"link","link",s),_(n,"description","description",s),(o=O("lastBuildDate",s))&&(n.updated=new Date(o)),_(n,"author","managingEditor",s,!0),n.items=g("item",i.children).map((function(e){var t={},i=e.children;_(t,"id","guid",i),_(t,"title","title",i),_(t,"link","link",i),_(t,"description","description",i);var n=O("pubDate",i);return n&&(t.pubDate=new Date(n)),t.media=m(i),t}))}this.feed=n,this.handleCallback(null)}else this.handleCallback(new Error("couldn't find root of feed"))},t}(d.default);function m(e){return g("media:content",e).map((function(e){var t={medium:e.attribs.medium,isDefault:!!e.attribs.isDefault};return e.attribs.url&&(t.url=e.attribs.url),e.attribs.fileSize&&(t.fileSize=parseInt(e.attribs.fileSize,10)),e.attribs.type&&(t.type=e.attribs.type),e.attribs.expression&&(t.expression=e.attribs.expression),e.attribs.bitrate&&(t.bitrate=parseInt(e.attribs.bitrate,10)),e.attribs.framerate&&(t.framerate=parseInt(e.attribs.framerate,10)),e.attribs.samplingrate&&(t.samplingrate=parseInt(e.attribs.samplingrate,10)),e.attribs.channels&&(t.channels=parseInt(e.attribs.channels,10)),e.attribs.duration&&(t.duration=parseInt(e.attribs.duration,10)),e.attribs.height&&(t.height=parseInt(e.attribs.height,10)),e.attribs.width&&(t.width=parseInt(e.attribs.width,10)),e.attribs.lang&&(t.lang=e.attribs.lang),t}))}function g(e,t){return u.getElementsByTagName(e,t,!0)}function v(e,t){return u.getElementsByTagName(e,t,!0,1)[0]}function O(e,t,i){return void 0===i&&(i=!1),u.getText(u.getElementsByTagName(e,t,i,1)).trim()}function b(e,t){return t?t.attribs[e]:null}function _(e,t,i,n,s){void 0===s&&(s=!1);var r=O(i,n,s);r&&(e[t]=r)}function y(e){return"rss"===e||"feed"===e||"rdf:RDF"===e}t.FeedHandler=f,t.parseFeed=function(e,t){void 0===t&&(t={xmlMode:!0});var i=new f(t);return new p.Parser(i,t).end(e),i.feed}},7361:function(e,t,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=void 0;var s=n(i(1941)),r=new Set(["input","option","optgroup","select","button","datalist","textarea"]),o=new Set(["p"]),a={tr:new Set(["tr","th","td"]),th:new Set(["th"]),td:new Set(["thead","th","td"]),body:new Set(["head","link","script"]),li:new Set(["li"]),p:o,h1:o,h2:o,h3:o,h4:o,h5:o,h6:o,select:r,input:r,output:r,button:r,datalist:r,textarea:r,option:new Set(["option"]),optgroup:new Set(["optgroup","option"]),dd:new Set(["dt","dd"]),dt:new Set(["dt","dd"]),address:o,article:o,aside:o,blockquote:o,details:o,div:o,dl:o,fieldset:o,figcaption:o,figure:o,footer:o,form:o,header:o,hr:o,main:o,nav:o,ol:o,pre:o,section:o,table:o,ul:o,rt:new Set(["rt","rp"]),rp:new Set(["rt","rp"]),tbody:new Set(["thead","tbody"]),tfoot:new Set(["thead","tbody"])},l=new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]),h=new Set(["math","svg"]),c=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),d=/\s|\//,u=function(){function e(e,t){var i,n,r,o,a;void 0===t&&(t={}),this.startIndex=0,this.endIndex=null,this.tagname="",this.attribname="",this.attribvalue="",this.attribs=null,this.stack=[],this.foreignContext=[],this.options=t,this.cbs=null!=e?e:{},this.lowerCaseTagNames=null!==(i=t.lowerCaseTags)&&void 0!==i?i:!t.xmlMode,this.lowerCaseAttributeNames=null!==(n=t.lowerCaseAttributeNames)&&void 0!==n?n:!t.xmlMode,this.tokenizer=new(null!==(r=t.Tokenizer)&&void 0!==r?r:s.default)(this.options,this),null===(a=(o=this.cbs).onparserinit)||void 0===a||a.call(o,this)}return e.prototype.updatePosition=function(e){null===this.endIndex?this.tokenizer.sectionStart<=e?this.startIndex=0:this.startIndex=this.tokenizer.sectionStart-e:this.startIndex=this.endIndex+1,this.endIndex=this.tokenizer.getAbsoluteIndex()},e.prototype.ontext=function(e){var t,i;this.updatePosition(1),this.endIndex--,null===(i=(t=this.cbs).ontext)||void 0===i||i.call(t,e)},e.prototype.onopentagname=function(e){var t,i;if(this.lowerCaseTagNames&&(e=e.toLowerCase()),this.tagname=e,!this.options.xmlMode&&Object.prototype.hasOwnProperty.call(a,e))for(var n=void 0;this.stack.length>0&&a[e].has(n=this.stack[this.stack.length-1]);)this.onclosetag(n);!this.options.xmlMode&&l.has(e)||(this.stack.push(e),h.has(e)?this.foreignContext.push(!0):c.has(e)&&this.foreignContext.push(!1)),null===(i=(t=this.cbs).onopentagname)||void 0===i||i.call(t,e),this.cbs.onopentag&&(this.attribs={})},e.prototype.onopentagend=function(){var e,t;this.updatePosition(1),this.attribs&&(null===(t=(e=this.cbs).onopentag)||void 0===t||t.call(e,this.tagname,this.attribs),this.attribs=null),!this.options.xmlMode&&this.cbs.onclosetag&&l.has(this.tagname)&&this.cbs.onclosetag(this.tagname),this.tagname=""},e.prototype.onclosetag=function(e){if(this.updatePosition(1),this.lowerCaseTagNames&&(e=e.toLowerCase()),(h.has(e)||c.has(e))&&this.foreignContext.pop(),!this.stack.length||!this.options.xmlMode&&l.has(e))this.options.xmlMode||"br"!==e&&"p"!==e||(this.onopentagname(e),this.closeCurrentTag());else{var t=this.stack.lastIndexOf(e);if(-1!==t)if(this.cbs.onclosetag)for(t=this.stack.length-t;t--;)this.cbs.onclosetag(this.stack.pop());else this.stack.length=t;else"p"!==e||this.options.xmlMode||(this.onopentagname(e),this.closeCurrentTag())}},e.prototype.onselfclosingtag=function(){this.options.xmlMode||this.options.recognizeSelfClosing||this.foreignContext[this.foreignContext.length-1]?this.closeCurrentTag():this.onopentagend()},e.prototype.closeCurrentTag=function(){var e,t,i=this.tagname;this.onopentagend(),this.stack[this.stack.length-1]===i&&(null===(t=(e=this.cbs).onclosetag)||void 0===t||t.call(e,i),this.stack.pop())},e.prototype.onattribname=function(e){this.lowerCaseAttributeNames&&(e=e.toLowerCase()),this.attribname=e},e.prototype.onattribdata=function(e){this.attribvalue+=e},e.prototype.onattribend=function(e){var t,i;null===(i=(t=this.cbs).onattribute)||void 0===i||i.call(t,this.attribname,this.attribvalue,e),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribname="",this.attribvalue=""},e.prototype.getInstructionName=function(e){var t=e.search(d),i=t<0?e:e.substr(0,t);return this.lowerCaseTagNames&&(i=i.toLowerCase()),i},e.prototype.ondeclaration=function(e){if(this.cbs.onprocessinginstruction){var t=this.getInstructionName(e);this.cbs.onprocessinginstruction("!"+t,"!"+e)}},e.prototype.onprocessinginstruction=function(e){if(this.cbs.onprocessinginstruction){var t=this.getInstructionName(e);this.cbs.onprocessinginstruction("?"+t,"?"+e)}},e.prototype.oncomment=function(e){var t,i,n,s;this.updatePosition(4),null===(i=(t=this.cbs).oncomment)||void 0===i||i.call(t,e),null===(s=(n=this.cbs).oncommentend)||void 0===s||s.call(n)},e.prototype.oncdata=function(e){var t,i,n,s,r,o;this.updatePosition(1),this.options.xmlMode||this.options.recognizeCDATA?(null===(i=(t=this.cbs).oncdatastart)||void 0===i||i.call(t),null===(s=(n=this.cbs).ontext)||void 0===s||s.call(n,e),null===(o=(r=this.cbs).oncdataend)||void 0===o||o.call(r)):this.oncomment("[CDATA["+e+"]]")},e.prototype.onerror=function(e){var t,i;null===(i=(t=this.cbs).onerror)||void 0===i||i.call(t,e)},e.prototype.onend=function(){var e,t;if(this.cbs.onclosetag)for(var i=this.stack.length;i>0;this.cbs.onclosetag(this.stack[--i]));null===(t=(e=this.cbs).onend)||void 0===t||t.call(e)},e.prototype.reset=function(){var e,t,i,n;null===(t=(e=this.cbs).onreset)||void 0===t||t.call(e),this.tokenizer.reset(),this.tagname="",this.attribname="",this.attribs=null,this.stack=[],null===(n=(i=this.cbs).onparserinit)||void 0===n||n.call(i,this)},e.prototype.parseComplete=function(e){this.reset(),this.end(e)},e.prototype.write=function(e){this.tokenizer.write(e)},e.prototype.end=function(e){this.tokenizer.end(e)},e.prototype.pause=function(){this.tokenizer.pause()},e.prototype.resume=function(){this.tokenizer.resume()},e.prototype.parseChunk=function(e){this.write(e)},e.prototype.done=function(e){this.end(e)},e}();t.Parser=u},1941:function(e,t,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=n(i(7826)),r=n(i(2810)),o=n(i(2836)),a=n(i(8689));function l(e){return" "===e||"\n"===e||"\t"===e||"\f"===e||"\r"===e}function h(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"}function c(e,t,i){var n=e.toLowerCase();return e===n?function(e,s){s===n?e._state=t:(e._state=i,e._index--)}:function(s,r){r===n||r===e?s._state=t:(s._state=i,s._index--)}}function d(e,t){var i=e.toLowerCase();return function(n,s){s===i||s===e?n._state=t:(n._state=3,n._index--)}}var u=c("C",24,16),p=c("D",25,16),f=c("A",26,16),m=c("T",27,16),g=c("A",28,16),v=d("R",35),O=d("I",36),b=d("P",37),_=d("T",38),y=c("R",40,1),w=c("I",41,1),x=c("P",42,1),S=c("T",43,1),k=d("Y",45),T=d("L",46),C=d("E",47),P=c("Y",49,1),M=c("L",50,1),E=c("E",51,1),A=d("I",54),R=d("T",55),D=d("L",56),I=d("E",57),q=c("I",58,1),L=c("T",59,1),N=c("L",60,1),B=c("E",61,1),$=c("#",63,64),Q=c("X",66,65),z=function(){function e(e,t){var i;this._state=1,this.buffer="",this.sectionStart=0,this._index=0,this.bufferOffset=0,this.baseState=1,this.special=1,this.running=!0,this.ended=!1,this.cbs=t,this.xmlMode=!!(null==e?void 0:e.xmlMode),this.decodeEntities=null===(i=null==e?void 0:e.decodeEntities)||void 0===i||i}return e.prototype.reset=function(){this._state=1,this.buffer="",this.sectionStart=0,this._index=0,this.bufferOffset=0,this.baseState=1,this.special=1,this.running=!0,this.ended=!1},e.prototype.write=function(e){this.ended&&this.cbs.onerror(Error(".write() after done!")),this.buffer+=e,this.parse()},e.prototype.end=function(e){this.ended&&this.cbs.onerror(Error(".end() after done!")),e&&this.write(e),this.ended=!0,this.running&&this.finish()},e.prototype.pause=function(){this.running=!1},e.prototype.resume=function(){this.running=!0,this._indexthis.sectionStart&&this.cbs.ontext(this.getSection()),this._state=2,this.sectionStart=this._index):!this.decodeEntities||"&"!==e||1!==this.special&&4!==this.special||(this._index>this.sectionStart&&this.cbs.ontext(this.getSection()),this.baseState=1,this._state=62,this.sectionStart=this._index)},e.prototype.isTagStartChar=function(e){return h(e)||this.xmlMode&&!l(e)&&"/"!==e&&">"!==e},e.prototype.stateBeforeTagName=function(e){"/"===e?this._state=5:"<"===e?(this.cbs.ontext(this.getSection()),this.sectionStart=this._index):">"===e||1!==this.special||l(e)?this._state=1:"!"===e?(this._state=15,this.sectionStart=this._index+1):"?"===e?(this._state=17,this.sectionStart=this._index+1):this.isTagStartChar(e)?(this._state=this.xmlMode||"s"!==e&&"S"!==e?this.xmlMode||"t"!==e&&"T"!==e?3:52:32,this.sectionStart=this._index):this._state=1},e.prototype.stateInTagName=function(e){("/"===e||">"===e||l(e))&&(this.emitToken("onopentagname"),this._state=8,this._index--)},e.prototype.stateBeforeClosingTagName=function(e){l(e)||(">"===e?this._state=1:1!==this.special?4===this.special||"s"!==e&&"S"!==e?4!==this.special||"t"!==e&&"T"!==e?(this._state=1,this._index--):this._state=53:this._state=33:this.isTagStartChar(e)?(this._state=6,this.sectionStart=this._index):(this._state=20,this.sectionStart=this._index))},e.prototype.stateInClosingTagName=function(e){(">"===e||l(e))&&(this.emitToken("onclosetag"),this._state=7,this._index--)},e.prototype.stateAfterClosingTagName=function(e){">"===e&&(this._state=1,this.sectionStart=this._index+1)},e.prototype.stateBeforeAttributeName=function(e){">"===e?(this.cbs.onopentagend(),this._state=1,this.sectionStart=this._index+1):"/"===e?this._state=4:l(e)||(this._state=9,this.sectionStart=this._index)},e.prototype.stateInSelfClosingTag=function(e){">"===e?(this.cbs.onselfclosingtag(),this._state=1,this.sectionStart=this._index+1,this.special=1):l(e)||(this._state=8,this._index--)},e.prototype.stateInAttributeName=function(e){("="===e||"/"===e||">"===e||l(e))&&(this.cbs.onattribname(this.getSection()),this.sectionStart=-1,this._state=10,this._index--)},e.prototype.stateAfterAttributeName=function(e){"="===e?this._state=11:"/"===e||">"===e?(this.cbs.onattribend(void 0),this._state=8,this._index--):l(e)||(this.cbs.onattribend(void 0),this._state=9,this.sectionStart=this._index)},e.prototype.stateBeforeAttributeValue=function(e){'"'===e?(this._state=12,this.sectionStart=this._index+1):"'"===e?(this._state=13,this.sectionStart=this._index+1):l(e)||(this._state=14,this.sectionStart=this._index,this._index--)},e.prototype.handleInAttributeValue=function(e,t){e===t?(this.emitToken("onattribdata"),this.cbs.onattribend(t),this._state=8):this.decodeEntities&&"&"===e&&(this.emitToken("onattribdata"),this.baseState=this._state,this._state=62,this.sectionStart=this._index)},e.prototype.stateInAttributeValueDoubleQuotes=function(e){this.handleInAttributeValue(e,'"')},e.prototype.stateInAttributeValueSingleQuotes=function(e){this.handleInAttributeValue(e,"'")},e.prototype.stateInAttributeValueNoQuotes=function(e){l(e)||">"===e?(this.emitToken("onattribdata"),this.cbs.onattribend(null),this._state=8,this._index--):this.decodeEntities&&"&"===e&&(this.emitToken("onattribdata"),this.baseState=this._state,this._state=62,this.sectionStart=this._index)},e.prototype.stateBeforeDeclaration=function(e){this._state="["===e?23:"-"===e?18:16},e.prototype.stateInDeclaration=function(e){">"===e&&(this.cbs.ondeclaration(this.getSection()),this._state=1,this.sectionStart=this._index+1)},e.prototype.stateInProcessingInstruction=function(e){">"===e&&(this.cbs.onprocessinginstruction(this.getSection()),this._state=1,this.sectionStart=this._index+1)},e.prototype.stateBeforeComment=function(e){"-"===e?(this._state=19,this.sectionStart=this._index+1):this._state=16},e.prototype.stateInComment=function(e){"-"===e&&(this._state=21)},e.prototype.stateInSpecialComment=function(e){">"===e&&(this.cbs.oncomment(this.buffer.substring(this.sectionStart,this._index)),this._state=1,this.sectionStart=this._index+1)},e.prototype.stateAfterComment1=function(e){this._state="-"===e?22:19},e.prototype.stateAfterComment2=function(e){">"===e?(this.cbs.oncomment(this.buffer.substring(this.sectionStart,this._index-2)),this._state=1,this.sectionStart=this._index+1):"-"!==e&&(this._state=19)},e.prototype.stateBeforeCdata6=function(e){"["===e?(this._state=29,this.sectionStart=this._index+1):(this._state=16,this._index--)},e.prototype.stateInCdata=function(e){"]"===e&&(this._state=30)},e.prototype.stateAfterCdata1=function(e){this._state="]"===e?31:29},e.prototype.stateAfterCdata2=function(e){">"===e?(this.cbs.oncdata(this.buffer.substring(this.sectionStart,this._index-2)),this._state=1,this.sectionStart=this._index+1):"]"!==e&&(this._state=29)},e.prototype.stateBeforeSpecialS=function(e){"c"===e||"C"===e?this._state=34:"t"===e||"T"===e?this._state=44:(this._state=3,this._index--)},e.prototype.stateBeforeSpecialSEnd=function(e){2!==this.special||"c"!==e&&"C"!==e?3!==this.special||"t"!==e&&"T"!==e?this._state=1:this._state=48:this._state=39},e.prototype.stateBeforeSpecialLast=function(e,t){("/"===e||">"===e||l(e))&&(this.special=t),this._state=3,this._index--},e.prototype.stateAfterSpecialLast=function(e,t){">"===e||l(e)?(this.special=1,this._state=6,this.sectionStart=this._index-t,this._index--):this._state=1},e.prototype.parseFixedEntity=function(e){if(void 0===e&&(e=this.xmlMode?a.default:r.default),this.sectionStart+1=2;){var i=this.buffer.substr(e,t);if(Object.prototype.hasOwnProperty.call(o.default,i))return this.emitPartial(o.default[i]),void(this.sectionStart+=t+1);t--}},e.prototype.stateInNamedEntity=function(e){";"===e?(this.parseFixedEntity(),1===this.baseState&&this.sectionStart+1"9")&&!h(e)&&(this.xmlMode||this.sectionStart+1===this._index||(1!==this.baseState?"="!==e&&this.parseFixedEntity(o.default):this.parseLegacyEntity()),this._state=this.baseState,this._index--)},e.prototype.decodeNumericEntity=function(e,t,i){var n=this.sectionStart+e;if(n!==this._index){var r=this.buffer.substring(n,this._index),o=parseInt(r,t);this.emitPartial(s.default(o)),this.sectionStart=i?this._index+1:this._index}this._state=this.baseState},e.prototype.stateInNumericEntity=function(e){";"===e?this.decodeNumericEntity(2,10,!0):(e<"0"||e>"9")&&(this.xmlMode?this._state=this.baseState:this.decodeNumericEntity(2,10,!1),this._index--)},e.prototype.stateInHexEntity=function(e){";"===e?this.decodeNumericEntity(3,16,!0):(e<"a"||e>"f")&&(e<"A"||e>"F")&&(e<"0"||e>"9")&&(this.xmlMode?this._state=this.baseState:this.decodeNumericEntity(3,16,!1),this._index--)},e.prototype.cleanup=function(){this.sectionStart<0?(this.buffer="",this.bufferOffset+=this._index,this._index=0):this.running&&(1===this._state?(this.sectionStart!==this._index&&this.cbs.ontext(this.buffer.substr(this.sectionStart)),this.buffer="",this.bufferOffset+=this._index,this._index=0):this.sectionStart===this._index?(this.buffer="",this.bufferOffset+=this._index,this._index=0):(this.buffer=this.buffer.substr(this.sectionStart),this._index-=this.sectionStart,this.bufferOffset+=this.sectionStart),this.sectionStart=0)},e.prototype.parse=function(){for(;this._index{"use strict";function i(e){return"[object Object]"===Object.prototype.toString.call(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.isPlainObject=function(e){var t,n;return!1!==i(e)&&(void 0===(t=e.constructor)||!1!==i(n=t.prototype)&&!1!==n.hasOwnProperty("isPrototypeOf"))}},6145:(e,t,i)=>{var n,s=/[&<>"'`]/g,r=RegExp(s.source),o="object"==typeof i.g&&i.g&&i.g.Object===Object&&i.g,a="object"==typeof self&&self&&self.Object===Object&&self,l=o||a||Function("return this")(),h=(n={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},function(e){return null==n?void 0:n[e]}),c=Object.prototype.toString,d=l.Symbol,u=d?d.prototype:void 0,p=u?u.toString:void 0;e.exports=function(e){var t;return(e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==c.call(e)}(e))return p?p.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(t))&&r.test(e)?e.replace(s,h):e}},6965:e=>{"use strict";function t(e){return"number"==typeof e||!!/^0x[0-9a-f]+$/i.test(e)||/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(e)}function i(e,t){return"constructor"===t&&"function"==typeof e[t]||"__proto__"===t}e.exports=function(e,n){n||(n={});var s={bools:{},strings:{},unknownFn:null};"function"==typeof n.unknown&&(s.unknownFn=n.unknown),"boolean"==typeof n.boolean&&n.boolean?s.allBools=!0:[].concat(n.boolean).filter(Boolean).forEach((function(e){s.bools[e]=!0}));var r={};function o(e){return r[e].some((function(e){return s.bools[e]}))}Object.keys(n.alias||{}).forEach((function(e){r[e]=[].concat(n.alias[e]),r[e].forEach((function(t){r[t]=[e].concat(r[e].filter((function(e){return t!==e})))}))})),[].concat(n.string).filter(Boolean).forEach((function(e){s.strings[e]=!0,r[e]&&[].concat(r[e]).forEach((function(e){s.strings[e]=!0}))}));var a=n.default||{},l={_:[]};function h(e,t,n){for(var r=e,o=0;o=l)return g;n=i(d),s=[],","===n.slice(-1)?(n=n.replace(u,""),O()):v()}function v(){for(i(h),r="",o="in descriptor";;){if(a=e.charAt(m),"in descriptor"===o)if(t(a))r&&(s.push(r),r="",o="after descriptor");else{if(","===a)return m+=1,r&&s.push(r),void O();if("("===a)r+=a,o="in parens";else{if(""===a)return r&&s.push(r),void O();r+=a}}else if("in parens"===o)if(")"===a)r+=a,o="in descriptor";else{if(""===a)return s.push(r),void O();r+=a}else if("after descriptor"===o)if(t(a));else{if(""===a)return void O();o="in descriptor",m-=1}m+=1}}function O(){var t,i,r,o,a,l,h,c,d,u=!1,m={};for(o=0;o{"use strict";function t(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function i(e,t){for(var i,n="",s=0,r=-1,o=0,a=0;a<=e.length;++a){if(a2){var l=n.lastIndexOf("/");if(l!==n.length-1){-1===l?(n="",s=0):s=(n=n.slice(0,l)).length-1-n.lastIndexOf("/"),r=a,o=0;continue}}else if(2===n.length||1===n.length){n="",s=0,r=a,o=0;continue}t&&(n.length>0?n+="/..":n="..",s=2)}else n.length>0?n+="/"+e.slice(r+1,a):n=e.slice(r+1,a),s=a-r-1;r=a,o=0}else 46===i&&-1!==o?++o:o=-1}return n}var n={resolve:function(){for(var e,n="",s=!1,r=arguments.length-1;r>=-1&&!s;r--){var o;r>=0?o=arguments[r]:(void 0===e&&(e=process.cwd()),o=e),t(o),0!==o.length&&(n=o+"/"+n,s=47===o.charCodeAt(0))}return n=i(n,!s),s?n.length>0?"/"+n:"/":n.length>0?n:"."},normalize:function(e){if(t(e),0===e.length)return".";var n=47===e.charCodeAt(0),s=47===e.charCodeAt(e.length-1);return 0!==(e=i(e,!n)).length||n||(e="."),e.length>0&&s&&(e+="/"),n?"/"+e:e},isAbsolute:function(e){return t(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,i=0;i0&&(void 0===e?e=s:e+="/"+s)}return void 0===e?".":n.normalize(e)},relative:function(e,i){if(t(e),t(i),e===i)return"";if((e=n.resolve(e))===(i=n.resolve(i)))return"";for(var s=1;sh){if(47===i.charCodeAt(a+d))return i.slice(a+d+1);if(0===d)return i.slice(a+d)}else o>h&&(47===e.charCodeAt(s+d)?c=d:0===d&&(c=0));break}var u=e.charCodeAt(s+d);if(u!==i.charCodeAt(a+d))break;47===u&&(c=d)}var p="";for(d=s+c+1;d<=r;++d)d!==r&&47!==e.charCodeAt(d)||(0===p.length?p+="..":p+="/..");return p.length>0?p+i.slice(a+c):(a+=c,47===i.charCodeAt(a)&&++a,i.slice(a))},_makeLong:function(e){return e},dirname:function(e){if(t(e),0===e.length)return".";for(var i=e.charCodeAt(0),n=47===i,s=-1,r=!0,o=e.length-1;o>=1;--o)if(47===(i=e.charCodeAt(o))){if(!r){s=o;break}}else r=!1;return-1===s?n?"/":".":n&&1===s?"//":e.slice(0,s)},basename:function(e,i){if(void 0!==i&&"string"!=typeof i)throw new TypeError('"ext" argument must be a string');t(e);var n,s=0,r=-1,o=!0;if(void 0!==i&&i.length>0&&i.length<=e.length){if(i.length===e.length&&i===e)return"";var a=i.length-1,l=-1;for(n=e.length-1;n>=0;--n){var h=e.charCodeAt(n);if(47===h){if(!o){s=n+1;break}}else-1===l&&(o=!1,l=n+1),a>=0&&(h===i.charCodeAt(a)?-1==--a&&(r=n):(a=-1,r=l))}return s===r?r=l:-1===r&&(r=e.length),e.slice(s,r)}for(n=e.length-1;n>=0;--n)if(47===e.charCodeAt(n)){if(!o){s=n+1;break}}else-1===r&&(o=!1,r=n+1);return-1===r?"":e.slice(s,r)},extname:function(e){t(e);for(var i=-1,n=0,s=-1,r=!0,o=0,a=e.length-1;a>=0;--a){var l=e.charCodeAt(a);if(47!==l)-1===s&&(r=!1,s=a+1),46===l?-1===i?i=a:1!==o&&(o=1):-1!==i&&(o=-1);else if(!r){n=a+1;break}}return-1===i||-1===s||0===o||1===o&&i===s-1&&i===n+1?"":e.slice(i,s)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var i=t.dir||t.root,n=t.base||(t.name||"")+(t.ext||"");return i?i===t.root?i+n:i+"/"+n:n}(0,e)},parse:function(e){t(e);var i={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return i;var n,s=e.charCodeAt(0),r=47===s;r?(i.root="/",n=1):n=0;for(var o=-1,a=0,l=-1,h=!0,c=e.length-1,d=0;c>=n;--c)if(47!==(s=e.charCodeAt(c)))-1===l&&(h=!1,l=c+1),46===s?-1===o?o=c:1!==d&&(d=1):-1!==o&&(d=-1);else if(!h){a=c+1;break}return-1===o||-1===l||0===d||1===d&&o===l-1&&o===a+1?-1!==l&&(i.base=i.name=0===a&&r?e.slice(1,l):e.slice(a,l)):(0===a&&r?(i.name=e.slice(1,o),i.base=e.slice(1,l)):(i.name=e.slice(a,o),i.base=e.slice(a,l)),i.ext=e.slice(o,l)),a>0?i.dir=e.slice(0,a-1):r&&(i.dir="/"),i},sep:"/",delimiter:":",win32:null,posix:null};n.posix=n,e.exports=n},1435:e=>{var t=String,i=function(){return{isColorSupported:!1,reset:t,bold:t,dim:t,italic:t,underline:t,inverse:t,hidden:t,strikethrough:t,black:t,red:t,green:t,yellow:t,blue:t,magenta:t,cyan:t,white:t,gray:t,bgBlack:t,bgRed:t,bgGreen:t,bgYellow:t,bgBlue:t,bgMagenta:t,bgCyan:t,bgWhite:t}};e.exports=i(),e.exports.createColors=i},7983:(e,t,i)=>{"use strict";let n=i(9930);class s extends n{constructor(e){super(e),this.type="atrule"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}}e.exports=s,s.default=s,n.registerAtRule(s)},1044:(e,t,i)=>{"use strict";let n=i(322);class s extends n{constructor(e){super(e),this.type="comment"}}e.exports=s,s.default=s},9930:(e,t,i)=>{"use strict";let n,s,r,o,{isClean:a,my:l}=i(2450),h=i(9026),c=i(1044),d=i(322);function u(e){return e.map((e=>(e.nodes&&(e.nodes=u(e.nodes)),delete e.source,e)))}function p(e){if(e[a]=!1,e.proxyOf.nodes)for(let t of e.proxyOf.nodes)p(t)}class f extends d{append(...e){for(let t of e){let e=this.normalize(t,this.last);for(let t of e)this.proxyOf.nodes.push(t)}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let t of this.nodes)t.cleanRaws(e)}each(e){if(!this.proxyOf.nodes)return;let t,i,n=this.getIterator();for(;this.indexes[n]"proxyOf"===t?e:e[t]?"each"===t||"string"==typeof t&&t.startsWith("walk")?(...i)=>e[t](...i.map((e=>"function"==typeof e?(t,i)=>e(t.toProxy(),i):e))):"every"===t||"some"===t?i=>e[t](((e,...t)=>i(e.toProxy(),...t))):"root"===t?()=>e.root().toProxy():"nodes"===t?e.nodes.map((e=>e.toProxy())):"first"===t||"last"===t?e[t].toProxy():e[t]:e[t],set:(e,t,i)=>(e[t]===i||(e[t]=i,"name"!==t&&"params"!==t&&"selector"!==t||e.markDirty()),!0)}}index(e){return"number"==typeof e?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}insertAfter(e,t){let i,n=this.index(e),s=this.normalize(t,this.proxyOf.nodes[n]).reverse();n=this.index(e);for(let e of s)this.proxyOf.nodes.splice(n+1,0,e);for(let e in this.indexes)i=this.indexes[e],n(e[l]||f.rebuild(e),(e=e.proxyOf).parent&&e.parent.removeChild(e),e[a]&&p(e),void 0===e.raws.before&&t&&void 0!==t.raws.before&&(e.raws.before=t.raws.before.replace(/\S/g,"")),e.parent=this.proxyOf,e)))}prepend(...e){e=e.reverse();for(let t of e){let e=this.normalize(t,this.first,"prepend").reverse();for(let t of e)this.proxyOf.nodes.unshift(t);for(let t in this.indexes)this.indexes[t]=this.indexes[t]+e.length}return this.markDirty(),this}push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(e){let t;e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);for(let i in this.indexes)t=this.indexes[i],t>=e&&(this.indexes[i]=t-1);return this.markDirty(),this}replaceValues(e,t,i){return i||(i=t,t={}),this.walkDecls((n=>{t.props&&!t.props.includes(n.prop)||t.fast&&!n.value.includes(t.fast)||(n.value=n.value.replace(e,i))})),this.markDirty(),this}some(e){return this.nodes.some(e)}walk(e){return this.each(((t,i)=>{let n;try{n=e(t,i)}catch(e){throw t.addToError(e)}return!1!==n&&t.walk&&(n=t.walk(e)),n}))}walkAtRules(e,t){return t?e instanceof RegExp?this.walk(((i,n)=>{if("atrule"===i.type&&e.test(i.name))return t(i,n)})):this.walk(((i,n)=>{if("atrule"===i.type&&i.name===e)return t(i,n)})):(t=e,this.walk(((e,i)=>{if("atrule"===e.type)return t(e,i)})))}walkComments(e){return this.walk(((t,i)=>{if("comment"===t.type)return e(t,i)}))}walkDecls(e,t){return t?e instanceof RegExp?this.walk(((i,n)=>{if("decl"===i.type&&e.test(i.prop))return t(i,n)})):this.walk(((i,n)=>{if("decl"===i.type&&i.prop===e)return t(i,n)})):(t=e,this.walk(((e,i)=>{if("decl"===e.type)return t(e,i)})))}walkRules(e,t){return t?e instanceof RegExp?this.walk(((i,n)=>{if("rule"===i.type&&e.test(i.selector))return t(i,n)})):this.walk(((i,n)=>{if("rule"===i.type&&i.selector===e)return t(i,n)})):(t=e,this.walk(((e,i)=>{if("rule"===e.type)return t(e,i)})))}get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}f.registerParse=e=>{n=e},f.registerRule=e=>{s=e},f.registerAtRule=e=>{r=e},f.registerRoot=e=>{o=e},e.exports=f,f.default=f,f.rebuild=e=>{"atrule"===e.type?Object.setPrototypeOf(e,r.prototype):"rule"===e.type?Object.setPrototypeOf(e,s.prototype):"decl"===e.type?Object.setPrototypeOf(e,h.prototype):"comment"===e.type?Object.setPrototypeOf(e,c.prototype):"root"===e.type&&Object.setPrototypeOf(e,o.prototype),e[l]=!0,e.nodes&&e.nodes.forEach((e=>{f.rebuild(e)}))}},2604:(e,t,i)=>{"use strict";let n=i(1435),s=i(2940);class r extends Error{constructor(e,t,i,n,s,o){super(e),this.name="CssSyntaxError",this.reason=e,s&&(this.file=s),n&&(this.source=n),o&&(this.plugin=o),void 0!==t&&void 0!==i&&("number"==typeof t?(this.line=t,this.column=i):(this.line=t.line,this.column=t.column,this.endLine=i.line,this.endColumn=i.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,r)}setMessage(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",void 0!==this.line&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason}showSourceCode(e){if(!this.source)return"";let t=this.source;null==e&&(e=n.isColorSupported),s&&e&&(t=s(t));let i,r,o=t.split(/\r?\n/),a=Math.max(this.line-3,0),l=Math.min(this.line+2,o.length),h=String(l).length;if(e){let{bold:e,gray:t,red:s}=n.createColors(!0);i=t=>e(s(t)),r=e=>t(e)}else i=r=e=>e;return o.slice(a,l).map(((e,t)=>{let n=a+1+t,s=" "+(" "+n).slice(-h)+" | ";if(n===this.line){let t=r(s.replace(/\d/g," "))+e.slice(0,this.column-1).replace(/[^\t]/g," ");return i(">")+r(s)+e+"\n "+t+i("^")}return" "+r(s)+e})).join("\n")}toString(){let e=this.showSourceCode();return e&&(e="\n\n"+e+"\n"),this.name+": "+this.message+e}}e.exports=r,r.default=r},9026:(e,t,i)=>{"use strict";let n=i(322);class s extends n{constructor(e){e&&void 0!==e.value&&"string"!=typeof e.value&&(e={...e,value:String(e.value)}),super(e),this.type="decl"}get variable(){return this.prop.startsWith("--")||"$"===this.prop[0]}}e.exports=s,s.default=s},2900:(e,t,i)=>{"use strict";let n,s,r=i(9930);class o extends r{constructor(e){super({type:"document",...e}),this.nodes||(this.nodes=[])}toResult(e={}){return new n(new s,this,e).stringify()}}o.registerLazyResult=e=>{n=e},o.registerProcessor=e=>{s=e},e.exports=o,o.default=o},4899:(e,t,i)=>{"use strict";let n=i(9026),s=i(2764),r=i(1044),o=i(7983),a=i(6970),l=i(4539),h=i(4146);function c(e,t){if(Array.isArray(e))return e.map((e=>c(e)));let{inputs:i,...d}=e;if(i){t=[];for(let e of i){let i={...e,__proto__:a.prototype};i.map&&(i.map={...i.map,__proto__:s.prototype}),t.push(i)}}if(d.nodes&&(d.nodes=e.nodes.map((e=>c(e,t)))),d.source){let{inputId:e,...i}=d.source;d.source=i,null!=e&&(d.source.input=t[e])}if("root"===d.type)return new l(d);if("decl"===d.type)return new n(d);if("rule"===d.type)return new h(d);if("comment"===d.type)return new r(d);if("atrule"===d.type)return new o(d);throw new Error("Unknown node type: "+e.type)}e.exports=c,c.default=c},6970:(e,t,i)=>{"use strict";let{SourceMapConsumer:n,SourceMapGenerator:s}=i(9059),{fileURLToPath:r,pathToFileURL:o}=i(415),{isAbsolute:a,resolve:l}=i(2666),{nanoid:h}=i(8845),c=i(2940),d=i(2604),u=i(2764),p=Symbol("fromOffsetCache"),f=Boolean(n&&s),m=Boolean(l&&a);class g{constructor(e,t={}){if(null==e||"object"==typeof e&&!e.toString)throw new Error(`PostCSS received ${e} instead of CSS string`);if(this.css=e.toString(),"\ufeff"===this.css[0]||"￾"===this.css[0]?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,t.from&&(!m||/^\w+:\/\//.test(t.from)||a(t.from)?this.file=t.from:this.file=l(t.from)),m&&f){let e=new u(this.css,t);if(e.text){this.map=e;let t=e.consumer().file;!this.file&&t&&(this.file=this.mapResolve(t))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}error(e,t,i,n={}){let s,r,a;if(t&&"object"==typeof t){let e=t,n=i;if("number"==typeof e.offset){let n=this.fromOffset(e.offset);t=n.line,i=n.col}else t=e.line,i=e.column;if("number"==typeof n.offset){let e=this.fromOffset(n.offset);r=e.line,a=e.col}else r=n.line,a=n.column}else if(!i){let e=this.fromOffset(t);t=e.line,i=e.col}let l=this.origin(t,i,r,a);return s=l?new d(e,void 0===l.endLine?l.line:{column:l.column,line:l.line},void 0===l.endLine?l.column:{column:l.endColumn,line:l.endLine},l.source,l.file,n.plugin):new d(e,void 0===r?t:{column:i,line:t},void 0===r?i:{column:a,line:r},this.css,this.file,n.plugin),s.input={column:i,endColumn:a,endLine:r,line:t,source:this.css},this.file&&(o&&(s.input.url=o(this.file).toString()),s.input.file=this.file),s}fromOffset(e){let t,i;if(this[p])i=this[p];else{let e=this.css.split("\n");i=new Array(e.length);let t=0;for(let n=0,s=e.length;n=t)n=i.length-1;else{let t,s=i.length-2;for(;n>1),e=i[t+1])){n=t;break}n=t+1}}return{col:e-i[n]+1,line:n+1}}mapResolve(e){return/^\w+:\/\//.test(e)?e:l(this.map.consumer().sourceRoot||this.map.root||".",e)}origin(e,t,i,n){if(!this.map)return!1;let s,l,h=this.map.consumer(),c=h.originalPositionFor({column:t,line:e});if(!c.source)return!1;"number"==typeof i&&(s=h.originalPositionFor({column:n,line:i})),l=a(c.source)?o(c.source):new URL(c.source,this.map.consumer().sourceRoot||o(this.map.mapFile));let d={column:c.column,endColumn:s&&s.column,endLine:s&&s.line,line:c.line,url:l.toString()};if("file:"===l.protocol){if(!r)throw new Error("file: protocol is not available in this PostCSS build");d.file=r(l)}let u=h.sourceContentFor(c.source);return u&&(d.source=u),d}toJSON(){let e={};for(let t of["hasBOM","css","file","id"])null!=this[t]&&(e[t]=this[t]);return this.map&&(e.map={...this.map},e.map.consumerCache&&(e.map.consumerCache=void 0)),e}get from(){return this.file||this.id}}e.exports=g,g.default=g,c&&c.registerInput&&c.registerInput(g)},427:(e,t,i)=>{"use strict";let{isClean:n,my:s}=i(2450),r=i(4342),o=i(9573),a=i(9930),l=i(2900),h=(i(5411),i(165)),c=i(6214),d=i(4539);const u={atrule:"AtRule",comment:"Comment",decl:"Declaration",document:"Document",root:"Root",rule:"Rule"},p={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},f={Once:!0,postcssPlugin:!0,prepare:!0},m=0;function g(e){return"object"==typeof e&&"function"==typeof e.then}function v(e){let t=!1,i=u[e.type];return"decl"===e.type?t=e.prop.toLowerCase():"atrule"===e.type&&(t=e.name.toLowerCase()),t&&e.append?[i,i+"-"+t,m,i+"Exit",i+"Exit-"+t]:t?[i,i+"-"+t,i+"Exit",i+"Exit-"+t]:e.append?[i,m,i+"Exit"]:[i,i+"Exit"]}function O(e){let t;return t="document"===e.type?["Document",m,"DocumentExit"]:"root"===e.type?["Root",m,"RootExit"]:v(e),{eventIndex:0,events:t,iterator:0,node:e,visitorIndex:0,visitors:[]}}function b(e){return e[n]=!1,e.nodes&&e.nodes.forEach((e=>b(e))),e}let _={};class y{constructor(e,t,i){let n;if(this.stringified=!1,this.processed=!1,"object"!=typeof t||null===t||"root"!==t.type&&"document"!==t.type)if(t instanceof y||t instanceof h)n=b(t.root),t.map&&(void 0===i.map&&(i.map={}),i.map.inline||(i.map.inline=!1),i.map.prev=t.map);else{let e=c;i.syntax&&(e=i.syntax.parse),i.parser&&(e=i.parser),e.parse&&(e=e.parse);try{n=e(t,i)}catch(e){this.processed=!0,this.error=e}n&&!n[s]&&a.rebuild(n)}else n=b(t);this.result=new h(e,n,i),this.helpers={..._,postcss:_,result:this.result},this.plugins=this.processor.plugins.map((e=>"object"==typeof e&&e.prepare?{...e,...e.prepare(this.result)}:e))}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}getAsyncError(){throw new Error("Use process(css).then(cb) to work with async plugins")}handleError(e,t){let i=this.result.lastPlugin;try{t&&t.addToError(e),this.error=e,"CssSyntaxError"!==e.name||e.plugin?i.postcssVersion:(e.plugin=i.postcssPlugin,e.setMessage())}catch(e){console&&console.error&&console.error(e)}return e}prepareVisitors(){this.listeners={};let e=(e,t,i)=>{this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push([e,i])};for(let t of this.plugins)if("object"==typeof t)for(let i in t){if(!p[i]&&/^[A-Z]/.test(i))throw new Error(`Unknown event ${i} in ${t.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!f[i])if("object"==typeof t[i])for(let n in t[i])e(t,"*"===n?i:i+"-"+n.toLowerCase(),t[i][n]);else"function"==typeof t[i]&&e(t,i,t[i])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let e=0;e0;){let e=this.visitTick(t);if(g(e))try{await e}catch(e){let i=t[t.length-1].node;throw this.handleError(e,i)}}}if(this.listeners.OnceExit)for(let[t,i]of this.listeners.OnceExit){this.result.lastPlugin=t;try{if("document"===e.type){let t=e.nodes.map((e=>i(e,this.helpers)));await Promise.all(t)}else await i(e,this.helpers)}catch(e){throw this.handleError(e)}}}return this.processed=!0,this.stringify()}runOnRoot(e){this.result.lastPlugin=e;try{if("object"==typeof e&&e.Once){if("document"===this.result.root.type){let t=this.result.root.nodes.map((t=>e.Once(t,this.helpers)));return g(t[0])?Promise.all(t):t}return e.Once(this.result.root,this.helpers)}if("function"==typeof e)return e(this.result.root,this.result)}catch(e){throw this.handleError(e)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,t=o;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);let i=new r(t,this.result.root,this.result.opts).generate();return this.result.css=i[0],this.result.map=i[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins)if(g(this.runOnRoot(e)))throw this.getAsyncError();if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[n];)e[n]=!0,this.walkSync(e);if(this.listeners.OnceExit)if("document"===e.type)for(let t of e.nodes)this.visitSync(this.listeners.OnceExit,t);else this.visitSync(this.listeners.OnceExit,e)}return this.result}then(e,t){return this.async().then(e,t)}toString(){return this.css}visitSync(e,t){for(let[i,n]of e){let e;this.result.lastPlugin=i;try{e=n(t,this.helpers)}catch(e){throw this.handleError(e,t.proxyOf)}if("root"!==t.type&&"document"!==t.type&&!t.parent)return!0;if(g(e))throw this.getAsyncError()}}visitTick(e){let t=e[e.length-1],{node:i,visitors:s}=t;if("root"!==i.type&&"document"!==i.type&&!i.parent)return void e.pop();if(s.length>0&&t.visitorIndex{e[n]||this.walkSync(e)}));else{let t=this.listeners[i];if(t&&this.visitSync(t,e.toProxy()))return}}warnings(){return this.sync().warnings()}get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return"LazyResult"}}y.registerPostcss=e=>{_=e},e.exports=y,y.default=y,d.registerLazyResult(y),l.registerLazyResult(y)},6065:e=>{"use strict";let t={comma:e=>t.split(e,[","],!0),space:e=>t.split(e,[" ","\n","\t"]),split(e,t,i){let n=[],s="",r=!1,o=0,a=!1,l="",h=!1;for(let i of e)h?h=!1:"\\"===i?h=!0:a?i===l&&(a=!1):'"'===i||"'"===i?(a=!0,l=i):"("===i?o+=1:")"===i?o>0&&(o-=1):0===o&&t.includes(i)&&(r=!0),r?(""!==s&&n.push(s.trim()),s="",r=!1):s+=i;return(i||""!==s)&&n.push(s.trim()),n}};e.exports=t,t.default=t},4342:(e,t,i)=>{"use strict";let{SourceMapConsumer:n,SourceMapGenerator:s}=i(9059),{dirname:r,relative:o,resolve:a,sep:l}=i(2666),{pathToFileURL:h}=i(415),c=i(6970),d=Boolean(n&&s),u=Boolean(r&&a&&o&&l);e.exports=class{constructor(e,t,i,n){this.stringify=e,this.mapOpts=i.map||{},this.root=t,this.opts=i,this.css=n,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let e;e=this.isInline()?"data:application/json;base64,"+this.toBase64(this.map.toString()):"string"==typeof this.mapOpts.annotation?this.mapOpts.annotation:"function"==typeof this.mapOpts.annotation?this.mapOpts.annotation(this.opts.to,this.root):this.outputFile()+".map";let t="\n";this.css.includes("\r\n")&&(t="\r\n"),this.css+=t+"/*# sourceMappingURL="+e+" */"}applyPrevMaps(){for(let e of this.previous()){let t,i=this.toUrl(this.path(e.file)),s=e.root||r(e.file);!1===this.mapOpts.sourcesContent?(t=new n(e.text),t.sourcesContent&&(t.sourcesContent=t.sourcesContent.map((()=>null)))):t=e.consumer(),this.map.applySourceMap(t,i,this.toUrl(this.path(s)))}}clearAnnotation(){if(!1!==this.mapOpts.annotation)if(this.root){let e;for(let t=this.root.nodes.length-1;t>=0;t--)e=this.root.nodes[t],"comment"===e.type&&0===e.text.indexOf("# sourceMappingURL=")&&this.root.removeChild(t)}else this.css&&(this.css=this.css.replace(/(\n)?\/\*#[\S\s]*?\*\/$/gm,""))}generate(){if(this.clearAnnotation(),u&&d&&this.isMap())return this.generateMap();{let e="";return this.stringify(this.root,(t=>{e+=t})),[e]}}generateMap(){if(this.root)this.generateString();else if(1===this.previous().length){let e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=s.fromSourceMap(e)}else this.map=new s({file:this.outputFile()}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css="",this.map=new s({file:this.outputFile()});let e,t,i=1,n=1,r="",o={generated:{column:0,line:0},original:{column:0,line:0},source:""};this.stringify(this.root,((s,a,l)=>{if(this.css+=s,a&&"end"!==l&&(o.generated.line=i,o.generated.column=n-1,a.source&&a.source.start?(o.source=this.sourcePath(a),o.original.line=a.source.start.line,o.original.column=a.source.start.column-1,this.map.addMapping(o)):(o.source=r,o.original.line=1,o.original.column=0,this.map.addMapping(o))),e=s.match(/\n/g),e?(i+=e.length,t=s.lastIndexOf("\n"),n=s.length-t):n+=s.length,a&&"start"!==l){let e=a.parent||{raws:{}};("decl"===a.type||"atrule"===a.type&&!a.nodes)&&a===e.last&&!e.raws.semicolon||(a.source&&a.source.end?(o.source=this.sourcePath(a),o.original.line=a.source.end.line,o.original.column=a.source.end.column-1,o.generated.line=i,o.generated.column=n-2,this.map.addMapping(o)):(o.source=r,o.original.line=1,o.original.column=0,o.generated.line=i,o.generated.column=n-1,this.map.addMapping(o)))}}))}isAnnotation(){return!!this.isInline()||(void 0!==this.mapOpts.annotation?this.mapOpts.annotation:!this.previous().length||this.previous().some((e=>e.annotation)))}isInline(){if(void 0!==this.mapOpts.inline)return this.mapOpts.inline;let e=this.mapOpts.annotation;return(void 0===e||!0===e)&&(!this.previous().length||this.previous().some((e=>e.inline)))}isMap(){return void 0!==this.opts.map?!!this.opts.map:this.previous().length>0}isSourcesContent(){return void 0!==this.mapOpts.sourcesContent?this.mapOpts.sourcesContent:!this.previous().length||this.previous().some((e=>e.withContent()))}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"}path(e){if(this.mapOpts.absolute)return e;if(60===e.charCodeAt(0))return e;if(/^\w+:\/\//.test(e))return e;let t=this.memoizedPaths.get(e);if(t)return t;let i=this.opts.to?r(this.opts.to):".";"string"==typeof this.mapOpts.annotation&&(i=r(a(i,this.mapOpts.annotation)));let n=o(i,e);return this.memoizedPaths.set(e,n),n}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk((e=>{if(e.source&&e.source.input.map){let t=e.source.input.map;this.previousMaps.includes(t)||this.previousMaps.push(t)}}));else{let e=new c(this.css,this.opts);e.map&&this.previousMaps.push(e.map)}return this.previousMaps}setSourcesContent(){let e={};if(this.root)this.root.walk((t=>{if(t.source){let i=t.source.input.from;if(i&&!e[i]){e[i]=!0;let n=this.usesFileUrls?this.toFileUrl(i):this.toUrl(this.path(i));this.map.setSourceContent(n,t.source.input.css)}}}));else if(this.css){let e=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(e,this.css)}}sourcePath(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))}toBase64(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))}toFileUrl(e){let t=this.memoizedFileURLs.get(e);if(t)return t;if(h){let t=h(e).toString();return this.memoizedFileURLs.set(e,t),t}throw new Error("`map.absolute` option is not available in this PostCSS build")}toUrl(e){let t=this.memoizedURLs.get(e);if(t)return t;"\\"===l&&(e=e.replace(/\\/g,"/"));let i=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,i),i}}},7744:(e,t,i)=>{"use strict";let n=i(4342),s=i(9573),r=(i(5411),i(6214));const o=i(165);class a{constructor(e,t,i){let r;t=t.toString(),this.stringified=!1,this._processor=e,this._css=t,this._opts=i,this._map=void 0;let a=s;this.result=new o(this._processor,r,this._opts),this.result.css=t;let l=this;Object.defineProperty(this.result,"root",{get:()=>l.root});let h=new n(a,r,this._opts,t);if(h.isMap()){let[e,t]=h.generate();e&&(this.result.css=e),t&&(this.result.map=t)}}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}sync(){if(this.error)throw this.error;return this.result}then(e,t){return this.async().then(e,t)}toString(){return this._css}warnings(){return[]}get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let e,t=r;try{e=t(this._css,this._opts)}catch(e){this.error=e}if(this.error)throw this.error;return this._root=e,e}get[Symbol.toStringTag](){return"NoWorkResult"}}e.exports=a,a.default=a},322:(e,t,i)=>{"use strict";let{isClean:n,my:s}=i(2450),r=i(2604),o=i(9906),a=i(9573);function l(e,t){let i=new e.constructor;for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;if("proxyCache"===n)continue;let s=e[n],r=typeof s;"parent"===n&&"object"===r?t&&(i[n]=t):"source"===n?i[n]=s:Array.isArray(s)?i[n]=s.map((e=>l(e,i))):("object"===r&&null!==s&&(s=l(s)),i[n]=s)}return i}class h{constructor(e={}){this.raws={},this[n]=!1,this[s]=!0;for(let t in e)if("nodes"===t){this.nodes=[];for(let i of e[t])"function"==typeof i.clone?this.append(i.clone()):this.append(i)}else this[t]=e[t]}addToError(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){let t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,`$&${t.input.from}:${t.start.line}:${t.start.column}$&`)}return e}after(e){return this.parent.insertAfter(this,e),this}assign(e={}){for(let t in e)this[t]=e[t];return this}before(e){return this.parent.insertBefore(this,e),this}cleanRaws(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between}clone(e={}){let t=l(this);for(let i in e)t[i]=e[i];return t}cloneAfter(e={}){let t=this.clone(e);return this.parent.insertAfter(this,t),t}cloneBefore(e={}){let t=this.clone(e);return this.parent.insertBefore(this,t),t}error(e,t={}){if(this.source){let{end:i,start:n}=this.rangeBy(t);return this.source.input.error(e,{column:n.column,line:n.line},{column:i.column,line:i.line},t)}return new r(e)}getProxyProcessor(){return{get:(e,t)=>"proxyOf"===t?e:"root"===t?()=>e.root().toProxy():e[t],set:(e,t,i)=>(e[t]===i||(e[t]=i,"prop"!==t&&"value"!==t&&"name"!==t&&"params"!==t&&"important"!==t&&"text"!==t||e.markDirty()),!0)}}markDirty(){if(this[n]){this[n]=!1;let e=this;for(;e=e.parent;)e[n]=!1}}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}positionBy(e,t){let i=this.source.start;if(e.index)i=this.positionInside(e.index,t);else if(e.word){let n=(t=this.toString()).indexOf(e.word);-1!==n&&(i=this.positionInside(n,t))}return i}positionInside(e,t){let i=t||this.toString(),n=this.source.start.column,s=this.source.start.line;for(let t=0;t"object"==typeof e&&e.toJSON?e.toJSON(null,t):e));else if("object"==typeof n&&n.toJSON)i[e]=n.toJSON(null,t);else if("source"===e){let r=t.get(n.input);null==r&&(r=s,t.set(n.input,s),s++),i[e]={end:n.end,inputId:r,start:n.start}}else i[e]=n}return n&&(i.inputs=[...t.keys()].map((e=>e.toJSON()))),i}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(e=a){e.stringify&&(e=e.stringify);let t="";return e(this,(e=>{t+=e})),t}warn(e,t,i){let n={node:this};for(let e in i)n[e]=i[e];return e.warn(t,n)}get proxyOf(){return this}}e.exports=h,h.default=h},6214:(e,t,i)=>{"use strict";let n=i(9930),s=i(6992),r=i(6970);function o(e,t){let i=new r(e,t),n=new s(i);try{n.parse()}catch(e){throw e}return n.root}e.exports=o,o.default=o,n.registerParse(o)},6992:(e,t,i)=>{"use strict";let n=i(9026),s=i(9985),r=i(1044),o=i(7983),a=i(4539),l=i(4146);const h={empty:!0,space:!0};e.exports=class{constructor(e){this.input=e,this.root=new a,this.current=this.root,this.spaces="",this.semicolon=!1,this.customProperty=!1,this.createTokenizer(),this.root.source={input:e,start:{column:1,line:1,offset:0}}}atrule(e){let t,i,n,s=new o;s.name=e[1].slice(1),""===s.name&&this.unnamedAtrule(s,e),this.init(s,e[2]);let r=!1,a=!1,l=[],h=[];for(;!this.tokenizer.endOfFile();){if(t=(e=this.tokenizer.nextToken())[0],"("===t||"["===t?h.push("("===t?")":"]"):"{"===t&&h.length>0?h.push("}"):t===h[h.length-1]&&h.pop(),0===h.length){if(";"===t){s.source.end=this.getPosition(e[2]),s.source.end.offset++,this.semicolon=!0;break}if("{"===t){a=!0;break}if("}"===t){if(l.length>0){for(n=l.length-1,i=l[n];i&&"space"===i[0];)i=l[--n];i&&(s.source.end=this.getPosition(i[3]||i[2]),s.source.end.offset++)}this.end(e);break}l.push(e)}else l.push(e);if(this.tokenizer.endOfFile()){r=!0;break}}s.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(s.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(s,"params",l),r&&(e=l[l.length-1],s.source.end=this.getPosition(e[3]||e[2]),s.source.end.offset++,this.spaces=s.raws.between,s.raws.between="")):(s.raws.afterName="",s.params=""),a&&(s.nodes=[],this.current=s)}checkMissedSemicolon(e){let t=this.colon(e);if(!1===t)return;let i,n=0;for(let s=t-1;s>=0&&(i=e[s],"space"===i[0]||(n+=1,2!==n));s--);throw this.input.error("Missed semicolon","word"===i[0]?i[3]+1:i[2])}colon(e){let t,i,n,s=0;for(let[r,o]of e.entries()){if(t=o,i=t[0],"("===i&&(s+=1),")"===i&&(s-=1),0===s&&":"===i){if(n){if("word"===n[0]&&"progid"===n[1])continue;return r}this.doubleColon(t)}n=t}return!1}comment(e){let t=new r;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;let i=e[1].slice(2,-2);if(/^\s*$/.test(i))t.text="",t.raws.left=i,t.raws.right="";else{let e=i.match(/^(\s*)([^]*\S)(\s*)$/);t.text=e[2],t.raws.left=e[1],t.raws.right=e[3]}}createTokenizer(){this.tokenizer=s(this.input)}decl(e,t){let i=new n;this.init(i,e[0][2]);let s,r=e[e.length-1];for(";"===r[0]&&(this.semicolon=!0,e.pop()),i.source.end=this.getPosition(r[3]||r[2]||function(e){for(let t=e.length-1;t>=0;t--){let i=e[t],n=i[3]||i[2];if(n)return n}}(e)),i.source.end.offset++;"word"!==e[0][0];)1===e.length&&this.unknownWord(e),i.raws.before+=e.shift()[1];for(i.source.start=this.getPosition(e[0][2]),i.prop="";e.length;){let t=e[0][0];if(":"===t||"space"===t||"comment"===t)break;i.prop+=e.shift()[1]}for(i.raws.between="";e.length;){if(s=e.shift(),":"===s[0]){i.raws.between+=s[1];break}"word"===s[0]&&/\w/.test(s[1])&&this.unknownWord([s]),i.raws.between+=s[1]}"_"!==i.prop[0]&&"*"!==i.prop[0]||(i.raws.before+=i.prop[0],i.prop=i.prop.slice(1));let o,a=[];for(;e.length&&(o=e[0][0],"space"===o||"comment"===o);)a.push(e.shift());this.precheckMissedSemicolon(e);for(let t=e.length-1;t>=0;t--){if(s=e[t],"!important"===s[1].toLowerCase()){i.important=!0;let n=this.stringFrom(e,t);n=this.spacesFromEnd(e)+n," !important"!==n&&(i.raws.important=n);break}if("important"===s[1].toLowerCase()){let n=e.slice(0),s="";for(let e=t;e>0;e--){let t=n[e][0];if(0===s.trim().indexOf("!")&&"space"!==t)break;s=n.pop()[1]+s}0===s.trim().indexOf("!")&&(i.important=!0,i.raws.important=s,e=n)}if("space"!==s[0]&&"comment"!==s[0])break}e.some((e=>"space"!==e[0]&&"comment"!==e[0]))&&(i.raws.between+=a.map((e=>e[1])).join(""),a=[]),this.raw(i,"value",a.concat(e),t),i.value.includes(":")&&!t&&this.checkMissedSemicolon(e)}doubleColon(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})}emptyRule(e){let t=new l;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let e=this.current.nodes[this.current.nodes.length-1];e&&"rule"===e.type&&!e.raws.ownSemicolon&&(e.raws.ownSemicolon=this.spaces,this.spaces="")}}getPosition(e){let t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}}init(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces="","comment"!==e.type&&(this.semicolon=!1)}other(e){let t=!1,i=null,n=!1,s=null,r=[],o=e[1].startsWith("--"),a=[],l=e;for(;l;){if(i=l[0],a.push(l),"("===i||"["===i)s||(s=l),r.push("("===i?")":"]");else if(o&&n&&"{"===i)s||(s=l),r.push("}");else if(0===r.length){if(";"===i){if(n)return void this.decl(a,o);break}if("{"===i)return void this.rule(a);if("}"===i){this.tokenizer.back(a.pop()),t=!0;break}":"===i&&(n=!0)}else i===r[r.length-1]&&(r.pop(),0===r.length&&(s=null));l=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),r.length>0&&this.unclosedBracket(s),t&&n){if(!o)for(;a.length&&(l=a[a.length-1][0],"space"===l||"comment"===l);)this.tokenizer.back(a.pop());this.decl(a,o)}else this.unknownWord(a)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e)}this.endFile()}precheckMissedSemicolon(){}raw(e,t,i,n){let s,r,o,a,l=i.length,c="",d=!0;for(let e=0;ee+t[1]),"");e.raws[t]={raw:n,value:c}}e[t]=c}rule(e){e.pop();let t=new l;this.init(t,e[0][2]),t.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(t,"selector",e),this.current=t}spacesAndCommentsFromEnd(e){let t,i="";for(;e.length&&(t=e[e.length-1][0],"space"===t||"comment"===t);)i=e.pop()[1]+i;return i}spacesAndCommentsFromStart(e){let t,i="";for(;e.length&&(t=e[0][0],"space"===t||"comment"===t);)i+=e.shift()[1];return i}spacesFromEnd(e){let t,i="";for(;e.length&&(t=e[e.length-1][0],"space"===t);)i=e.pop()[1]+i;return i}stringFrom(e,t){let i="";for(let n=t;n{"use strict";let n=i(2604),s=i(9026),r=i(427),o=i(9930),a=i(540),l=i(9573),h=i(4899),c=i(2900),d=i(860),u=i(1044),p=i(7983),f=i(165),m=i(6970),g=i(6214),v=i(6065),O=i(4146),b=i(4539),_=i(322);function y(...e){return 1===e.length&&Array.isArray(e[0])&&(e=e[0]),new a(e)}y.plugin=function(e,t){let i,n=!1;function s(...i){console&&console.warn&&!n&&(n=!0,console.warn(e+": postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration"),{}.LANG&&{}.LANG.startsWith("cn")&&console.warn(e+": 里面 postcss.plugin 被弃用. 迁移指南:\nhttps://www.w3ctech.com/topic/2226"));let s=t(...i);return s.postcssPlugin=e,s.postcssVersion=(new a).version,s}return Object.defineProperty(s,"postcss",{get:()=>(i||(i=s()),i)}),s.process=function(e,t,i){return y([s(i)]).process(e,t)},s},y.stringify=l,y.parse=g,y.fromJSON=h,y.list=v,y.comment=e=>new u(e),y.atRule=e=>new p(e),y.decl=e=>new s(e),y.rule=e=>new O(e),y.root=e=>new b(e),y.document=e=>new c(e),y.CssSyntaxError=n,y.Declaration=s,y.Container=o,y.Processor=a,y.Document=c,y.Comment=u,y.Warning=d,y.AtRule=p,y.Result=f,y.Input=m,y.Rule=O,y.Root=b,y.Node=_,r.registerPostcss(y),e.exports=y,y.default=y},2764:(e,t,i)=>{"use strict";let{SourceMapConsumer:n,SourceMapGenerator:s}=i(9059),{existsSync:r,readFileSync:o}=i(1336),{dirname:a,join:l}=i(2666);class h{constructor(e,t){if(!1===t.map)return;this.loadAnnotation(e),this.inline=this.startWith(this.annotation,"data:");let i=t.map?t.map.prev:void 0,n=this.loadMap(t.from,i);!this.mapFile&&t.from&&(this.mapFile=t.from),this.mapFile&&(this.root=a(this.mapFile)),n&&(this.text=n)}consumer(){return this.consumerCache||(this.consumerCache=new n(this.text)),this.consumerCache}decodeInline(e){if(/^data:application\/json;charset=utf-?8,/.test(e)||/^data:application\/json,/.test(e))return decodeURIComponent(e.substr(RegExp.lastMatch.length));if(/^data:application\/json;charset=utf-?8;base64,/.test(e)||/^data:application\/json;base64,/.test(e))return t=e.substr(RegExp.lastMatch.length),Buffer?Buffer.from(t,"base64").toString():window.atob(t);var t;let i=e.match(/data:application\/json;([^,]+),/)[1];throw new Error("Unsupported source map encoding "+i)}getAnnotationURL(e){return e.replace(/^\/\*\s*# sourceMappingURL=/,"").trim()}isMap(e){return"object"==typeof e&&("string"==typeof e.mappings||"string"==typeof e._mappings||Array.isArray(e.sections))}loadAnnotation(e){let t=e.match(/\/\*\s*# sourceMappingURL=/gm);if(!t)return;let i=e.lastIndexOf(t.pop()),n=e.indexOf("*/",i);i>-1&&n>-1&&(this.annotation=this.getAnnotationURL(e.substring(i,n)))}loadFile(e){if(this.root=a(e),r(e))return this.mapFile=e,o(e,"utf-8").toString().trim()}loadMap(e,t){if(!1===t)return!1;if(t){if("string"==typeof t)return t;if("function"!=typeof t){if(t instanceof n)return s.fromSourceMap(t).toString();if(t instanceof s)return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}{let i=t(e);if(i){let e=this.loadFile(i);if(!e)throw new Error("Unable to load previous source map: "+i.toString());return e}}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let t=this.annotation;return e&&(t=l(a(e),t)),this.loadFile(t)}}}startWith(e,t){return!!e&&e.substr(0,t.length)===t}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}}e.exports=h,h.default=h},540:(e,t,i)=>{"use strict";let n=i(7744),s=i(427),r=i(2900),o=i(4539);class a{constructor(e=[]){this.version="8.4.31",this.plugins=this.normalize(e)}normalize(e){let t=[];for(let i of e)if(!0===i.postcss?i=i():i.postcss&&(i=i.postcss),"object"==typeof i&&Array.isArray(i.plugins))t=t.concat(i.plugins);else if("object"==typeof i&&i.postcssPlugin)t.push(i);else if("function"==typeof i)t.push(i);else if("object"!=typeof i||!i.parse&&!i.stringify)throw new Error(i+" is not a PostCSS plugin");return t}process(e,t={}){return 0===this.plugins.length&&void 0===t.parser&&void 0===t.stringifier&&void 0===t.syntax?new n(this,e,t):new s(this,e,t)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}}e.exports=a,a.default=a,o.registerProcessor(a),r.registerProcessor(a)},165:(e,t,i)=>{"use strict";let n=i(860);class s{constructor(e,t,i){this.processor=e,this.messages=[],this.root=t,this.opts=i,this.css=void 0,this.map=void 0}toString(){return this.css}warn(e,t={}){t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);let i=new n(e,t);return this.messages.push(i),i}warnings(){return this.messages.filter((e=>"warning"===e.type))}get content(){return this.css}}e.exports=s,s.default=s},4539:(e,t,i)=>{"use strict";let n,s,r=i(9930);class o extends r{constructor(e){super(e),this.type="root",this.nodes||(this.nodes=[])}normalize(e,t,i){let n=super.normalize(e);if(t)if("prepend"===i)this.nodes.length>1?t.raws.before=this.nodes[1].raws.before:delete t.raws.before;else if(this.first!==t)for(let e of n)e.raws.before=t.raws.before;return n}removeChild(e,t){let i=this.index(e);return!t&&0===i&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[i].raws.before),super.removeChild(e)}toResult(e={}){return new n(new s,this,e).stringify()}}o.registerLazyResult=e=>{n=e},o.registerProcessor=e=>{s=e},e.exports=o,o.default=o,r.registerRoot(o)},4146:(e,t,i)=>{"use strict";let n=i(9930),s=i(6065);class r extends n{constructor(e){super(e),this.type="rule",this.nodes||(this.nodes=[])}get selectors(){return s.comma(this.selector)}set selectors(e){let t=this.selector?this.selector.match(/,\s*/):null,i=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(i)}}e.exports=r,r.default=r,n.registerRule(r)},9906:e=>{"use strict";const t={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};class i{constructor(e){this.builder=e}atrule(e,t){let i="@"+e.name,n=e.params?this.rawValue(e,"params"):"";if(void 0!==e.raws.afterName?i+=e.raws.afterName:n&&(i+=" "),e.nodes)this.block(e,i+n);else{let s=(e.raws.between||"")+(t?";":"");this.builder(i+n+s,e)}}beforeAfter(e,t){let i;i="decl"===e.type?this.raw(e,null,"beforeDecl"):"comment"===e.type?this.raw(e,null,"beforeComment"):"before"===t?this.raw(e,null,"beforeRule"):this.raw(e,null,"beforeClose");let n=e.parent,s=0;for(;n&&"root"!==n.type;)s+=1,n=n.parent;if(i.includes("\n")){let t=this.raw(e,null,"indent");if(t.length)for(let e=0;e0&&"comment"===e.nodes[t].type;)t-=1;let i=this.raw(e,"semicolon");for(let n=0;n{if(s=e.raws[i],void 0!==s)return!1}))}var a;return void 0===s&&(s=t[n]),o.rawCache[n]=s,s}rawBeforeClose(e){let t;return e.walk((e=>{if(e.nodes&&e.nodes.length>0&&void 0!==e.raws.after)return t=e.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/\S/g,"")),t}rawBeforeComment(e,t){let i;return e.walkComments((e=>{if(void 0!==e.raws.before)return i=e.raws.before,i.includes("\n")&&(i=i.replace(/[^\n]+$/,"")),!1})),void 0===i?i=this.raw(t,null,"beforeDecl"):i&&(i=i.replace(/\S/g,"")),i}rawBeforeDecl(e,t){let i;return e.walkDecls((e=>{if(void 0!==e.raws.before)return i=e.raws.before,i.includes("\n")&&(i=i.replace(/[^\n]+$/,"")),!1})),void 0===i?i=this.raw(t,null,"beforeRule"):i&&(i=i.replace(/\S/g,"")),i}rawBeforeOpen(e){let t;return e.walk((e=>{if("decl"!==e.type&&(t=e.raws.between,void 0!==t))return!1})),t}rawBeforeRule(e){let t;return e.walk((i=>{if(i.nodes&&(i.parent!==e||e.first!==i)&&void 0!==i.raws.before)return t=i.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/\S/g,"")),t}rawColon(e){let t;return e.walkDecls((e=>{if(void 0!==e.raws.between)return t=e.raws.between.replace(/[^\s:]/g,""),!1})),t}rawEmptyBody(e){let t;return e.walk((e=>{if(e.nodes&&0===e.nodes.length&&(t=e.raws.after,void 0!==t))return!1})),t}rawIndent(e){if(e.raws.indent)return e.raws.indent;let t;return e.walk((i=>{let n=i.parent;if(n&&n!==e&&n.parent&&n.parent===e&&void 0!==i.raws.before){let e=i.raws.before.split("\n");return t=e[e.length-1],t=t.replace(/\S/g,""),!1}})),t}rawSemicolon(e){let t;return e.walk((e=>{if(e.nodes&&e.nodes.length&&"decl"===e.last.type&&(t=e.raws.semicolon,void 0!==t))return!1})),t}rawValue(e,t){let i=e[t],n=e.raws[t];return n&&n.value===i?n.raw:i}root(e){this.body(e),e.raws.after&&this.builder(e.raws.after)}rule(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")}stringify(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)}}e.exports=i,i.default=i},9573:(e,t,i)=>{"use strict";let n=i(9906);function s(e,t){new n(t).stringify(e)}e.exports=s,s.default=s},2450:e=>{"use strict";e.exports.isClean=Symbol("isClean"),e.exports.my=Symbol("my")},9985:e=>{"use strict";const t="'".charCodeAt(0),i='"'.charCodeAt(0),n="\\".charCodeAt(0),s="/".charCodeAt(0),r="\n".charCodeAt(0),o=" ".charCodeAt(0),a="\f".charCodeAt(0),l="\t".charCodeAt(0),h="\r".charCodeAt(0),c="[".charCodeAt(0),d="]".charCodeAt(0),u="(".charCodeAt(0),p=")".charCodeAt(0),f="{".charCodeAt(0),m="}".charCodeAt(0),g=";".charCodeAt(0),v="*".charCodeAt(0),O=":".charCodeAt(0),b="@".charCodeAt(0),_=/[\t\n\f\r "#'()/;[\\\]{}]/g,y=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,w=/.[\r\n"'(/\\]/,x=/[\da-f]/i;e.exports=function(e,S={}){let k,T,C,P,M,E,A,R,D,I,q=e.css.valueOf(),L=S.ignoreErrors,N=q.length,B=0,$=[],Q=[];function z(t){throw e.error("Unclosed "+t,B)}return{back:function(e){Q.push(e)},endOfFile:function(){return 0===Q.length&&B>=N},nextToken:function(e){if(Q.length)return Q.pop();if(B>=N)return;let S=!!e&&e.ignoreUnclosed;switch(k=q.charCodeAt(B),k){case r:case o:case l:case h:case a:T=B;do{T+=1,k=q.charCodeAt(T)}while(k===o||k===r||k===l||k===h||k===a);I=["space",q.slice(B,T)],B=T-1;break;case c:case d:case f:case m:case O:case g:case p:{let e=String.fromCharCode(k);I=[e,e,B];break}case u:if(R=$.length?$.pop()[1]:"",D=q.charCodeAt(B+1),"url"===R&&D!==t&&D!==i&&D!==o&&D!==r&&D!==l&&D!==a&&D!==h){T=B;do{if(E=!1,T=q.indexOf(")",T+1),-1===T){if(L||S){T=B;break}z("bracket")}for(A=T;q.charCodeAt(A-1)===n;)A-=1,E=!E}while(E);I=["brackets",q.slice(B,T+1),B,T],B=T}else T=q.indexOf(")",B+1),P=q.slice(B,T+1),-1===T||w.test(P)?I=["(","(",B]:(I=["brackets",P,B,T],B=T);break;case t:case i:C=k===t?"'":'"',T=B;do{if(E=!1,T=q.indexOf(C,T+1),-1===T){if(L||S){T=B+1;break}z("string")}for(A=T;q.charCodeAt(A-1)===n;)A-=1,E=!E}while(E);I=["string",q.slice(B,T+1),B,T],B=T;break;case b:_.lastIndex=B+1,_.test(q),T=0===_.lastIndex?q.length-1:_.lastIndex-2,I=["at-word",q.slice(B,T+1),B,T],B=T;break;case n:for(T=B,M=!0;q.charCodeAt(T+1)===n;)T+=1,M=!M;if(k=q.charCodeAt(T+1),M&&k!==s&&k!==o&&k!==r&&k!==l&&k!==h&&k!==a&&(T+=1,x.test(q.charAt(T)))){for(;x.test(q.charAt(T+1));)T+=1;q.charCodeAt(T+1)===o&&(T+=1)}I=["word",q.slice(B,T+1),B,T],B=T;break;default:k===s&&q.charCodeAt(B+1)===v?(T=q.indexOf("*/",B+2)+1,0===T&&(L||S?T=q.length:z("comment")),I=["comment",q.slice(B,T+1),B,T],B=T):(y.lastIndex=B+1,y.test(q),T=0===y.lastIndex?q.length-1:y.lastIndex-2,I=["word",q.slice(B,T+1),B,T],$.push(I),B=T)}return B++,I},position:function(){return B}}}},5411:e=>{"use strict";let t={};e.exports=function(e){t[e]||(t[e]=!0,"undefined"!=typeof console&&console.warn&&console.warn(e))}},860:e=>{"use strict";class t{constructor(e,t={}){if(this.type="warning",this.text=e,t.node&&t.node.source){let e=t.node.rangeBy(t);this.line=e.start.line,this.column=e.start.column,this.endLine=e.end.line,this.endColumn=e.end.column}for(let e in t)this[e]=t[e]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text}}e.exports=t,t.default=t},8878:(e,t)=>{"use strict";var i=Object.prototype.hasOwnProperty;function n(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(e){return null}}function s(e){try{return encodeURIComponent(e)}catch(e){return null}}t.stringify=function(e,t){t=t||"";var n,r,o=[];for(r in"string"!=typeof t&&(t="?"),e)if(i.call(e,r)){if((n=e[r])||null!=n&&!isNaN(n)||(n=""),r=s(r),n=s(n),null===r||null===n)continue;o.push(r+"="+n)}return o.length?t+o.join("&"):""},t.parse=function(e){for(var t,i=/([^=?#&]+)=?([^&]*)/g,s={};t=i.exec(e);){var r=n(t[1]),o=n(t[2]);null===r||null===o||r in s||(s[r]=o)}return s}},1384:e=>{"use strict";e.exports=function(e,t){if(t=t.split(":")[0],!(e=+e))return!1;switch(t){case"http":case"ws":return 80!==e;case"https":case"wss":return 443!==e;case"ftp":return 21!==e;case"gopher":return 70!==e;case"file":return!1}return 0!==e}},1622:(e,t,i)=>{const n=i(1659),s=i(3419),{isPlainObject:r}=i(3056),o=i(2454),a=i(9382),{parse:l}=i(5356),h=["img","audio","video","picture","svg","object","map","iframe","embed"],c=["script","style"];function d(e,t){e&&Object.keys(e).forEach((function(i){t(e[i],i)}))}function u(e,t){return{}.hasOwnProperty.call(e,t)}function p(e,t){const i=[];return d(e,(function(e){t(e)&&i.push(e)})),i}e.exports=m;const f=/^[^\0\t\n\f\r /<=>]+$/;function m(e,t,i){if(null==e)return"";let v="",O="";function b(e,t){const i=this;this.tag=e,this.attribs=t||{},this.tagPosition=v.length,this.text="",this.mediaChildren=[],this.updateParentNodeText=function(){M.length&&(M[M.length-1].text+=i.text)},this.updateParentNodeMediaChildren=function(){M.length&&h.includes(this.tag)&&M[M.length-1].mediaChildren.push(this.tag)}}(t=Object.assign({},m.defaults,t)).parser=Object.assign({},g,t.parser),c.forEach((function(e){!1!==t.allowedTags&&(t.allowedTags||[]).indexOf(e)>-1&&!t.allowVulnerableTags&&console.warn(`\n\n⚠️ Your \`allowedTags\` option includes, \`${e}\`, which is inherently\nvulnerable to XSS attacks. Please remove it from \`allowedTags\`.\nOr, to disable this warning, add the \`allowVulnerableTags\` option\nand ensure you are accounting for this risk.\n\n`)}));const _=t.nonTextTags||["script","style","textarea","option"];let y,w;t.allowedAttributes&&(y={},w={},d(t.allowedAttributes,(function(e,t){y[t]=[];const i=[];e.forEach((function(e){"string"==typeof e&&e.indexOf("*")>=0?i.push(s(e).replace(/\\\*/g,".*")):y[t].push(e)})),i.length&&(w[t]=new RegExp("^("+i.join("|")+")$"))})));const x={},S={},k={};d(t.allowedClasses,(function(e,t){y&&(u(y,t)||(y[t]=[]),y[t].push("class")),x[t]=[],k[t]=[];const i=[];e.forEach((function(e){"string"==typeof e&&e.indexOf("*")>=0?i.push(s(e).replace(/\\\*/g,".*")):e instanceof RegExp?k[t].push(e):x[t].push(e)})),i.length&&(S[t]=new RegExp("^("+i.join("|")+")$"))}));const T={};let C,P,M,E,A,R,D;d(t.transformTags,(function(e,t){let i;"function"==typeof e?i=e:"string"==typeof e&&(i=m.simpleTransform(e)),"*"===t?C=i:T[t]=i}));let I=!1;L();const q=new n.Parser({onopentag:function(e,i){if(t.enforceHtmlBoundary&&"html"===e&&L(),R)return void D++;const n=new b(e,i);M.push(n);let s=!1;const h=!!n.text;let c;if(u(T,e)&&(c=T[e](e,i),n.attribs=i=c.attribs,void 0!==c.text&&(n.innerText=c.text),e!==c.tagName&&(n.name=e=c.tagName,A[P]=c.tagName)),C&&(c=C(e,i),n.attribs=i=c.attribs,e!==c.tagName&&(n.name=e=c.tagName,A[P]=c.tagName)),(!1!==t.allowedTags&&-1===(t.allowedTags||[]).indexOf(e)||"recursiveEscape"===t.disallowedTagsMode&&!function(e){for(const t in e)if(u(e,t))return!1;return!0}(E)||null!=t.nestingLimit&&P>=t.nestingLimit)&&(s=!0,E[P]=!0,"discard"===t.disallowedTagsMode&&-1!==_.indexOf(e)&&(R=!0,D=1),E[P]=!0),P++,s){if("discard"===t.disallowedTagsMode)return;O=v,v=""}v+="<"+e,"script"===e&&(t.allowedScriptHostnames||t.allowedScriptDomains)&&(n.innerText=""),(!y||u(y,e)||y["*"])&&d(i,(function(i,s){if(!f.test(s))return void delete n.attribs[s];let h=!1;if(!y||u(y,e)&&-1!==y[e].indexOf(s)||y["*"]&&-1!==y["*"].indexOf(s)||u(w,e)&&w[e].test(s)||w["*"]&&w["*"].test(s))h=!0;else if(y&&y[e])for(const t of y[e])if(r(t)&&t.name&&t.name===s){h=!0;let e="";if(!0===t.multiple){const n=i.split(" ");for(const i of n)-1!==t.values.indexOf(i)&&(""===e?e=i:e+=" "+i)}else t.values.indexOf(i)>=0&&(e=i);i=e}if(h){if(-1!==t.allowedSchemesAppliedToAttributes.indexOf(s)&&B(e,i))return void delete n.attribs[s];if("script"===e&&"src"===s){let e=!0;try{const n=$(i);if(t.allowedScriptHostnames||t.allowedScriptDomains){const i=(t.allowedScriptHostnames||[]).find((function(e){return e===n.url.hostname})),s=(t.allowedScriptDomains||[]).find((function(e){return n.url.hostname===e||n.url.hostname.endsWith(`.${e}`)}));e=i||s}}catch(t){e=!1}if(!e)return void delete n.attribs[s]}if("iframe"===e&&"src"===s){let e=!0;try{const n=$(i);if(n.isRelativeUrl)e=u(t,"allowIframeRelativeUrls")?t.allowIframeRelativeUrls:!t.allowedIframeHostnames&&!t.allowedIframeDomains;else if(t.allowedIframeHostnames||t.allowedIframeDomains){const i=(t.allowedIframeHostnames||[]).find((function(e){return e===n.url.hostname})),s=(t.allowedIframeDomains||[]).find((function(e){return n.url.hostname===e||n.url.hostname.endsWith(`.${e}`)}));e=i||s}}catch(t){e=!1}if(!e)return void delete n.attribs[s]}if("srcset"===s)try{let e=a(i);if(e.forEach((function(e){B("srcset",e.url)&&(e.evil=!0)})),e=p(e,(function(e){return!e.evil})),!e.length)return void delete n.attribs[s];i=p(e,(function(e){return!e.evil})).map((function(e){if(!e.url)throw new Error("URL missing");return e.url+(e.w?` ${e.w}w`:"")+(e.h?` ${e.h}h`:"")+(e.d?` ${e.d}x`:"")})).join(", "),n.attribs[s]=i}catch(e){return void delete n.attribs[s]}if("class"===s){const t=x[e],r=x["*"],a=S[e],l=k[e],h=[a,S["*"]].concat(l).filter((function(e){return e}));if(!(c=i,d=t&&r?o(t,r):t||r,m=h,i=d?(c=c.split(/\s+/)).filter((function(e){return-1!==d.indexOf(e)||m.some((function(t){return t.test(e)}))})).join(" "):c).length)return void delete n.attribs[s]}if("style"===s)try{if(i=function(e){return e.nodes[0].nodes.reduce((function(e,t){return e.push(`${t.prop}:${t.value}${t.important?" !important":""}`),e}),[]).join(";")}(function(e,t){if(!t)return e;const i=e.nodes[0];let n;return n=t[i.selector]&&t["*"]?o(t[i.selector],t["*"]):t[i.selector]||t["*"],n&&(e.nodes[0].nodes=i.nodes.reduce(function(e){return function(t,i){return u(e,i.prop)&&e[i.prop].some((function(e){return e.test(i.value)}))&&t.push(i),t}}(n),[])),e}(l(e+" {"+i+"}"),t.allowedStyles)),0===i.length)return void delete n.attribs[s]}catch(e){return void delete n.attribs[s]}v+=" "+s,i&&i.length&&(v+='="'+N(i,!0)+'"')}else delete n.attribs[s];var c,d,m})),-1!==t.selfClosing.indexOf(e)?v+=" />":(v+=">",!n.innerText||h||t.textFilter||(v+=N(n.innerText),I=!0)),s&&(v=O+N(v),O="")},ontext:function(e){if(R)return;const i=M[M.length-1];let n;if(i&&(n=i.tag,e=void 0!==i.innerText?i.innerText:e),"discard"!==t.disallowedTagsMode||"script"!==n&&"style"!==n){const i=N(e,!1);t.textFilter&&!I?v+=t.textFilter(i,n):I||(v+=i)}else v+=e;M.length&&(M[M.length-1].text+=e)},onclosetag:function(e){if(R){if(D--,D)return;R=!1}const i=M.pop();if(!i)return;if(i.tag!==e)return void M.push(i);R=!!t.enforceHtmlBoundary&&"html"===e,P--;const n=E[P];if(n){if(delete E[P],"discard"===t.disallowedTagsMode)return void i.updateParentNodeText();O=v,v=""}A[P]&&(e=A[P],delete A[P]),t.exclusiveFilter&&t.exclusiveFilter(i)?v=v.substr(0,i.tagPosition):(i.updateParentNodeMediaChildren(),i.updateParentNodeText(),-1===t.selfClosing.indexOf(e)?(v+="",n&&(v=O+N(v),O=""),I=!1):n&&(v=O,O=""))}},t.parser);return q.write(e),q.end(),v;function L(){v="",P=0,M=[],E={},A={},R=!1,D=0}function N(e,i){return"string"!=typeof e&&(e+=""),t.parser.decodeEntities&&(e=e.replace(/&/g,"&").replace(//g,">"),i&&(e=e.replace(/"/g,"""))),e=e.replace(/&(?![a-zA-Z0-9#]{1,20};)/g,"&").replace(//g,">"),i&&(e=e.replace(/"/g,""")),e}function B(e,i){for(i=i.replace(/[\x00-\x20]+/g,"");;){const e=i.indexOf("\x3c!--");if(-1===e)break;const t=i.indexOf("--\x3e",e+4);if(-1===t)break;i=i.substring(0,e)+i.substring(t+3)}const n=i.match(/^([a-zA-Z][a-zA-Z0-9.\-+]*):/);if(!n)return!!i.match(/^[/\\]{2}/)&&!t.allowProtocolRelative;const s=n[1].toLowerCase();return u(t.allowedSchemesByTag,e)?-1===t.allowedSchemesByTag[e].indexOf(s):!t.allowedSchemes||-1===t.allowedSchemes.indexOf(s)}function $(e){if((e=e.replace(/^(\w+:)?\s*[\\/]\s*[\\/]/,"$1//")).startsWith("relative:"))throw new Error("relative: exploit attempt");let t="relative://relative-site";for(let e=0;e<100;e++)t+=`/${e}`;const i=new URL(e,t);return{isRelativeUrl:i&&"relative-site"===i.hostname&&"relative:"===i.protocol,url:i}}}const g={decodeEntities:!0};m.defaults={allowedTags:["address","article","aside","footer","header","h1","h2","h3","h4","h5","h6","hgroup","main","nav","section","blockquote","dd","div","dl","dt","figcaption","figure","hr","li","main","ol","p","pre","ul","a","abbr","b","bdi","bdo","br","cite","code","data","dfn","em","i","kbd","mark","q","rb","rp","rt","rtc","ruby","s","samp","small","span","strong","sub","sup","time","u","var","wbr","caption","col","colgroup","table","tbody","td","tfoot","th","thead","tr"],disallowedTagsMode:"discard",allowedAttributes:{a:["href","name","target"],img:["src","srcset","alt","title","width","height","loading"]},selfClosing:["img","br","hr","area","base","basefont","input","link","meta"],allowedSchemes:["http","https","ftp","mailto","tel"],allowedSchemesByTag:{},allowedSchemesAppliedToAttributes:["href","src","cite"],allowProtocolRelative:!0,enforceHtmlBoundary:!1},m.simpleTransform=function(e,t,i){return i=void 0===i||i,t=t||{},function(n,s){let r;if(i)for(r in t)s[r]=t[r];else s=t;return{tagName:e,attribs:s}}}},2296:(e,t,i)=>{"use strict";var n=i(1384),s=i(8878),r=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,o=/[\n\r\t]/g,a=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,l=/:\d+$/,h=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,c=/^[a-zA-Z]:/;function d(e){return(e||"").toString().replace(r,"")}var u=[["#","hash"],["?","query"],function(e,t){return m(t.protocol)?e.replace(/\\/g,"/"):e},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],p={hash:1,query:1};function f(e){var t,n=("undefined"!=typeof window?window:void 0!==i.g?i.g:"undefined"!=typeof self?self:{}).location||{},s={},r=typeof(e=e||n);if("blob:"===e.protocol)s=new v(unescape(e.pathname),{});else if("string"===r)for(t in s=new v(e,{}),p)delete s[t];else if("object"===r){for(t in e)t in p||(s[t]=e[t]);void 0===s.slashes&&(s.slashes=a.test(e.href))}return s}function m(e){return"file:"===e||"ftp:"===e||"http:"===e||"https:"===e||"ws:"===e||"wss:"===e}function g(e,t){e=(e=d(e)).replace(o,""),t=t||{};var i,n=h.exec(e),s=n[1]?n[1].toLowerCase():"",r=!!n[2],a=!!n[3],l=0;return r?a?(i=n[2]+n[3]+n[4],l=n[2].length+n[3].length):(i=n[2]+n[4],l=n[2].length):a?(i=n[3]+n[4],l=n[3].length):i=n[4],"file:"===s?l>=2&&(i=i.slice(2)):m(s)?i=n[4]:s?r&&(i=i.slice(2)):l>=2&&m(t.protocol)&&(i=n[4]),{protocol:s,slashes:r||m(s),slashesCount:l,rest:i}}function v(e,t,i){if(e=(e=d(e)).replace(o,""),!(this instanceof v))return new v(e,t,i);var r,a,l,h,p,O,b=u.slice(),_=typeof t,y=this,w=0;for("object"!==_&&"string"!==_&&(i=t,t=null),i&&"function"!=typeof i&&(i=s.parse),r=!(a=g(e||"",t=f(t))).protocol&&!a.slashes,y.slashes=a.slashes||r&&t.slashes,y.protocol=a.protocol||t.protocol||"",e=a.rest,("file:"===a.protocol&&(2!==a.slashesCount||c.test(e))||!a.slashes&&(a.protocol||a.slashesCount<2||!m(y.protocol)))&&(b[3]=[/(.*)/,"pathname"]);w{},1336:()=>{},2666:()=>{},9059:()=>{},415:()=>{},8845:e=>{e.exports={nanoid:(e=21)=>{let t="",i=e;for(;i--;)t+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[64*Math.random()|0];return t},customAlphabet:(e,t=21)=>(i=t)=>{let n="",s=i;for(;s--;)n+=e[Math.random()*e.length|0];return n}}},6399:e=>{"use strict";e.exports=JSON.parse('{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}')},2810:e=>{"use strict";e.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Abreve":"Ă","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"А","acy":"а","AElig":"Æ","aelig":"æ","af":"⁡","Afr":"𝔄","afr":"𝔞","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ā","amacr":"ā","amalg":"⨿","amp":"&","AMP":"&","andand":"⩕","And":"⩓","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","Aogon":"Ą","aogon":"ą","Aopf":"𝔸","aopf":"𝕒","apacir":"⩯","ap":"≈","apE":"⩰","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"⁡","approx":"≈","approxeq":"≊","Aring":"Å","aring":"å","Ascr":"𝒜","ascr":"𝒶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"≍","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","Backslash":"∖","Barv":"⫧","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Β","beta":"β","beth":"ℶ","between":"≬","Bfr":"𝔅","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=⃥","bnequiv":"≡⃥","bNot":"⫭","bnot":"⌐","Bopf":"𝔹","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"┐","boxdL":"╕","boxDl":"╖","boxDL":"╗","boxdr":"┌","boxdR":"╒","boxDr":"╓","boxDR":"╔","boxh":"─","boxH":"═","boxhd":"┬","boxHd":"╤","boxhD":"╥","boxHD":"╦","boxhu":"┴","boxHu":"╧","boxhU":"╨","boxHU":"╩","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"╛","boxUl":"╜","boxUL":"╝","boxur":"└","boxuR":"╘","boxUr":"╙","boxUR":"╚","boxv":"│","boxV":"║","boxvh":"┼","boxvH":"╪","boxVh":"╫","boxVH":"╬","boxvl":"┤","boxvL":"╡","boxVl":"╢","boxVL":"╣","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"╠","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"𝒷","Bscr":"ℬ","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsolb":"⧅","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","Bumpeq":"≎","bumpeq":"≏","Cacute":"Ć","cacute":"ć","capand":"⩄","capbrcup":"⩉","capcap":"⩋","cap":"∩","Cap":"⋒","capcup":"⩇","capdot":"⩀","CapitalDifferentialD":"ⅅ","caps":"∩︀","caret":"⁁","caron":"ˇ","Cayleys":"ℭ","ccaps":"⩍","Ccaron":"Č","ccaron":"č","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"⩐","Cdot":"Ċ","cdot":"ċ","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"𝔠","Cfr":"ℭ","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"○","cirE":"⧃","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"⩴","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"𝕔","Copf":"ℂ","coprod":"∐","Coproduct":"∐","copy":"©","COPY":"©","copysr":"℗","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"𝒞","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"≍","cup":"∪","Cup":"⋓","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"‐","Dashv":"⫤","dashv":"⊣","dbkarow":"⤏","dblac":"˝","Dcaron":"Ď","dcaron":"ď","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"ⅅ","dd":"ⅆ","DDotrahd":"⤑","ddotseq":"⩷","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"𝔇","dfr":"𝔡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","diam":"⋄","diamond":"⋄","Diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"ⅆ","digamma":"ϝ","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","Dopf":"𝔻","dopf":"𝕕","Dot":"¨","dot":"˙","DotDot":"⃜","doteq":"≐","doteqdot":"≑","DotEqual":"≐","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"̑","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"⇁","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","Dscr":"𝒟","dscr":"𝒹","DScy":"Ѕ","dscy":"ѕ","dsol":"⧶","Dstrok":"Đ","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Џ","dzcy":"џ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"⩮","Ecaron":"Ě","ecaron":"ě","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"э","eDDot":"⩷","Edot":"Ė","edot":"ė","eDot":"≑","ee":"ⅇ","efDot":"≒","Efr":"𝔈","efr":"𝔢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","Emacr":"Ē","emacr":"ē","empty":"∅","emptyset":"∅","EmptySmallSquare":"◻","emptyv":"∅","EmptyVerySmallSquare":"▫","emsp13":" ","emsp14":" ","emsp":" ","ENG":"Ŋ","eng":"ŋ","ensp":" ","Eogon":"Ę","eogon":"ę","Eopf":"𝔼","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"ℰ","esdot":"≐","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"ℰ","exponentiale":"ⅇ","ExponentialE":"ⅇ","fallingdotseq":"≒","Fcy":"Ф","fcy":"ф","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"𝔉","ffr":"𝔣","filig":"fi","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","fjlig":"fj","flat":"♭","fllig":"fl","fltns":"▱","fnof":"ƒ","Fopf":"𝔽","fopf":"𝕗","forall":"∀","ForAll":"∀","fork":"⋔","forkv":"⫙","Fouriertrf":"ℱ","fpartint":"⨍","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ϝ","gammad":"ϝ","gap":"⪆","Gbreve":"Ğ","gbreve":"ğ","Gcedil":"Ģ","Gcirc":"Ĝ","gcirc":"ĝ","Gcy":"Г","gcy":"г","Gdot":"Ġ","gdot":"ġ","ge":"≥","gE":"≧","gEl":"⪌","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"𝔊","gfr":"𝔤","gg":"≫","Gg":"⋙","ggg":"⋙","gimel":"ℷ","GJcy":"Ѓ","gjcy":"ѓ","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"⋧","Gopf":"𝔾","gopf":"𝕘","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","gtcc":"⪧","gtcir":"⩺","gt":">","GT":">","Gt":"≫","gtdot":"⋗","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"⋗","gtreqless":"⋛","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩︀","gvnE":"≩︀","Hacek":"ˇ","hairsp":" ","half":"½","hamilt":"ℋ","HARDcy":"Ъ","hardcy":"ъ","harrcir":"⥈","harr":"↔","hArr":"⇔","harrw":"↭","Hat":"^","hbar":"ℏ","Hcirc":"Ĥ","hcirc":"ĥ","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"𝔥","Hfr":"ℌ","HilbertSpace":"ℋ","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"𝕙","Hopf":"ℍ","horbar":"―","HorizontalLine":"─","hscr":"𝒽","Hscr":"ℋ","hslash":"ℏ","Hstrok":"Ħ","hstrok":"ħ","HumpDownHump":"≎","HumpEqual":"≏","hybull":"⁃","hyphen":"‐","Iacute":"Í","iacute":"í","ic":"⁣","Icirc":"Î","icirc":"î","Icy":"И","icy":"и","Idot":"İ","IEcy":"Е","iecy":"е","iexcl":"¡","iff":"⇔","ifr":"𝔦","Ifr":"ℑ","Igrave":"Ì","igrave":"ì","ii":"ⅈ","iiiint":"⨌","iiint":"∭","iinfin":"⧜","iiota":"℩","IJlig":"IJ","ijlig":"ij","Imacr":"Ī","imacr":"ī","image":"ℑ","ImaginaryI":"ⅈ","imagline":"ℐ","imagpart":"ℑ","imath":"ı","Im":"ℑ","imof":"⊷","imped":"Ƶ","Implies":"⇒","incare":"℅","in":"∈","infin":"∞","infintie":"⧝","inodot":"ı","intcal":"⊺","int":"∫","Int":"∬","integers":"ℤ","Integral":"∫","intercal":"⊺","Intersection":"⋂","intlarhk":"⨗","intprod":"⨼","InvisibleComma":"⁣","InvisibleTimes":"⁢","IOcy":"Ё","iocy":"ё","Iogon":"Į","iogon":"į","Iopf":"𝕀","iopf":"𝕚","Iota":"Ι","iota":"ι","iprod":"⨼","iquest":"¿","iscr":"𝒾","Iscr":"ℐ","isin":"∈","isindot":"⋵","isinE":"⋹","isins":"⋴","isinsv":"⋳","isinv":"∈","it":"⁢","Itilde":"Ĩ","itilde":"ĩ","Iukcy":"І","iukcy":"і","Iuml":"Ï","iuml":"ï","Jcirc":"Ĵ","jcirc":"ĵ","Jcy":"Й","jcy":"й","Jfr":"𝔍","jfr":"𝔧","jmath":"ȷ","Jopf":"𝕁","jopf":"𝕛","Jscr":"𝒥","jscr":"𝒿","Jsercy":"Ј","jsercy":"ј","Jukcy":"Є","jukcy":"є","Kappa":"Κ","kappa":"κ","kappav":"ϰ","Kcedil":"Ķ","kcedil":"ķ","Kcy":"К","kcy":"к","Kfr":"𝔎","kfr":"𝔨","kgreen":"ĸ","KHcy":"Х","khcy":"х","KJcy":"Ќ","kjcy":"ќ","Kopf":"𝕂","kopf":"𝕜","Kscr":"𝒦","kscr":"𝓀","lAarr":"⇚","Lacute":"Ĺ","lacute":"ĺ","laemptyv":"⦴","lagran":"ℒ","Lambda":"Λ","lambda":"λ","lang":"⟨","Lang":"⟪","langd":"⦑","langle":"⟨","lap":"⪅","Laplacetrf":"ℒ","laquo":"«","larrb":"⇤","larrbfs":"⤟","larr":"←","Larr":"↞","lArr":"⇐","larrfs":"⤝","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","latail":"⤙","lAtail":"⤛","lat":"⪫","late":"⪭","lates":"⪭︀","lbarr":"⤌","lBarr":"⤎","lbbrk":"❲","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"⦏","lbrkslu":"⦍","Lcaron":"Ľ","lcaron":"ľ","Lcedil":"Ļ","lcedil":"ļ","lceil":"⌈","lcub":"{","Lcy":"Л","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","lE":"≦","LeftAngleBracket":"⟨","LeftArrowBar":"⇤","leftarrow":"←","LeftArrow":"←","Leftarrow":"⇐","LeftArrowRightArrow":"⇆","leftarrowtail":"↢","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVectorBar":"⥙","LeftDownVector":"⇃","LeftFloor":"⌊","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","LeftRightArrow":"↔","Leftrightarrow":"⇔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","LeftRightVector":"⥎","LeftTeeArrow":"↤","LeftTee":"⊣","LeftTeeVector":"⥚","leftthreetimes":"⋋","LeftTriangleBar":"⧏","LeftTriangle":"⊲","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVectorBar":"⥘","LeftUpVector":"↿","LeftVectorBar":"⥒","LeftVector":"↼","lEg":"⪋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","lescc":"⪨","les":"⩽","lesdot":"⩿","lesdoto":"⪁","lesdotor":"⪃","lesg":"⋚︀","lesges":"⪓","lessapprox":"⪅","lessdot":"⋖","lesseqgtr":"⋚","lesseqqgtr":"⪋","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","lessgtr":"≶","LessLess":"⪡","lesssim":"≲","LessSlantEqual":"⩽","LessTilde":"≲","lfisht":"⥼","lfloor":"⌊","Lfr":"𝔏","lfr":"𝔩","lg":"≶","lgE":"⪑","lHar":"⥢","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"▄","LJcy":"Љ","ljcy":"љ","llarr":"⇇","ll":"≪","Ll":"⋘","llcorner":"⌞","Lleftarrow":"⇚","llhard":"⥫","lltri":"◺","Lmidot":"Ŀ","lmidot":"ŀ","lmoustache":"⎰","lmoust":"⎰","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lnE":"≨","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","LongLeftArrow":"⟵","Longleftarrow":"⟸","longleftrightarrow":"⟷","LongLeftRightArrow":"⟷","Longleftrightarrow":"⟺","longmapsto":"⟼","longrightarrow":"⟶","LongRightArrow":"⟶","Longrightarrow":"⟹","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","Lopf":"𝕃","lopf":"𝕝","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","LowerLeftArrow":"↙","LowerRightArrow":"↘","loz":"◊","lozenge":"◊","lozf":"⧫","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"‎","lrtri":"⊿","lsaquo":"‹","lscr":"𝓁","Lscr":"ℒ","lsh":"↰","Lsh":"↰","lsim":"≲","lsime":"⪍","lsimg":"⪏","lsqb":"[","lsquo":"‘","lsquor":"‚","Lstrok":"Ł","lstrok":"ł","ltcc":"⪦","ltcir":"⩹","lt":"<","LT":"<","Lt":"≪","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltri":"◃","ltrie":"⊴","ltrif":"◂","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","mfr":"𝔪","mho":"℧","micro":"µ","midast":"*","midcir":"⫰","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"𝕄","mopf":"𝕞","mp":"∓","mscr":"𝓂","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"ń","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natural":"♮","naturals":"ℕ","natur":"♮","nbsp":" ","nbump":"≎̸","nbumpe":"≏̸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Ņ","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"⩂","Ncy":"Н","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"≐̸","NegativeMediumSpace":"​","NegativeThickSpace":"​","NegativeThinSpace":"​","NegativeVeryThinSpace":"​","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"𝔑","nfr":"𝔫","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"њ","nlarr":"↚","nlArr":"⇍","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"⇍","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"⁠","NonBreakingSpace":" ","nopf":"𝕟","Nopf":"ℕ","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"≏̸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"⋷","notinvc":"⋶","NotLeftTriangleBar":"⧏̸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangleBar":"⧐̸","NotRightTriangle":"⋫","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏̸","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐̸","NotSquareSupersetEqual":"⋣","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"⋠","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"⇏","nrarrw":"↝̸","nrightarrow":"↛","nRightarrow":"⇏","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰̸","Nscr":"𝒩","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"⊁","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","Nu":"Ν","nu":"ν","num":"#","numero":"№","numsp":" ","nvap":"≍⃒","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒","nvHarr":"⤄","nvinfin":"⧞","nvlArr":"⤂","nvle":"≤⃒","nvlt":"<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"⊝","Odblac":"Ő","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Œ","oelig":"œ","ofcir":"⦿","Ofr":"𝔒","ofr":"𝔬","ogon":"˛","Ograve":"Ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","Omacr":"Ō","omacr":"ō","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"𝕆","oopf":"𝕠","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"⩔","or":"∨","ord":"⩝","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oS":"Ⓢ","Oscr":"𝒪","oscr":"ℴ","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"𝔓","pfr":"𝔭","Phi":"Φ","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"𝕡","Popf":"ℙ","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"ℙ","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"∏","Product":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","Proportional":"∝","Proportion":"∷","propto":"∝","prsim":"≾","prurel":"⊰","Pscr":"𝒫","pscr":"𝓅","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"𝔔","qfr":"𝔮","qint":"⨌","qopf":"𝕢","Qopf":"ℚ","qprime":"⁗","Qscr":"𝒬","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Ŕ","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"↝","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rBarr":"⤏","RBarr":"⤐","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","Rcaron":"Ř","rcaron":"ř","Rcedil":"Ŗ","rcedil":"ŗ","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","Re":"ℜ","rect":"▭","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","Rfr":"ℜ","rHar":"⥤","rhard":"⇁","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"ρ","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"⧐","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"‏","rmoustache":"⎱","rmoust":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","Ropf":"ℝ","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"𝓇","Rscr":"ℛ","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","RuleDelayed":"⧴","ruluhar":"⥨","rx":"℞","Sacute":"Ś","sacute":"ś","sbquo":"‚","scap":"⪸","Scaron":"Š","scaron":"š","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Ş","scedil":"ş","Scirc":"Ŝ","scirc":"ŝ","scnap":"⪺","scnE":"⪶","scnsim":"⋩","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"с","sdotb":"⊡","sdot":"⋅","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"𝔖","sfr":"𝔰","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"←","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"­","Sigma":"Σ","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ь","solbar":"⌿","solb":"⧄","sol":"/","Sopf":"𝕊","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","square":"□","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"▪","squ":"□","squf":"▪","srarr":"→","Sscr":"𝒮","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","Sub":"⋐","subdot":"⪽","subE":"⫅","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"⋐","subseteq":"⊆","subseteqq":"⫅","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"⋑","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"⫄","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","Supset":"⋑","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"τ","tbrk":"⎴","Tcaron":"Ť","tcaron":"ť","Tcedil":"Ţ","tcedil":"ţ","Tcy":"Т","tcy":"т","tdot":"⃛","telrec":"⌕","Tfr":"𝔗","tfr":"𝔱","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","ThickSpace":"  ","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"˜","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"𝕋","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","TRADE":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","Tscr":"𝒯","tscr":"𝓉","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"ћ","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"Ў","ubrcy":"ў","Ubreve":"Ŭ","ubreve":"ŭ","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"𝔘","ufr":"𝔲","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","Umacr":"Ū","umacr":"ū","uml":"¨","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"𝕌","uopf":"𝕦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"υ","Upsi":"ϒ","upsih":"ϒ","Upsilon":"Υ","upsilon":"υ","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","Uring":"Ů","uring":"ů","urtri":"◹","Uscr":"𝒰","uscr":"𝓊","utdot":"⋰","Utilde":"Ũ","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"⫫","vBarv":"⫩","Vcy":"В","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"⋁","veeeq":"≚","vellip":"⋮","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","vfr":"𝔳","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"𝕍","vopf":"𝕧","vprop":"∝","vrtri":"⊳","Vscr":"𝒱","vscr":"𝓋","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Ŵ","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"⋀","wedgeq":"≙","weierp":"℘","Wfr":"𝔚","wfr":"𝔴","Wopf":"𝕎","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"𝒲","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","Xfr":"𝔛","xfr":"𝔵","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"⋻","xodot":"⨀","Xopf":"𝕏","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"𝒳","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","Yacute":"Ý","yacute":"ý","YAcy":"Я","yacy":"я","Ycirc":"Ŷ","ycirc":"ŷ","Ycy":"Ы","ycy":"ы","yen":"¥","Yfr":"𝔜","yfr":"𝔶","YIcy":"Ї","yicy":"ї","Yopf":"𝕐","yopf":"𝕪","Yscr":"𝒴","yscr":"𝓎","YUcy":"Ю","yucy":"ю","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Ż","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"​","Zeta":"Ζ","zeta":"ζ","zfr":"𝔷","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","Zopf":"ℤ","Zscr":"𝒵","zscr":"𝓏","zwj":"‍","zwnj":"‌"}')},2836:e=>{"use strict";e.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Acirc":"Â","acirc":"â","acute":"´","AElig":"Æ","aelig":"æ","Agrave":"À","agrave":"à","amp":"&","AMP":"&","Aring":"Å","aring":"å","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","brvbar":"¦","Ccedil":"Ç","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","COPY":"©","curren":"¤","deg":"°","divide":"÷","Eacute":"É","eacute":"é","Ecirc":"Ê","ecirc":"ê","Egrave":"È","egrave":"è","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","GT":">","Iacute":"Í","iacute":"í","Icirc":"Î","icirc":"î","iexcl":"¡","Igrave":"Ì","igrave":"ì","iquest":"¿","Iuml":"Ï","iuml":"ï","laquo":"«","lt":"<","LT":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","Ntilde":"Ñ","ntilde":"ñ","Oacute":"Ó","oacute":"ó","Ocirc":"Ô","ocirc":"ô","Ograve":"Ò","ograve":"ò","ordf":"ª","ordm":"º","Oslash":"Ø","oslash":"ø","Otilde":"Õ","otilde":"õ","Ouml":"Ö","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","QUOT":"\\"","raquo":"»","reg":"®","REG":"®","sect":"§","shy":"­","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","THORN":"Þ","thorn":"þ","times":"×","Uacute":"Ú","uacute":"ú","Ucirc":"Û","ucirc":"û","Ugrave":"Ù","ugrave":"ù","uml":"¨","Uuml":"Ü","uuml":"ü","Yacute":"Ý","yacute":"ý","yen":"¥","yuml":"ÿ"}')},8689:e=>{"use strict";e.exports=JSON.parse('{"amp":"&","apos":"\'","gt":">","lt":"<","quot":"\\""}')}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var i=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(i.exports,i,i.exports,__webpack_require__),i.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var i in t)__webpack_require__.o(t,i)&&!__webpack_require__.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};(()=>{"use strict";class e{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,n){let s=[];return this.decompose(0,e,s,2),n.length&&n.decompose(0,n.length,s,3),this.decompose(t,this.length,s,1),i.from(s,this.length-(t-e)+n.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){let n=[];return this.decompose(e,t,n,0),i.from(n,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),n=new r(this),s=new r(e);for(let e=t,r=t;;){if(n.next(e),s.next(e),e=0,n.lineBreak!=s.lineBreak||n.done!=s.done||n.value!=s.value)return!1;if(r+=n.value.length,n.done||r>=i)return!0}}iter(e=1){return new r(this,e)}iterRange(e,t=this.length){return new o(this,e,t)}iterLines(e,t){let i;if(null==e)i=this.iter();else{null==t&&(t=this.lines+1);let n=this.line(e).from;i=this.iterRange(n,Math.max(n,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new a(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(n){if(0==n.length)throw new RangeError("A document must have at least one line");return 1!=n.length||n[0]?n.length<=32?new t(n):i.from(t.split(n,[])):e.empty}}class t extends e{constructor(e,t=function(e){let t=-1;for(let i of e)t+=i.length+1;return t}(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,n){for(let s=0;;s++){let r=this.text[s],o=n+r.length;if((t?i:o)>=e)return new l(n,o,i,r);n=o+1,i++}}decompose(e,i,r,o){let a=e<=0&&i>=this.length?this:new t(s(this.text,e,i),Math.min(i,this.length)-Math.max(0,e));if(1&o){let e=r.pop(),i=n(a.text,e.text.slice(),0,a.length);if(i.length<=32)r.push(new t(i,e.length+a.length));else{let e=i.length>>1;r.push(new t(i.slice(0,e)),new t(i.slice(e)))}}else r.push(a)}replace(e,r,o){if(!(o instanceof t))return super.replace(e,r,o);let a=n(this.text,n(o.text,s(this.text,0,e)),r),l=this.length+o.length-(r-e);return a.length<=32?new t(a,l):i.from(t.split(a,[]),l)}sliceString(e,t=this.length,i="\n"){let n="";for(let s=0,r=0;s<=t&&re&&r&&(n+=i),es&&(n+=o.slice(Math.max(0,e-s),t-s)),s=a+1}return n}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,i){let n=[],s=-1;for(let r of e)n.push(r),s+=r.length+1,32==n.length&&(i.push(new t(n,s)),n=[],s=-1);return s>-1&&i.push(new t(n,s)),i}}class i extends e{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let t of e)this.lines+=t.lines}lineInner(e,t,i,n){for(let s=0;;s++){let r=this.children[s],o=n+r.length,a=i+r.lines-1;if((t?a:o)>=e)return r.lineInner(e,t,i,n);n=o+1,i=a+1}}decompose(e,t,i,n){for(let s=0,r=0;r<=t&&s=r){let s=n&((r<=e?1:0)|(a>=t?2:0));r>=e&&a<=t&&!s?i.push(o):o.decompose(e-r,t-r,i,s)}r=a+1}}replace(e,t,n){if(n.lines=r&&t<=a){let l=o.replace(e-r,t-r,n),h=this.lines-o.lines+l.lines;if(l.lines>4&&l.lines>h>>6){let r=this.children.slice();return r[s]=l,new i(r,this.length-(t-e)+n.length)}return super.replace(r,a,l)}r=a+1}return super.replace(e,t,n)}sliceString(e,t=this.length,i="\n"){let n="";for(let s=0,r=0;se&&s&&(n+=i),er&&(n+=o.sliceString(e-r,t-r,i)),r=a+1}return n}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof i))return 0;let n=0,[s,r,o,a]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==a)return n;let i=this.children[s],l=e.children[r];if(i!=l)return n+i.scanIdentical(l,t);n+=i.length+1}}static from(e,n=e.reduce(((e,t)=>e+t.length+1),-1)){let s=0;for(let t of e)s+=t.lines;if(s<32){let i=[];for(let t of e)t.flatten(i);return new t(i,n)}let r=Math.max(32,s>>5),o=r<<1,a=r>>1,l=[],h=0,c=-1,d=[];function u(e){let n;if(e.lines>o&&e instanceof i)for(let t of e.children)u(t);else e.lines>a&&(h>a||!h)?(p(),l.push(e)):e instanceof t&&h&&(n=d[d.length-1])instanceof t&&e.lines+n.lines<=32?(h+=e.lines,c+=e.length+1,d[d.length-1]=new t(n.text.concat(e.text),n.length+1+e.length)):(h+e.lines>r&&p(),h+=e.lines,c+=e.length+1,d.push(e))}function p(){0!=h&&(l.push(1==d.length?d[0]:i.from(d,c)),c=-1,h=d.length=0)}for(let t of e)u(t);return p(),1==l.length?l[0]:new i(l,n)}}function n(e,t,i=0,n=1e9){for(let s=0,r=0,o=!0;r=i&&(l>n&&(a=a.slice(0,n-s)),s0?1:(e instanceof t?e.text.length:e.children.length)<<1]}nextInner(e,i){for(this.done=this.lineBreak=!1;;){let n=this.nodes.length-1,s=this.nodes[n],r=this.offsets[n],o=r>>1,a=s instanceof t?s.text.length:s.children.length;if(o==(i>0?a:0)){if(0==n)return this.done=!0,this.value="",this;i>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((1&r)==(i>0?0:1)){if(this.offsets[n]+=i,0==e)return this.lineBreak=!0,this.value="\n",this;e--}else if(s instanceof t){let t=s.text[o+(i<0?-1:0)];if(this.offsets[n]+=i,t.length>Math.max(0,e))return this.value=0==e?t:i>0?t.slice(e):t.slice(0,t.length-e),this;e-=t.length}else{let r=s.children[o+(i<0?-1:0)];e>r.length?(e-=r.length,this.offsets[n]+=i):(i<0&&this.offsets[n]--,this.nodes.push(r),this.offsets.push(i>0?1:(r instanceof t?r.text.length:r.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class o{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new r(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:n}=this.cursor.next(e);return this.pos+=(n.length+e)*t,this.value=n.length<=i?n:t<0?n.slice(n.length-i):n.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&""!=this.value}}class a{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:n}=this.inner.next(e);return t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=n,this.afterBreak=!1),this}get lineBreak(){return!1}}"undefined"!=typeof Symbol&&(e.prototype[Symbol.iterator]=function(){return this.iter()},r.prototype[Symbol.iterator]=o.prototype[Symbol.iterator]=a.prototype[Symbol.iterator]=function(){return this});class l{constructor(e,t,i,n){this.from=e,this.to=t,this.number=i,this.text=n}get length(){return this.to-this.from}}let h="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map((e=>e?parseInt(e,36):1));for(let e=1;ee)return h[t-1]<=e;return!1}function d(e){return e>=127462&&e<=127487}const u=8205;function p(e,t,i=!0,n=!0){return(i?f:m)(e,t,n)}function f(e,t,i){if(t==e.length)return t;t&&g(e.charCodeAt(t))&&v(e.charCodeAt(t-1))&&t--;let n=O(e,t);for(t+=_(n);t=0&&d(O(e,n));)i++,n-=2;if(i%2==0)break;t+=2}}}return t}function m(e,t,i){for(;t>0;){let n=f(e,t-2,i);if(n=56320&&e<57344}function v(e){return e>=55296&&e<56320}function O(e,t){let i=e.charCodeAt(t);if(!v(i)||t+1==e.length)return i;let n=e.charCodeAt(t+1);return g(n)?n-56320+(i-55296<<10)+65536:i}function b(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(55296+(e>>10),56320+(1023&e)))}function _(e){return e<65536?1:2}const y=/\r\n?|\n/;var w=function(e){return e[e.Simple=0]="Simple",e[e.TrackDel=1]="TrackDel",e[e.TrackBefore=2]="TrackBefore",e[e.TrackAfter=3]="TrackAfter",e}(w||(w={}));class x{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-n);s+=o}else{if(i!=w.Simple&&l>=e&&(i==w.TrackDel&&ne||i==w.TrackBefore&&ne))return null;if(l>e||l==e&&t<0&&!o)return e==n||t<0?s:s+a;s+=a}n=l}if(e>n)throw new RangeError(`Position ${e} is out of range for changeset of length ${n}`);return s}touchesRange(e,t=e){for(let i=0,n=0;i=0&&n<=t&&s>=e)return!(nt)||"cover";n=s}return!1}toString(){let e="";for(let t=0;t=0?":"+n:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some((e=>"number"!=typeof e)))throw new RangeError("Invalid JSON representation of ChangeDesc");return new x(e)}static create(e){return new x(e)}}class S extends x{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return C(this,((t,i,n,s,r)=>e=e.replace(n,n+(i-t),r)),!1),e}mapDesc(e,t=!1){return P(this,e,t,!0)}invert(t){let i=this.sections.slice(),n=[];for(let s=0,r=0;s=0){i[s]=a,i[s+1]=o;let l=s>>1;for(;n.length0&&T(i,t,s.text),s.forward(e),o+=e}let l=e[r++];for(;o>1].toJSON()))}return e}static of(t,i,n){let s=[],r=[],o=0,a=null;function l(e=!1){if(!e&&!s.length)return;oa||t<0||a>i)throw new RangeError(`Invalid change range ${t} to ${a} (in doc of length ${i})`);let d=c?"string"==typeof c?e.of(c.split(n||y)):c:e.empty,u=d.length;if(t==a&&0==u)return;to&&k(s,t-o,-1),k(s,a-t,u),T(r,s,d),o=a}}(t),l(!a),a}static empty(e){return new S(e?[e,-1]:[],[])}static fromJSON(t){if(!Array.isArray(t))throw new RangeError("Invalid JSON representation of ChangeSet");let i=[],n=[];for(let s=0;st&&"string"!=typeof e)))throw new RangeError("Invalid JSON representation of ChangeSet");if(1==r.length)i.push(r[0],0);else{for(;n.length=0&&i<=0&&i==e[s+1]?e[s]+=t:0==t&&0==e[s]?e[s+1]+=i:n?(e[s]+=t,e[s+1]+=i):e.push(t,i)}function T(t,i,n){if(0==n.length)return;let s=i.length-2>>1;if(s>1])),!(n||a==t.sections.length||t.sections[a+1]<0);)l=t.sections[a++],h=t.sections[a++];i(r,c,o,d,u),r=c,o=d}}}function P(e,t,i,n=!1){let s=[],r=n?[]:null,o=new E(e),a=new E(t);for(let e=-1;;)if(-1==o.ins&&-1==a.ins){let e=Math.min(o.len,a.len);k(s,e,-1),o.forward(e),a.forward(e)}else if(a.ins>=0&&(o.ins<0||e==o.i||0==o.off&&(a.len=0&&e=0)){if(o.done&&a.done)return r?S.createSet(s,r):x.create(s);throw new Error("Mismatched change set lengths")}{let t=0,i=o.len;for(;i;)if(-1==a.ins){let e=Math.min(i,a.len);t+=e,i-=e,a.forward(e)}else{if(!(0==a.ins&&a.lent||o.ins>=0&&o.len>t)&&(e||n.length>i),r.forward2(t),o.forward(t)}}else k(n,0,o.ins,e),s&&T(s,n,o.text),o.next()}}class E{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return i>=t.length?e.empty:t[i]}textBit(t){let{inserted:i}=this.set,n=this.i-2>>1;return n>=i.length&&!t?e.empty:i[n].slice(this.off,null==t?void 0:this.off+t)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){-1==this.ins?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class A{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return 32&this.flags?this.to:this.from}get head(){return 32&this.flags?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return 8&this.flags?-1:16&this.flags?1:0}get bidiLevel(){let e=7&this.flags;return 7==e?null:e}get goalColumn(){let e=this.flags>>6;return 16777215==e?void 0:e}map(e,t=-1){let i,n;return this.empty?i=n=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),n=e.mapPos(this.to,-1)),i==this.from&&n==this.to?this:new A(i,n,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return R.range(e,t);let i=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return R.range(this.anchor,i)}eq(e){return this.anchor==e.anchor&&this.head==e.head}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||"number"!=typeof e.anchor||"number"!=typeof e.head)throw new RangeError("Invalid JSON representation for SelectionRange");return R.range(e.anchor,e.head)}static create(e,t,i){return new A(e,t,i)}}class R{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:R.create(this.ranges.map((i=>i.map(e,t))),this.mainIndex)}eq(e){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let t=0;te.toJSON())),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||"number"!=typeof e.main||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new R(e.ranges.map((e=>A.fromJSON(e))),e.main)}static single(e,t=e){return new R([R.range(e,t)],0)}static create(e,t=0){if(0==e.length)throw new RangeError("A selection needs at least one range");for(let i=0,n=0;ne?8:0)|s)}static normalized(e,t=0){let i=e[t];e.sort(((e,t)=>e.from-t.from)),t=e.indexOf(i);for(let i=1;in.head?R.range(o,r):R.range(r,o))}}return new R(e,t)}}function D(e,t){for(let i of e.ranges)if(i.to>t)throw new RangeError("Selection points outside of document")}let I=0;class q{constructor(e,t,i,n,s){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=n,this.id=I++,this.default=e([]),this.extensions="function"==typeof s?s(this):s}get reader(){return this}static define(e={}){return new q(e.combine||(e=>e),e.compareInput||((e,t)=>e===t),e.compare||(e.combine?(e,t)=>e===t:L),!!e.static,e.enables)}of(e){return new N([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new N(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new N(e,this,2,t)}from(e,t){return t||(t=e=>e),this.compute([e],(i=>t(i.field(e))))}}function L(e,t){return e==t||e.length==t.length&&e.every(((e,i)=>e===t[i]))}class N{constructor(e,t,i,n){this.dependencies=e,this.facet=t,this.type=i,this.value=n,this.id=I++}dynamicSlot(e){var t;let i=this.value,n=this.facet.compareInput,s=this.id,r=e[s]>>1,o=2==this.type,a=!1,l=!1,h=[];for(let i of this.dependencies)"doc"==i?a=!0:"selection"==i?l=!0:0==(1&(null!==(t=e[i.id])&&void 0!==t?t:1))&&h.push(e[i.id]);return{create:e=>(e.values[r]=i(e),1),update(e,t){if(a&&t.docChanged||l&&(t.docChanged||t.selection)||$(e,h)){let t=i(e);if(o?!B(t,e.values[r],n):!n(t,e.values[r]))return e.values[r]=t,1}return 0},reconfigure:(e,t)=>{let a,l=t.config.address[s];if(null!=l){let s=G(t,l);if(this.dependencies.every((i=>i instanceof q?t.facet(i)===e.facet(i):!(i instanceof j)||t.field(i,!1)==e.field(i,!1)))||(o?B(a=i(e),s,n):n(a=i(e),s)))return e.values[r]=s,0}else a=i(e);return e.values[r]=a,1}}}}function B(e,t,i){if(e.length!=t.length)return!1;for(let n=0;ne[t.id])),s=i.map((e=>e.type)),r=n.filter((e=>!(1&e))),o=e[t.id]>>1;function a(e){let i=[];for(let t=0;te===t),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(z).find((e=>e.field==this));return((null==t?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:e=>(e.values[t]=this.create(e),1),update:(e,i)=>{let n=e.values[t],s=this.updateF(n,i);return this.compareF(n,s)?0:(e.values[t]=s,1)},reconfigure:(e,i)=>null!=i.config.address[this.id]?(e.values[t]=i.field(this),0):(e.values[t]=this.create(e),1)}}init(e){return[this,z.of({field:this,create:e})]}get extension(){return this}}function W(e){return t=>new U(t,e)}const V={highest:W(0),high:W(1),default:W(2),low:W(3),lowest:W(4)};class U{constructor(e,t){this.inner=e,this.prec=t}}class F{of(e){return new H(this,e)}reconfigure(e){return F.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class H{constructor(e,t){this.compartment=e,this.inner=t}}class X{constructor(e,t,i,n,s,r){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=n,this.staticValues=s,this.facets=r,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let n=[],s=Object.create(null),r=new Map;for(let i of function(e,t,i){let n=[[],[],[],[],[]],s=new Map;return function e(r,o){let a=s.get(r);if(null!=a){if(a<=o)return;let e=n[a].indexOf(r);e>-1&&n[a].splice(e,1),r instanceof H&&i.delete(r.compartment)}if(s.set(r,o),Array.isArray(r))for(let t of r)e(t,o);else if(r instanceof H){if(i.has(r.compartment))throw new RangeError("Duplicate use of compartment in extensions");let n=t.get(r.compartment)||r.inner;i.set(r.compartment,n),e(n,o)}else if(r instanceof U)e(r.inner,r.prec);else if(r instanceof j)n[o].push(r),r.provides&&e(r.provides,o);else if(r instanceof N)n[o].push(r),r.facet.extensions&&e(r.facet.extensions,2);else{let t=r.extension;if(!t)throw new Error(`Unrecognized extension value in extension set (${r}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);e(t,o)}}(e,2),n.reduce(((e,t)=>e.concat(t)))}(e,t,r))i instanceof j?n.push(i):(s[i.facet.id]||(s[i.facet.id]=[])).push(i);let o=Object.create(null),a=[],l=[];for(let e of n)o[e.id]=l.length<<1,l.push((t=>e.slot(t)));let h=null==i?void 0:i.config.facets;for(let e in s){let t=s[e],n=t[0].facet,r=h&&h[e]||[];if(t.every((e=>0==e.type)))if(o[n.id]=a.length<<1|1,L(r,t))a.push(i.facet(n));else{let e=n.combine(t.map((e=>e.value)));a.push(i&&n.compare(e,i.facet(n))?i.facet(n):e)}else{for(let e of t)0==e.type?(o[e.id]=a.length<<1|1,a.push(e.value)):(o[e.id]=l.length<<1,l.push((t=>e.dynamicSlot(t))));o[n.id]=l.length<<1,l.push((e=>Q(e,n,t)))}}let c=l.map((e=>e(o)));return new X(e,r,c,o,a,s)}}function Y(e,t){if(1&t)return 2;let i=t>>1,n=e.status[i];if(4==n)throw new Error("Cyclic dependency between fields and/or facets");if(2&n)return n;e.status[i]=4;let s=e.computeSlot(e,e.config.dynamicSlots[i]);return e.status[i]=2|s}function G(e,t){return 1&t?e.config.staticValues[t>>1]:e.values[t>>1]}const Z=q.define(),K=q.define({combine:e=>e.some((e=>e)),static:!0}),J=q.define({combine:e=>e.length?e[0]:void 0,static:!0}),ee=q.define(),te=q.define(),ie=q.define(),ne=q.define({combine:e=>!!e.length&&e[0]});class se{constructor(e,t){this.type=e,this.value=t}static define(){return new re}}class re{of(e){return new se(this,e)}}class oe{constructor(e){this.map=e}of(e){return new ae(this,e)}}class ae{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return void 0===t?void 0:t==this.value?this:new ae(this.type,t)}is(e){return this.type==e}static define(e={}){return new oe(e.map||(e=>e))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let n of e){let e=n.map(t);e&&i.push(e)}return i}}ae.reconfigure=ae.define(),ae.appendConfig=ae.define();class le{constructor(e,t,i,n,s,r){this.startState=e,this.changes=t,this.selection=i,this.effects=n,this.annotations=s,this.scrollIntoView=r,this._doc=null,this._state=null,i&&D(i,t.newLength),s.some((e=>e.type==le.time))||(this.annotations=s.concat(le.time.of(Date.now())))}static create(e,t,i,n,s,r){return new le(e,t,i,n,s,r)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(le.userEvent);return!(!t||!(t==e||t.length>e.length&&t.slice(0,e.length)==e&&"."==t[e.length]))}}function he(e,t){let i=[];for(let n=0,s=0;;){let r,o;if(n=e[n]))r=e[n++],o=e[n++];else{if(!(s=0;s--){let r=i[s](e);r&&Object.keys(r).length&&(n=ce(n,de(t,r,e.changes.newLength),!0))}return n==e?e:le.create(t,e.changes,e.selection,n.effects,n.annotations,n.scrollIntoView)}(i?function(e){let t=e.startState,i=!0;for(let n of t.facet(ee)){let t=n(e);if(!1===t){i=!1;break}Array.isArray(t)&&(i=!0===i?t:he(i,t))}if(!0!==i){let n,s;if(!1===i)s=e.changes.invertedDesc,n=S.empty(t.doc.length);else{let t=e.changes.filter(i);n=t.changes,s=t.filtered.mapDesc(t.changes).invertedDesc}e=le.create(t,n,e.selection&&e.selection.map(s),ae.mapEffects(e.effects,s),e.annotations,e.scrollIntoView)}let n=t.facet(te);for(let i=n.length-1;i>=0;i--){let s=n[i](e);e=s instanceof le?s:Array.isArray(s)&&1==s.length&&s[0]instanceof le?s[0]:ue(t,fe(s),!1)}return e}(s):s)}le.time=se.define(),le.userEvent=se.define(),le.addToHistory=se.define(),le.remote=se.define();const pe=[];function fe(e){return null==e?pe:Array.isArray(e)?e:[e]}var me=function(e){return e[e.Word=0]="Word",e[e.Space=1]="Space",e[e.Other=2]="Other",e}(me||(me={}));const ge=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let ve;try{ve=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch(e){}class Oe{constructor(e,t,i,n,s,r){this.config=e,this.doc=t,this.selection=i,this.values=n,this.status=e.statusTemplate.slice(),this.computeSlot=s,r&&(r._state=this);for(let e=0;es.set(t,e))),i=null),s.set(t.value.compartment,t.value.extension)):t.is(ae.reconfigure)?(i=null,n=t.value):t.is(ae.appendConfig)&&(i=null,n=fe(n).concat(t.value));i?t=e.startState.values.slice():(i=X.resolve(n,s,this),t=new Oe(i,this.doc,this.selection,i.dynamicSlots.map((()=>null)),((e,t)=>t.reconfigure(e,this)),null).values),new Oe(i,e.newDoc,e.newSelection,t,((t,i)=>i.update(t,e)),e)}replaceSelection(e){return"string"==typeof e&&(e=this.toText(e)),this.changeByRange((t=>({changes:{from:t.from,to:t.to,insert:e},range:R.cursor(t.from+e.length)})))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),n=this.changes(i.changes),s=[i.range],r=fe(i.effects);for(let i=1;is.spec.fromJSON(r,e))))}return Oe.create({doc:e.doc,selection:R.fromJSON(e.selection),extensions:t.extensions?n.concat([t.extensions]):n})}static create(t={}){let i=X.resolve(t.extensions||[],new Map),n=t.doc instanceof e?t.doc:e.of((t.doc||"").split(i.staticFacet(Oe.lineSeparator)||y)),s=t.selection?t.selection instanceof R?t.selection:R.single(t.selection.anchor,t.selection.head):R.single(0);return D(s,n.length),i.staticFacet(K)||(s=s.asSingle()),new Oe(i,n,s,i.dynamicSlots.map((()=>null)),((e,t)=>t.create(e)),null)}get tabSize(){return this.facet(Oe.tabSize)}get lineBreak(){return this.facet(Oe.lineSeparator)||"\n"}get readOnly(){return this.facet(ne)}phrase(e,...t){for(let t of this.facet(Oe.phrases))if(Object.prototype.hasOwnProperty.call(t,e)){e=t[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,((e,i)=>{if("$"==i)return"$";let n=+(i||1);return!n||n>t.length?e:t[n-1]}))),e}languageDataAt(e,t,i=-1){let n=[];for(let s of this.facet(Z))for(let r of s(this,t,i))Object.prototype.hasOwnProperty.call(r,e)&&n.push(r[e]);return n}charCategorizer(e){return t=this.languageDataAt("wordChars",e).join(""),e=>{if(!/\S/.test(e))return me.Space;if(function(e){if(ve)return ve.test(e);for(let t=0;t"€"&&(i.toUpperCase()!=i.toLowerCase()||ge.test(i)))return!0}return!1}(e))return me.Word;for(let i=0;i-1)return me.Word;return me.Other};var t}wordAt(e){let{text:t,from:i,length:n}=this.doc.lineAt(e),s=this.charCategorizer(e),r=e-i,o=e-i;for(;r>0;){let e=p(t,r,!1);if(s(t.slice(e,r))!=me.Word)break;r=e}for(;oe.length?e[0]:4}),Oe.lineSeparator=J,Oe.readOnly=ne,Oe.phrases=q.define({compare(e,t){let i=Object.keys(e),n=Object.keys(t);return i.length==n.length&&i.every((i=>e[i]==t[i]))}}),Oe.languageData=Z,Oe.changeFilter=ee,Oe.transactionFilter=te,Oe.transactionExtender=ie,F.reconfigure=ae.define();class _e{eq(e){return this==e}range(e,t=e){return ye.create(e,t,this)}}_e.prototype.startSide=_e.prototype.endSide=0,_e.prototype.point=!1,_e.prototype.mapMode=w.TrackDel;class ye{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new ye(e,t,i)}}function we(e,t){return e.from-t.from||e.value.startSide-t.value.startSide}class xe{constructor(e,t,i,n){this.from=e,this.to=t,this.value=i,this.maxPoint=n}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,n=0){let s=i?this.to:this.from;for(let r=n,o=s.length;;){if(r==o)return r;let n=r+o>>1,a=s[n]-e||(i?this.value[n].endSide:this.value[n].startSide)-t;if(n==r)return a>=0?r:o;a>=0?o=n:r=n+1}}between(e,t,i,n){for(let s=this.findIndex(t,-1e9,!0),r=this.findIndex(i,1e9,!1,s);sh||l==h&&c.startSide>0&&c.endSide<=0)continue;(h-l||c.endSide-c.startSide)<0||(r<0&&(r=l),c.point&&(o=Math.max(o,h-l)),i.push(c),n.push(l-r),s.push(h-r))}return{mapped:i.length?new xe(n,s,i,o):null,pos:r}}}class Se{constructor(e,t,i,n){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=n}static create(e,t,i,n){return new Se(e,t,i,n)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:n=0,filterTo:s=this.length}=e,r=e.filter;if(0==t.length&&!r)return this;if(i&&(t=t.slice().sort(we)),this.isEmpty)return t.length?Se.of(t):this;let o=new Ce(this,null,-1).goto(0),a=0,l=[],h=new ke;for(;o.value||a=0){let e=t[a++];h.addInner(e.from,e.to,e.value)||l.push(e)}else 1==o.rangeIndex&&o.chunkIndexthis.chunkEnd(o.chunkIndex)||so.to||s=s&&e<=s+r.length&&!1===r.between(s,e-s,t-s,i))return}this.nextLayer.between(e,t,i)}}iter(e=0){return Pe.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Pe.from(e).goto(t)}static compare(e,t,i,n,s=-1){let r=e.filter((e=>e.maxPoint>0||!e.isEmpty&&e.maxPoint>=s)),o=t.filter((e=>e.maxPoint>0||!e.isEmpty&&e.maxPoint>=s)),a=Te(r,o,i),l=new Ee(r,a,s),h=new Ee(o,a,s);i.iterGaps(((e,t,i)=>Ae(l,e,h,t,i,n))),i.empty&&0==i.length&&Ae(l,0,h,0,0,n)}static eq(e,t,i=0,n){null==n&&(n=999999999);let s=e.filter((e=>!e.isEmpty&&t.indexOf(e)<0)),r=t.filter((t=>!t.isEmpty&&e.indexOf(t)<0));if(s.length!=r.length)return!1;if(!s.length)return!0;let o=Te(s,r),a=new Ee(s,o,0).goto(i),l=new Ee(r,o,0).goto(i);for(;;){if(a.to!=l.to||!Re(a.active,l.active)||a.point&&(!l.point||!a.point.eq(l.point)))return!1;if(a.to>n)return!0;a.next(),l.next()}}static spans(e,t,i,n,s=-1){let r=new Ee(e,null,s).goto(t),o=t,a=r.openStart;for(;;){let e=Math.min(r.to,i);if(r.point){let i=r.activeForPoint(r.to),s=r.pointFromo&&(n.span(o,e,r.active,a),a=r.openEnd(e));if(r.to>i)return a+(r.point&&r.to>i?1:0);o=r.to,r.next()}}static of(e,t=!1){let i=new ke;for(let n of e instanceof ye?[e]:t?function(e){if(e.length>1)for(let t=e[0],i=1;i0)return e.slice().sort(we);t=n}return e}(e):e)i.add(n.from,n.to,n.value);return i.finish()}}Se.empty=new Se([],[],null,-1),Se.empty.nextLayer=Se.empty;class ke{finishChunk(e){this.chunks.push(new xe(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new ke)).add(e,t,i)}addInner(e,t,i){let n=e-this.lastTo||i.startSide-this.last.endSide;if(n<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return!(n<0||(250==this.from.length&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),0))}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(Se.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),0==this.chunks.length)return e;let t=Se.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function Te(e,t,i){let n=new Map;for(let t of e)for(let e=0;e=this.minPoint)break}}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&n.push(new Ce(r,t,i,s));return 1==n.length?n[0]:new Pe(n)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let e=this.heap.length>>1;e>=0;e--)Me(this.heap,e);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let e=this.heap.length>>1;e>=0;e--)Me(this.heap,e);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(0==this.heap.length)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Me(this.heap,0)}}}function Me(e,t){for(let i=e[t];;){let n=1+(t<<1);if(n>=e.length)break;let s=e[n];if(n+1=0&&(s=e[n+1],n++),i.compare(s)<0)break;e[n]=i,e[t]=s,t=n}}class Ee{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Pe.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){De(this.active,e),De(this.activeTo,e),De(this.activeRank,e),this.minActive=qe(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:n,rank:s}=this.cursor;for(;t-1&&(this.activeTo[n]-this.cursor.from||this.active[n].endSide-this.cursor.startSide)<0){if(this.activeTo[n]>e){this.to=this.activeTo[n],this.endSide=this.active[n].endSide;break}this.removeActive(n),i&&De(i,n)}else{if(!this.cursor.value){this.to=this.endSide=1e9;break}if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}{let e=this.cursor.value;if(e.point){if(!(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[t]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function Ae(e,t,i,n,s,r){e.goto(t),i.goto(n);let o=n+s,a=n,l=n-t;for(;;){let t=e.to+l-i.to||e.endSide-i.endSide,n=t<0?e.to+l:i.to,s=Math.min(n,o);if(e.point||i.point?e.point&&i.point&&(e.point==i.point||e.point.eq(i.point))&&Re(e.activeForPoint(e.to),i.activeForPoint(i.to))||r.comparePoint(a,s,e.point,i.point):s>a&&!Re(e.active,i.active)&&r.compareRange(a,s,e.active,i.active),n>o)break;a=n,t<=0&&e.next(),t>=0&&i.next()}}function Re(e,t){if(e.length!=t.length)return!1;for(let i=0;i=t;i--)e[i+1]=e[i];e[t]=i}function qe(e,t){let i=-1,n=1e9;for(let s=0;s=t)return n;if(n==e.length)break;s+=9==e.charCodeAt(n)?i-s%i:1,n=p(e,n)}return!0===n?-1:e.length}const Be="undefined"==typeof Symbol?"__ͼ":Symbol.for("ͼ"),$e="undefined"==typeof Symbol?"__styleSet"+Math.floor(1e8*Math.random()):Symbol("styleSet"),Qe="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:{};class ze{constructor(e,t){this.rules=[];let{finish:i}=t||{};function n(e){return/^@/.test(e)?[e]:e.split(/,\s*/)}function s(e,t,r,o){let a=[],l=/^@(\w+)\b/.exec(e[0]),h=l&&"keyframes"==l[1];if(l&&null==t)return r.push(e[0]+";");for(let i in t){let o=t[i];if(/&/.test(i))s(i.split(/,\s*/).map((t=>e.map((e=>t.replace(/&/,e))))).reduce(((e,t)=>e.concat(t))),o,r);else if(o&&"object"==typeof o){if(!l)throw new RangeError("The value of a property ("+i+") should be a primitive value.");s(n(i),o,a,h)}else null!=o&&a.push(i.replace(/_.*/,"").replace(/[A-Z]/g,(e=>"-"+e.toLowerCase()))+": "+o+";")}(a.length||h)&&r.push((!i||l||o?e:e.map(i)).join(", ")+" {"+a.join(" ")+"}")}for(let t in e)s(n(t),e[t],this.rules)}getRules(){return this.rules.join("\n")}static newName(){let e=Qe[Be]||1;return Qe[Be]=e+1,"ͼ"+e.toString(36)}static mount(e,t,i){let n=e[$e],s=i&&i.nonce;n?s&&n.setNonce(s):n=new We(e,s),n.mount(Array.isArray(t)?t:[t])}}let je=new Map;class We{constructor(e,t){let i=e.ownerDocument||e,n=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&n.CSSStyleSheet){let t=je.get(i);if(t)return e.adoptedStyleSheets=[t.sheet,...e.adoptedStyleSheets],e[$e]=t;this.sheet=new n.CSSStyleSheet,e.adoptedStyleSheets=[this.sheet,...e.adoptedStyleSheets],je.set(i,this)}else{this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);let n=e.head||e;n.insertBefore(this.styleTag,n.firstChild)}this.modules=[],e[$e]=this}mount(e){let t=this.sheet,i=0,n=0;for(let s=0;s-1&&(this.modules.splice(o,1),n--,o=-1),-1==o){if(this.modules.splice(n++,0,r),t)for(let e=0;e",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},Fe="undefined"!=typeof navigator&&/Mac/.test(navigator.platform),He="undefined"!=typeof navigator&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),Xe=0;Xe<10;Xe++)Ve[48+Xe]=Ve[96+Xe]=String(Xe);for(Xe=1;Xe<=24;Xe++)Ve[Xe+111]="F"+Xe;for(Xe=65;Xe<=90;Xe++)Ve[Xe]=String.fromCharCode(Xe+32),Ue[Xe]=String.fromCharCode(Xe);for(var Ye in Ve)Ue.hasOwnProperty(Ye)||(Ue[Ye]=Ve[Ye]);function Ge(e){let t;return t=11==e.nodeType?e.getSelection?e:e.ownerDocument:e,t.getSelection()}function Ze(e,t){return!!t&&(e==t||e.contains(1!=t.nodeType?t.parentNode:t))}function Ke(e,t){if(!t.anchorNode)return!1;try{return Ze(e,t.anchorNode)}catch(e){return!1}}function Je(e){return 3==e.nodeType?ct(e,0,e.nodeValue.length).getClientRects():1==e.nodeType?e.getClientRects():[]}function et(e,t,i,n){return!!i&&(it(e,t,i,n,-1)||it(e,t,i,n,1))}function tt(e){for(var t=0;;t++)if(!(e=e.previousSibling))return t}function it(e,t,i,n,s){for(;;){if(e==i&&t==n)return!0;if(t==(s<0?0:nt(e))){if("DIV"==e.nodeName)return!1;let i=e.parentNode;if(!i||1!=i.nodeType)return!1;t=tt(e)+(s<0?0:1),e=i}else{if(1!=e.nodeType)return!1;if(1==(e=e.childNodes[t+(s<0?-1:0)]).nodeType&&"false"==e.contentEditable)return!1;t=s<0?nt(e):0}}}function nt(e){return 3==e.nodeType?e.nodeValue.length:e.childNodes.length}function st(e,t){let i=t?e.left:e.right;return{left:i,right:i,top:e.top,bottom:e.bottom}}function rt(e){return{left:0,right:e.innerWidth,top:0,bottom:e.innerHeight}}class ot{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?nt(t):0),i,Math.min(e.focusOffset,i?nt(i):0))}set(e,t,i,n){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=n}}let at,lt=null;function ht(e){if(e.setActive)return e.setActive();if(lt)return e.focus(lt);let t=[];for(let i=e;i&&(t.push(i,i.scrollTop,i.scrollLeft),i!=i.ownerDocument);i=i.parentNode);if(e.focus(null==lt?{get preventScroll(){return lt={preventScroll:!0},!0}}:void 0),!lt){lt=!1;for(let e=0;eMath.max(1,e.scrollHeight-e.clientHeight-4)}class ft{constructor(e,t,i=!0){this.node=e,this.offset=t,this.precise=i}static before(e,t){return new ft(e.parentNode,tt(e),t)}static after(e,t){return new ft(e.parentNode,tt(e)+1,t)}}const mt=[];class gt{constructor(){this.parent=null,this.dom=null,this.flags=2}get overrideDOMText(){return null}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e){let t=this.posAtStart;for(let i of this.children){if(i==e)return t;t+=i.length+i.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}sync(e,t){if(2&this.flags){let i,n=this.dom,s=null;for(let r of this.children){if(7&r.flags){if(!r.dom&&(i=s?s.nextSibling:n.firstChild)){let e=gt.get(i);(!e||!e.parent&&e.canReuseDOM(r))&&r.reuseDOM(i)}r.sync(e,t),r.flags&=-8}if(i=s?s.nextSibling:n.firstChild,t&&!t.written&&t.node==n&&i!=r.dom&&(t.written=!0),r.dom.parentNode==n)for(;i&&i!=r.dom;)i=vt(i);else n.insertBefore(r.dom,i);s=r.dom}for(i=s?s.nextSibling:n.firstChild,i&&t&&t.node==n&&(t.written=!0);i;)i=vt(i)}else if(1&this.flags)for(let i of this.children)7&i.flags&&(i.sync(e,t),i.flags&=-8)}reuseDOM(e){}localPosFromDOM(e,t){let i;if(e==this.dom)i=this.dom.childNodes[t];else{let n=0==nt(e)?0:0==t?-1:1;for(;;){let t=e.parentNode;if(t==this.dom)break;0==n&&t.firstChild!=t.lastChild&&(n=e==t.firstChild?-1:1),e=t}i=n<0?e:e.nextSibling}if(i==this.dom.firstChild)return 0;for(;i&&!gt.get(i);)i=i.nextSibling;if(!i)return this.length;for(let e=0,t=0;;e++){let n=this.children[e];if(n.dom==i)return t;t+=n.length+n.breakAfter}}domBoundsAround(e,t,i=0){let n=-1,s=-1,r=-1,o=-1;for(let a=0,l=i,h=i;at)return i.domBoundsAround(e,t,l);if(c>=e&&-1==n&&(n=a,s=l),l>t&&i.dom.parentNode==this.dom){r=a,o=h;break}h=c,l=c+i.breakAfter}return{from:s,to:o<0?i+this.length:o,startDOM:(n?this.children[n-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:r=0?this.children[r].dom:null}}markDirty(e=!1){this.flags|=2,this.markParentsDirty(e)}markParentsDirty(e){for(let t=this.parent;t;t=t.parent){if(e&&(t.flags|=2),1&t.flags)return;t.flags|=1,e=!1}}setParent(e){this.parent!=e&&(this.parent=e,7&this.flags&&this.markParentsDirty(!0))}setDOM(e){this.dom!=e&&(this.dom&&(this.dom.cmView=null),this.dom=e,e.cmView=this)}get rootView(){for(let e=this;;){let t=e.parent;if(!t)return e;e=t}}replaceChildren(e,t,i=mt){this.markDirty();for(let i=e;ithis.pos||e==this.pos&&(t>0||0==this.i||this.children[this.i-1].breakAfter))return this.off=e-this.pos,this;let i=this.children[--this.i];this.pos-=i.length+i.breakAfter}}}function bt(e,t,i,n,s,r,o,a,l){let{children:h}=e,c=h.length?h[t]:null,d=r.length?r[r.length-1]:null,u=d?d.breakAfter:o;if(!(t==n&&c&&!o&&!u&&r.length<2&&c.merge(i,s,r.length?d:null,0==i,a,l))){if(n0&&(!o&&r.length&&c.merge(i,c.length,r[0],!1,a,0)?c.breakAfter=r.shift().breakAfter:(i2);var Rt={mac:At||/Mac/.test(yt.platform),windows:/Win/.test(yt.platform),linux:/Linux|X11/.test(yt.platform),ie:Tt,ie_version:St?wt.documentMode||6:kt?+kt[1]:xt?+xt[1]:0,gecko:Ct,gecko_version:Ct?+(/Firefox\/(\d+)/.exec(yt.userAgent)||[0,0])[1]:0,chrome:!!Pt,chrome_version:Pt?+Pt[1]:0,ios:At,android:/Android\b/.test(yt.userAgent),webkit:Mt,safari:Et,webkit_version:Mt?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0,tabSize:null!=wt.documentElement.style.tabSize?"tab-size":"-moz-tab-size"};class Dt extends gt{constructor(e){super(),this.text=e}get length(){return this.text.length}createDOM(e){this.setDOM(e||document.createTextNode(this.text))}sync(e,t){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(t&&t.node==this.dom&&(t.written=!0),this.dom.nodeValue=this.text)}reuseDOM(e){3==e.nodeType&&this.createDOM(e)}merge(e,t,i){return!(8&this.flags||i&&(!(i instanceof Dt)||this.length-(t-e)+i.length>256||8&i.flags)||(this.text=this.text.slice(0,e)+(i?i.text:"")+this.text.slice(t),this.markDirty(),0))}split(e){let t=new Dt(this.text.slice(e));return this.text=this.text.slice(0,e),this.markDirty(),t.flags|=8&this.flags,t}localPosFromDOM(e,t){return e==this.dom?t:t?this.text.length:0}domAtPos(e){return new ft(this.dom,e)}domBoundsAround(e,t,i){return{from:i,to:i+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}coordsAt(e,t){return function(e,t,i){let n=e.nodeValue.length;t>n&&(t=n);let s=t,r=t,o=0;0==t&&i<0||t==n&&i>=0?Rt.chrome||Rt.gecko||(t?(s--,o=1):r=0)?0:a.length-1];return Rt.safari&&!o&&0==l.width&&(l=Array.prototype.find.call(a,(e=>e.width))||l),o?st(l,o<0):l||null}(this.dom,e,t)}}class It extends gt{constructor(e,t=[],i=0){super(),this.mark=e,this.children=t,this.length=i;for(let e of t)e.setParent(this)}setAttrs(e){if(ut(e),this.mark.class&&(e.className=this.mark.class),this.mark.attrs)for(let t in this.mark.attrs)e.setAttribute(t,this.mark.attrs[t]);return e}canReuseDOM(e){return super.canReuseDOM(e)&&!(8&(this.flags|e.flags))}reuseDOM(e){e.nodeName==this.mark.tagName.toUpperCase()&&(this.setDOM(e),this.flags|=6)}sync(e,t){this.dom?4&this.flags&&this.setAttrs(this.dom):this.setDOM(this.setAttrs(document.createElement(this.mark.tagName))),super.sync(e,t)}merge(e,t,i,n,s,r){return!(i&&(!(i instanceof It&&i.mark.eq(this.mark))||e&&s<=0||te&&t.push(i=e&&(n=s),i=o,s++}let r=this.length-e;return this.length=e,n>-1&&(this.children.length=n,this.markDirty()),new It(this.mark,t,r)}domAtPos(e){return Nt(this,e)}coordsAt(e,t){return $t(this,e,t)}}class qt extends gt{static create(e,t,i){return new qt(e,t,i)}constructor(e,t,i){super(),this.widget=e,this.length=t,this.side=i,this.prevWidget=null}split(e){let t=qt.create(this.widget,this.length-e,this.side);return this.length-=e,t}sync(e){this.dom&&this.widget.updateDOM(this.dom,e)||(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(e)),this.dom.contentEditable="false")}getSide(){return this.side}merge(e,t,i,n,s,r){return!(i&&(!(i instanceof qt&&this.widget.compare(i.widget))||e>0&&s<=0||t0)?ft.before(this.dom):ft.after(this.dom,e==this.length)}domBoundsAround(){return null}coordsAt(e,t){let i=this.widget.coordsAt(this.dom,e,t);if(i)return i;let n=this.dom.getClientRects(),s=null;if(!n.length)return null;let r=this.side?this.side<0:e>0;for(let t=r?n.length-1:0;s=n[t],!(e>0?0==t:t==n.length-1||s.top0?ft.before(this.dom):ft.after(this.dom)}localPosFromDOM(){return 0}domBoundsAround(){return null}coordsAt(e){return this.dom.getBoundingClientRect()}get overrideDOMText(){return e.empty}get isHidden(){return!0}}function Nt(e,t){let i=e.dom,{children:n}=e,s=0;for(let e=0;se&&t0;e--){let t=n[e-1];if(t.dom.parentNode==i)return t.domAtPos(t.length)}for(let e=s;e0&&t instanceof It&&s.length&&(n=s[s.length-1])instanceof It&&n.mark.eq(t.mark)?Bt(n,t.children[0],i-1):(s.push(t),t.setParent(e)),e.length+=t.length}function $t(e,t,i){let n=null,s=-1,r=null,o=-1;!function e(t,a){for(let l=0,h=0;l=a&&(c.children.length?e(c,a-h):(!r||r.isHidden&&i>0)&&(d>a||h==d&&c.getSide()>0)?(r=c,o=a-h):(h-1?1:0)!=s.length-(i&&s.indexOf(i)>-1?1:0))return!1;for(let r of n)if(r!=i&&(-1==s.indexOf(r)||e[r]!==t[r]))return!1;return!0}function Wt(e,t,i){let n=!1;if(t)for(let s in t)i&&s in i||(n=!0,"style"==s?e.style.cssText="":e.removeAttribute(s));if(i)for(let s in i)t&&t[s]==i[s]||(n=!0,"style"==s?e.style.cssText=i[s]:e.setAttribute(s,i[s]));return n}function Vt(e){let t=Object.create(null);for(let i=0;i0&&0==this.children[i-1].length;)this.children[--i].destroy();return this.children.length=i,this.markDirty(),this.length=e,t}transferDOM(e){this.dom&&(this.markDirty(),e.setDOM(this.dom),e.prevAttrs=void 0===this.prevAttrs?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}setDeco(e){jt(this.attrs,e)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=e)}append(e,t){Bt(this,e,t)}addLineDeco(e){let t=e.spec.attributes,i=e.spec.class;t&&(this.attrs=Qt(t,this.attrs||{})),i&&(this.attrs=Qt({class:i},this.attrs||{}))}domAtPos(e){return Nt(this,e)}reuseDOM(e){"DIV"==e.nodeName&&(this.setDOM(e),this.flags|=6)}sync(e,t){var i;this.dom?4&this.flags&&(ut(this.dom),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement("div")),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0),void 0!==this.prevAttrs&&(Wt(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add("cm-line"),this.prevAttrs=void 0),super.sync(e,t);let n=this.dom.lastChild;for(;n&>.get(n)instanceof It;)n=n.lastChild;if(!(n&&this.length&&("BR"==n.nodeName||0!=(null===(i=gt.get(n))||void 0===i?void 0:i.isEditable)||Rt.ios&&this.children.some((e=>e instanceof Dt))))){let e=document.createElement("BR");e.cmIgnore=!0,this.dom.appendChild(e)}}measureTextSize(){if(0==this.children.length||this.length>20)return null;let e,t=0;for(let i of this.children){if(!(i instanceof Dt)||/[^ -~]/.test(i.text))return null;let n=Je(i.dom);if(1!=n.length)return null;t+=n[0].width,e=n[0].height}return t?{lineHeight:this.dom.getBoundingClientRect().height,charWidth:t/this.length,textHeight:e}:null}coordsAt(e,t){let i=$t(this,e,t);if(!this.children.length&&i&&this.parent){let{heightOracle:e}=this.parent.view.viewState,t=i.bottom-i.top;if(Math.abs(t-e.lineHeight)<2&&e.textHeight=t){if(s instanceof Ut)return s;if(r>t)break}n=r+s.breakAfter}return null}}class Ft extends gt{constructor(e,t,i){super(),this.widget=e,this.length=t,this.deco=i,this.breakAfter=0,this.prevWidget=null}merge(e,t,i,n,s,r){return!(i&&(!(i instanceof Ft&&this.widget.compare(i.widget))||e>0&&s<=0||t0)}}class Ht{eq(e){return!1}updateDOM(e,t){return!1}compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}get estimatedHeight(){return-1}get lineBreaks(){return 0}ignoreEvent(e){return!0}coordsAt(e,t,i){return null}get isHidden(){return!1}destroy(e){}}var Xt=function(e){return e[e.Text=0]="Text",e[e.WidgetBefore=1]="WidgetBefore",e[e.WidgetAfter=2]="WidgetAfter",e[e.WidgetRange=3]="WidgetRange",e}(Xt||(Xt={}));class Yt extends _e{constructor(e,t,i,n){super(),this.startSide=e,this.endSide=t,this.widget=i,this.spec=n}get heightRelevant(){return!1}static mark(e){return new Gt(e)}static widget(e){let t=Math.max(-1e4,Math.min(1e4,e.side||0)),i=!!e.block;return t+=i&&!e.inlineOrder?t>0?3e8:-4e8:t>0?1e8:-1e8,new Kt(e,t,t,i,e.widget||null,!1)}static replace(e){let t,i,n=!!e.block;if(e.isBlockGap)t=-5e8,i=4e8;else{let{start:s,end:r}=Jt(e,n);t=(s?n?-3e8:-1:5e8)-1,i=1+(r?n?2e8:1:-6e8)}return new Kt(e,t,i,n,e.widget||null,!0)}static line(e){return new Zt(e)}static set(e,t=!1){return Se.of(e,t)}hasHeight(){return!!this.widget&&this.widget.estimatedHeight>-1}}Yt.none=Se.empty;class Gt extends Yt{constructor(e){let{start:t,end:i}=Jt(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.class=e.class||"",this.attrs=e.attributes||null}eq(e){var t,i;return this==e||e instanceof Gt&&this.tagName==e.tagName&&(this.class||(null===(t=this.attrs)||void 0===t?void 0:t.class))==(e.class||(null===(i=e.attrs)||void 0===i?void 0:i.class))&&jt(this.attrs,e.attrs,"class")}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}Gt.prototype.point=!1;class Zt extends Yt{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Zt&&this.spec.class==e.spec.class&&jt(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}Zt.prototype.mapMode=w.TrackBefore,Zt.prototype.point=!0;class Kt extends Yt{constructor(e,t,i,n,s,r){super(t,i,s,e),this.block=n,this.isReplace=r,this.mapMode=n?t<=0?w.TrackBefore:w.TrackAfter:w.TrackDel}get type(){return this.startSide!=this.endSide?Xt.WidgetRange:this.startSide<=0?Xt.WidgetBefore:Xt.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof Kt&&((t=this.widget)==(i=e.widget)||!!(t&&i&&t.compare(i)))&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide;var t,i}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}function Jt(e,t=!1){let{inclusiveStart:i,inclusiveEnd:n}=e;return null==i&&(i=e.inclusive),null==n&&(n=e.inclusive),{start:null!=i?i:t,end:null!=n?n:t}}function ei(e,t,i,n=0){let s=i.length-1;s>=0&&i[s]+n>=e?i[s]=Math.max(i[s],t):i.push(e,t)}Kt.prototype.point=!0;class ti{constructor(e,t,i,n){this.doc=e,this.pos=t,this.end=i,this.disallowBlockEffectsFor=n,this.content=[],this.curLine=null,this.breakAtStart=0,this.pendingBuffer=0,this.bufferMarks=[],this.atCursorPos=!0,this.openStart=-1,this.openEnd=-1,this.text="",this.textOff=0,this.cursor=e.iter(),this.skip=t}posCovered(){if(0==this.content.length)return!this.breakAtStart&&this.doc.lineAt(this.pos).from!=this.pos;let e=this.content[this.content.length-1];return!(e.breakAfter||e instanceof Ft&&e.deco.endSide<0)}getLine(){return this.curLine||(this.content.push(this.curLine=new Ut),this.atCursorPos=!0),this.curLine}flushBuffer(e=this.bufferMarks){this.pendingBuffer&&(this.curLine.append(ii(new Lt(-1),e),e.length),this.pendingBuffer=0)}addBlockWidget(e){this.flushBuffer(),this.curLine=null,this.content.push(e)}finish(e){this.pendingBuffer&&e<=this.bufferMarks.length?this.flushBuffer():this.pendingBuffer=0,this.posCovered()||e&&this.content.length&&this.content[this.content.length-1]instanceof Ft||this.getLine()}buildText(e,t,i){for(;e>0;){if(this.textOff==this.text.length){let{value:t,lineBreak:i,done:n}=this.cursor.next(this.skip);if(this.skip=0,n)throw new Error("Ran out of text content when drawing inline views");if(i){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer(),this.curLine=null,this.atCursorPos=!0,e--;continue}this.text=t,this.textOff=0}let n=Math.min(this.text.length-this.textOff,e,512);this.flushBuffer(t.slice(t.length-i)),this.getLine().append(ii(new Dt(this.text.slice(this.textOff,this.textOff+n)),t),i),this.atCursorPos=!0,this.textOff+=n,e-=n,i=0}}span(e,t,i,n){this.buildText(t-e,i,n),this.pos=t,this.openStart<0&&(this.openStart=n)}point(e,t,i,n,s,r){if(this.disallowBlockEffectsFor[r]&&i instanceof Kt){if(i.block)throw new RangeError("Block decorations may not be specified via plugins");if(t>this.doc.lineAt(this.pos).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}let o=t-e;if(i instanceof Kt)if(i.block)i.startSide>0&&!this.posCovered()&&this.getLine(),this.addBlockWidget(new Ft(i.widget||new ni("div"),o,i));else{let r=qt.create(i.widget||new ni("span"),o,o?0:i.startSide),a=this.atCursorPos&&!r.isEditable&&s<=n.length&&(e0),l=!r.isEditable&&(en.length||i.startSide<=0),h=this.getLine();2!=this.pendingBuffer||a||r.isEditable||(this.pendingBuffer=0),this.flushBuffer(n),a&&(h.append(ii(new Lt(1),n),s),s=n.length+Math.max(0,s-n.length)),h.append(ii(r,n),s),this.atCursorPos=l,this.pendingBuffer=l?en.length?1:2:0,this.pendingBuffer&&(this.bufferMarks=n.slice())}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(i);o&&(this.textOff+o<=this.text.length?this.textOff+=o:(this.skip+=o-(this.text.length-this.textOff),this.text="",this.textOff=0),this.pos=t),this.openStart<0&&(this.openStart=s)}static build(e,t,i,n,s){let r=new ti(e,t,i,s);return r.openEnd=Se.spans(n,t,i,r),r.openStart<0&&(r.openStart=r.openEnd),r.finish(r.openEnd),r}}function ii(e,t){for(let i of t)e=new It(i,[e],e.length);return e}class ni extends Ht{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}const si=q.define(),ri=q.define(),oi=q.define(),ai=q.define(),li=q.define(),hi=q.define(),ci=q.define(),di=q.define({combine:e=>e.some((e=>e))}),ui=q.define({combine:e=>e.some((e=>e))});class pi{constructor(e,t="nearest",i="nearest",n=5,s=5){this.range=e,this.y=t,this.x=i,this.yMargin=n,this.xMargin=s}map(e){return e.empty?this:new pi(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin)}}const fi=ae.define({map:(e,t)=>e.map(t)});function mi(e,t,i){let n=e.facet(ai);n.length?n[0](t):window.onerror?window.onerror(String(t),i,void 0,void 0,t):i?console.error(i+":",t):console.error(t)}const gi=q.define({combine:e=>!e.length||e[0]});let vi=0;const Oi=q.define();class bi{constructor(e,t,i,n,s){this.id=e,this.create=t,this.domEventHandlers=i,this.domEventObservers=n,this.extension=s(this)}static define(e,t){const{eventHandlers:i,eventObservers:n,provide:s,decorations:r}=t||{};return new bi(vi++,e,i,n,(e=>{let t=[Oi.of(e)];return r&&t.push(xi.of((t=>{let i=t.plugin(e);return i?r(i):Yt.none}))),s&&t.push(s(e)),t}))}static fromClass(e,t){return bi.define((t=>new e(t)),t)}}class _i{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}update(e){if(this.value){if(this.mustUpdate){let e=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(e)}catch(t){if(mi(e.state,t,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch(e){}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.create(e)}catch(t){mi(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(null===(t=this.value)||void 0===t?void 0:t.destroy)try{this.value.destroy()}catch(t){mi(e.state,t,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const yi=q.define(),wi=q.define(),xi=q.define(),Si=q.define(),ki=q.define();function Ti(e,t,i){let n=e.state.facet(ki);if(!n.length)return n;let s=n.map((t=>t instanceof Function?t(e):t)),r=[];return Se.spans(s,t,i,{point(){},span(e,t,i,n){let s=r;for(let r=i.length-1;r>=0;r--,n--){let o,a=i[r].spec.bidiIsolate;if(null!=a)if(n>0&&s.length&&(o=s[s.length-1]).to==e&&o.direction==a)o.to=t,s=o.inner;else{let i={from:e,to:t,direction:a,inner:[]};s.push(i),s=i.inner}}}}),r}const Ci=q.define();function Pi(e){let t=0,i=0,n=0,s=0;for(let r of e.state.facet(Ci)){let o=r(e);o&&(null!=o.left&&(t=Math.max(t,o.left)),null!=o.right&&(i=Math.max(i,o.right)),null!=o.top&&(n=Math.max(n,o.top)),null!=o.bottom&&(s=Math.max(s,o.bottom)))}return{left:t,right:i,top:n,bottom:s}}const Mi=q.define();class Ei{constructor(e,t,i,n){this.fromA=e,this.toA=t,this.fromB=i,this.toB=n}join(e){return new Ei(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let n=e[t-1];if(!(n.fromA>i.toA)){if(n.toAh)break;s+=2}if(!a)return i;new Ei(a.fromA,a.toA,a.fromB,a.toB).addToSet(i),r=a.toA,o=a.toB}}}class Ai{constructor(e,t,i){this.view=e,this.state=t,this.transactions=i,this.flags=0,this.startState=e.state,this.changes=S.empty(this.startState.doc.length);for(let e of i)this.changes=this.changes.compose(e.changes);let n=[];this.changes.iterChangedRanges(((e,t,i,s)=>n.push(new Ei(e,t,i,s)))),this.changedRanges=n}static create(e,t,i){return new Ai(e,t,i)}get viewportChanged(){return(4&this.flags)>0}get heightChanged(){return(2&this.flags)>0}get geometryChanged(){return this.docChanged||(10&this.flags)>0}get focusChanged(){return(1&this.flags)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some((e=>e.selection))}get empty(){return 0==this.flags&&0==this.transactions.length}}var Ri=function(e){return e[e.LTR=0]="LTR",e[e.RTL=1]="RTL",e}(Ri||(Ri={}));const Di=Ri.LTR,Ii=Ri.RTL;function qi(e){let t=[];for(let i=0;i=t){if(o.level==i)return r;(s<0||(0!=n?n<0?o.fromt:e[s].level>o.level))&&(s=r)}}if(s<0)throw new RangeError("Index out of range");return s}}function ji(e,t){if(e.length!=t.length)return!1;for(let i=0;il&&o.push(new zi(l,f.from,u)),Ui(e,f.direction==Di!=!(u%2)?n+1:n,s,f.inner,f.from,f.to,o),l=f.to),p=f.to}else{if(p==i||(t?Wi[p]!=a:Wi[p]==a))break;p++}d?Vi(e,l,p,n+1,s,d,o):lt;){let i=!0,c=!1;if(!h||l>r[h-1].to){let e=Wi[l-1];e!=a&&(i=!1,c=16==e)}let d=i||1!=a?null:[],u=i?n:n+1,p=l;e:for(;;)if(h&&p==r[h-1].to){if(c)break e;let f=r[--h];if(!i)for(let e=f.from,i=h;;){if(e==t)break e;if(!i||r[i-1].to!=e){if(Wi[e-1]==a)break e;break}e=r[--i].from}d?d.push(f):(f.to=0;e-=3)if($i[e+1]==-i){let t=$i[e+2],i=2&t?s:4&t?1&t?r:s:0;i&&(Wi[o]=Wi[$i[e]]=i),a=e;break}}else{if(189==$i.length)break;$i[a++]=o,$i[a++]=t,$i[a++]=l}else if(2==(n=Wi[o])||1==n){let e=n==s;l=e?0:1;for(let t=a-3;t>=0;t-=3){let i=$i[t+2];if(2&i)break;if(e)$i[t+2]|=2;else{if(4&i)break;$i[t+2]|=4}}}}}(e,s,r,n,a),function(e,t,i,n){for(let s=0,r=n;s<=i.length;s++){let o=s?i[s-1].to:e,a=sl;)t==r&&(t=i[--n].from,r=n?i[n-1].to:e),Wi[--t]=c;l=o}else r=o,l++}}}(s,r,n,a),Vi(e,s,r,t,i,n,o)}function Fi(e){return[new zi(0,e,0)]}let Hi="";function Xi(e,t,i,n,s){var r;let o=n.head-e.from,a=-1;if(0==o){if(!s||!e.length)return null;t[0].level!=i&&(o=t[0].side(!1,i),a=0)}else if(o==e.length){if(s)return null;let e=t[t.length-1];e.level!=i&&(o=e.side(!0,i),a=t.length-1)}a<0&&(a=zi.find(t,o,null!==(r=n.bidiLevel)&&void 0!==r?r:-1,n.assoc));let l=t[a];o==l.side(s,i)&&(l=t[a+=s?1:-1],o=l.side(!s,i));let h=s==(l.dir==i),c=p(e.text,o,h);if(Hi=e.text.slice(Math.min(o,c),Math.max(o,c)),c!=l.side(s,i))return R.cursor(c+e.from,h?-1:1,l.level);let d=a==(s?t.length-1:0)?null:t[a+(s?1:-1)];return d||l.level==i?d&&d.level0&&i.length&&(i.every((({fromA:e,toA:t})=>tthis.minWidthTo))?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0);let n=-1;this.view.inputState.composing>=0&&((null===(t=this.domChanged)||void 0===t?void 0:t.newSel)?n=this.domChanged.newSel.head:function(e,t){let i=!1;return t&&e.iterChangedRanges(((e,n)=>{et.from&&(i=!0)})),i}(e.changes,this.hasComposition)||e.selectionSet||(n=e.state.selection.main.head));let s=n>-1?function(e,t,i){let n=Zi(e,i);if(!n)return null;let{node:s,from:r,to:o}=n,a=s.nodeValue;if(/[\n\r]/.test(a))return null;if(e.state.doc.sliceString(n.from,n.to)!=a)return null;let l=t.invertedDesc,h=new Ei(l.mapPos(r),l.mapPos(o),r,o),c=[];for(let t=s.parentNode;;t=t.parentNode){let i=gt.get(t);if(i instanceof It)c.push({node:t,deco:i.mark});else{if(i instanceof Ut||"DIV"==t.nodeName&&t.parentNode==e.contentDOM)return{range:h,text:s,marks:c,line:t};if(t==e.contentDOM)return null;c.push({node:t,deco:new Gt({inclusive:!0,attributes:Vt(t),tagName:t.tagName.toLowerCase()})})}}}(this.view,e.changes,n):null;if(this.domChanged=null,this.hasComposition){this.markedForComposition.clear();let{from:t,to:n}=this.hasComposition;i=new Ei(t,n,e.changes.mapPos(t,-1),e.changes.mapPos(n,1)).addToSet(i.slice())}this.hasComposition=s?{from:s.range.fromB,to:s.range.toB}:null,(Rt.ie||Rt.chrome)&&!s&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let r=function(e,t,i){let n=new Ji;return Se.compare(e,t,i,n),n.changes}(this.decorations,this.updateDeco(),e.changes);return i=Ei.extendWithRanges(i,r),!!(7&this.flags||0!=i.length)&&(this.updateInner(i,e.startState.doc.length,s),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t,i){this.view.viewState.mustMeasureContent=!0,this.updateChildren(e,t,i);let{observer:n}=this.view;n.ignore((()=>{this.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let e=Rt.chrome||Rt.ios?{node:n.selectionRange.focusNode,written:!1}:void 0;this.sync(this.view,e),this.flags&=-8,e&&(e.written||n.selectionRange.focusNode!=e.node)&&(this.forceSelection=!0),this.dom.style.height=""})),this.markedForComposition.forEach((e=>e.flags&=-9));let s=[];if(this.view.viewport.from||this.view.viewport.to=0?n[e]:null;if(!t)break;let r,o,a,l,{fromA:h,toA:c,fromB:d,toB:u}=t;if(i&&i.range.fromBd){let e=ti.build(this.view.state.doc,d,i.range.fromB,this.decorations,this.dynamicDecorationMap),t=ti.build(this.view.state.doc,i.range.toB,u,this.decorations,this.dynamicDecorationMap);o=e.breakAtStart,a=e.openStart,l=t.openEnd;let n=this.compositionView(i);t.breakAtStart?n.breakAfter=1:t.content.length&&n.merge(n.length,n.length,t.content[0],!1,t.openStart,0)&&(n.breakAfter=t.content[0].breakAfter,t.content.shift()),e.content.length&&n.merge(0,0,e.content[e.content.length-1],!0,0,e.openEnd)&&e.content.pop(),r=e.content.concat(n).concat(t.content)}else({content:r,breakAtStart:o,openStart:a,openEnd:l}=ti.build(this.view.state.doc,d,u,this.decorations,this.dynamicDecorationMap));let{i:p,off:f}=s.findPos(c,1),{i:m,off:g}=s.findPos(h,-1);bt(this,m,g,p,f,r,o,a,l)}i&&this.fixCompositionDOM(i)}compositionView(e){let t=new Dt(e.text.nodeValue);t.flags|=8;for(let{deco:i}of e.marks)t=new It(i,[t],t.length);let i=new Ut;return i.append(t,0),i}fixCompositionDOM(e){let t=(e,t)=>{t.flags|=8|(t.children.some((e=>7&e.flags))?1:0),this.markedForComposition.add(t);let i=gt.get(e);i&&i!=t&&(i.dom=null),t.setDOM(e)},i=this.childPos(e.range.fromB,1),n=this.children[i.i];t(e.line,n);for(let s=e.marks.length-1;s>=-1;s--)i=n.childPos(i.off,1),n=n.children[i.i],t(s>=0?e.marks[s].node:e.text,n)}updateSelection(e=!1,t=!1){!e&&this.view.observer.selectionRange.focusNode||this.view.observer.readSelectionRange();let i=this.view.root.activeElement,n=i==this.dom,s=!n&&Ke(this.dom,this.view.observer.selectionRange)&&!(i&&this.dom.contains(i));if(!(n||t||s))return;let r=this.forceSelection;this.forceSelection=!1;let o=this.view.state.selection.main,a=this.moveToLine(this.domAtPos(o.anchor)),l=o.empty?a:this.moveToLine(this.domAtPos(o.head));if(Rt.gecko&&o.empty&&!this.hasComposition&&1==(h=a).node.nodeType&&h.node.firstChild&&(0==h.offset||"false"==h.node.childNodes[h.offset-1].contentEditable)&&(h.offset==h.node.childNodes.length||"false"==h.node.childNodes[h.offset].contentEditable)){let e=document.createTextNode("");this.view.observer.ignore((()=>a.node.insertBefore(e,a.node.childNodes[a.offset]||null))),a=l=new ft(e,0),r=!0}var h;let c=this.view.observer.selectionRange;!r&&c.focusNode&&et(a.node,a.offset,c.anchorNode,c.anchorOffset)&&et(l.node,l.offset,c.focusNode,c.focusOffset)||(this.view.observer.ignore((()=>{Rt.android&&Rt.chrome&&this.dom.contains(c.focusNode)&&function(e,t){for(let i=e;i&&i!=t;i=i.assignedSlot||i.parentNode)if(1==i.nodeType&&"false"==i.contentEditable)return!0;return!1}(c.focusNode,this.dom)&&(this.dom.blur(),this.dom.focus({preventScroll:!0}));let e=Ge(this.view.root);if(e)if(o.empty){if(Rt.gecko){let e=(t=a.node,n=a.offset,1!=t.nodeType?0:(n&&"false"==t.childNodes[n-1].contentEditable?1:0)|(no.head&&([a,l]=[l,a]),t.setEnd(l.node,l.offset),t.setStart(a.node,a.offset),e.removeAllRanges(),e.addRange(t)}var t,n;s&&this.view.root.activeElement==this.dom&&(this.dom.blur(),i&&i.focus())})),this.view.observer.setSelectionRange(a,l)),this.impreciseAnchor=a.precise?null:new ft(c.anchorNode,c.anchorOffset),this.impreciseHead=l.precise?null:new ft(c.focusNode,c.focusOffset)}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=Ge(e.root),{anchorNode:n,anchorOffset:s}=e.observer.selectionRange;if(!(i&&t.empty&&t.assoc&&i.modify))return;let r=Ut.find(this,t.head);if(!r)return;let o=r.posAtStart;if(t.head==o||t.head==o+r.length)return;let a=this.coordsAt(t.head,-1),l=this.coordsAt(t.head,1);if(!a||!l||a.bottom>l.top)return;let h=this.domAtPos(t.head+t.assoc);i.collapse(h.node,h.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let c=e.observer.selectionRange;e.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=t.from&&i.collapse(n,s)}moveToLine(e){let t,i=this.dom;if(e.node!=i)return e;for(let n=e.offset;!t&&n=0;n--){let e=gt.get(i.childNodes[n]);e instanceof Ut&&(t=e.domAtPos(e.length))}return t?new ft(t.node,t.offset,!0):e}nearest(e){for(let t=e;t;){let e=gt.get(t);if(e&&e.rootView==this)return e;t=t.parentNode}return null}posFromDOM(e,t){let i=this.nearest(e);if(!i)throw new RangeError("Trying to find position for a DOM position outside of the document");return i.localPosFromDOM(e,t)+i.posAtStart}domAtPos(e){let{i:t,off:i}=this.childCursor().findPos(e,-1);for(;t=0;r--){let o=this.children[r],a=s-o.breakAfter,l=a-o.length;if(ae||o.covers(1))&&(!i||o instanceof Ut&&!(i instanceof Ut&&t>=0))&&(i=o,n=l),s=l}return i?i.coordsAt(e-n,t):null}coordsForChar(e){let{i:t,off:i}=this.childPos(e,1),n=this.children[t];if(!(n instanceof Ut))return null;for(;n.children.length;){let{i:e,off:t}=n.childPos(i,1);for(;;e++){if(e==n.children.length)return null;if((n=n.children[e]).length)break}i=t}if(!(n instanceof Dt))return null;let s=p(n.text,i);if(s==i)return null;let r=ct(n.dom,i,s).getClientRects();for(let e=0;eMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,o=-1,a=this.view.textDirection==Ri.LTR;for(let e=0,l=0;ln)break;if(e>=i){let i=h.dom.getBoundingClientRect();if(t.push(i.height),r){let t=h.dom.lastChild,n=t?Je(t):[];if(n.length){let t=n[n.length-1],r=a?t.right-i.left:i.right-t.left;r>o&&(o=r,this.minWidth=s,this.minWidthFrom=e,this.minWidthTo=c)}}}e=c+h.breakAfter}return t}textDirectionAt(e){let{i:t}=this.childPos(e,1);return"rtl"==getComputedStyle(this.children[t].dom).direction?Ri.RTL:Ri.LTR}measureTextSize(){for(let e of this.children)if(e instanceof Ut){let t=e.measureTextSize();if(t)return t}let e,t,i,n=document.createElement("div");return n.className="cm-line",n.style.width="99999px",n.style.position="absolute",n.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore((()=>{this.dom.appendChild(n);let s=Je(n.firstChild)[0];e=n.getBoundingClientRect().height,t=s?s.width/27:7,i=s?s.height:e,n.remove()})),{lineHeight:e,charWidth:t,textHeight:i}}childCursor(e=this.length){let t=this.children.length;return t&&(e-=this.children[--t].length),new Ot(this.children,e,t)}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,n=0;;n++){let s=n==t.viewports.length?null:t.viewports[n],r=s?s.from-1:this.length;if(r>i){let n=(t.lineBlockAt(r).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(Yt.replace({widget:new Gi(n),block:!0,inclusive:!0,isBlockGap:!0}).range(i,r))}if(!s)break;i=s.to+1}return Yt.set(e)}updateDeco(){let e=this.view.state.facet(xi).map(((e,t)=>(this.dynamicDecorationMap[t]="function"==typeof e)?e(this.view):e));for(let t=e.length;ti.anchor?-1:1);if(!n)return;!i.empty&&(t=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(n={left:Math.min(n.left,t.left),top:Math.min(n.top,t.top),right:Math.max(n.right,t.right),bottom:Math.max(n.bottom,t.bottom)});let s=Pi(this.view),r={left:n.left-s.left,top:n.top-s.top,right:n.right+s.right,bottom:n.bottom+s.bottom};!function(e,t,i,n,s,r,o,a){let l=e.ownerDocument,h=l.defaultView||window;for(let c=e,d=!1;c&&!d;)if(1==c.nodeType){let e,u=c==l.body,p=1,f=1;if(u)e=rt(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(d=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let t=c.getBoundingClientRect();p=t.width/c.offsetWidth,f=t.height/c.offsetHeight,e={left:t.left,right:t.left+c.clientWidth*p,top:t.top,bottom:t.top+c.clientHeight*f}}let m=0,g=0;if("nearest"==s)t.top0&&t.bottom>e.bottom+g&&(g=t.bottom-e.bottom+g+o)):t.bottom>e.bottom&&(g=t.bottom-e.bottom+o,i<0&&t.top-g0&&t.right>e.right+m&&(m=t.right-e.right+m+r)):t.right>e.right&&(m=t.right-e.right+r,i<0&&t.left0))break;i=i.childNodes[n-1],n=nt(i)}if(i>=0)for(let n=e,s=t;;){if(3==n.nodeType)return{node:n,offset:s};if(!(1==n.nodeType&&s=0))break;n=n.childNodes[s],s=0}return null}let Ji=class{constructor(){this.changes=[]}compareRange(e,t){ei(e,t,this.changes)}comparePoint(e,t){ei(e,t,this.changes)}};function en(e,t){return t.left>e?t.left-e:Math.max(0,e-t.right)}function tn(e,t){return t.top>e?t.top-e:Math.max(0,e-t.bottom)}function nn(e,t){return e.topt.top+1}function sn(e,t){return te.bottom?{top:e.top,left:e.left,right:e.right,bottom:t}:e}function on(e,t,i){let n,s,r,o,a,l,h,c,d=!1;for(let u=e.firstChild;u;u=u.nextSibling){let e=Je(u);for(let p=0;pg||o==g&&r>m){n=u,s=f,r=m,o=g;let a=g?i0?p0)}0==m?i>f.bottom&&(!h||h.bottomf.top)&&(l=u,c=f):h&&nn(h,f)?h=rn(h,f.bottom):c&&nn(c,f)&&(c=sn(c,f.top))}}if(h&&h.bottom>=i?(n=a,s=h):c&&c.top<=i&&(n=l,s=c),!n)return{node:e,offset:0};let u=Math.max(s.left,Math.min(s.right,t));return 3==n.nodeType?an(n,u,i):d&&"false"!=n.contentEditable?on(n,u,i):{node:e,offset:Array.prototype.indexOf.call(e.childNodes,n)+(t>=(s.left+s.right)/2?1:0)}}function an(e,t,i){let n=e.nodeValue.length,s=-1,r=1e9,o=0;for(let a=0;ai?h.top-i:i-h.bottom)-1;if(h.left-1<=t&&h.right+1>=t&&c=(h.left+h.right)/2,n=i;if((Rt.chrome||Rt.gecko)&&ct(e,a).getBoundingClientRect().left==h.right&&(n=!i),c<=0)return{node:e,offset:a+(n?1:0)};s=a+(n?1:0),r=c}}}return{node:e,offset:s>-1?s:o>0?e.nodeValue.length:0}}function ln(e,t,i,n=-1){var s,r;let o,a=e.contentDOM.getBoundingClientRect(),l=a.top+e.viewState.paddingTop,{docHeight:h}=e.viewState,{x:c,y:d}=t,u=d-l;if(u<0)return 0;if(u>h)return e.state.doc.length;for(let t=e.viewState.heightOracle.textHeight/2,s=!1;o=e.elementAtHeight(u),o.type!=Xt.Text;)for(;u=n>0?o.bottom+t:o.top-t,!(u>=0&&u<=h);){if(s)return i?null:0;s=!0,n=-n}d=l+u;let p=o.from;if(pe.viewport.to)return e.viewport.to==e.state.doc.length?e.state.doc.length:i?null:hn(e,a,o,c,d);let f=e.dom.ownerDocument,m=e.root.elementFromPoint?e.root:f,g=m.elementFromPoint(c,d);g&&!e.contentDOM.contains(g)&&(g=null),g||(c=Math.max(a.left+1,Math.min(a.right-1,c)),g=m.elementFromPoint(c,d),g&&!e.contentDOM.contains(g)&&(g=null));let v,O=-1;if(g&&0!=(null===(s=e.docView.nearest(g))||void 0===s?void 0:s.isEditable))if(f.caretPositionFromPoint){let e=f.caretPositionFromPoint(c,d);e&&({offsetNode:v,offset:O}=e)}else if(f.caretRangeFromPoint){let t=f.caretRangeFromPoint(c,d);t&&(({startContainer:v,startOffset:O}=t),(!e.contentDOM.contains(v)||Rt.safari&&function(e,t,i){let n;if(3!=e.nodeType||t!=(n=e.nodeValue.length))return!1;for(let t=e.nextSibling;t;t=t.nextSibling)if(1!=t.nodeType||"BR"!=t.nodeName)return!1;return ct(e,n-1,n).getBoundingClientRect().left>i}(v,O,c)||Rt.chrome&&function(e,t,i){if(0!=t)return!1;for(let t=e;;){let e=t.parentNode;if(!e||1!=e.nodeType||e.firstChild!=t)return!1;if(e.classList.contains("cm-line"))break;t=e}return i-(1==e.nodeType?e.getBoundingClientRect():ct(e,0,Math.max(e.nodeValue.length,1)).getBoundingClientRect()).left>5}(v,O,c))&&(v=void 0))}if(!v||!e.docView.dom.contains(v)){let t=Ut.find(e.docView,p);if(!t)return u>o.top+o.height/2?o.to:o.from;({node:v,offset:O}=on(t.dom,c,d))}let b=e.docView.nearest(v);if(!b)return null;if(b.isWidget&&1==(null===(r=b.dom)||void 0===r?void 0:r.nodeType)){let e=b.dom.getBoundingClientRect();return t.y1.5*e.defaultLineHeight){let t=e.viewState.heightOracle.textHeight;r+=Math.floor((s-i.top-.5*(e.defaultLineHeight-t))/t)*e.viewState.heightOracle.lineLength}let o=e.state.sliceDoc(i.from,i.to);return i.from+Ne(o,r,e.state.tabSize)}function cn(e,t){let i=e.lineBlockAt(t);if(Array.isArray(i.type))for(let e of i.type)if(e.to>t||e.to==t&&(e.to==i.to||e.type==Xt.Text))return e;return i}function dn(e,t,i,n){let s=e.state.doc.lineAt(t.head),r=e.bidiSpans(s),o=e.textDirectionAt(s.from);for(let a=t,l=null;;){let t=Xi(s,r,o,a,i),h=Hi;if(!t){if(s.number==(i?e.state.doc.lines:1))return a;h="\n",s=e.state.doc.line(s.number+(i?1:-1)),r=e.bidiSpans(s),t=R.cursor(i?s.from:s.to)}if(l){if(!l(h))return a}else{if(!n)return t;l=n(h)}a=t}}function un(e,t,i){for(;;){let n=0;for(let s of e)s.between(t-1,t+1,((e,s,r)=>{if(t>e&&tt(e))),i.from,t.head>i.from?-1:1);return n==i.from?i:R.cursor(n,nnull)),Rt.gecko&&function(e){zn.has(e)||(zn.add(e),e.addEventListener("copy",(()=>{})),e.addEventListener("cut",(()=>{})))}(e.contentDOM.ownerDocument)}handleEvent(e){(function(e,t){if(!t.bubbles)return!0;if(t.defaultPrevented)return!1;for(let i,n=t.target;n!=e.contentDOM;n=n.parentNode)if(!n||11==n.nodeType||(i=gt.get(n))&&i.ignoreEvent(t))return!1;return!0})(this.view,e)&&!this.ignoreDuringComposition(e)&&("keydown"==e.type&&this.keydown(e)||this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let e of i.observers)e(this.view,t);for(let e of i.handlers){if(t.defaultPrevented)break;if(e(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=gn(e),i=this.handlers,n=this.view.contentDOM;for(let e in t)if("scroll"!=e){let s=!t[e].handlers.length,r=i[e];r&&s!=!r.handlers.length&&(n.removeEventListener(e,this.handleEvent),r=null),r||n.addEventListener(e,this.handleEvent,{passive:s})}for(let e in i)"scroll"==e||t[e]||n.removeEventListener(e,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),9==e.keyCode&&Date.now()t.keyCode==e.keyCode)))&&!e.ctrlKey||On.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(229!=e.keyCode&&this.view.observer.forceFlush(),!1):(this.pendingIOSKey=t||e,setTimeout((()=>this.flushIOSKey()),250),!0)}flushIOSKey(){let e=this.pendingIOSKey;return!!e&&(this.pendingIOSKey=void 0,dt(this.view.contentDOM,e.key,e.keyCode))}ignoreDuringComposition(e){return!!/^key/.test(e.type)&&(this.composing>0||!!(Rt.safari&&!Rt.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100)&&(this.compositionPendingKey=!1,!0))}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.mouseSelection&&this.mouseSelection.update(e),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function mn(e,t){return(i,n)=>{try{return t.call(e,n,i)}catch(e){mi(i.state,e)}}}function gn(e){let t=Object.create(null);function i(e){return t[e]||(t[e]={observers:[],handlers:[]})}for(let t of e){let e=t.spec;if(e&&e.domEventHandlers)for(let n in e.domEventHandlers){let s=e.domEventHandlers[n];s&&i(n).handlers.push(mn(t.value,s))}if(e&&e.domEventObservers)for(let n in e.domEventObservers){let s=e.domEventObservers[n];s&&i(n).observers.push(mn(t.value,s))}}for(let e in wn)i(e).handlers.push(wn[e]);for(let e in xn)i(e).observers.push(xn[e]);return t}const vn=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],On="dthko",bn=[16,17,18,20,91,92,224,225];function _n(e){return.7*Math.max(0,e)+8}class yn{constructor(e,t,i,n){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=n,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParent=function(e){let t=e.ownerDocument;for(let i=e.parentNode;i&&i!=t.body;)if(1==i.nodeType){if(i.scrollHeight>i.clientHeight||i.scrollWidth>i.clientWidth)return i;i=i.assignedSlot||i.parentNode}else{if(11!=i.nodeType)break;i=i.host}return null}(e.contentDOM),this.atoms=e.state.facet(Si).map((t=>t(e)));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(Oe.allowMultipleSelections)&&function(e,t){let i=e.state.facet(si);return i.length?i[0](t):Rt.mac?t.metaKey:t.ctrlKey}(e,t),this.dragging=!(!function(e,t){let{main:i}=e.state.selection;if(i.empty)return!1;let n=Ge(e.root);if(!n||0==n.rangeCount)return!0;let s=n.getRangeAt(0).getClientRects();for(let e=0;e=t.clientX&&i.top<=t.clientY&&i.bottom>=t.clientY)return!0}return!1}(e,t)||1!=qn(t))&&null}start(e){!1===this.dragging&&this.select(e)}move(e){var t,i,n;if(0==e.buttons)return this.destroy();if(this.dragging||null==this.dragging&&(i=this.startEvent,n=e,Math.max(Math.abs(i.clientX-n.clientX),Math.abs(i.clientY-n.clientY))<10))return;this.select(this.lastEvent=e);let s=0,r=0,o=(null===(t=this.scrollParent)||void 0===t?void 0:t.getBoundingClientRect())||{left:0,top:0,right:this.view.win.innerWidth,bottom:this.view.win.innerHeight},a=Pi(this.view);e.clientX-a.left<=o.left+6?s=-_n(o.left-e.clientX):e.clientX+a.right>=o.right-6&&(s=_n(e.clientX-o.right)),e.clientY-a.top<=o.top+6?r=-_n(o.top-e.clientY):e.clientY+a.bottom>=o.bottom-6&&(r=_n(e.clientY-o.bottom)),this.setScrollSpeed(s,r)}up(e){null==this.dragging&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval((()=>this.scroll()),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){this.scrollParent?(this.scrollParent.scrollLeft+=this.scrollSpeed.x,this.scrollParent.scrollTop+=this.scrollSpeed.y):this.view.win.scrollBy(this.scrollSpeed.x,this.scrollSpeed.y),!1===this.dragging&&this.select(this.lastEvent)}skipAtoms(e){let t=null;for(let i=0;ithis.select(this.lastEvent)),20)}}const wn=Object.create(null),xn=Object.create(null),Sn=Rt.ie&&Rt.ie_version<15||Rt.ios&&Rt.webkit_version<604;function kn(e,t){let i,{state:n}=e,s=1,r=n.toText(t),o=r.lines==n.selection.ranges.length;if(null!=Nn&&n.selection.ranges.every((e=>e.empty))&&Nn==r.toString()){let e=-1;i=n.changeByRange((i=>{let a=n.doc.lineAt(i.from);if(a.from==e)return{range:i};e=a.from;let l=n.toText((o?r.line(s++).text:t)+n.lineBreak);return{changes:{from:a.from,insert:l},range:R.cursor(i.from+l.length)}}))}else i=o?n.changeByRange((e=>{let t=r.line(s++);return{changes:{from:e.from,to:e.to,insert:t.text},range:R.cursor(e.from+t.length)}})):n.replaceSelection(r);e.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}function Tn(e,t,i,n){if(1==n)return R.cursor(t,i);if(2==n)return function(e,t,i=1){let n=e.charCategorizer(t),s=e.doc.lineAt(t),r=t-s.from;if(0==s.length)return R.cursor(t);0==r?i=1:r==s.length&&(i=-1);let o=r,a=r;i<0?o=p(s.text,r,!1):a=p(s.text,r);let l=n(s.text.slice(o,a));for(;o>0;){let e=p(s.text,o,!1);if(n(s.text.slice(e,o))!=l)break;o=e}for(;a{e.inputState.lastScrollTop=e.scrollDOM.scrollTop,e.inputState.lastScrollLeft=e.scrollDOM.scrollLeft},wn.keydown=(e,t)=>(e.inputState.setSelectionOrigin("select"),27==t.keyCode&&(e.inputState.lastEscPress=Date.now()),!1),xn.touchstart=(e,t)=>{e.inputState.lastTouchTime=Date.now(),e.inputState.setSelectionOrigin("select.pointer")},xn.touchmove=e=>{e.inputState.setSelectionOrigin("select.pointer")},wn.mousedown=(e,t)=>{if(e.observer.flush(),e.inputState.lastTouchTime>Date.now()-2e3)return!1;let i=null;for(let n of e.state.facet(oi))if(i=n(e,t),i)break;if(i||0!=t.button||(i=function(e,t){let i=En(e,t),n=qn(t),s=e.state.selection;return{update(e){e.docChanged&&(i.pos=e.changes.mapPos(i.pos),s=s.map(e.changes))},get(t,r,o){let a,l=En(e,t),h=Tn(e,l.pos,l.bias,n);if(i.pos!=l.pos&&!r){let t=Tn(e,i.pos,i.bias,n),s=Math.min(t.from,h.from),r=Math.max(t.to,h.to);h=s1&&(a=function(e,t){for(let i=0;i=t)return R.create(e.ranges.slice(0,i).concat(e.ranges.slice(i+1)),e.mainIndex==i?0:e.mainIndex-(e.mainIndex>i?1:0))}return null}(s,l.pos))?a:o?s.addRange(h):R.create([h])}}}(e,t)),i){let n=!e.hasFocus;e.inputState.startMouseSelection(new yn(e,t,i,n)),n&&e.observer.ignore((()=>ht(e.contentDOM)));let s=e.inputState.mouseSelection;if(s)return s.start(t),!1===s.dragging}return!1};let Cn=(e,t)=>e>=t.top&&e<=t.bottom,Pn=(e,t,i)=>Cn(t,i)&&e>=i.left&&e<=i.right;function Mn(e,t,i,n){let s=Ut.find(e.docView,t);if(!s)return 1;let r=t-s.posAtStart;if(0==r)return 1;if(r==s.length)return-1;let o=s.coordsAt(r,-1);if(o&&Pn(i,n,o))return-1;let a=s.coordsAt(r,1);return a&&Pn(i,n,a)?1:o&&Cn(n,o)?-1:1}function En(e,t){let i=e.posAtCoords({x:t.clientX,y:t.clientY},!1);return{pos:i,bias:Mn(e,i,t.clientX,t.clientY)}}const An=Rt.ie&&Rt.ie_version<=11;let Rn=null,Dn=0,In=0;function qn(e){if(!An)return e.detail;let t=Rn,i=In;return Rn=e,In=Date.now(),Dn=!t||i>Date.now()-400&&Math.abs(t.clientX-e.clientX)<2&&Math.abs(t.clientY-e.clientY)<2?(Dn+1)%3:1}function Ln(e,t,i,n){if(!i)return;let s=e.posAtCoords({x:t.clientX,y:t.clientY},!1),{mouseSelection:r}=e.inputState,o=n&&r&&r.dragging&&function(e,t){let i=e.state.facet(ri);return i.length?i[0](t):Rt.mac?!t.altKey:!t.ctrlKey}(e,t)?{from:r.dragging.from,to:r.dragging.to}:null,a={from:s,insert:i},l=e.state.changes(o?[o,a]:a);e.focus(),e.dispatch({changes:l,selection:{anchor:l.mapPos(s,-1),head:l.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"})}wn.dragstart=(e,t)=>{let{selection:{main:i}}=e.state,{mouseSelection:n}=e.inputState;return n&&(n.dragging=i),t.dataTransfer&&(t.dataTransfer.setData("Text",e.state.sliceDoc(i.from,i.to)),t.dataTransfer.effectAllowed="copyMove"),!1},wn.drop=(e,t)=>{if(!t.dataTransfer)return!1;if(e.state.readOnly)return!0;let i=t.dataTransfer.files;if(i&&i.length){let n=Array(i.length),s=0,r=()=>{++s==i.length&&Ln(e,t,n.filter((e=>null!=e)).join(e.state.lineBreak),!1)};for(let e=0;e{/[\x00-\x08\x0e-\x1f]{2}/.test(t.result)||(n[e]=t.result),r()},t.readAsText(i[e])}return!0}{let i=t.dataTransfer.getData("Text");if(i)return Ln(e,t,i,!0),!0}return!1},wn.paste=(e,t)=>{if(e.state.readOnly)return!0;e.observer.flush();let i=Sn?null:t.clipboardData;return i?(kn(e,i.getData("text/plain")||i.getData("text/uri-text")),!0):(function(e){let t=e.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.focus(),setTimeout((()=>{e.focus(),i.remove(),kn(e,i.value)}),50)}(e),!1)};let Nn=null;wn.copy=wn.cut=(e,t)=>{let{text:i,ranges:n,linewise:s}=function(e){let t=[],i=[],n=!1;for(let n of e.selection.ranges)n.empty||(t.push(e.sliceDoc(n.from,n.to)),i.push(n));if(!t.length){let s=-1;for(let{from:n}of e.selection.ranges){let r=e.doc.lineAt(n);r.number>s&&(t.push(r.text),i.push({from:r.from,to:Math.min(e.doc.length,r.to+1)})),s=r.number}n=!0}return{text:t.join(e.lineBreak),ranges:i,linewise:n}}(e.state);if(!i&&!s)return!1;Nn=s?i:null,"cut"!=t.type||e.state.readOnly||e.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"});let r=Sn?null:t.clipboardData;return r?(r.clearData(),r.setData("text/plain",i),!0):(function(e,t){let i=e.dom.parentNode;if(!i)return;let n=i.appendChild(document.createElement("textarea"));n.style.cssText="position: fixed; left: -10000px; top: 10px",n.value=t,n.focus(),n.selectionEnd=t.length,n.selectionStart=0,setTimeout((()=>{n.remove(),e.focus()}),50)}(e,i),!1)};const Bn=se.define();function $n(e,t){let i=[];for(let n of e.facet(ci)){let s=n(e,t);s&&i.push(s)}return i?e.update({effects:i,annotations:Bn.of(!0)}):null}function Qn(e){setTimeout((()=>{let t=e.hasFocus;if(t!=e.inputState.notifiedFocused){let i=$n(e.state,t);i?e.dispatch(i):e.update([])}}),10)}xn.focus=e=>{e.inputState.lastFocusTime=Date.now(),e.scrollDOM.scrollTop||!e.inputState.lastScrollTop&&!e.inputState.lastScrollLeft||(e.scrollDOM.scrollTop=e.inputState.lastScrollTop,e.scrollDOM.scrollLeft=e.inputState.lastScrollLeft),Qn(e)},xn.blur=e=>{e.observer.clearSelectionRange(),Qn(e)},xn.compositionstart=xn.compositionupdate=e=>{null==e.inputState.compositionFirstChange&&(e.inputState.compositionFirstChange=!0),e.inputState.composing<0&&(e.inputState.composing=0)},xn.compositionend=e=>{e.inputState.composing=-1,e.inputState.compositionEndedAt=Date.now(),e.inputState.compositionPendingKey=!0,e.inputState.compositionPendingChange=e.observer.pendingRecords().length>0,e.inputState.compositionFirstChange=null,Rt.chrome&&Rt.android?e.observer.flushSoon():e.inputState.compositionPendingChange?Promise.resolve().then((()=>e.observer.flush())):setTimeout((()=>{e.inputState.composing<0&&e.docView.hasComposition&&e.update([])}),50)},xn.contextmenu=e=>{e.inputState.lastContextMenu=Date.now()},wn.beforeinput=(e,t)=>{var i;let n;if(Rt.chrome&&Rt.android&&(n=vn.find((e=>e.inputType==t.inputType)))&&(e.observer.delayAndroidKey(n.key,n.keyCode),"Backspace"==n.key||"Delete"==n.key)){let t=(null===(i=window.visualViewport)||void 0===i?void 0:i.height)||0;setTimeout((()=>{var i;((null===(i=window.visualViewport)||void 0===i?void 0:i.height)||0)>t+10&&e.hasFocus&&(e.contentDOM.blur(),e.focus())}),100)}return!1};const zn=new Set,jn=["pre-wrap","normal","pre-line","break-spaces"];class Wn{constructor(t){this.lineWrapping=t,this.doc=e.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30,this.heightChanged=!1}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/(this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return jn.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.round(t)!=Math.round(this.lineHeight)||this.lineWrapping!=o;if(this.lineWrapping=o,this.lineHeight=t,this.charWidth=i,this.textHeight=n,this.lineLength=s,a){this.heightSamples={};for(let e=0;e0}set outdated(e){this.flags=(e?2:0)|-3&this.flags}setHeight(e,t){this.height!=t&&(Math.abs(this.height-t)>Hn&&(e.heightChanged=!0),this.height=t)}replace(e,t,i){return Xn.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,n){let s=this,r=i.doc;for(let o=n.length-1;o>=0;o--){let{fromA:a,toA:l,fromB:h,toB:c}=n[o],d=s.lineAt(a,Fn.ByPosNoHeight,i.setDoc(t),0,0),u=d.to>=l?d:s.lineAt(l,Fn.ByPosNoHeight,i,0,0);for(c+=u.to-l,l=u.to;o>0&&d.from<=n[o-1].toA;)a=n[o-1].fromA,h=n[o-1].fromB,o--,a2*s){let s=e[t-1];s.break?e.splice(--t,1,s.left,null,s.right):e.splice(--t,1,s.left,s.right),i+=1+s.break,n-=s.size}else{if(!(s>2*n))break;{let t=e[i];t.break?e.splice(i,1,t.left,null,t.right):e.splice(i,1,t.left,t.right),i+=2+t.break,s-=t.size}}else if(n=s&&r(this.blockAt(0,i,n,s))}updateHeight(e,t=0,i=!1,n){return n&&n.from<=t&&n.more&&this.setHeight(e,n.heights[n.index++]),this.outdated=!1,this}toString(){return`block(${this.length})`}}class Gn extends Yn{constructor(e,t){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0}blockAt(e,t,i,n){return new Un(n,this.length,i,this.height,this.breaks)}replace(e,t,i){let n=i[0];return 1==i.length&&(n instanceof Gn||n instanceof Zn&&4&n.flags)&&Math.abs(this.length-n.length)<10?(n instanceof Zn?n=new Gn(n.length,this.height):n.height=this.height,this.outdated||(n.outdated=!1),n):Xn.of(i)}updateHeight(e,t=0,i=!1,n){return n&&n.from<=t&&n.more?this.setHeight(e,n.heights[n.index++]):(i||this.outdated)&&this.setHeight(e,Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class Zn extends Xn{constructor(e){super(e,0)}heightMetrics(e,t){let i,n=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-n+1,o=0;if(e.lineWrapping){let t=Math.min(this.height,e.lineHeight*r);i=t/r,this.length>r+1&&(o=(this.height-t)/(this.length-r-1))}else i=this.height/r;return{firstLine:n,lastLine:s,perLine:i,perChar:o}}blockAt(e,t,i,n){let{firstLine:s,lastLine:r,perLine:o,perChar:a}=this.heightMetrics(t,n);if(t.lineWrapping){let s=n+Math.round(Math.max(0,Math.min(1,(e-i)/this.height))*this.length),r=t.doc.lineAt(s),l=o+r.length*a,h=Math.max(i,e-l/2);return new Un(r.from,r.length,h,l,0)}{let n=Math.max(0,Math.min(r-s,Math.floor((e-i)/o))),{from:a,length:l}=t.doc.line(s+n);return new Un(a,l,i+o*n,o,0)}}lineAt(e,t,i,n,s){if(t==Fn.ByHeight)return this.blockAt(e,i,n,s);if(t==Fn.ByPosNoHeight){let{from:t,to:n}=i.doc.lineAt(e);return new Un(t,n-t,0,0,0)}let{firstLine:r,perLine:o,perChar:a}=this.heightMetrics(i,s),l=i.doc.lineAt(e),h=o+l.length*a,c=l.number-r,d=n+o*c+a*(l.from-s-c);return new Un(l.from,l.length,Math.max(n,Math.min(d,n+this.height-h)),h,0)}forEachLine(e,t,i,n,s,r){e=Math.max(e,s),t=Math.min(t,s+this.length);let{firstLine:o,perLine:a,perChar:l}=this.heightMetrics(i,s);for(let h=e,c=n;h<=t;){let t=i.doc.lineAt(h);if(h==e){let i=t.number-o;c+=a*i+l*(e-s-i)}let n=a+l*t.length;r(new Un(t.from,t.length,c,n,0)),c+=n,h=t.to+1}}replace(e,t,i){let n=this.length-t;if(n>0){let e=i[i.length-1];e instanceof Zn?i[i.length-1]=new Zn(e.length+n):i.push(null,new Zn(n-1))}if(e>0){let t=i[0];t instanceof Zn?i[0]=new Zn(e+t.length):i.unshift(new Zn(e-1),null)}return Xn.of(i)}decomposeLeft(e,t){t.push(new Zn(e-1),null)}decomposeRight(e,t){t.push(null,new Zn(this.length-e-1))}updateHeight(e,t=0,i=!1,n){let s=t+this.length;if(n&&n.from<=t+this.length&&n.more){let i=[],r=Math.max(t,n.from),o=-1;for(n.from>t&&i.push(new Zn(n.from-t-1).updateHeight(e,t));r<=s&&n.more;){let t=e.doc.lineAt(r).length;i.length&&i.push(null);let s=n.heights[n.index++];-1==o?o=s:Math.abs(s-o)>=Hn&&(o=-2);let a=new Gn(t,s);a.outdated=!1,i.push(a),r+=t+1}r<=s&&i.push(null,new Zn(s-r).updateHeight(e,r));let a=Xn.of(i);return(o<0||Math.abs(a.height-this.height)>=Hn||Math.abs(o-this.heightMetrics(e,t).perLine)>=Hn)&&(e.heightChanged=!0),a}return(i||this.outdated)&&(this.setHeight(e,e.heightForGap(t,t+this.length)),this.outdated=!1),this}toString(){return`gap(${this.length})`}}class Kn extends Xn{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return 1&this.flags}blockAt(e,t,i,n){let s=i+this.left.height;return eo))return l;let h=t==Fn.ByPosNoHeight?Fn.ByPosNoHeight:Fn.ByPos;return a?l.join(this.right.lineAt(o,h,i,r,o)):this.left.lineAt(o,h,i,n,s).join(l)}forEachLine(e,t,i,n,s,r){let o=n+this.left.height,a=s+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,o,a,r);else{let l=this.lineAt(a,Fn.ByPos,i,n,s);e=e&&l.from<=t&&r(l),t>l.to&&this.right.forEachLine(l.to+1,t,i,o,a,r)}}replace(e,t,i){let n=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-n,t-n,i));let s=[];e>0&&this.decomposeLeft(e,s);let r=s.length;for(let e of i)s.push(e);if(e>0&&Jn(s,r-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,n=i+this.break;if(e>=n)return this.right.decomposeRight(e-n,t);e2*t.size||t.size>2*e.size?Xn.of(this.break?[e,null,t]:[e,t]):(this.left=e,this.right=t,this.height=e.height+t.height,this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,n){let{left:s,right:r}=this,o=t+s.length+this.break,a=null;return n&&n.from<=t+s.length&&n.more?a=s=s.updateHeight(e,t,i,n):s.updateHeight(e,t,i),n&&n.from<=o+r.length&&n.more?a=r=r.updateHeight(e,o,i,n):r.updateHeight(e,o,i),a?this.balanced(s,r):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function Jn(e,t){let i,n;null==e[t]&&(i=e[t-1])instanceof Zn&&(n=e[t+1])instanceof Zn&&e.splice(t-1,3,new Zn(i.length+1+n.length))}class es{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let e=Math.min(t,this.lineEnd),i=this.nodes[this.nodes.length-1];i instanceof Gn?i.length+=e-this.pos:(e>this.pos||!this.isCovered)&&this.nodes.push(new Gn(e-this.pos,-1)),this.writtenTo=e,t>e&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=5)&&this.addLineDeco(n,s,r)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new Gn(this.pos-e,-1)),this.writtenTo=this.pos}blankContent(e,t){let i=new Zn(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof Gn)return e;let t=new Gn(0,-1);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let n=this.ensureLine();n.length+=i,n.collapsed+=i,n.widgetHeight=Math.max(n.widgetHeight,e),n.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=0==this.nodes.length?null:this.nodes[this.nodes.length-1];!(this.lineStart>-1)||t instanceof Gn||this.isCovered?(this.writtenToi.clientHeight||i.scrollWidth>i.clientWidth)&&"visible"!=n.overflow){let n=i.getBoundingClientRect();r=Math.max(r,n.left),o=Math.min(o,n.right),a=Math.max(a,n.top),l=t==e.parentNode?n.bottom:Math.min(l,n.bottom)}t="absolute"==n.position||"fixed"==n.position?i.offsetParent:i.parentNode}else{if(11!=t.nodeType)break;t=t.host}return{left:r-i.left,right:Math.max(r,o)-i.left,top:a-(i.top+t),bottom:Math.max(a,l)-(i.top+t)}}function ns(e,t){let i=e.getBoundingClientRect();return{left:0,right:i.right-i.left,top:t,bottom:i.bottom-(i.top+t)}}class ss{constructor(e,t,i){this.from=e,this.to=t,this.size=i}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;i"function"!=typeof e&&"cm-lineWrapping"==e.class));this.heightOracle=new Wn(i),this.stateDeco=t.facet(xi).filter((e=>"function"!=typeof e)),this.heightMap=Xn.empty().applyChanges(this.stateDeco,e.empty,this.heightOracle.setDoc(t.doc),[new Ei(0,0,0,t.doc.length)]),this.viewport=this.getViewport(0,null),this.updateViewportLines(),this.updateForViewport(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=Yt.set(this.lineGaps.map((e=>e.draw(this,!1)))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let n=i?t.head:t.anchor;if(!e.some((({from:e,to:t})=>n>=e&&n<=t))){let{from:t,to:i}=this.lineBlockAt(n);e.push(new as(t,i))}}this.viewports=e.sort(((e,t)=>e.from-t.from)),this.scaler=this.heightMap.height<=7e6?ds:new us(this.heightOracle,this.heightMap,this.viewports)}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,(e=>{this.viewportLines.push(1==this.scaler.scale?e:ps(e,this.scaler))}))}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=this.state.facet(xi).filter((e=>"function"!=typeof e));let n=e.changedRanges,s=Ei.extendWithRanges(n,function(e,t,i){let n=new ts;return Se.compare(e,t,i,n,0),n.changes}(i,this.stateDeco,e?e.changes:S.empty(this.state.doc.length))),r=this.heightMap.height,o=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),this.heightMap.height!=r&&(e.flags|=2),o?(this.scrollAnchorPos=e.changes.mapPos(o.from,-1),this.scrollAnchorHeight=o.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=this.heightMap.height);let a=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let l=!e.changes.empty||2&e.flags||a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,this.updateForViewport(),l&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(ui)&&(this.mustEnforceCursorAssoc=!0)}measure(t){let i=t.contentDOM,n=window.getComputedStyle(i),s=this.heightOracle,r=n.whiteSpace;this.defaultTextDirection="rtl"==n.direction?Ri.RTL:Ri.LTR;let o=this.heightOracle.mustRefreshForWrapping(r),a=i.getBoundingClientRect(),l=o||this.mustMeasureContent||this.contentDOMHeight!=a.height;this.contentDOMHeight=a.height,this.mustMeasureContent=!1;let h=0,c=0;if(a.width&&a.height){let e=a.width/i.offsetWidth,t=a.height/i.offsetHeight;(e>.995&&e<1.005||!isFinite(e)||Math.abs(a.width-i.offsetWidth)<1)&&(e=1),(t>.995&&t<1.005||!isFinite(t)||Math.abs(a.height-i.offsetHeight)<1)&&(t=1),this.scaleX==e&&this.scaleY==t||(this.scaleX=e,this.scaleY=t,h|=8,o=l=!0)}let d=(parseInt(n.paddingTop)||0)*this.scaleY,u=(parseInt(n.paddingBottom)||0)*this.scaleY;this.paddingTop==d&&this.paddingBottom==u||(this.paddingTop=d,this.paddingBottom=u,h|=10),this.editorWidth!=t.scrollDOM.clientWidth&&(s.lineWrapping&&(l=!0),this.editorWidth=t.scrollDOM.clientWidth,h|=8);let p=t.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=p&&(this.scrollAnchorHeight=-1,this.scrollTop=p),this.scrolledToBottom=pt(t.scrollDOM);let f=(this.printing?ns:is)(i,this.paddingTop),m=f.top-this.pixelViewport.top,g=f.bottom-this.pixelViewport.bottom;this.pixelViewport=f;let v=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(v!=this.inView&&(this.inView=v,v&&(l=!0)),!this.inView&&!this.scrollTarget)return 0;let O=a.width;if(this.contentDOMWidth==O&&this.editorHeight==t.scrollDOM.clientHeight||(this.contentDOMWidth=a.width,this.editorHeight=t.scrollDOM.clientHeight,h|=8),l){let i=t.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(i)&&(o=!0),o||s.lineWrapping&&Math.abs(O-this.contentDOMWidth)>s.charWidth){let{lineHeight:e,charWidth:n,textHeight:a}=t.docView.measureTextSize();o=e>0&&s.refresh(r,e,n,a,O/n,i),o&&(t.docView.minWidth=0,h|=8)}m>0&&g>0?c=Math.max(m,g):m<0&&g<0&&(c=Math.min(m,g)),s.heightChanged=!1;for(let n of this.viewports){let r=n.from==this.viewport.from?i:t.docView.measureVisibleLineHeights(n);this.heightMap=(o?Xn.empty().applyChanges(this.stateDeco,e.empty,this.heightOracle,[new Ei(0,0,0,t.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new Vn(n.from,r))}s.heightChanged&&(h|=2)}let b=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return b&&(this.viewport=this.getViewport(c,this.scrollTarget)),this.updateForViewport(),(2&h||b)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,t)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,t.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),n=this.heightMap,s=this.heightOracle,{visibleTop:r,visibleBottom:o}=this,a=new as(n.lineAt(r-1e3*i,Fn.ByHeight,s,0,0).from,n.lineAt(o+1e3*(1-i),Fn.ByHeight,s,0,0).to);if(t){let{head:e}=t.range;if(ea.to){let i,r=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),o=n.lineAt(e,Fn.ByPos,s,0,0);i="center"==t.y?(o.top+o.bottom)/2-r/2:"start"==t.y||"nearest"==t.y&&e=o+Math.max(10,Math.min(i,250)))&&n>r-2e3&&s>1,r=n<<1;if(this.defaultTextDirection!=Ri.LTR&&!i)return[];let o=[],a=(n,r,l,h)=>{if(r-nn&&ee.from>=l.from&&e.to<=l.to&&Math.abs(e.from-n)e.fromt))));if(!u){if(re.from<=r&&e.to>=r))){let e=t.moveToLineBoundary(R.cursor(r),!1,!0).head;e>n&&(r=e)}u=new ss(n,r,this.gapSize(l,n,r,h))}o.push(u)};for(let e of this.viewportLines){if(e.lengthe.from&&a(e.from,s,e,t),oe.draw(this,this.heightOracle.lineWrapping)))))}computeVisibleRanges(){let e=this.stateDeco;this.lineGaps.length&&(e=e.concat(this.lineGapDeco));let t=[];Se.spans(e,this.viewport.from,this.viewport.to,{span(e,i){t.push({from:e,to:i})},point(){}},20);let i=t.length!=this.visibleRanges.length||this.visibleRanges.some(((e,i)=>e.from!=t[i].from||e.to!=t[i].to));return this.visibleRanges=t,i?4:0}lineBlockAt(e){return e>=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find((t=>t.from<=e&&t.to>=e))||ps(this.heightMap.lineAt(e,Fn.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return ps(this.heightMap.lineAt(this.scaler.fromDOM(e),Fn.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return ps(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class as{constructor(e,t){this.from=e,this.to=t}}function ls(e,t,i){let n=[],s=e,r=0;return Se.spans(i,e,t,{span(){},point(e,t){e>s&&(n.push({from:s,to:e}),r+=e-s),s=t}},20),s=1)return t[t.length-1].to;let n=Math.floor(e*i);for(let e=0;;e++){let{from:i,to:s}=t[e],r=s-i;if(n<=r)return i+n;n-=r}}function cs(e,t){let i=0;for(let{from:n,to:s}of e.ranges){if(t<=s){i+=t-n;break}i+=s-n}return i/e.total}const ds={toDOM:e=>e,fromDOM:e=>e,scale:1};class us{constructor(e,t,i){let n=0,s=0,r=0;this.viewports=i.map((({from:i,to:s})=>{let r=t.lineAt(i,Fn.ByPos,e,0,0).top,o=t.lineAt(s,Fn.ByPos,e,0,0).bottom;return n+=o-r,{from:i,to:s,top:r,bottom:o,domTop:0,domBottom:0}})),this.scale=(7e6-n)/(t.height-n);for(let e of this.viewports)e.domTop=r+(e.top-s)*this.scale,r=e.domBottom=e.domTop+(e.bottom-e.top),s=e.bottom}toDOM(e){for(let t=0,i=0,n=0;;t++){let s=tps(e,t))):e._content)}const fs=q.define({combine:e=>e.join(" ")}),ms=q.define({combine:e=>e.indexOf(!0)>-1}),gs=ze.newName(),vs=ze.newName(),Os=ze.newName(),bs={"&light":"."+vs,"&dark":"."+Os};function _s(e,t,i){return new ze(t,{finish:t=>/&/.test(t)?t.replace(/&\w*/,(t=>{if("&"==t)return e;if(!i||!i[t])throw new RangeError(`Unsupported selector: ${t}`);return i[t]})):e+" "+t})}const ys=_s("."+gs,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#444"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",insetInlineStart:0,zIndex:200},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",borderRight:"1px solid #ddd"},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top"},".cm-highlightSpace:before":{content:"attr(data-display)",position:"absolute",pointerEvents:"none",color:"#888"},".cm-highlightTab":{backgroundImage:'url(\'data:image/svg+xml,\')',backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},bs),ws="￿";class xs{constructor(e,t){this.points=e,this.text="",this.lineSeparator=t.facet(Oe.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=ws}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let n=e;;){this.findPointBefore(i,n);let e=this.text.length;this.readNode(n);let s=n.nextSibling;if(s==t)break;let r=gt.get(n),o=gt.get(s);(r&&o?r.breakAfter:(r?r.breakAfter:ks(n))||ks(s)&&("BR"!=n.nodeName||n.cmIgnore)&&this.text.length>e)&&this.lineBreak(),n=s}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,n=this.lineSeparator?null:/\r\n?|\n/g;;){let s,r=-1,o=1;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(s=n.exec(t))&&(r=s.index,o=s[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let t of this.points)t.node==e&&t.pos>this.text.length&&(t.pos-=o-1);i=r+o}}readNode(e){if(e.cmIgnore)return;let t=gt.get(e),i=t&&t.overrideDOMText;if(null!=i){this.findPointInside(e,i.length);for(let e=i.iter();!e.next().done;)e.lineBreak?this.lineBreak():this.append(e.value)}else 3==e.nodeType?this.readTextNode(e):"BR"==e.nodeName?e.nextSibling&&this.lineBreak():1==e.nodeType&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(3==e.nodeType?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(Ss(e,i.node,i.offset)?t:0))}}function Ss(e,t,i){for(;;){if(!t||i-1)this.newSel=null;else if(t>-1&&(this.bounds=e.docView.domBoundsAround(t,i,0))){let t=s||r?[]:function(e){let t=[];if(e.root.activeElement!=e.contentDOM)return t;let{anchorNode:i,anchorOffset:n,focusNode:s,focusOffset:r}=e.observer.selectionRange;return i&&(t.push(new Ts(i,n)),s==i&&r==n||t.push(new Ts(s,r))),t}(e),i=new xs(t,e.state);i.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=i.text,this.newSel=function(e,t){if(0==e.length)return null;let i=e[0].pos,n=2==e.length?e[1].pos:i;return i>-1&&n>-1?R.single(i+t,n+t):null}(t,this.bounds.from)}else{let t=e.observer.selectionRange,i=s&&s.node==t.focusNode&&s.offset==t.focusOffset||!Ze(e.contentDOM,t.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(t.focusNode,t.focusOffset),n=r&&r.node==t.anchorNode&&r.offset==t.anchorOffset||!Ze(e.contentDOM,t.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(t.anchorNode,t.anchorOffset);this.newSel=R.single(n,i)}}}function Ps(t,i){let n,{newSel:s}=i,r=t.state.selection.main,o=t.inputState.lastKeyTime>Date.now()-100?t.inputState.lastKeyCode:-1;if(i.bounds){let{from:s,to:a}=i.bounds,l=r.from,h=null;(8===o||Rt.android&&i.text.length0&&a>0&&e.charCodeAt(o-1)==t.charCodeAt(a-1);)o--,a--;return"end"==n&&(i-=o+Math.max(0,r-Math.min(o,a))-r),o=o?r-i:0,a=r+(a-o),o=r):a=a?r-i:0,o=r+(o-a),a=r),{from:r,toA:o,toB:a}}(t.state.doc.sliceString(s,a,ws),i.text,l-s,h);c&&(Rt.chrome&&13==o&&c.toB==c.from+2&&i.text.slice(c.from,c.toB)==ws+ws&&c.toB--,n={from:s+c.from,to:s+c.toA,insert:e.of(i.text.slice(c.from,c.toB).split(ws))})}else s&&(!t.hasFocus&&t.state.facet(gi)||s.main.eq(r))&&(s=null);if(!n&&!s)return!1;if(!n&&i.typeOver&&!r.empty&&s&&s.main.empty?n={from:r.from,to:r.to,insert:t.state.doc.slice(r.from,r.to)}:n&&n.from>=r.from&&n.to<=r.to&&(n.from!=r.from||n.to!=r.to)&&r.to-r.from-(n.to-n.from)<=4?n={from:r.from,to:r.to,insert:t.state.doc.slice(r.from,n.from).append(n.insert).append(t.state.doc.slice(n.to,r.to))}:(Rt.mac||Rt.android)&&n&&n.from==n.to&&n.from==r.head-1&&/^\. ?$/.test(n.insert.toString())&&"off"==t.contentDOM.getAttribute("autocorrect")?(s&&2==n.insert.length&&(s=R.single(s.main.anchor-1,s.main.head-1)),n={from:r.from,to:r.to,insert:e.of([" "])}):Rt.chrome&&n&&n.from==n.to&&n.from==r.head&&"\n "==n.insert.toString()&&t.lineWrapping&&(s&&(s=R.single(s.main.anchor-1,s.main.head-1)),n={from:r.from,to:r.to,insert:e.of([" "])}),n){if(Rt.ios&&t.inputState.flushIOSKey())return!0;if(Rt.android&&(n.from==r.from&&n.to==r.to&&1==n.insert.length&&2==n.insert.lines&&dt(t.contentDOM,"Enter",13)||(n.from==r.from-1&&n.to==r.to&&0==n.insert.length||8==o&&n.insert.lengthr.head)&&dt(t.contentDOM,"Backspace",8)||n.from==r.from&&n.to==r.to+1&&0==n.insert.length&&dt(t.contentDOM,"Delete",46)))return!0;let e,i=n.insert.toString();t.inputState.composing>=0&&t.inputState.composing++;let a=()=>e||(e=function(e,t,i){let n,s=e.state,r=s.selection.main;if(t.from>=r.from&&t.to<=r.to&&t.to-t.from>=(r.to-r.from)/3&&(!i||i.main.empty&&i.main.from==t.from+t.insert.length)&&e.inputState.composing<0){let i=r.fromt.to?s.sliceDoc(t.to,r.to):"";n=s.replaceSelection(e.state.toText(i+t.insert.sliceString(0,void 0,e.state.lineBreak)+o))}else{let o=s.changes(t),a=i&&i.main.to<=o.newLength?i.main:void 0;if(s.selection.ranges.length>1&&e.inputState.composing>=0&&t.to<=r.to&&t.to>=r.to-10){let l,h=e.state.sliceDoc(t.from,t.to),c=i&&Zi(e,i.main.head);if(c){let e=t.insert.length-(t.to-t.from);l={from:c.from,to:c.to-e}}else l=e.state.doc.lineAt(r.head);let d=r.to-t.to,u=r.to-r.from;n=s.changeByRange((i=>{if(i.from==r.from&&i.to==r.to)return{changes:o,range:a||i.map(o)};let n=i.to-d,c=n-h.length;if(i.to-i.from!=u||e.state.sliceDoc(c,n)!=h||i.to>=l.from&&i.from<=l.to)return{range:i};let p=s.changes({from:c,to:n,insert:t.insert}),f=i.to-r.to;return{changes:p,range:a?R.range(Math.max(0,a.anchor+f),Math.max(0,a.head+f)):i.map(p)}}))}else n={changes:o,selection:a&&s.selection.replaceRange(a)}}let o="input.type";return(e.composing||e.inputState.compositionPendingChange&&e.inputState.compositionEndedAt>Date.now()-50)&&(e.inputState.compositionPendingChange=!1,o+=".compose",e.inputState.compositionFirstChange&&(o+=".start",e.inputState.compositionFirstChange=!1)),s.update(n,{userEvent:o,scrollIntoView:!0})}(t,n,s));return t.state.facet(hi).some((e=>e(t,n.from,n.to,i,a)))||t.dispatch(a()),!0}if(s&&!s.main.eq(r)){let e=!1,i="select";return t.inputState.lastSelectionTime>Date.now()-50&&("select"==t.inputState.lastSelectionOrigin&&(e=!0),i=t.inputState.lastSelectionOrigin),t.dispatch({selection:s,scrollIntoView:e,userEvent:i}),!0}return!1}const Ms={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Es=Rt.ie&&Rt.ie_version<=11;class As{constructor(e){this.view=e,this.active=!1,this.selectionRange=new ot,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver((t=>{for(let e of t)this.queue.push(e);(Rt.ie&&Rt.ie_version<=11||Rt.ios&&e.composing)&&t.some((e=>"childList"==e.type&&e.removedNodes.length||"characterData"==e.type&&e.oldValue.length>e.target.nodeValue.length))?this.flushSoon():this.flush()})),Es&&(this.onCharData=e=>{this.queue.push({target:e.target,type:"characterData",oldValue:e.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),"function"==typeof ResizeObserver&&(this.resizeScroll=new ResizeObserver((()=>{var e;(null===(e=this.view.docView)||void 0===e?void 0:e.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),e.length>0&&e[e.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))}),{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver((e=>{e.length>0&&e[e.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))}),{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout((()=>{this.resizeTimeout=-1,this.view.requestMeasure()}),50))}onPrint(){this.view.viewState.printing=!0,this.view.measure(),setTimeout((()=>{this.view.viewState.printing=!1,this.view.requestMeasure()}),500)}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some(((t,i)=>t!=e[i])))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,n=this.selectionRange;if(i.state.facet(gi)?i.root.activeElement!=this.dom:!Ke(i.dom,n))return;let s=n.anchorNode&&i.docView.nearest(n.anchorNode);s&&s.ignoreEvent(e)?t||(this.selectionChanged=!1):(Rt.ie&&Rt.ie_version<=11||Rt.android&&Rt.chrome)&&!i.state.selection.main.empty&&n.focusNode&&et(n.focusNode,n.focusOffset,n.anchorNode,n.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Rt.safari&&11==e.root.nodeType&&function(e){let t=e.activeElement;for(;t&&t.shadowRoot;)t=t.shadowRoot.activeElement;return t}(this.dom.ownerDocument)==this.dom&&function(e){let t=null;function i(e){e.preventDefault(),e.stopImmediatePropagation(),t=e.getTargetRanges()[0]}if(e.contentDOM.addEventListener("beforeinput",i,!0),e.dom.ownerDocument.execCommand("indent"),e.contentDOM.removeEventListener("beforeinput",i,!0),!t)return null;let n=t.startContainer,s=t.startOffset,r=t.endContainer,o=t.endOffset,a=e.docView.domAtPos(e.state.selection.main.anchor);return et(a.node,a.offset,r,o)&&([n,s,r,o]=[r,o,n,s]),{anchorNode:n,anchorOffset:s,focusNode:r,focusOffset:o}}(this.view)||Ge(e.root);if(!t||this.selectionRange.eq(t))return!1;let i=Ke(this.dom,t);return i&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let e=this.delayedAndroidKey;e&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=e.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&e.force&&dt(this.dom,e.key,e.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(e)}this.delayedAndroidKey&&"Enter"!=e||(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()})))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,n=!1;for(let s of e){let e=this.readMutation(s);e&&(e.typeOver&&(n=!0),-1==t?({from:t,to:i}=e):(t=Math.min(e.from,t),i=Math.max(e.to,i)))}return{from:t,to:i,typeOver:n}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),n=this.selectionChanged&&Ke(this.dom,this.selectionRange);if(e<0&&!n)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let s=new Cs(this.view,e,t,i);return this.view.docView.domChanged={newSel:s.newSel?s.newSel.main:null},s}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,n=Ps(this.view,t);return this.view.state==i&&this.view.update([]),n}readMutation(e){let t=this.view.docView.nearest(e.target);if(!t||t.ignoreMutation(e))return null;if(t.markDirty("attributes"==e.type),"attributes"==e.type&&(t.flags|=4),"childList"==e.type){let i=Rs(t,e.previousSibling||e.target.previousSibling,-1),n=Rs(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:n?t.posBefore(n):t.posAtEnd,typeOver:!1}}return"characterData"==e.type?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}destroy(){var e,t,i;this.stop(),null===(e=this.intersection)||void 0===e||e.disconnect(),null===(t=this.gapIntersection)||void 0===t||t.disconnect(),null===(i=this.resizeScroll)||void 0===i||i.disconnect();for(let e of this.scrollTargets)e.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey)}}function Rs(e,t,i){for(;t;){let n=gt.get(t);if(n&&n.parent==e)return n;let s=t.parentNode;t=s!=e.dom?s:i>0?t.nextSibling:t.previousSibling}return null}class Ds{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return this.inputState.composing>0}get compositionStarted(){return this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.style.cssText="position: fixed; top: -10000px",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM);let{dispatch:t}=e;this.dispatchTransactions=e.dispatchTransactions||t&&(e=>e.forEach((e=>t(e,this))))||(e=>this.update(e)),this.dispatch=this.dispatch.bind(this),this._root=e.root||function(e){for(;e;){if(e&&(9==e.nodeType||11==e.nodeType&&e.host))return e;e=e.assignedSlot||e.parentNode}return null}(e.parent)||document,this.viewState=new os(e.state||Oe.create(e)),this.plugins=this.state.facet(Oi).map((e=>new _i(e)));for(let e of this.plugins)e.update(this);this.observer=new As(this),this.inputState=new fn(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Yi(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),e.parent&&e.parent.appendChild(this.dom)}dispatch(...e){let t=1==e.length&&e[0]instanceof le?e:1==e.length&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(0!=this.updateState)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t,i=!1,n=!1,s=this.state;for(let t of e){if(t.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=t.state}if(this.destroyed)return void(this.viewState.state=s);let r=this.hasFocus,o=0,a=null;e.some((e=>e.annotation(Bn)))?(this.inputState.notifiedFocused=r,o=1):r!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=r,a=$n(s,r),a||(o=1));let l=this.observer.delayedAndroidKey,h=null;if(l?(this.observer.clearDelayedAndroidKey(),h=this.observer.readChange(),(h&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(h=null)):this.observer.clear(),s.facet(Oe.phrases)!=this.state.facet(Oe.phrases))return this.setState(s);t=Ai.create(this,s,e),t.flags|=o;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let t of e){if(c&&(c=c.map(t.changes)),t.scrollIntoView){let{main:e}=t.state.selection;c=new pi(e.empty?e:R.cursor(e.head,e.head>e.anchor?-1:1))}for(let e of t.effects)e.is(fi)&&(c=e.value)}this.viewState.update(t,c),this.bidiCache=Ls.update(this.bidiCache,t.changes),t.empty||(this.updatePlugins(t),this.inputState.update(t)),i=this.docView.update(t),this.state.facet(Mi)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(i,e.some((e=>e.isUserEvent("select.pointer"))))}finally{this.updateState=0}if(t.startState.facet(fs)!=t.state.facet(fs)&&(this.viewState.mustMeasureContent=!0),(i||n||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),!t.empty)for(let e of this.state.facet(li))e(t);(a||h)&&Promise.resolve().then((()=>{a&&this.state==a.startState&&this.dispatch(a),h&&!Ps(this,h)&&l.force&&dt(this.contentDOM,l.key,l.keyCode)}))}setState(e){if(0!=this.updateState)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed)return void(this.viewState.state=e);this.updateState=2;let t=this.hasFocus;try{for(let e of this.plugins)e.destroy(this);this.viewState=new os(e),this.plugins=e.facet(Oi).map((e=>new _i(e))),this.pluginMap.clear();for(let e of this.plugins)e.update(this);this.docView=new Yi(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Oi),i=e.state.facet(Oi);if(t!=i){let n=[];for(let s of i){let i=t.indexOf(s);if(i<0)n.push(new _i(s));else{let t=this.plugins[i];t.mustUpdate=e,n.push(t)}}for(let t of this.plugins)t.mustUpdate!=e&&t.destroy(this);this.plugins=n,this.pluginMap.clear()}else for(let t of this.plugins)t.mustUpdate=e;for(let e=0;e-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey)return this.measureScheduled=-1,void this.requestMeasure();this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.scrollDOM,n=i.scrollTop*this.scaleY,{scrollAnchorPos:s,scrollAnchorHeight:r}=this.viewState;Math.abs(n-this.viewState.scrollTop)>1&&(r=-1),this.viewState.scrollAnchorHeight=-1;try{for(let e=0;;e++){if(r<0)if(pt(i))s=-1,r=this.viewState.heightMap.height;else{let e=this.viewState.scrollAnchorAt(n);s=e.from,r=e.top}this.updateState=1;let o=this.viewState.measure(this);if(!o&&!this.measureRequests.length&&null==this.viewState.scrollTarget)break;if(e>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let a=[];4&o||([this.measureRequests,a]=[a,this.measureRequests]);let l=a.map((e=>{try{return e.read(this)}catch(e){return mi(this.state,e),qs}})),h=Ai.create(this,this.state,[]),c=!1;h.flags|=o,t?t.flags|=o:t=h,this.updateState=2,h.empty||(this.updatePlugins(h),this.inputState.update(h),this.updateAttrs(),c=this.docView.update(h));for(let e=0;e1||e<-1){n+=e,i.scrollTop=n/this.scaleY,r=-1;continue}}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let e of this.state.facet(li))e(t)}get themeClasses(){return gs+" "+(this.state.facet(ms)?Os:vs)+" "+this.state.facet(fs)}updateAttrs(){let e=Ns(this,yi,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",translate:"no",contenteditable:this.state.facet(gi)?"true":"false",class:"cm-content",style:`${Rt.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),Ns(this,wi,t);let i=this.observer.ignore((()=>{let i=Wt(this.contentDOM,this.contentAttrs,t),n=Wt(this.dom,this.editorAttrs,e);return i||n}));return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let e of i.effects)e.is(Ds.announce)&&(t&&(this.announceDOM.textContent=""),t=!1,this.announceDOM.appendChild(document.createElement("div")).textContent=e.value)}mountStyles(){this.styleModules=this.state.facet(Mi);let e=this.state.facet(Ds.cspNonce);ze.mount(this.root,this.styleModules.concat(ys).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(2==this.updateState)throw new Error("Reading the editor layout isn't allowed during an update");0==this.updateState&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame((()=>this.measure()))),e){if(this.measureRequests.indexOf(e)>-1)return;if(null!=e.key)for(let t=0;tt.spec==e))||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return pn(this,e,dn(this,e,t,i))}moveByGroup(e,t){return pn(this,e,dn(this,e,t,(t=>function(e,t,i){let n=e.state.charCategorizer(t),s=n(i);return e=>{let t=n(e);return s==me.Space&&(s=t),s==t}}(this,e.head,t))))}moveToLineBoundary(e,t,i=!0){return function(e,t,i,n){let s=cn(e,t.head),r=n&&s.type==Xt.Text&&(e.lineWrapping||s.widgetLineBreaks)?e.coordsAtPos(t.assoc<0&&t.head>s.from?t.head-1:t.head):null;if(r){let t=e.dom.getBoundingClientRect(),n=e.textDirectionAt(s.from),o=e.posAtCoords({x:i==(n==Ri.LTR)?t.right-1:t.left+1,y:(r.top+r.bottom)/2});if(null!=o)return R.cursor(o,i?-1:1)}return R.cursor(i?s.to:s.from,i?-1:1)}(this,e,t,i)}moveVertically(e,t,i){return pn(this,e,function(e,t,i,n){let s=t.head,r=i?1:-1;if(s==(i?e.state.doc.length:0))return R.cursor(s,t.assoc);let o,a=t.goalColumn,l=e.contentDOM.getBoundingClientRect(),h=e.coordsAtPos(s,t.assoc||-1),c=e.documentTop;if(h)null==a&&(a=h.left-l.left),o=r<0?h.top:h.bottom;else{let t=e.viewState.lineBlockAt(s);null==a&&(a=Math.min(l.right-l.left,e.defaultCharacterWidth*(s-t.from))),o=(r<0?t.top:t.bottom)+c}let d=l.left+a,u=null!=n?n:e.viewState.heightOracle.textHeight>>1;for(let t=0;;t+=10){let i=o+(u+t)*r,n=ln(e,{x:d,y:i},!1,r);if(il.bottom||(r<0?ns)){let t=e.docView.coordsForChar(n),s=!t||i0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(di)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>Is)return Fi(e.length);let t,i=this.textDirectionAt(e.from);for(let n of this.bidiCache)if(n.from==e.from&&n.dir==i&&(n.fresh||ji(n.isolates,t=Ti(this,e.from,e.to))))return n.order;t||(t=Ti(this,e.from,e.to));let n=function(e,t,i){if(!e)return[new zi(0,0,t==Ii?1:0)];if(t==Di&&!i.length&&!Qi.test(e))return Fi(e.length);if(i.length)for(;e.length>Wi.length;)Wi[Wi.length]=256;let n=[],s=t==Di?0:1;return Ui(e,s,s,i,0,e.length,n),n}(e.text,i,t);return this.bidiCache.push(new Ls(e.from,e.to,i,t,!0,n)),n}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||Rt.safari&&(null===(e=this.inputState)||void 0===e?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore((()=>{ht(this.contentDOM),this.docView.updateSelection()}))}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((9==e.nodeType?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return fi.of(new pi("number"==typeof e?R.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}static domEventHandlers(e){return bi.define((()=>({})),{eventHandlers:e})}static domEventObservers(e){return bi.define((()=>({})),{eventObservers:e})}static theme(e,t){let i=ze.newName(),n=[fs.of(i),Mi.of(_s(`.${i}`,e))];return t&&t.dark&&n.push(ms.of(!0)),n}static baseTheme(e){return V.lowest(Mi.of(_s("."+gs,e,bs)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),n=i&>.get(i)||gt.get(e);return(null===(t=null==n?void 0:n.rootView)||void 0===t?void 0:t.view)||null}}Ds.styleModule=Mi,Ds.inputHandler=hi,Ds.focusChangeEffect=ci,Ds.perLineTextDirection=di,Ds.exceptionSink=ai,Ds.updateListener=li,Ds.editable=gi,Ds.mouseSelectionStyle=oi,Ds.dragMovesSelection=ri,Ds.clickAddsSelectionRange=si,Ds.decorations=xi,Ds.atomicRanges=Si,Ds.bidiIsolatedRanges=ki,Ds.scrollMargins=Ci,Ds.darkTheme=ms,Ds.cspNonce=q.define({combine:e=>e.length?e[0]:""}),Ds.contentAttributes=wi,Ds.editorAttributes=yi,Ds.lineWrapping=Ds.contentAttributes.of({class:"cm-lineWrapping"}),Ds.announce=ae.define();const Is=4096,qs={};class Ls{constructor(e,t,i,n,s,r){this.from=e,this.to=t,this.dir=i,this.isolates=n,this.fresh=s,this.order=r}static update(e,t){if(t.empty&&!e.some((e=>e.fresh)))return e;let i=[],n=e.length?e[e.length-1].dir:Ri.LTR;for(let s=Math.max(0,e.length-10);s=0;s--){let t=n[s],r="function"==typeof t?t(e):t;r&&Qt(r,i)}return i}const Bs=Rt.mac?"mac":Rt.windows?"win":Rt.linux?"linux":"key";function $s(e,t,i){return t.altKey&&(e="Alt-"+e),t.ctrlKey&&(e="Ctrl-"+e),t.metaKey&&(e="Meta-"+e),!1!==i&&t.shiftKey&&(e="Shift-"+e),e}const Qs=V.default(Ds.domEventHandlers({keydown:(e,t)=>Fs(Ws(t.state),e,t,"editor")})),zs=q.define({enables:Qs}),js=new WeakMap;function Ws(e){let t=e.facet(zs),i=js.get(t);return i||js.set(t,i=function(e,t=Bs){let i=Object.create(null),n=Object.create(null),s=(e,t)=>{let i=n[e];if(null==i)n[e]=t;else if(i!=t)throw new Error("Key binding "+e+" is used both as a regular binding and as a multi-stroke prefix")},r=(e,n,r,o,a)=>{var l,h;let c=i[e]||(i[e]=Object.create(null)),d=n.split(/ (?!$)/).map((e=>function(e,t){const i=e.split(/-(?!$)/);let n,s,r,o,a=i[i.length-1];"Space"==a&&(a=" ");for(let e=0;e{let n=Vs={view:t,prefix:i,scope:e};return setTimeout((()=>{Vs==n&&(Vs=null)}),Us),!0}]})}let u=d.join(" ");s(u,!1);let p=c[u]||(c[u]={preventDefault:!1,stopPropagation:!1,run:(null===(h=null===(l=c._any)||void 0===l?void 0:l.run)||void 0===h?void 0:h.slice())||[]});r&&p.run.push(r),o&&(p.preventDefault=!0),a&&(p.stopPropagation=!0)};for(let n of e){let e=n.scope?n.scope.split(" "):["editor"];if(n.any)for(let t of e){let e=i[t]||(i[t]=Object.create(null));e._any||(e._any={preventDefault:!1,stopPropagation:!1,run:[]});for(let t in e)e[t].run.push(n.any)}let s=n[t]||n.key;if(s)for(let t of e)r(t,s,n.run,n.preventDefault,n.stopPropagation),n.shift&&r(t,"Shift-"+s,n.shift,n.preventDefault,n.stopPropagation)}return i}(t.reduce(((e,t)=>e.concat(t)),[]))),i}let Vs=null;const Us=4e3;function Fs(e,t,i,n){let s=function(e){var t=!(Fe&&e.metaKey&&e.shiftKey&&!e.ctrlKey&&!e.altKey||He&&e.shiftKey&&e.key&&1==e.key.length||"Unidentified"==e.key)&&e.key||(e.shiftKey?Ue:Ve)[e.keyCode]||e.key||"Unidentified";return"Esc"==t&&(t="Escape"),"Del"==t&&(t="Delete"),"Left"==t&&(t="ArrowLeft"),"Up"==t&&(t="ArrowUp"),"Right"==t&&(t="ArrowRight"),"Down"==t&&(t="ArrowDown"),t}(t),r=_(O(s,0))==s.length&&" "!=s,o="",a=!1,l=!1,h=!1;Vs&&Vs.view==i&&Vs.scope==n&&(o=Vs.prefix+" ",bn.indexOf(t.keyCode)<0&&(l=!0,Vs=null));let c,d,u=new Set,p=e=>{if(e){for(let n of e.run)if(!u.has(n)&&(u.add(n),n(i,t)))return e.stopPropagation&&(h=!0),!0;e.preventDefault&&(e.stopPropagation&&(h=!0),l=!0)}return!1},f=e[n];return f&&(p(f[o+$s(s,t,!r)])?a=!0:r&&(t.altKey||t.metaKey||t.ctrlKey)&&!(Rt.windows&&t.ctrlKey&&t.altKey)&&(c=Ve[t.keyCode])&&c!=s?(p(f[o+$s(c,t,!0)])||t.shiftKey&&(d=Ue[t.keyCode])!=s&&d!=c&&p(f[o+$s(d,t,!1)]))&&(a=!0):r&&t.shiftKey&&p(f[o+$s(s,t,!0)])&&(a=!0),!a&&p(f._any)&&(a=!0)),l&&(a=!0),a&&h&&t.stopPropagation(),a}class Hs{constructor(e,t,i,n,s){this.className=e,this.left=t,this.top=i,this.width=n,this.height=s}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className==this.className&&(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",null!=this.width&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let n=e.coordsAtPos(i.head,i.assoc||1);if(!n)return[];let s=Xs(e);return[new Hs(t,n.left-s.left,n.top-s.top,null,n.bottom-n.top)]}return function(e,t,i){if(i.to<=e.viewport.from||i.from>=e.viewport.to)return[];let n=Math.max(i.from,e.viewport.from),s=Math.min(i.to,e.viewport.to),r=e.textDirection==Ri.LTR,o=e.contentDOM,a=o.getBoundingClientRect(),l=Xs(e),h=o.querySelector(".cm-line"),c=h&&window.getComputedStyle(h),d=a.left+(c?parseInt(c.paddingLeft)+Math.min(0,parseInt(c.textIndent)):0),u=a.right-(c?parseInt(c.paddingRight):0),p=cn(e,n),f=cn(e,s),m=p.type==Xt.Text?p:null,g=f.type==Xt.Text?f:null;if(m&&(e.lineWrapping||p.widgetLineBreaks)&&(m=Ys(e,n,m)),g&&(e.lineWrapping||f.widgetLineBreaks)&&(g=Ys(e,s,g)),m&&g&&m.from==g.from)return O(b(i.from,i.to,m));{let t=m?b(i.from,null,m):_(p,!1),n=g?b(null,i.to,g):_(f,!0),s=[];return(m||p).to<(g||f).from-(m&&g?1:0)||p.widgetLineBreaks>1&&t.bottom+e.defaultLineHeight/2h&&n.from=r)break;a>s&&l(Math.max(e,s),null==t&&e<=h,Math.min(a,r),null==i&&a>=c,o.dir)}if(s=n.to+1,s>=r)break}return 0==a.length&&l(h,null==t,c,null==i,e.textDirection),{top:s,bottom:o,horizontal:a}}function _(e,t){let i=a.top+(t?e.top:e.bottom);return{top:i,bottom:i,horizontal:[]}}}(e,t,i)}}function Xs(e){let t=e.scrollDOM.getBoundingClientRect();return{left:(e.textDirection==Ri.LTR?t.left:t.right-e.scrollDOM.clientWidth*e.scaleX)-e.scrollDOM.scrollLeft*e.scaleX,top:t.top-e.scrollDOM.scrollTop*e.scaleY}}function Ys(e,t,i){let n=R.cursor(t);return{from:Math.max(i.from,e.moveToLineBoundary(n,!1,!0).from),to:Math.min(i.to,e.moveToLineBoundary(n,!0,!0).from),type:Xt.Text}}class Gs{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(Zs)!=e.state.facet(Zs)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}setOrder(e){let t=0,i=e.facet(Zs);for(;t{return i=e,n=this.drawn[t],!(i.constructor==n.constructor&&i.eq(n));var i,n}))){let t=this.dom.firstChild,i=0;for(let n of e)n.update&&t&&n.constructor&&this.drawn[i].constructor&&n.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(n.draw(),t);for(;t;){let e=t.nextSibling;t.remove(),t=e}this.drawn=e}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const Zs=q.define();function Ks(e){return[bi.define((t=>new Gs(t,e))),Zs.of(e)]}const Js=!Rt.ios,er=q.define({combine:e=>be(e,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})});function tr(e={}){return[er.of(e),nr,rr,ar,ui.of(!0)]}function ir(e){return e.startState.facet(er)!=e.state.facet(er)}const nr=Ks({above:!0,markers(e){let{state:t}=e,i=t.facet(er),n=[];for(let s of t.selection.ranges){let r=s==t.selection.main;if(s.empty?!r||Js:i.drawRangeCursor){let t=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",i=s.empty?s:R.cursor(s.head,s.head>s.anchor?-1:1);for(let s of Hs.forRange(e,t,i))n.push(s)}}return n},update(e,t){e.transactions.some((e=>e.selection))&&(t.style.animationName="cm-blink"==t.style.animationName?"cm-blink2":"cm-blink");let i=ir(e);return i&&sr(e.state,t),e.docChanged||e.selectionSet||i},mount(e,t){sr(t.state,e)},class:"cm-cursorLayer"});function sr(e,t){t.style.animationDuration=e.facet(er).cursorBlinkRate+"ms"}const rr=Ks({above:!1,markers:e=>e.state.selection.ranges.map((t=>t.empty?[]:Hs.forRange(e,"cm-selectionBackground",t))).reduce(((e,t)=>e.concat(t))),update:(e,t)=>e.docChanged||e.selectionSet||e.viewportChanged||ir(e),class:"cm-selectionLayer"}),or={".cm-line":{"& ::selection":{backgroundColor:"transparent !important"},"&::selection":{backgroundColor:"transparent !important"}}};Js&&(or[".cm-line"].caretColor="transparent !important");const ar=V.highest(Ds.theme(or)),lr=ae.define({map:(e,t)=>null==e?null:t.mapPos(e)}),hr=j.define({create:()=>null,update:(e,t)=>(null!=e&&(e=t.changes.mapPos(e)),t.effects.reduce(((e,t)=>t.is(lr)?t.value:e),e))}),cr=bi.fromClass(class{constructor(e){this.view=e,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(e){var t;let i=e.state.field(hr);null==i?null!=this.cursor&&(null===(t=this.cursor)||void 0===t||t.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(e.startState.field(hr)!=i||e.docChanged||e.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:e}=this,t=e.state.field(hr),i=null!=t&&e.coordsAtPos(t);if(!i)return null;let n=e.scrollDOM.getBoundingClientRect();return{left:i.left-n.left+e.scrollDOM.scrollLeft*e.scaleX,top:i.top-n.top+e.scrollDOM.scrollTop*e.scaleY,height:i.bottom-i.top}}drawCursor(e){if(this.cursor){let{scaleX:t,scaleY:i}=this.view;e?(this.cursor.style.left=e.left/t+"px",this.cursor.style.top=e.top/i+"px",this.cursor.style.height=e.height/i+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(e){this.view.state.field(hr)!=e&&this.view.dispatch({effects:lr.of(e)})}},{eventObservers:{dragover(e){this.setDropPos(this.view.posAtCoords({x:e.clientX,y:e.clientY}))},dragleave(e){e.target!=this.view.contentDOM&&this.view.contentDOM.contains(e.relatedTarget)||this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function dr(e,t,i,n,s){t.lastIndex=0;for(let r,o=e.iterRange(i,n),a=i;!o.next().done;a+=o.value.length)if(!o.lineBreak)for(;r=t.exec(o.value);)s(a+r.index,r)}class ur{constructor(e){const{regexp:t,decoration:i,decorate:n,boundary:s,maxLength:r=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,n)this.addMatch=(e,t,i,s)=>n(s,i,i+e[0].length,e,t);else if("function"==typeof i)this.addMatch=(e,t,n,s)=>{let r=i(e,t,n);r&&s(n,n+e[0].length,r)};else{if(!i)throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.addMatch=(e,t,n,s)=>s(n,n+e[0].length,i)}this.boundary=s,this.maxLength=r}createDeco(e){let t=new ke,i=t.add.bind(t);for(let{from:t,to:n}of function(e,t){let i=e.visibleRanges;if(1==i.length&&i[0].from==e.viewport.from&&i[0].to==e.viewport.to)return i;let n=[];for(let{from:s,to:r}of i)s=Math.max(e.state.doc.lineAt(s).from,s-t),r=Math.min(e.state.doc.lineAt(r).to,r+t),n.length&&n[n.length-1].to>=s?n[n.length-1].to=r:n.push({from:s,to:r});return n}(e,this.maxLength))dr(e.state.doc,this.regexp,t,n,((t,n)=>this.addMatch(n,e,t,i)));return t.finish()}updateDeco(e,t){let i=1e9,n=-1;return e.docChanged&&e.changes.iterChanges(((t,s,r,o)=>{o>e.view.viewport.from&&r1e3?this.createDeco(e.view):n>-1?this.updateRange(e.view,t.map(e.changes),i,n):t}updateRange(e,t,i,n){for(let s of e.visibleRanges){let r=Math.max(s.from,i),o=Math.min(s.to,n);if(o>r){let i=e.state.doc.lineAt(r),n=i.toi.from;r--)if(this.boundary.test(i.text[r-1-i.from])){a=r;break}for(;oc.push(i.range(e,t));if(i==n)for(this.regexp.lastIndex=a-i.from;(h=this.regexp.exec(i.text))&&h.indexthis.addMatch(i,e,t,d)));t=t.update({filterFrom:a,filterTo:l,filter:(e,t)=>el,add:c})}}return t}}const pr=null!=/x/.unicode?"gu":"g",fr=new RegExp("[\0-\b\n--Ÿ­؜​‎‏\u2028\u2029‭‮⁦⁧⁩\ufeff-]",pr),mr={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let gr=null;const vr=q.define({combine(e){let t=be(e,{render:null,specialChars:fr,addSpecialChars:null});return(t.replaceTabs=!function(){var e;if(null==gr&&"undefined"!=typeof document&&document.body){let t=document.body.style;gr=null!=(null!==(e=t.tabSize)&&void 0!==e?e:t.MozTabSize)}return gr||!1}())&&(t.specialChars=new RegExp("\t|"+t.specialChars.source,pr)),t.addSpecialChars&&(t.specialChars=new RegExp(t.specialChars.source+"|"+t.addSpecialChars.source,pr)),t}});function Or(e={}){return[vr.of(e),br||(br=bi.fromClass(class{constructor(e){this.view=e,this.decorations=Yt.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(e.state.facet(vr)),this.decorations=this.decorator.createDeco(e)}makeDecorator(e){return new ur({regexp:e.specialChars,decoration:(t,i,n)=>{let{doc:s}=i.state,r=O(t[0],0);if(9==r){let e=s.lineAt(n),t=i.state.tabSize,r=Le(e.text,t,n-e.from);return Yt.replace({widget:new yr((t-r%t)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[r]||(this.decorationCache[r]=Yt.replace({widget:new _r(e,r)}))},boundary:e.replaceTabs?void 0:/[^]/})}update(e){let t=e.state.facet(vr);e.startState.facet(vr)!=t?(this.decorator=this.makeDecorator(t),this.decorations=this.decorator.createDeco(e.view)):this.decorations=this.decorator.updateDeco(e,this.decorations)}},{decorations:e=>e.decorations}))]}let br=null;class _r extends Ht{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=function(e){return e>=32?"•":10==e?"␤":String.fromCharCode(9216+e)}(this.code),i=e.state.phrase("Control character")+" "+(mr[this.code]||"0x"+this.code.toString(16)),n=this.options.render&&this.options.render(this.code,i,t);if(n)return n;let s=document.createElement("span");return s.textContent=t,s.title=i,s.setAttribute("aria-label",i),s.className="cm-specialChar",s}ignoreEvent(){return!1}}class yr extends Ht{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent="\t",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}}const wr=Yt.line({class:"cm-activeLine"}),xr=bi.fromClass(class{constructor(e){this.decorations=this.getDeco(e)}update(e){(e.docChanged||e.selectionSet)&&(this.decorations=this.getDeco(e.view))}getDeco(e){let t=-1,i=[];for(let n of e.state.selection.ranges){let s=e.lineBlockAt(n.head);s.from>t&&(i.push(wr.range(s.from)),t=s.from)}return Yt.set(i)}},{decorations:e=>e.decorations}),Sr=2e3;function kr(e,t){let i=e.posAtCoords({x:t.clientX,y:t.clientY},!1),n=e.state.doc.lineAt(i),s=i-n.from,r=s>Sr?-1:s==n.length?function(e,t){let i=e.coordsAtPos(e.viewport.from);return i?Math.round(Math.abs((i.left-t)/e.defaultCharacterWidth)):-1}(e,t.clientX):Le(n.text,e.state.tabSize,i-n.from);return{line:n.number,col:r,off:s}}function Tr(e){let t=(null==e?void 0:e.eventFilter)||(e=>e.altKey&&0==e.button);return Ds.mouseSelectionStyle.of(((e,i)=>t(i)?function(e,t){let i=kr(e,t),n=e.state.selection;return i?{update(e){if(e.docChanged){let t=e.changes.mapPos(e.startState.doc.line(i.line).from),s=e.state.doc.lineAt(t);i={line:s.number,col:i.col,off:Math.min(i.off,s.length)},n=n.map(e.changes)}},get(t,s,r){let o=kr(e,t);if(!o)return n;let a=function(e,t,i){let n=Math.min(t.line,i.line),s=Math.max(t.line,i.line),r=[];if(t.off>Sr||i.off>Sr||t.col<0||i.col<0){let o=Math.min(t.off,i.off),a=Math.max(t.off,i.off);for(let t=n;t<=s;t++){let i=e.doc.line(t);i.length<=a&&r.push(R.range(i.from+o,i.to+a))}}else{let o=Math.min(t.col,i.col),a=Math.max(t.col,i.col);for(let t=n;t<=s;t++){let i=e.doc.line(t),n=Ne(i.text,o,e.tabSize,!0);if(n<0)r.push(R.cursor(i.to));else{let t=Ne(i.text,a,e.tabSize);r.push(R.range(i.from+n,i.from+t))}}}return r}(e.state,i,o);return a.length?r?R.create(a.concat(n.ranges)):R.create(a):n}}:null}(e,i):null))}const Cr={Alt:[18,e=>!!e.altKey],Control:[17,e=>!!e.ctrlKey],Shift:[16,e=>!!e.shiftKey],Meta:[91,e=>!!e.metaKey]},Pr={style:"cursor: crosshair"};function Mr(e={}){let[t,i]=Cr[e.key||"Alt"],n=bi.fromClass(class{constructor(e){this.view=e,this.isDown=!1}set(e){this.isDown!=e&&(this.isDown=e,this.view.update([]))}},{eventObservers:{keydown(e){this.set(e.keyCode==t||i(e))},keyup(e){e.keyCode!=t&&i(e)||this.set(!1)},mousemove(e){this.set(i(e))}}});return[n,Ds.contentAttributes.of((e=>{var t;return(null===(t=e.plugin(n))||void 0===t?void 0:t.isDown)?Pr:null}))]}const Er="-10000px";class Ar{constructor(e,t,i){this.facet=t,this.createTooltipView=i,this.input=e.state.facet(t),this.tooltips=this.input.filter((e=>e)),this.tooltipViews=this.tooltips.map(i)}update(e,t){var i;let n=e.state.facet(this.facet),s=n.filter((e=>e));if(n===this.input){for(let t of this.tooltipViews)t.update&&t.update(e);return!1}let r=[],o=t?[]:null;for(let i=0;it[i]=e)),t.length=o.length),this.input=n,this.tooltips=s,this.tooltipViews=r,!0}}function Rr(e){let{win:t}=e;return{top:0,left:0,bottom:t.innerHeight,right:t.innerWidth}}const Dr=q.define({combine:e=>{var t,i,n;return{position:Rt.ios?"absolute":(null===(t=e.find((e=>e.position)))||void 0===t?void 0:t.position)||"fixed",parent:(null===(i=e.find((e=>e.parent)))||void 0===i?void 0:i.parent)||null,tooltipSpace:(null===(n=e.find((e=>e.tooltipSpace)))||void 0===n?void 0:n.tooltipSpace)||Rr}}}),Ir=new WeakMap,qr=bi.fromClass(class{constructor(e){this.view=e,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let t=e.state.facet(Dr);this.position=t.position,this.parent=t.parent,this.classes=e.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.manager=new Ar(e,Br,(e=>this.createTooltip(e))),this.intersectionObserver="function"==typeof IntersectionObserver?new IntersectionObserver((e=>{Date.now()>this.lastTransaction-50&&e.length>0&&e[e.length-1].intersectionRatio<1&&this.measureSoon()}),{threshold:[1]}):null,this.observeIntersection(),e.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let e of this.manager.tooltipViews)this.intersectionObserver.observe(e.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout((()=>{this.measureTimeout=-1,this.maybeMeasure()}),50))}update(e){e.transactions.length&&(this.lastTransaction=Date.now());let t=this.manager.update(e,this.above);t&&this.observeIntersection();let i=t||e.geometryChanged,n=e.state.facet(Dr);if(n.position!=this.position&&!this.madeAbsolute){this.position=n.position;for(let e of this.manager.tooltipViews)e.dom.style.position=this.position;i=!0}if(n.parent!=this.parent){this.parent&&this.container.remove(),this.parent=n.parent,this.createContainer();for(let e of this.manager.tooltipViews)this.container.appendChild(e.dom);i=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);i&&this.maybeMeasure()}createTooltip(e){let t=e.create(this.view);if(t.dom.classList.add("cm-tooltip"),e.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let e=document.createElement("div");e.className="cm-tooltip-arrow",t.dom.appendChild(e)}return t.dom.style.position=this.position,t.dom.style.top=Er,t.dom.style.left="0px",this.container.appendChild(t.dom),t.mount&&t.mount(this.view),t}destroy(){var e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let t of this.manager.tooltipViews)t.dom.remove(),null===(e=t.destroy)||void 0===e||e.call(t);this.parent&&this.container.remove(),null===(t=this.intersectionObserver)||void 0===t||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let e=this.view.dom.getBoundingClientRect(),t=1,i=1,n=!1;if("fixed"==this.position&&this.manager.tooltipViews.length){let{dom:e}=this.manager.tooltipViews[0];if(Rt.gecko)n=e.offsetParent!=this.container.ownerDocument.body;else if(1!=this.view.scaleX||1!=this.view.scaleY)n=!0;else if(e.style.top==Er&&"0px"==e.style.left){let t=e.getBoundingClientRect();n=Math.abs(t.top+1e4)>1||Math.abs(t.left)>1}}if(n||"absolute"==this.position)if(this.parent){let e=this.parent.getBoundingClientRect();e.width&&e.height&&(t=e.width/this.parent.offsetWidth,i=e.height/this.parent.offsetHeight)}else({scaleX:t,scaleY:i}=this.view.viewState);return{editor:e,parent:this.parent?this.container.getBoundingClientRect():e,pos:this.manager.tooltips.map(((e,t)=>{let i=this.manager.tooltipViews[t];return i.getCoords?i.getCoords(e.pos):this.view.coordsAtPos(e.pos)})),size:this.manager.tooltipViews.map((({dom:e})=>e.getBoundingClientRect())),space:this.view.state.facet(Dr).tooltipSpace(this.view),scaleX:t,scaleY:i,makeAbsolute:n}}writeMeasure(e){var t;if(e.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let e of this.manager.tooltipViews)e.dom.style.position="absolute"}let{editor:i,space:n,scaleX:s,scaleY:r}=e,o=[];for(let a=0;a=Math.min(i.bottom,n.bottom)||d.rightMath.min(i.right,n.right)+.1){c.style.top=Er;continue}let p=l.arrow?h.dom.querySelector(".cm-tooltip-arrow"):null,f=p?7:0,m=u.right-u.left,g=null!==(t=Ir.get(h))&&void 0!==t?t:u.bottom-u.top,v=h.offset||Nr,O=this.view.textDirection==Ri.LTR,b=u.width>n.right-n.left?O?n.left:n.right-u.width:O?Math.min(d.left-(p?14:0)+v.x,n.right-m):Math.max(n.left,d.left-m+(p?14:0)-v.x),_=this.above[a];!l.strictSide&&(_?d.top-(u.bottom-u.top)-v.yn.bottom)&&_==n.bottom-d.bottom>d.top-n.top&&(_=this.above[a]=!_);let y=(_?d.top-n.top:n.bottom-d.bottom)-f;if(yb&&e.topw&&(w=_?e.top-g-2-f:e.bottom+f+2);if("absolute"==this.position?(c.style.top=(w-e.parent.top)/r+"px",c.style.left=(b-e.parent.left)/s+"px"):(c.style.top=w/r+"px",c.style.left=b/s+"px"),p){let e=d.left+(O?v.x:-v.x)-(b+14-7);p.style.left=e/s+"px"}!0!==h.overlap&&o.push({left:b,top:w,right:x,bottom:w+g}),c.classList.toggle("cm-tooltip-above",_),c.classList.toggle("cm-tooltip-below",!_),h.positioned&&h.positioned(e.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let e of this.manager.tooltipViews)e.dom.style.top=Er}},{eventObservers:{scroll(){this.maybeMeasure()}}}),Lr=Ds.baseTheme({".cm-tooltip":{zIndex:100,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),Nr={x:0,y:0},Br=q.define({enables:[qr,Lr]}),$r=q.define();class Qr{static create(e){return new Qr(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new Ar(e,$r,(e=>this.createHostedView(e)))}createHostedView(e){let t=e.create(this.view);return t.dom.classList.add("cm-tooltip-section"),this.dom.appendChild(t.dom),this.mounted&&t.mount&&t.mount(this.view),t}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)null===(e=t.destroy)||void 0===e||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let n=i[e];if(void 0!==n)if(void 0===t)t=n;else if(t!==n)return}return t}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}}const zr=Br.compute([$r],(e=>{let t=e.facet($r).filter((e=>e));return 0===t.length?null:{pos:Math.min(...t.map((e=>e.pos))),end:Math.max(...t.filter((e=>null!=e.end)).map((e=>e.end))),create:Qr.create,above:t[0].above,arrow:t.some((e=>e.arrow))}}));class jr{constructor(e,t,i,n,s){this.view=e,this.source=t,this.field=i,this.setHover=n,this.hoverTime=s,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout((()=>this.startHover()),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active)return;let e=Date.now()-this.lastMove.time;ei.bottom||t.xi.right+e.defaultCharacterWidth)return;let r=e.bidiSpans(e.state.doc.lineAt(n)).find((e=>e.from<=n&&e.to>=n)),o=r&&r.dir==Ri.RTL?-1:1;s=t.x{this.pending==t&&(this.pending=null,i&&e.dispatch({effects:this.setHover.of(i)}))}),(t=>mi(e.state,t,"hover tooltip")))}else r&&e.dispatch({effects:this.setHover.of(r)})}mousemove(e){var t;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let i=this.active;if(i&&!Wr(this.lastMove.target)||this.pending){let{pos:n}=i||this.pending,s=null!==(t=null==i?void 0:i.end)&&void 0!==t?t:n;(n==s?this.view.posAtCoords(this.lastMove)==n:function(e,t,i,n,s,r){let o=e.scrollDOM.getBoundingClientRect(),a=e.documentTop+e.documentPadding.top+e.contentHeight;if(o.left>n||o.rights||Math.min(o.bottom,a)=t&&l<=i}(this.view,n,s,e.clientX,e.clientY))||(this.view.dispatch({effects:this.setHover.of(null)}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1,this.active&&!Wr(e.relatedTarget)&&this.view.dispatch({effects:this.setHover.of(null)})}destroy(){clearTimeout(this.hoverTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}}function Wr(e){for(let t=e;t;t=t.parentNode)if(1==t.nodeType&&t.classList.contains("cm-tooltip"))return!0;return!1}function Vr(e,t={}){let i=ae.define(),n=j.define({create:()=>null,update(e,n){if(e&&(t.hideOnChange&&(n.docChanged||n.selection)||t.hideOn&&t.hideOn(n,e)))return null;if(e&&n.docChanged){let t=n.changes.mapPos(e.pos,-1,w.TrackDel);if(null==t)return null;let i=Object.assign(Object.create(null),e);i.pos=t,null!=e.end&&(i.end=n.changes.mapPos(e.end)),e=i}for(let t of n.effects)t.is(i)&&(e=t.value),t.is(Fr)&&(e=null);return e},provide:e=>$r.from(e)});return[n,bi.define((s=>new jr(s,e,n,i,t.hoverTime||300))),zr]}function Ur(e,t){let i=e.plugin(qr);if(!i)return null;let n=i.manager.tooltips.indexOf(t);return n<0?null:i.manager.tooltipViews[n]}const Fr=ae.define(),Hr=q.define({combine(e){let t,i;for(let n of e)t=t||n.topContainer,i=i||n.bottomContainer;return{topContainer:t,bottomContainer:i}}});function Xr(e,t){let i=e.plugin(Yr),n=i?i.specs.indexOf(t):-1;return n>-1?i.panels[n]:null}const Yr=bi.fromClass(class{constructor(e){this.input=e.state.facet(Kr),this.specs=this.input.filter((e=>e)),this.panels=this.specs.map((t=>t(e)));let t=e.state.facet(Hr);this.top=new Gr(e,!0,t.topContainer),this.bottom=new Gr(e,!1,t.bottomContainer),this.top.sync(this.panels.filter((e=>e.top))),this.bottom.sync(this.panels.filter((e=>!e.top)));for(let e of this.panels)e.dom.classList.add("cm-panel"),e.mount&&e.mount()}update(e){let t=e.state.facet(Hr);this.top.container!=t.topContainer&&(this.top.sync([]),this.top=new Gr(e.view,!0,t.topContainer)),this.bottom.container!=t.bottomContainer&&(this.bottom.sync([]),this.bottom=new Gr(e.view,!1,t.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let i=e.state.facet(Kr);if(i!=this.input){let t=i.filter((e=>e)),n=[],s=[],r=[],o=[];for(let i of t){let t,a=this.specs.indexOf(i);a<0?(t=i(e.view),o.push(t)):(t=this.panels[a],t.update&&t.update(e)),n.push(t),(t.top?s:r).push(t)}this.specs=t,this.panels=n,this.top.sync(s),this.bottom.sync(r);for(let e of o)e.dom.classList.add("cm-panel"),e.mount&&e.mount()}else for(let t of this.panels)t.update&&t.update(e)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:e=>Ds.scrollMargins.of((t=>{let i=t.plugin(e);return i&&{top:i.top.scrollMargin(),bottom:i.bottom.scrollMargin()}}))});class Gr{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(0==this.panels.length)return void(this.dom&&(this.dom.remove(),this.dom=void 0));if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let e=this.container||this.view.dom;e.insertBefore(this.dom,this.top?e.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=Zr(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=Zr(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(this.container&&this.classes!=this.view.themeClasses){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}}function Zr(e){let t=e.nextSibling;return e.remove(),t}const Kr=q.define({enables:Yr});class Jr extends _e{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}Jr.prototype.elementClass="",Jr.prototype.toDOM=void 0,Jr.prototype.mapMode=w.TrackBefore,Jr.prototype.startSide=Jr.prototype.endSide=-1,Jr.prototype.point=!0;const eo=q.define(),to={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>Se.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{}},io=q.define();function no(e){return[ro(),io.of(Object.assign(Object.assign({},to),e))]}const so=q.define({combine:e=>e.some((e=>e))});function ro(e){let t=[oo];return e&&!1===e.fixed&&t.push(so.of(!0)),t}const oo=bi.fromClass(class{constructor(e){this.view=e,this.prevViewport=e.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=e.state.facet(io).map((t=>new co(e,t)));for(let e of this.gutters)this.dom.appendChild(e.dom);this.fixed=!e.state.facet(so),this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),e.scrollDOM.insertBefore(this.dom,e.contentDOM)}update(e){if(this.updateGutters(e)){let t=this.prevViewport,i=e.view.viewport,n=Math.min(t.to,i.to)-Math.max(t.from,i.from);this.syncGutters(n<.8*(i.to-i.from))}e.geometryChanged&&(this.dom.style.minHeight=this.view.contentHeight+"px"),this.view.state.facet(so)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":""),this.prevViewport=e.view.viewport}syncGutters(e){let t=this.dom.nextSibling;e&&this.dom.remove();let i=Se.iter(this.view.state.facet(eo),this.view.viewport.from),n=[],s=this.gutters.map((e=>new ho(e,this.view.viewport,-this.view.documentPadding.top)));for(let e of this.view.viewportLineBlocks)if(n.length&&(n=[]),Array.isArray(e.type)){let t=!0;for(let r of e.type)if(r.type==Xt.Text&&t){lo(i,n,r.from);for(let e of s)e.line(this.view,r,n);t=!1}else if(r.widget)for(let e of s)e.widget(this.view,r)}else if(e.type==Xt.Text){lo(i,n,e.from);for(let t of s)t.line(this.view,e,n)}else if(e.widget)for(let t of s)t.widget(this.view,e);for(let e of s)e.finish();e&&this.view.scrollDOM.insertBefore(this.dom,t)}updateGutters(e){let t=e.startState.facet(io),i=e.state.facet(io),n=e.docChanged||e.heightChanged||e.viewportChanged||!Se.eq(e.startState.facet(eo),e.state.facet(eo),e.view.viewport.from,e.view.viewport.to);if(t==i)for(let t of this.gutters)t.update(e)&&(n=!0);else{n=!0;let s=[];for(let n of i){let i=t.indexOf(n);i<0?s.push(new co(this.view,n)):(this.gutters[i].update(e),s.push(this.gutters[i]))}for(let e of this.gutters)e.dom.remove(),s.indexOf(e)<0&&e.destroy();for(let e of s)this.dom.appendChild(e.dom);this.gutters=s}return n}destroy(){for(let e of this.gutters)e.destroy();this.dom.remove()}},{provide:e=>Ds.scrollMargins.of((t=>{let i=t.plugin(e);return i&&0!=i.gutters.length&&i.fixed?t.textDirection==Ri.LTR?{left:i.dom.offsetWidth*t.scaleX}:{right:i.dom.offsetWidth*t.scaleX}:null}))});function ao(e){return Array.isArray(e)?e:[e]}function lo(e,t,i){for(;e.value&&e.from<=i;)e.from==i&&t.push(e.value),e.next()}class ho{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=Se.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:n}=this,s=(t.top-this.height)/e.scaleY,r=t.height/e.scaleY;if(this.i==n.elements.length){let t=new uo(e,r,s,i);n.elements.push(t),n.dom.appendChild(t.dom)}else n.elements[this.i].update(e,r,s,i);this.height=t.bottom,this.i++}line(e,t,i){let n=[];lo(this.cursor,n,t.from),i.length&&(n=n.concat(i));let s=this.gutter.config.lineMarker(e,t,n);s&&n.unshift(s);let r=this.gutter;(0!=n.length||r.config.renderEmptyElements)&&this.addElement(e,t,n)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t);i&&this.addElement(e,t,[i])}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class co{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,(n=>{let s,r=n.target;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let e=r.getBoundingClientRect();s=(e.top+e.bottom)/2}else s=n.clientY;let o=e.lineBlockAtHeight(s-e.documentTop);t.domEventHandlers[i](e,o,n)&&n.preventDefault()}));this.markers=ao(t.markers(e)),t.initialSpacer&&(this.spacer=new uo(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=ao(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let t=this.config.updateSpacer(this.spacer.markers[0],e);t!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[t])}let i=e.view.viewport;return!Se.eq(this.markers,t,i.from,i.to)||!!this.config.lineMarkerChange&&this.config.lineMarkerChange(e)}destroy(){for(let e of this.elements)e.destroy()}}class uo{constructor(e,t,i,n){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,n)}update(e,t,i,n){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),function(e,t){if(e.length!=t.length)return!1;for(let i=0;ibe(e,{formatNumber:String,domEventHandlers:{}},{domEventHandlers(e,t){let i=Object.assign({},e);for(let e in t){let n=i[e],s=t[e];i[e]=n?(e,t,i)=>n(e,t,i)||s(e,t,i):s}return i}})});class mo extends Jr{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function go(e,t){return e.state.facet(fo).formatNumber(t,e.state)}const vo=io.compute([fo],(e=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers:e=>e.state.facet(po),lineMarker:(e,t,i)=>i.some((e=>e.toDOM))?null:new mo(go(e,e.state.doc.lineAt(t.from).number)),widgetMarker:()=>null,lineMarkerChange:e=>e.startState.facet(fo)!=e.state.facet(fo),initialSpacer:e=>new mo(go(e,bo(e.state.doc.lines))),updateSpacer(e,t){let i=go(t.view,bo(t.view.state.doc.lines));return i==e.number?e:new mo(i)},domEventHandlers:e.facet(fo).domEventHandlers})));function Oo(e={}){return[fo.of(e),ro(),vo]}function bo(e){let t=9;for(;t{let t=[],i=-1;for(let n of e.selection.ranges){let s=e.doc.lineAt(n.head).from;s>i&&(i=s,t.push(_o.range(s)))}return Se.of(t)})),wo=1024;let xo=0;class So{constructor(e,t){this.from=e,this.to=t}}class ko{constructor(e={}){this.id=xo++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")})}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return"function"!=typeof e&&(e=Po.match(e)),t=>{let i=e(t);return void 0===i?null:[this,i]}}}ko.closedBy=new ko({deserialize:e=>e.split(" ")}),ko.openedBy=new ko({deserialize:e=>e.split(" ")}),ko.group=new ko({deserialize:e=>e.split(" ")}),ko.contextHash=new ko({perNode:!0}),ko.lookAhead=new ko({perNode:!0}),ko.mounted=new ko({perNode:!0});class To{constructor(e,t,i){this.tree=e,this.overlay=t,this.parser=i}static get(e){return e&&e.props&&e.props[ko.mounted.id]}}const Co=Object.create(null);class Po{constructor(e,t,i,n=0){this.name=e,this.props=t,this.id=i,this.flags=n}static define(e){let t=e.props&&e.props.length?Object.create(null):Co,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(null==e.name?8:0),n=new Po(e.name||"",t,e.id,i);if(e.props)for(let i of e.props)if(Array.isArray(i)||(i=i(n)),i){if(i[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[i[0].id]=i[1]}return n}prop(e){return this.props[e.id]}get isTop(){return(1&this.flags)>0}get isSkipped(){return(2&this.flags)>0}get isError(){return(4&this.flags)>0}get isAnonymous(){return(8&this.flags)>0}is(e){if("string"==typeof e){if(this.name==e)return!0;let t=this.prop(ko.group);return!!t&&t.indexOf(e)>-1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let n of i.split(" "))t[n]=e[i];return e=>{for(let i=e.prop(ko.group),n=-1;n<(i?i.length:0);n++){let s=t[n<0?e.name:i[n]];if(s)return s}}}}Po.none=new Po("",Object.create(null),0,8);class Mo{constructor(e){this.types=e;for(let t=0;t=t){let o=new $o(r.tree,r.overlay[0].from+e.from,0,null);(s||(s=[n])).push(No(o,t,i,!1))}}return s?Vo(s):n}(this,e,t)}iterate(e){let{enter:t,leave:i,from:n=0,to:s=this.length}=e,r=e.mode||0,o=(r&Ro.IncludeAnonymous)>0;for(let e=this.cursor(r|Ro.IncludeAnonymous);;){let r=!1;if(e.from<=s&&e.to>=n&&(!o&&e.type.isAnonymous||!1!==t(e))){if(e.firstChild())continue;r=!0}for(;r&&i&&(o||!e.type.isAnonymous)&&i(e),!e.nextSibling();){if(!e.parent())return;r=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Go(Po.none,this.children,this.positions,0,this.children.length,0,this.length,((e,t,i)=>new Do(this.type,e,t,i,this.propValues)),e.makeTree||((e,t,i)=>new Do(Po.none,e,t,i)))}static build(e){return function(e){var t;let{buffer:i,nodeSet:n,maxBufferLength:s=wo,reused:r=[],minRepeatType:o=n.types.length}=e,a=Array.isArray(i)?new Io(i,i.length):i,l=n.types,h=0,c=0;function d(e,t,i,m,g){let{id:v,start:O,end:b,size:_}=a,y=c;for(;_<0;){if(a.next(),-1==_){let t=r[v];return i.push(t),void m.push(O-e)}if(-3==_)return void(h=v);if(-4==_)return void(c=v);throw new RangeError(`Unrecognized record size: ${_}`)}let w,x,S=l[v],k=O-e;if(b-O<=s&&(x=function(e,t){let i=a.fork(),n=0,r=0,l=0,h=i.end-s,c={size:0,start:0,skip:0};e:for(let s=i.pos-e;i.pos>s;){let e=i.size;if(i.id==t&&e>=0){c.size=n,c.start=r,c.skip=l,l+=4,n+=4,i.next();continue}let a=i.pos-e;if(e<0||a=o?4:0,u=i.start;for(i.next();i.pos>a;){if(i.size<0){if(-3!=i.size)break e;d+=4}else i.id>=o&&(d+=4);i.next()}r=u,n+=e,l+=d}return(t<0||n==e)&&(c.size=n,c.start=r,c.skip=l),c.size>4?c:void 0}(a.pos-t,g))){let t=new Uint16Array(x.size-x.skip),i=a.pos-x.size,s=t.length;for(;a.pos>i;)s=f(x.start,t,s);w=new qo(t,b-x.start,n),k=x.start-e}else{let e=a.pos-_;a.next();let t=[],i=[],n=v>=o?v:-1,r=0,l=b;for(;a.pos>e;)n>=0&&a.id==n&&a.size>=0?(a.end<=l-s&&(u(t,i,O,r,a.end,l,n,y),r=t.length,l=a.end),a.next()):d(O,e,t,i,n);if(n>=0&&r>0&&r-1&&r>0){let e=function(e){return(t,i,n)=>{let s,r,o=0,a=t.length-1;if(a>=0&&(s=t[a])instanceof Do){if(!a&&s.type==e&&s.length==n)return s;(r=s.prop(ko.lookAhead))&&(o=i[a]+s.length+r)}return p(e,t,i,n,o)}}(S);w=Go(S,t,i,0,t.length,0,b-O,e,e)}else w=p(S,t,i,b-O,y-b)}i.push(w),m.push(k)}function u(e,t,i,s,r,o,a,l){let h=[],c=[];for(;e.length>s;)h.push(e.pop()),c.push(t.pop()+i-r);e.push(p(n.types[a],h,c,o-r,l-o)),t.push(r-i)}function p(e,t,i,n,s=0,r){if(h){let e=[ko.contextHash,h];r=r?[e].concat(r):[e]}if(s>25){let e=[ko.lookAhead,s];r=r?[e].concat(r):[e]}return new Do(e,t,i,n,r)}function f(e,t,i){let{id:n,start:s,end:r,size:l}=a;if(a.next(),l>=0&&n4){let n=a.pos-(l-4);for(;a.pos>n;)i=f(e,t,i)}t[--i]=o,t[--i]=r-e,t[--i]=s-e,t[--i]=n}else-3==l?h=n:-4==l&&(c=n);return i}let m=[],g=[];for(;a.pos>0;)d(e.start||0,e.bufferStart||0,m,g,-1);let v=null!==(t=e.length)&&void 0!==t?t:m.length?g[0]+m[0].length:0;return new Do(l[e.topID],m.reverse(),g.reverse(),v)}(e)}}Do.empty=new Do(Po.none,[],[],0);class Io{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new Io(this.buffer,this.index)}}class qo{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return Po.none}toString(){let e=[];for(let t=0;t0));a=r[a+3]);return o}slice(e,t,i){let n=this.buffer,s=new Uint16Array(t-e),r=0;for(let o=e,a=0;o=t&&it;case 1:return i<=t&&n>t;case 2:return n>t;case 4:return!0}}function No(e,t,i,n){for(var s;e.from==e.to||(i<1?e.from>=t:e.from>t)||(i>-1?e.to<=t:e.to0?o.length:-1;e!=l;e+=t){let l=o[e],h=a[e]+r.from;if(Lo(n,i,h,h+l.length))if(l instanceof qo){if(s&Ro.ExcludeBuffers)continue;let o=l.findChild(0,l.buffer.length,t,i-h,n);if(o>-1)return new Wo(new jo(r,l,e,h),null,o)}else if(s&Ro.IncludeAnonymous||!l.type.isAnonymous||Ho(l)){let o;if(!(s&Ro.IgnoreMounts)&&(o=To.get(l))&&!o.overlay)return new $o(o.tree,h,e,r);let a=new $o(l,h,e,r);return s&Ro.IncludeAnonymous||!a.type.isAnonymous?a:a.nextChild(t<0?l.children.length-1:0,t,i,n)}}if(s&Ro.IncludeAnonymous||!r.type.isAnonymous)return null;if(e=r.index>=0?r.index+t:t<0?-1:r._parent._tree.children.length,r=r._parent,!r)return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}enter(e,t,i=0){let n;if(!(i&Ro.IgnoreOverlays)&&(n=To.get(this._tree))&&n.overlay){let i=e-this.from;for(let{from:e,to:s}of n.overlay)if((t>0?e<=i:e=i:s>i))return new $o(n.tree,n.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function Qo(e,t,i,n){let s=e.cursor(),r=[];if(!s.firstChild())return r;if(null!=i)for(;!s.type.is(i);)if(!s.nextSibling())return r;for(;;){if(null!=n&&s.type.is(n))return r;if(s.type.is(t)&&r.push(s.node),!s.nextSibling())return null==n?r:[]}}function zo(e,t,i=t.length-1){for(let n=e.parent;i>=0;n=n.parent){if(!n)return!1;if(!n.type.isAnonymous){if(t[i]&&t[i]!=n.name)return!1;i--}}return!0}class jo{constructor(e,t,i,n){this.parent=e,this.buffer=t,this.index=i,this.start=n}}class Wo extends Bo{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:n}=this.context,s=n.findChild(this.index+4,n.buffer[this.index+3],e,t-this.context.start,i);return s<0?null:new Wo(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}enter(e,t,i=0){if(i&Ro.ExcludeBuffers)return null;let{buffer:n}=this.context,s=n.findChild(this.index+4,n.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new Wo(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new Wo(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new Wo(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,n=this.index+4,s=i.buffer[this.index+3];if(s>n){let r=i.buffer[this.index+1];e.push(i.slice(n,s,r)),t.push(0)}return new Do(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function Vo(e){if(!e.length)return null;if(1==e.length)return e[0];let t=0,i=e[0];for(let n=1;ni.from||s.to0){if(this.index-1)for(let n=t+e,s=e<0?-1:i._tree.children.length;n!=s;n+=e){let e=i._tree.children[n];if(this.mode&Ro.IncludeAnonymous||e instanceof qo||!e.type.isAnonymous||Ho(e))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let r=e;r;r=r._parent)if(r.index==n){if(n==this.index)return r;t=r,i=s+1;break e}n=this.stack[--s]}for(let e=i;e=0;s--){if(s<0)return zo(this.node,e,n);let r=i[t.buffer[this.stack[s]]];if(!r.isAnonymous){if(e[n]&&e[n]!=r.name)return!1;n--}}return!0}}function Ho(e){return e.children.some((e=>e instanceof qo||!e.type.isAnonymous||Ho(e)))}const Xo=new WeakMap;function Yo(e,t){if(!e.isAnonymous||t instanceof qo||t.type!=e)return 1;let i=Xo.get(t);if(null==i){i=1;for(let n of t.children){if(n.type!=e||!(n instanceof Do)){i=1;break}i+=Yo(e,n)}Xo.set(t,i)}return i}function Go(e,t,i,n,s,r,o,a,l){let h=0;for(let i=n;i=c)break;f+=t}if(h==s+1){if(f>c){let e=i[s];t(e.children,e.positions,0,e.children.length,n[s]+a);continue}d.push(i[s])}else{let t=n[h-1]+i[h-1].length-p;d.push(Go(e,i,n,s,h,p,t,null,l))}u.push(p+a-r)}}(t,i,n,s,0),(a||l)(d,u,o)}class Zo{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let n=this.map.get(e);n||this.map.set(e,n=new Map),n.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof Wo?this.setBuffer(e.context.buffer,e.index,t):e instanceof $o&&this.map.set(e.tree,t)}get(e){return e instanceof Wo?this.getBuffer(e.context.buffer,e.index):e instanceof $o?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}}class Ko{constructor(e,t,i,n,s=!1,r=!1){this.from=e,this.to=t,this.tree=i,this.offset=n,this.open=(s?1:0)|(r?2:0)}get openStart(){return(1&this.open)>0}get openEnd(){return(2&this.open)>0}static addTree(e,t=[],i=!1){let n=[new Ko(0,e.length,e,0,!1,i)];for(let i of t)i.to>e.length&&n.push(i);return n}static applyChanges(e,t,i=128){if(!t.length)return e;let n=[],s=1,r=e.length?e[0]:null;for(let o=0,a=0,l=0;;o++){let h=o=i)for(;r&&r.from=t.from||c<=t.to||l){let e=Math.max(t.from,a)-l,i=Math.min(t.to,c)-l;t=e>=i?null:new Ko(e,i,t.tree,t.offset+l,o>0,!!h)}if(t&&n.push(t),r.to>c)break;r=snew So(e.from,e.to))):[new So(0,0)]:[new So(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let n=this.startParse(e,t,i);for(;;){let e=n.advance();if(e)return e}}}class ea{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new ko({perNode:!0});let ta=0;class ia{constructor(e,t,i){this.set=e,this.base=t,this.modified=i,this.id=ta++}static define(e){if(null==e?void 0:e.base)throw new Error("Can not derive from a modified tag");let t=new ia([],null,[]);if(t.set.push(t),e)for(let i of e.set)t.set.push(i);return t}static defineModifier(){let e=new sa;return t=>t.modified.indexOf(e)>-1?t:sa.get(t.base||t,t.modified.concat(e).sort(((e,t)=>e.id-t.id)))}}let na=0;class sa{constructor(){this.instances=[],this.id=na++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find((i=>{return i.base==e&&(n=t,s=i.modified,n.length==s.length&&n.every(((e,t)=>e==s[t])));var n,s}));if(i)return i;let n=[],s=new ia(n,e,t);for(let e of t)e.instances.push(s);let r=function(e){let t=[[]];for(let i=0;it.length-e.length))}(t);for(let t of e.set)if(!t.modified.length)for(let e of r)n.push(sa.get(t,e));return s}}function ra(e){let t=Object.create(null);for(let i in e){let n=e[i];Array.isArray(n)||(n=[n]);for(let e of i.split(" "))if(e){let i=[],s=2,r=e;for(let t=0;;){if("..."==r&&t>0&&t+3==e.length){s=1;break}let n=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(r);if(!n)throw new RangeError("Invalid path: "+e);if(i.push("*"==n[0]?"":'"'==n[0][0]?JSON.parse(n[0]):n[0]),t+=n[0].length,t==e.length)break;let o=e[t++];if(t==e.length&&"!"==o){s=0;break}if("/"!=o)throw new RangeError("Invalid path: "+e);r=e.slice(t)}let o=i.length-1,a=i[o];if(!a)throw new RangeError("Invalid path: "+e);let l=new aa(n,s,o>0?i.slice(0,o):null);t[a]=l.sort(t[a])}}return oa.add(t)}const oa=new ko;class aa{constructor(e,t,i,n){this.tags=e,this.mode=t,this.context=i,this.next=n}get opaque(){return 0==this.mode}get inherit(){return 1==this.mode}sort(e){return!e||e.depth{let t=s;for(let n of e)for(let e of n.set){let n=i[e.id];if(n){t=t?t+" "+n:n;break}}return t},scope:n}}function ha(e,t,i,n=0,s=e.length){let r=new ca(n,Array.isArray(t)?t:[t],i);r.highlightRange(e.cursor(),n,s,"",r.highlighters),r.flush(s)}aa.empty=new aa([],2,null);class ca{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,n,s){let{type:r,from:o,to:a}=e;if(o>=i||a<=t)return;r.isTop&&(s=this.highlighters.filter((e=>!e.scope||e.scope(r))));let l=n,h=function(e){let t=e.type.prop(oa);for(;t&&t.context&&!e.matchContext(t.context);)t=t.next;return t||null}(e)||aa.empty,c=function(e,t){let i=null;for(let n of e){let e=n.style(t);e&&(i=i?i+" "+e:e)}return i}(s,h.tags);if(c&&(l&&(l+=" "),l+=c,1==h.mode&&(n+=(n?" ":"")+c)),this.startSpan(Math.max(t,o),l),h.opaque)return;let d=e.tree&&e.tree.prop(ko.mounted);if(d&&d.overlay){let r=e.node.enter(d.overlay[0].from+o,1),h=this.highlighters.filter((e=>!e.scope||e.scope(d.tree.type))),c=e.firstChild();for(let u=0,p=o;;u++){let f=u=m)&&e.nextSibling()););if(!f||m>i)break;p=f.to+o,p>t&&(this.highlightRange(r.cursor(),Math.max(t,f.from+o),Math.min(i,p),"",h),this.startSpan(Math.min(i,p),l))}c&&e.parent()}else if(e.firstChild()){d&&(n="");do{if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,n,s),this.startSpan(Math.min(i,e.to),l)}}while(e.nextSibling());e.parent()}}}const da=ia.define,ua=da(),pa=da(),fa=da(pa),ma=da(pa),ga=da(),va=da(ga),Oa=da(ga),ba=da(),_a=da(ba),ya=da(),wa=da(),xa=da(),Sa=da(xa),ka=da(),Ta={comment:ua,lineComment:da(ua),blockComment:da(ua),docComment:da(ua),name:pa,variableName:da(pa),typeName:fa,tagName:da(fa),propertyName:ma,attributeName:da(ma),className:da(pa),labelName:da(pa),namespace:da(pa),macroName:da(pa),literal:ga,string:va,docString:da(va),character:da(va),attributeValue:da(va),number:Oa,integer:da(Oa),float:da(Oa),bool:da(ga),regexp:da(ga),escape:da(ga),color:da(ga),url:da(ga),keyword:ya,self:da(ya),null:da(ya),atom:da(ya),unit:da(ya),modifier:da(ya),operatorKeyword:da(ya),controlKeyword:da(ya),definitionKeyword:da(ya),moduleKeyword:da(ya),operator:wa,derefOperator:da(wa),arithmeticOperator:da(wa),logicOperator:da(wa),bitwiseOperator:da(wa),compareOperator:da(wa),updateOperator:da(wa),definitionOperator:da(wa),typeOperator:da(wa),controlOperator:da(wa),punctuation:xa,separator:da(xa),bracket:Sa,angleBracket:da(Sa),squareBracket:da(Sa),paren:da(Sa),brace:da(Sa),content:ba,heading:_a,heading1:da(_a),heading2:da(_a),heading3:da(_a),heading4:da(_a),heading5:da(_a),heading6:da(_a),contentSeparator:da(ba),list:da(ba),quote:da(ba),emphasis:da(ba),strong:da(ba),link:da(ba),monospace:da(ba),strikethrough:da(ba),inserted:da(),deleted:da(),changed:da(),invalid:da(),meta:ka,documentMeta:da(ka),annotation:da(ka),processingInstruction:da(ka),definition:ia.defineModifier(),constant:ia.defineModifier(),function:ia.defineModifier(),standard:ia.defineModifier(),local:ia.defineModifier(),special:ia.defineModifier()};var Ca;la([{tag:Ta.link,class:"tok-link"},{tag:Ta.heading,class:"tok-heading"},{tag:Ta.emphasis,class:"tok-emphasis"},{tag:Ta.strong,class:"tok-strong"},{tag:Ta.keyword,class:"tok-keyword"},{tag:Ta.atom,class:"tok-atom"},{tag:Ta.bool,class:"tok-bool"},{tag:Ta.url,class:"tok-url"},{tag:Ta.labelName,class:"tok-labelName"},{tag:Ta.inserted,class:"tok-inserted"},{tag:Ta.deleted,class:"tok-deleted"},{tag:Ta.literal,class:"tok-literal"},{tag:Ta.string,class:"tok-string"},{tag:Ta.number,class:"tok-number"},{tag:[Ta.regexp,Ta.escape,Ta.special(Ta.string)],class:"tok-string2"},{tag:Ta.variableName,class:"tok-variableName"},{tag:Ta.local(Ta.variableName),class:"tok-variableName tok-local"},{tag:Ta.definition(Ta.variableName),class:"tok-variableName tok-definition"},{tag:Ta.special(Ta.variableName),class:"tok-variableName2"},{tag:Ta.definition(Ta.propertyName),class:"tok-propertyName tok-definition"},{tag:Ta.typeName,class:"tok-typeName"},{tag:Ta.namespace,class:"tok-namespace"},{tag:Ta.className,class:"tok-className"},{tag:Ta.macroName,class:"tok-macroName"},{tag:Ta.propertyName,class:"tok-propertyName"},{tag:Ta.operator,class:"tok-operator"},{tag:Ta.comment,class:"tok-comment"},{tag:Ta.meta,class:"tok-meta"},{tag:Ta.invalid,class:"tok-invalid"},{tag:Ta.punctuation,class:"tok-punctuation"}]);const Pa=new ko;const Ma=new ko;class Ea{constructor(e,t,i=[],n=""){this.data=e,this.name=n,Oe.prototype.hasOwnProperty("tree")||Object.defineProperty(Oe.prototype,"tree",{get(){return Da(this)}}),this.parser=t,this.extension=[ja.of(this),Oe.languageData.of(((e,t,i)=>{let n=Aa(e,t,i),s=n.type.prop(Pa);if(!s)return[];let r=e.facet(s),o=n.type.prop(Ma);if(o){let s=n.resolve(t-n.from,i);for(let t of o)if(t.test(s,e)){let i=e.facet(t.facet);return"replace"==t.type?i:i.concat(r)}}return r}))].concat(i)}isActiveAt(e,t,i=-1){return Aa(e,t,i).type.prop(Pa)==this.data}findRegions(e){let t=e.facet(ja);if((null==t?void 0:t.data)==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],n=(e,t)=>{if(e.prop(Pa)==this.data)return void i.push({from:t,to:t+e.length});let s=e.prop(ko.mounted);if(s){if(s.tree.prop(Pa)==this.data){if(s.overlay)for(let e of s.overlay)i.push({from:e.from+t,to:e.to+t});else i.push({from:t,to:t+e.length});return}if(s.overlay){let e=i.length;if(n(s.tree,s.overlay[0].from+t),i.length>e)return}}for(let i=0;ie.concat(i):void 0}));var i;return new Ra(t,e.parser.configure({props:[Pa.add((e=>e.isTop?t:void 0))]}),e.name)}configure(e,t){return new Ra(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function Da(e){let t=e.field(Ea.state,!1);return t?t.tree:Do.empty}class Ia{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let qa=null;class La{constructor(e,t,i=[],n,s,r,o,a){this.parser=e,this.state=t,this.fragments=i,this.tree=n,this.treeLen=s,this.viewport=r,this.skipped=o,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new La(e,t,[],Do.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Ia(this.state.doc),this.fragments)}work(e,t){return null!=t&&t>=this.state.doc.length&&(t=void 0),this.tree!=Do.empty&&this.isDone(null!=t?t:this.state.doc.length)?(this.takeTree(),!0):this.withContext((()=>{var i;if("number"==typeof e){let t=Date.now()+e;e=()=>Date.now()>t}for(this.parse||(this.parse=this.startParse()),null!=t&&(null==this.parse.stoppedAt||this.parse.stoppedAt>t)&&t=this.treeLen&&((null==this.parse.stoppedAt||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext((()=>{for(;!(t=this.parse.advance()););})),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Ko.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=qa;qa=this;try{return e()}finally{qa=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=Na(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:n,treeLen:s,viewport:r,skipped:o}=this;if(this.takeTree(),!e.empty){let t=[];if(e.iterChangedRanges(((e,i,n,s)=>t.push({fromA:e,toA:i,fromB:n,toB:s}))),i=Ko.applyChanges(i,t),n=Do.empty,s=0,r={from:e.mapPos(r.from,-1),to:e.mapPos(r.to,1)},this.skipped.length){o=[];for(let t of this.skipped){let i=e.mapPos(t.from,1),n=e.mapPos(t.to,-1);ie.from&&(this.fragments=Na(this.fragments,i,n),this.skipped.splice(t--,1))}return!(this.skipped.length>=t||(this.reset(),0))}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends Jo{createParse(t,i,n){let s=n[0].from,r=n[n.length-1].to;return{parsedPos:s,advance(){let t=qa;if(t){for(let e of n)t.tempSkipped.push(e);e&&(t.scheduleOn=t.scheduleOn?Promise.all([t.scheduleOn,e]):e)}return this.parsedPos=r,new Do(Po.none,[],[],r-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&0==t[0].from&&t[0].to>=e}static get(){return qa}}function Na(e,t,i){return Ko.applyChanges(e,[{fromA:t,toA:i,fromB:t,toB:i}])}class Ba{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new Ba(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=La.create(e.facet(ja).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new Ba(i)}}Ea.state=j.define({create:Ba.init,update(e,t){for(let e of t.effects)if(e.is(Ea.setState))return e.value;return t.startState.facet(ja)!=t.state.facet(ja)?Ba.init(t.state):e.apply(t)}});let $a=e=>{let t=setTimeout((()=>e()),500);return()=>clearTimeout(t)};"undefined"!=typeof requestIdleCallback&&($a=e=>{let t=-1,i=setTimeout((()=>{t=requestIdleCallback(e,{timeout:400})}),100);return()=>t<0?clearTimeout(i):cancelIdleCallback(t)});const Qa="undefined"!=typeof navigator&&(null===(Ca=navigator.scheduling)||void 0===Ca?void 0:Ca.isInputPending)?()=>navigator.scheduling.isInputPending():null,za=bi.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(Ea.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(Ea.state);t.tree==t.context.tree&&t.context.isDone(e.doc.length)||(this.working=$a(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEndn+1e3,a=s.context.work((()=>Qa&&Qa()||Date.now()>r),n+(o?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:Ea.setState.of(new Ba(s.context))})),this.chunkBudget>0&&(!a||o)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then((()=>this.scheduleWork())).catch((e=>mi(this.view.state,e))).then((()=>this.workScheduled--)),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),ja=q.define({combine:e=>e.length?e[0]:null,enables:e=>[Ea.state,za,Ds.contentAttributes.compute([e],(t=>{let i=t.facet(e);return i&&i.name?{"data-language":i.name}:{}}))]});class Wa{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const Va=q.define(),Ua=q.define({combine:e=>{if(!e.length)return" ";let t=e[0];if(!t||/\S/.test(t)||Array.from(t).some((e=>e!=t[0])))throw new Error("Invalid indent unit: "+JSON.stringify(e[0]));return t}});function Fa(e){let t=e.facet(Ua);return 9==t.charCodeAt(0)?e.tabSize*t.length:t.length}function Ha(e,t){let i="",n=e.tabSize,s=e.facet(Ua)[0];if("\t"==s){for(;t>=n;)i+="\t",t-=n;s=" "}for(let e=0;e=t?function(e,t,i){let n=t.resolveStack(i),s=n.node.enterUnfinishedNodesBefore(i);if(s!=n.node){let e=[];for(let t=s;t!=n.node;t=t.parent)e.push(t);for(let t=e.length-1;t>=0;t--)n={node:e[t],next:n}}return Za(n,e,i)}(e,i,t):null}class Ya{constructor(e,t={}){this.state=e,this.options=t,this.unit=Fa(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:n,simulateDoubleBreak:s}=this.options;return null!=n&&n>=i.from&&n<=i.to?s&&n==e?{text:"",from:e}:(t<0?n-1&&(s+=r-this.countColumn(i,i.search(/\S|$/))),s}countColumn(e,t=e.length){return Le(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:n}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let e=s(n);if(e>-1)return e}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const Ga=new ko;function Za(e,t,i){for(let n=e;n;n=n.next){let e=Ka(n.node);if(e)return e(el.create(t,i,n))}return 0}function Ka(e){let t=e.type.prop(Ga);if(t)return t;let i,n=e.firstChild;if(n&&(i=n.type.prop(ko.closedBy))){let t=e.lastChild,n=t&&i.indexOf(t.name)>-1;return e=>nl(e,!0,1,void 0,n&&!function(e){return e.pos==e.options.simulateBreak&&e.options.simulateDoubleBreak}(e)?t.from:void 0)}return null==e.parent?Ja:null}function Ja(){return 0}class el extends Ya{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new el(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(tl(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return Za(this.context.next,this.base,this.pos)}}function tl(e,t){for(let i=t;i;i=i.parent)if(e==i)return!0;return!1}function il({closing:e,align:t=!0,units:i=1}){return n=>nl(n,t,i,e)}function nl(e,t,i,n,s){let r=e.textAfter,o=r.match(/^\s*/)[0].length,a=n&&r.slice(o,o+n.length)==n||s==e.pos+o,l=t?function(e){let t=e.node,i=t.childAfter(t.from),n=t.lastChild;if(!i)return null;let s=e.options.simulateBreak,r=e.state.doc.lineAt(i.from),o=null==s||s<=r.from?r.to:Math.min(r.to,s);for(let e=i.to;;){let s=t.childAfter(e);if(!s||s==n)return null;if(!s.type.isSkipped)return s.fromi)continue;if(s&&o.from=t&&n.to>i&&(s=n)}}return s}(e,t,i)}function ll(e,t){let i=t.mapPos(e.from,1),n=t.mapPos(e.to,-1);return i>=n?void 0:{from:i,to:n}}const hl=ae.define({map:ll}),cl=ae.define({map:ll});function dl(e){let t=[];for(let{head:i}of e.state.selection.ranges)t.some((e=>e.from<=i&&e.to>=i))||t.push(e.lineBlockAt(i));return t}const ul=j.define({create:()=>Yt.none,update(e,t){e=e.map(t.changes);for(let i of t.effects)if(i.is(hl)&&!fl(e,i.value.from,i.value.to)){let{preparePlaceholder:n}=t.state.facet(bl),s=n?Yt.replace({widget:new xl(n(t.state,i.value))}):wl;e=e.update({add:[s.range(i.value.from,i.value.to)]})}else i.is(cl)&&(e=e.update({filter:(e,t)=>i.value.from!=e||i.value.to!=t,filterFrom:i.value.from,filterTo:i.value.to}));if(t.selection){let i=!1,{head:n}=t.selection.main;e.between(n,n,((e,t)=>{en&&(i=!0)})),i&&(e=e.update({filterFrom:n,filterTo:n,filter:(e,t)=>t<=n||e>=n}))}return e},provide:e=>Ds.decorations.from(e),toJSON(e,t){let i=[];return e.between(0,t.doc.length,((e,t)=>{i.push(e,t)})),i},fromJSON(e){if(!Array.isArray(e)||e.length%2)throw new RangeError("Invalid JSON for fold state");let t=[];for(let i=0;i{(!s||s.from>e)&&(s={from:e,to:t})})),s}function fl(e,t,i){let n=!1;return e.between(t,t,((e,s)=>{e==t&&s==i&&(n=!0)})),n}function ml(e,t){return e.field(ul,!1)?t:t.concat(ae.appendConfig.of(_l()))}function gl(e,t,i=!0){let n=e.state.doc.lineAt(t.from).number,s=e.state.doc.lineAt(t.to).number;return Ds.announce.of(`${e.state.phrase(i?"Folded lines":"Unfolded lines")} ${n} ${e.state.phrase("to")} ${s}.`)}const vl=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:e=>{for(let t of dl(e)){let i=al(e.state,t.from,t.to);if(i)return e.dispatch({effects:ml(e.state,[hl.of(i),gl(e,i)])}),!0}return!1}},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:e=>{if(!e.state.field(ul,!1))return!1;let t=[];for(let i of dl(e)){let n=pl(e.state,i.from,i.to);n&&t.push(cl.of(n),gl(e,n,!1))}return t.length&&e.dispatch({effects:t}),t.length>0}},{key:"Ctrl-Alt-[",run:e=>{let{state:t}=e,i=[];for(let n=0;n{let t=e.state.field(ul,!1);if(!t||!t.size)return!1;let i=[];return t.between(0,e.state.doc.length,((e,t)=>{i.push(cl.of({from:e,to:t}))})),e.dispatch({effects:i}),!0}}],Ol={placeholderDOM:null,preparePlaceholder:null,placeholderText:"…"},bl=q.define({combine:e=>be(e,Ol)});function _l(e){let t=[ul,Cl];return e&&t.push(bl.of(e)),t}function yl(e,t){let{state:i}=e,n=i.facet(bl),s=t=>{let i=e.lineBlockAt(e.posAtDOM(t.target)),n=pl(e.state,i.from,i.to);n&&e.dispatch({effects:cl.of(n)}),t.preventDefault()};if(n.placeholderDOM)return n.placeholderDOM(e,s,t);let r=document.createElement("span");return r.textContent=n.placeholderText,r.setAttribute("aria-label",i.phrase("folded code")),r.title=i.phrase("unfold"),r.className="cm-foldPlaceholder",r.onclick=s,r}const wl=Yt.replace({widget:new class extends Ht{toDOM(e){return yl(e,null)}}});class xl extends Ht{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return yl(e,this.value)}}const Sl={openText:"⌄",closedText:"›",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class kl extends Jr{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}}function Tl(e={}){let t=Object.assign(Object.assign({},Sl),e),i=new kl(t,!0),n=new kl(t,!1),s=bi.fromClass(class{constructor(e){this.from=e.viewport.from,this.markers=this.buildMarkers(e)}update(e){(e.docChanged||e.viewportChanged||e.startState.facet(ja)!=e.state.facet(ja)||e.startState.field(ul,!1)!=e.state.field(ul,!1)||Da(e.startState)!=Da(e.state)||t.foldingChanged(e))&&(this.markers=this.buildMarkers(e.view))}buildMarkers(e){let t=new ke;for(let s of e.viewportLineBlocks){let r=pl(e.state,s.from,s.to)?n:al(e.state,s.from,s.to)?i:null;r&&t.add(s.from,s.from,r)}return t.finish()}}),{domEventHandlers:r}=t;return[s,no({class:"cm-foldGutter",markers(e){var t;return(null===(t=e.plugin(s))||void 0===t?void 0:t.markers)||Se.empty},initialSpacer:()=>new kl(t,!1),domEventHandlers:Object.assign(Object.assign({},r),{click:(e,t,i)=>{if(r.click&&r.click(e,t,i))return!0;let n=pl(e.state,t.from,t.to);if(n)return e.dispatch({effects:cl.of(n)}),!0;let s=al(e.state,t.from,t.to);return!!s&&(e.dispatch({effects:hl.of(s)}),!0)}})}),_l()]}const Cl=Ds.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}});class Pl{constructor(e,t){let i;function n(e){let t=ze.newName();return(i||(i=Object.create(null)))["."+t]=e,t}this.specs=e;const s="string"==typeof t.all?t.all:t.all?n(t.all):void 0,r=t.scope;this.scope=r instanceof Ea?e=>e.prop(Pa)==r.data:r?e=>e==r:void 0,this.style=la(e.map((e=>({tag:e.tag,class:e.class||n(Object.assign({},e,{tag:null}))}))),{all:s}).style,this.module=i?new ze(i):null,this.themeType=t.themeType}static define(e,t){return new Pl(e,t||{})}}const Ml=q.define(),El=q.define({combine:e=>e.length?[e[0]]:null});function Al(e){let t=e.facet(Ml);return t.length?t:e.facet(El)}function Rl(e,t){let i,n=[Il];return e instanceof Pl&&(e.module&&n.push(Ds.styleModule.of(e.module)),i=e.themeType),(null==t?void 0:t.fallback)?n.push(El.of(e)):i?n.push(Ml.computeN([Ds.darkTheme],(t=>t.facet(Ds.darkTheme)==("dark"==i)?[e]:[]))):n.push(Ml.of(e)),n}class Dl{constructor(e){this.markCache=Object.create(null),this.tree=Da(e.state),this.decorations=this.buildDeco(e,Al(e.state))}update(e){let t=Da(e.state),i=Al(e.state),n=i!=Al(e.startState);t.length{i.add(e,t,this.markCache[n]||(this.markCache[n]=Yt.mark({class:n})))}),n,s);return i.finish()}}const Il=V.high(bi.fromClass(Dl,{decorations:e=>e.decorations})),ql=Pl.define([{tag:Ta.meta,color:"#404740"},{tag:Ta.link,textDecoration:"underline"},{tag:Ta.heading,textDecoration:"underline",fontWeight:"bold"},{tag:Ta.emphasis,fontStyle:"italic"},{tag:Ta.strong,fontWeight:"bold"},{tag:Ta.strikethrough,textDecoration:"line-through"},{tag:Ta.keyword,color:"#708"},{tag:[Ta.atom,Ta.bool,Ta.url,Ta.contentSeparator,Ta.labelName],color:"#219"},{tag:[Ta.literal,Ta.inserted],color:"#164"},{tag:[Ta.string,Ta.deleted],color:"#a11"},{tag:[Ta.regexp,Ta.escape,Ta.special(Ta.string)],color:"#e40"},{tag:Ta.definition(Ta.variableName),color:"#00f"},{tag:Ta.local(Ta.variableName),color:"#30a"},{tag:[Ta.typeName,Ta.namespace],color:"#085"},{tag:Ta.className,color:"#167"},{tag:[Ta.special(Ta.variableName),Ta.macroName],color:"#256"},{tag:Ta.definition(Ta.propertyName),color:"#00c"},{tag:Ta.comment,color:"#940"},{tag:Ta.invalid,color:"#f00"}]),Ll=Ds.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Nl=1e4,Bl="()[]{}",$l=q.define({combine:e=>be(e,{afterCursor:!0,brackets:Bl,maxScanDistance:Nl,renderMatch:jl})}),Ql=Yt.mark({class:"cm-matchingBracket"}),zl=Yt.mark({class:"cm-nonmatchingBracket"});function jl(e){let t=[],i=e.matched?Ql:zl;return t.push(i.range(e.start.from,e.start.to)),e.end&&t.push(i.range(e.end.from,e.end.to)),t}const Wl=j.define({create:()=>Yt.none,update(e,t){if(!t.docChanged&&!t.selection)return e;let i=[],n=t.state.facet($l);for(let e of t.state.selection.ranges){if(!e.empty)continue;let s=Yl(t.state,e.head,-1,n)||e.head>0&&Yl(t.state,e.head-1,1,n)||n.afterCursor&&(Yl(t.state,e.head,1,n)||e.headDs.decorations.from(e)}),Vl=[Wl,Ll];function Ul(e={}){return[$l.of(e),Vl]}const Fl=new ko;function Hl(e,t,i){let n=e.prop(t<0?ko.openedBy:ko.closedBy);if(n)return n;if(1==e.name.length){let n=i.indexOf(e.name);if(n>-1&&n%2==(t<0?1:0))return[i[n+t]]}return null}function Xl(e){let t=e.type.prop(Fl);return t?t(e.node):e}function Yl(e,t,i,n={}){let s=n.maxScanDistance||Nl,r=n.brackets||Bl,o=Da(e),a=o.resolveInner(t,i);for(let e=a;e;e=e.parent){let n=Hl(e.type,i,r);if(n&&e.from0?t>=s.from&&ts.from&&t<=s.to))return Gl(0,0,i,e,s,n,r)}}return function(e,t,i,n,s,r,o){let a=i<0?e.sliceDoc(t-1,t):e.sliceDoc(t,t+1),l=o.indexOf(a);if(l<0||l%2==0!=i>0)return null;let h={from:i<0?t-1:t,to:i>0?t+1:t},c=e.doc.iterRange(t,i>0?e.doc.length:0),d=0;for(let e=0;!c.next().done&&e<=r;){let r=c.value;i<0&&(e+=r.length);let a=t+e*i;for(let e=i>0?0:r.length-1,t=i>0?r.length:-1;e!=t;e+=i){let t=o.indexOf(r[e]);if(!(t<0||n.resolveInner(a+e,1).type!=s))if(t%2==0==i>0)d++;else{if(1==d)return{start:h,end:{from:a+e,to:a+e+1},matched:t>>1==l>>1};d--}}i>0&&(e+=r.length)}return c.done?{start:h,matched:!1}:null}(e,t,i,o,a.type,s,r)}function Gl(e,t,i,n,s,r,o){let a=n.parent,l={from:s.from,to:s.to},h=0,c=null==a?void 0:a.cursor();if(c&&(i<0?c.childBefore(n.from):c.childAfter(n.to)))do{if(i<0?c.to<=n.from:c.from>=n.to){if(0==h&&r.indexOf(c.type.name)>-1&&c.from-1||(Jl.push(e),console.warn(t))}function ih(e,t){let i=[];for(let n of t.split(" ")){let t=[];for(let i of n.split(".")){let n=e[i]||Ta[i];n?"function"==typeof n?t.length?t=t.map(n):th(i,`Modifier ${i} used at start of tag`):t.length?th(i,`Tag ${i} used as modifier`):t=Array.isArray(n)?n:[n]:th(i,`Unknown highlighting tag ${i}`)}for(let e of t)i.push(e)}if(!i.length)return 0;let n=t.replace(/ /g,"_"),s=Po.define({id:Kl.length,name:n,props:[ra({[n]:i})]});return Kl.push(s),s.id}function nh(e,t){return({state:i,dispatch:n})=>{if(i.readOnly)return!1;let s=e(t,i);return!!s&&(n(i.update(s)),!0)}}const sh=nh(ch,0),rh=nh(hh,0),oh=nh(((e,t)=>hh(e,t,function(e){let t=[];for(let i of e.selection.ranges){let n=e.doc.lineAt(i.from),s=i.to<=n.to?n:e.doc.lineAt(i.to),r=t.length-1;r>=0&&t[r].to>n.from?t[r].to=s.to:t.push({from:n.from+/^\s*/.exec(n.text)[0].length,to:s.to})}return t}(t))),0);function ah(e,t){let i=e.languageDataAt("commentTokens",t);return i.length?i[0]:{}}const lh=50;function hh(e,t,i=t.selection.ranges){let n=i.map((e=>ah(t,e.from).block));if(!n.every((e=>e)))return null;let s=i.map(((e,i)=>function(e,{open:t,close:i},n,s){let r,o,a=e.sliceDoc(n-lh,n),l=e.sliceDoc(s,s+lh),h=/\s*$/.exec(a)[0].length,c=/^\s*/.exec(l)[0].length,d=a.length-h;if(a.slice(d-t.length,d)==t&&l.slice(c,c+i.length)==i)return{open:{pos:n-h,margin:h&&1},close:{pos:s+c,margin:c&&1}};s-n<=2*lh?r=o=e.sliceDoc(n,s):(r=e.sliceDoc(n,n+lh),o=e.sliceDoc(s-lh,s));let u=/^\s*/.exec(r)[0].length,p=/\s*$/.exec(o)[0].length,f=o.length-p-i.length;return r.slice(u,u+t.length)==t&&o.slice(f,f+i.length)==i?{open:{pos:n+u+t.length,margin:/\s/.test(r.charAt(u+t.length))?1:0},close:{pos:s-p-i.length,margin:/\s/.test(o.charAt(f-1))?1:0}}:null}(t,n[i],e.from,e.to)));if(2!=e&&!s.every((e=>e)))return{changes:t.changes(i.map(((e,t)=>s[t]?[]:[{from:e.from,insert:n[t].open+" "},{from:e.to,insert:" "+n[t].close}])))};if(1!=e&&s.some((e=>e))){let e=[];for(let t,i=0;is&&(e==r||r>l.from)){s=l.from;let e=/^\s*/.exec(l.text)[0].length,t=e==l.length,i=l.text.slice(e,e+a.length)==a?e:-1;ee.comment<0&&(!e.empty||e.single)))){let e=[];for(let{line:t,token:i,indent:s,empty:r,single:o}of n)!o&&r||e.push({from:t.from+s,insert:i+" "});let i=t.changes(e);return{changes:i,selection:t.selection.map(i,1)}}if(1!=e&&n.some((e=>e.comment>=0))){let e=[];for(let{line:t,comment:i,token:s}of n)if(i>=0){let n=t.from+i,r=n+s.length;" "==t.text[r-t.from]&&r++,e.push({from:n,to:r})}return{changes:e}}return null}const dh=se.define(),uh=se.define(),ph=q.define(),fh=q.define({combine:e=>be(e,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,n)=>e(i,n)||t(i,n)})}),mh=j.define({create:()=>Rh.empty,update(e,t){let i=t.state.facet(fh),n=t.annotation(dh);if(n){let s=t.docChanged?R.single(function(e){let t=0;return e.iterChangedRanges(((e,i)=>t=i)),t}(t.changes)):void 0,r=wh.fromTransaction(t,s),o=n.side,a=0==o?e.undone:e.done;return a=r?xh(a,a.length,i.minDepth,r):Ch(a,t.startState.selection),new Rh(0==o?n.rest:a,0==o?a:n.rest)}let s=t.annotation(uh);if("full"!=s&&"before"!=s||(e=e.isolate()),!1===t.annotation(le.addToHistory))return t.changes.empty?e:e.addMapping(t.changes.desc);let r=wh.fromTransaction(t),o=t.annotation(le.time),a=t.annotation(le.userEvent);return r?e=e.addChanges(r,o,a,i,t):t.selection&&(e=e.addSelection(t.startState.selection,o,a,i.newGroupDelay)),"full"!=s&&"after"!=s||(e=e.isolate()),e},toJSON:e=>({done:e.done.map((e=>e.toJSON())),undone:e.undone.map((e=>e.toJSON()))}),fromJSON:e=>new Rh(e.done.map(wh.fromJSON),e.undone.map(wh.fromJSON))});function gh(e={}){return[mh,fh.of(e),Ds.domEventHandlers({beforeinput(e,t){let i="historyUndo"==e.inputType?Oh:"historyRedo"==e.inputType?bh:null;return!!i&&(e.preventDefault(),i(t))}})]}function vh(e,t){return function({state:i,dispatch:n}){if(!t&&i.readOnly)return!1;let s=i.field(mh,!1);if(!s)return!1;let r=s.pop(e,i,t);return!!r&&(n(r),!0)}}const Oh=vh(0,!1),bh=vh(1,!1),_h=vh(0,!0),yh=vh(1,!0);class wh{constructor(e,t,i,n,s){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=n,this.selectionsAfter=s}setSelAfter(e){return new wh(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:null===(e=this.changes)||void 0===e?void 0:e.toJSON(),mapped:null===(t=this.mapped)||void 0===t?void 0:t.toJSON(),startSelection:null===(i=this.startSelection)||void 0===i?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map((e=>e.toJSON()))}}static fromJSON(e){return new wh(e.changes&&S.fromJSON(e.changes),[],e.mapped&&x.fromJSON(e.mapped),e.startSelection&&R.fromJSON(e.startSelection),e.selectionsAfter.map(R.fromJSON))}static fromTransaction(e,t){let i=kh;for(let t of e.startState.facet(ph)){let n=t(e);n.length&&(i=i.concat(n))}return!i.length&&e.changes.empty?null:new wh(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,kh)}static selection(e){return new wh(void 0,kh,void 0,void 0,e)}}function xh(e,t,i,n){let s=t+1>i+20?t-i-1:0,r=e.slice(s,t);return r.push(n),r}function Sh(e,t){return e.length?t.length?e.concat(t):e:t}const kh=[],Th=200;function Ch(e,t){if(e.length){let i=e[e.length-1],n=i.selectionsAfter.slice(Math.max(0,i.selectionsAfter.length-Th));return n.length&&n[n.length-1].eq(t)?e:(n.push(t),xh(e,e.length-1,1e9,i.setSelAfter(n)))}return[wh.selection([t])]}function Ph(e){let t=e[e.length-1],i=e.slice();return i[e.length-1]=t.setSelAfter(t.selectionsAfter.slice(0,t.selectionsAfter.length-1)),i}function Mh(e,t){if(!e.length)return e;let i=e.length,n=kh;for(;i;){let s=Eh(e[i-1],t,n);if(s.changes&&!s.changes.empty||s.effects.length){let t=e.slice(0,i);return t[i-1]=s,t}t=s.mapped,i--,n=s.selectionsAfter}return n.length?[wh.selection(n)]:kh}function Eh(e,t,i){let n=Sh(e.selectionsAfter.length?e.selectionsAfter.map((e=>e.map(t))):kh,i);if(!e.changes)return wh.selection(n);let s=e.changes.map(t),r=t.mapDesc(e.changes,!0),o=e.mapped?e.mapped.composeDesc(r):r;return new wh(s,ae.mapEffects(e.effects,t),o,e.startSelection.map(r),n)}const Ah=/^(input\.type|delete)($|\.)/;class Rh{constructor(e,t,i=0,n=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=n}isolate(){return this.prevTime?new Rh(this.done,this.undone):this}addChanges(e,t,i,n,s){let r=this.done,o=r[r.length-1];return r=o&&o.changes&&!o.changes.empty&&e.changes&&(!i||Ah.test(i))&&(!o.selectionsAfter.length&&t-this.prevTimei.push(e,t))),t.iterChangedRanges(((e,t,s,r)=>{for(let e=0;e=t&&s<=o&&(n=!0)}})),n}(o.changes,e.changes))||"input.type.compose"==i)?xh(r,r.length-1,n.minDepth,new wh(e.changes.compose(o.changes),Sh(e.effects,o.effects),o.mapped,o.startSelection,kh)):xh(r,r.length,n.minDepth,e),new Rh(r,kh,t,i)}addSelection(e,t,i,n){let s=this.done.length?this.done[this.done.length-1].selectionsAfter:kh;return s.length>0&&t-this.prevTimee.empty!=o.ranges[t].empty)).length)?this:new Rh(Ch(this.done,e),this.undone,t,i);var r,o}addMapping(e){return new Rh(Mh(this.done,e),Mh(this.undone,e),this.prevTime,this.prevUserEvent)}pop(e,t,i){let n=0==e?this.done:this.undone;if(0==n.length)return null;let s=n[n.length-1];if(i&&s.selectionsAfter.length)return t.update({selection:s.selectionsAfter[s.selectionsAfter.length-1],annotations:dh.of({side:e,rest:Ph(n)}),userEvent:0==e?"select.undo":"select.redo",scrollIntoView:!0});if(s.changes){let i=1==n.length?kh:n.slice(0,n.length-1);return s.mapped&&(i=Mh(i,s.mapped)),t.update({changes:s.changes,selection:s.startSelection,effects:s.effects,annotations:dh.of({side:e,rest:i}),filter:!1,userEvent:0==e?"undo":"redo",scrollIntoView:!0})}return null}}Rh.empty=new Rh(kh,kh);const Dh=[{key:"Mod-z",run:Oh,preventDefault:!0},{key:"Mod-y",mac:"Mod-Shift-z",run:bh,preventDefault:!0},{linux:"Ctrl-Shift-z",run:bh,preventDefault:!0},{key:"Mod-u",run:_h,preventDefault:!0},{key:"Alt-u",mac:"Mod-Shift-u",run:yh,preventDefault:!0}];function Ih(e,t){return R.create(e.ranges.map(t),e.mainIndex)}function qh(e,t){return e.update({selection:t,scrollIntoView:!0,userEvent:"select"})}function Lh({state:e,dispatch:t},i){let n=Ih(e.selection,i);return!n.eq(e.selection)&&(t(qh(e,n)),!0)}function Nh(e,t){return R.cursor(t?e.to:e.from)}function Bh(e,t){return Lh(e,(i=>i.empty?e.moveByChar(i,t):Nh(i,t)))}function $h(e){return e.textDirectionAt(e.state.selection.main.head)==Ri.LTR}const Qh=e=>Bh(e,!$h(e)),zh=e=>Bh(e,$h(e));function jh(e,t){return Lh(e,(i=>i.empty?e.moveByGroup(i,t):Nh(i,t)))}function Wh(e,t,i){if(t.type.prop(i))return!0;let n=t.to-t.from;return n&&(n>2||/[^\s,.;:]/.test(e.sliceDoc(t.from,t.to)))||t.firstChild}function Vh(e,t,i){let n,s,r=Da(e).resolveInner(t.head),o=i?ko.closedBy:ko.openedBy;for(let n=t.head;;){let t=i?r.childAfter(n):r.childBefore(n);if(!t)break;Wh(e,t,o)?r=t:n=i?t.to:t.from}return s=r.type.prop(o)&&(n=i?Yl(e,r.from,1):Yl(e,r.to,-1))&&n.matched?i?n.end.to:n.end.from:i?r.to:r.from,R.cursor(s,i?-1:1)}function Uh(e,t){return Lh(e,(i=>{if(!i.empty)return Nh(i,t);let n=e.moveVertically(i,t);return n.head!=i.head?n:e.moveToLineBoundary(i,t)}))}"undefined"!=typeof Intl&&Intl.Segmenter;const Fh=e=>Uh(e,!1),Hh=e=>Uh(e,!0);function Xh(e){let t,i=e.scrollDOM.clientHeighti.empty?e.moveVertically(i,t,n.height):Nh(i,t)));if(r.eq(s.selection))return!1;if(n.selfScroll){let t=e.coordsAtPos(s.selection.main.head),o=e.scrollDOM.getBoundingClientRect(),a=o.top+n.marginTop,l=o.bottom-n.marginBottom;t&&t.top>a&&t.bottomYh(e,!1),Zh=e=>Yh(e,!0);function Kh(e,t,i){let n=e.lineBlockAt(t.head),s=e.moveToLineBoundary(t,i);if(s.head==t.head&&s.head!=(i?n.to:n.from)&&(s=e.moveToLineBoundary(t,i,!1)),!i&&s.head==n.from&&n.length){let i=/^\s*/.exec(e.state.sliceDoc(n.from,Math.min(n.from+100,n.to)))[0].length;i&&t.head!=n.from+i&&(s=R.cursor(n.from+i))}return s}function Jh(e,t){let i=Ih(e.state.selection,(e=>{let i=t(e);return R.range(e.anchor,i.head,i.goalColumn,i.bidiLevel||void 0)}));return!i.eq(e.state.selection)&&(e.dispatch(qh(e.state,i)),!0)}function ec(e,t){return Jh(e,(i=>e.moveByChar(i,t)))}const tc=e=>ec(e,!$h(e)),ic=e=>ec(e,$h(e));function nc(e,t){return Jh(e,(i=>e.moveByGroup(i,t)))}function sc(e,t){return Jh(e,(i=>e.moveVertically(i,t)))}const rc=e=>sc(e,!1),oc=e=>sc(e,!0);function ac(e,t){return Jh(e,(i=>e.moveVertically(i,t,Xh(e).height)))}const lc=e=>ac(e,!1),hc=e=>ac(e,!0),cc=({state:e,dispatch:t})=>(t(qh(e,{anchor:0})),!0),dc=({state:e,dispatch:t})=>(t(qh(e,{anchor:e.doc.length})),!0),uc=({state:e,dispatch:t})=>(t(qh(e,{anchor:e.selection.main.anchor,head:0})),!0),pc=({state:e,dispatch:t})=>(t(qh(e,{anchor:e.selection.main.anchor,head:e.doc.length})),!0);function fc(e,t){if(e.state.readOnly)return!1;let i="delete.selection",{state:n}=e,s=n.changeByRange((n=>{let{from:s,to:r}=n;if(s==r){let o=t(n);os&&(i="delete.forward",o=mc(e,o,!0)),s=Math.min(s,o),r=Math.max(r,o)}else s=mc(e,s,!1),r=mc(e,r,!0);return s==r?{range:n}:{changes:{from:s,to:r},range:R.cursor(s,st(e))))n.between(t,t,((e,n)=>{et&&(t=i?n:e)}));return t}const gc=(e,t)=>fc(e,(i=>{let n,s,r=i.from,{state:o}=e,a=o.doc.lineAt(r);if(!t&&r>a.from&&rgc(e,!1),Oc=e=>gc(e,!0),bc=(e,t)=>fc(e,(i=>{let n=i.head,{state:s}=e,r=s.doc.lineAt(n),o=s.charCategorizer(n);for(let e=null;;){if(n==(t?r.to:r.from)){n==i.head&&r.number!=(t?s.doc.lines:1)&&(n+=t?1:-1);break}let a=p(r.text,n-r.from,t)+r.from,l=r.text.slice(Math.min(n,a)-r.from,Math.max(n,a)-r.from),h=o(l);if(null!=e&&h!=e)break;" "==l&&n==i.head||(e=h),n=a}return n})),_c=e=>bc(e,!1);function yc(e){let t=[],i=-1;for(let n of e.selection.ranges){let s=e.doc.lineAt(n.from),r=e.doc.lineAt(n.to);if(n.empty||n.to!=r.from||(r=e.doc.lineAt(n.to-1)),i>=s.number){let e=t[t.length-1];e.to=r.to,e.ranges.push(n)}else t.push({from:s.from,to:r.to,ranges:[n]});i=r.number+1}return t}function wc(e,t,i){if(e.readOnly)return!1;let n=[],s=[];for(let t of yc(e)){if(i?t.to==e.doc.length:0==t.from)continue;let r=e.doc.lineAt(i?t.to+1:t.from-1),o=r.length+1;if(i){n.push({from:t.to,to:r.to},{from:t.from,insert:r.text+e.lineBreak});for(let i of t.ranges)s.push(R.range(Math.min(e.doc.length,i.anchor+o),Math.min(e.doc.length,i.head+o)))}else{n.push({from:r.from,to:t.from},{from:t.to,insert:e.lineBreak+r.text});for(let e of t.ranges)s.push(R.range(e.anchor-o,e.head-o))}}return!!n.length&&(t(e.update({changes:n,scrollIntoView:!0,selection:R.create(s,e.selection.mainIndex),userEvent:"move.line"})),!0)}function xc(e,t,i){if(e.readOnly)return!1;let n=[];for(let t of yc(e))i?n.push({from:t.from,insert:e.doc.slice(t.from,t.to)+e.lineBreak}):n.push({from:t.to,insert:e.lineBreak+e.doc.slice(t.from,t.to)});return t(e.update({changes:n,scrollIntoView:!0,userEvent:"input.copyline"})),!0}const Sc=kc(!1);function kc(t){return({state:i,dispatch:n})=>{if(i.readOnly)return!1;let s=i.changeByRange((n=>{let{from:s,to:r}=n,o=i.doc.lineAt(s),a=!t&&s==r&&function(e,t){if(/\(\)|\[\]|\{\}/.test(e.sliceDoc(t-1,t+1)))return{from:t,to:t};let i,n=Da(e).resolveInner(t),s=n.childBefore(t),r=n.childAfter(t);return s&&r&&s.to<=t&&r.from>=t&&(i=s.type.prop(ko.closedBy))&&i.indexOf(r.name)>-1&&e.doc.lineAt(s.to).from==e.doc.lineAt(r.from).from&&!/\S/.test(e.sliceDoc(s.to,r.from))?{from:s.to,to:r.from}:null}(i,s);t&&(s=r=(r<=o.to?o:i.doc.lineAt(r)).to);let l=new Ya(i,{simulateBreak:s,simulateDoubleBreak:!!a}),h=Xa(l,s);for(null==h&&(h=Le(/^\s*/.exec(i.doc.lineAt(s).text)[0],i.tabSize));ro.from&&s{let s=[];for(let r=n.from;r<=n.to;){let o=e.doc.lineAt(r);o.number>i&&(n.empty||n.to>o.from)&&(t(o,s,n),i=o.number),r=o.to+1}let r=e.changes(s);return{changes:s,range:R.range(r.mapPos(n.anchor,1),r.mapPos(n.head,1))}}))}const Cc=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:e=>Lh(e,(t=>Vh(e.state,t,!$h(e)))),shift:e=>Jh(e,(t=>Vh(e.state,t,!$h(e))))},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:e=>Lh(e,(t=>Vh(e.state,t,$h(e)))),shift:e=>Jh(e,(t=>Vh(e.state,t,$h(e))))},{key:"Alt-ArrowUp",run:({state:e,dispatch:t})=>wc(e,t,!1)},{key:"Shift-Alt-ArrowUp",run:({state:e,dispatch:t})=>xc(e,t,!1)},{key:"Alt-ArrowDown",run:({state:e,dispatch:t})=>wc(e,t,!0)},{key:"Shift-Alt-ArrowDown",run:({state:e,dispatch:t})=>xc(e,t,!0)},{key:"Escape",run:({state:e,dispatch:t})=>{let i=e.selection,n=null;return i.ranges.length>1?n=R.create([i.main]):i.main.empty||(n=R.create([R.cursor(i.main.head)])),!!n&&(t(qh(e,n)),!0)}},{key:"Mod-Enter",run:kc(!0)},{key:"Alt-l",mac:"Ctrl-l",run:({state:e,dispatch:t})=>{let i=yc(e).map((({from:t,to:i})=>R.range(t,Math.min(i+1,e.doc.length))));return t(e.update({selection:R.create(i),userEvent:"select"})),!0}},{key:"Mod-i",run:({state:e,dispatch:t})=>{let i=Ih(e.selection,(t=>{var i;for(let n=Da(e).resolveStack(t.from,1);n;n=n.next){let{node:e}=n;if((e.from=t.to||e.to>t.to&&e.from<=t.from)&&(null===(i=e.parent)||void 0===i?void 0:i.parent))return R.range(e.to,e.from)}return t}));return t(qh(e,i)),!0},preventDefault:!0},{key:"Mod-[",run:({state:e,dispatch:t})=>!e.readOnly&&(t(e.update(Tc(e,((t,i)=>{let n=/^\s*/.exec(t.text)[0];if(!n)return;let s=Le(n,e.tabSize),r=0,o=Ha(e,Math.max(0,s-Fa(e)));for(;r!e.readOnly&&(t(e.update(Tc(e,((t,i)=>{i.push({from:t.from,insert:e.facet(Ua)})})),{userEvent:"input.indent"})),!0)},{key:"Mod-Alt-\\",run:({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=Object.create(null),n=new Ya(e,{overrideIndentation:e=>{let t=i[e];return null==t?-1:t}}),s=Tc(e,((t,s,r)=>{let o=Xa(n,t.from);if(null==o)return;/\S/.test(t.text)||(o=0);let a=/^\s*/.exec(t.text)[0],l=Ha(e,o);(a!=l||r.from{if(e.state.readOnly)return!1;let{state:t}=e,i=t.changes(yc(t).map((({from:e,to:i})=>(e>0?e--:ie.moveVertically(t,!0))).map(i);return e.dispatch({changes:i,selection:n,scrollIntoView:!0,userEvent:"delete.line"}),!0}},{key:"Shift-Mod-\\",run:({state:e,dispatch:t})=>function(e,t,i){let n=!1,s=Ih(e.selection,(t=>{let s=Yl(e,t.head,-1)||Yl(e,t.head,1)||t.head>0&&Yl(e,t.head-1,1)||t.head{let{state:t}=e,i=t.doc.lineAt(t.selection.main.from),n=ah(e.state,i.from);return n.line?sh(e):!!n.block&&oh(e)}},{key:"Alt-A",run:rh}].concat([{key:"ArrowLeft",run:Qh,shift:tc,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:e=>jh(e,!$h(e)),shift:e=>nc(e,!$h(e)),preventDefault:!0},{mac:"Cmd-ArrowLeft",run:e=>Lh(e,(t=>Kh(e,t,!$h(e)))),shift:e=>Jh(e,(t=>Kh(e,t,!$h(e)))),preventDefault:!0},{key:"ArrowRight",run:zh,shift:ic,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:e=>jh(e,$h(e)),shift:e=>nc(e,$h(e)),preventDefault:!0},{mac:"Cmd-ArrowRight",run:e=>Lh(e,(t=>Kh(e,t,$h(e)))),shift:e=>Jh(e,(t=>Kh(e,t,$h(e)))),preventDefault:!0},{key:"ArrowUp",run:Fh,shift:rc,preventDefault:!0},{mac:"Cmd-ArrowUp",run:cc,shift:uc},{mac:"Ctrl-ArrowUp",run:Gh,shift:lc},{key:"ArrowDown",run:Hh,shift:oc,preventDefault:!0},{mac:"Cmd-ArrowDown",run:dc,shift:pc},{mac:"Ctrl-ArrowDown",run:Zh,shift:hc},{key:"PageUp",run:Gh,shift:lc},{key:"PageDown",run:Zh,shift:hc},{key:"Home",run:e=>Lh(e,(t=>Kh(e,t,!1))),shift:e=>Jh(e,(t=>Kh(e,t,!1))),preventDefault:!0},{key:"Mod-Home",run:cc,shift:uc},{key:"End",run:e=>Lh(e,(t=>Kh(e,t,!0))),shift:e=>Jh(e,(t=>Kh(e,t,!0))),preventDefault:!0},{key:"Mod-End",run:dc,shift:pc},{key:"Enter",run:Sc},{key:"Mod-a",run:({state:e,dispatch:t})=>(t(e.update({selection:{anchor:0,head:e.doc.length},userEvent:"select"})),!0)},{key:"Backspace",run:vc,shift:vc},{key:"Delete",run:Oc},{key:"Mod-Backspace",mac:"Alt-Backspace",run:_c},{key:"Mod-Delete",mac:"Alt-Delete",run:e=>bc(e,!0)},{mac:"Mod-Backspace",run:e=>fc(e,(t=>{let i=e.moveToLineBoundary(t,!1).head;return t.head>i?i:Math.max(0,t.head-1)}))},{mac:"Mod-Delete",run:e=>fc(e,(t=>{let i=e.moveToLineBoundary(t,!0).head;return t.headLh(e,(t=>R.cursor(e.lineBlockAt(t.head).from,1))),shift:e=>Jh(e,(t=>R.cursor(e.lineBlockAt(t.head).from)))},{key:"Ctrl-e",run:e=>Lh(e,(t=>R.cursor(e.lineBlockAt(t.head).to,-1))),shift:e=>Jh(e,(t=>R.cursor(e.lineBlockAt(t.head).to)))},{key:"Ctrl-d",run:Oc},{key:"Ctrl-h",run:vc},{key:"Ctrl-k",run:e=>fc(e,(t=>{let i=e.lineBlockAt(t.head).to;return t.head{if(t.readOnly)return!1;let n=t.changeByRange((t=>({changes:{from:t.from,to:t.to,insert:e.of(["",""])},range:R.cursor(t.from)})));return i(t.update(n,{scrollIntoView:!0,userEvent:"input"})),!0}},{key:"Ctrl-t",run:({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange((t=>{if(!t.empty||0==t.from||t.from==e.doc.length)return{range:t};let i=t.from,n=e.doc.lineAt(i),s=i==n.from?i-1:p(n.text,i-n.from,!1)+n.from,r=i==n.to?i+1:p(n.text,i-n.from,!0)+n.from;return{changes:{from:s,to:r,insert:e.doc.slice(i,r).append(e.doc.slice(s,i))},range:R.cursor(r)}}));return!i.changes.empty&&(t(e.update(i,{scrollIntoView:!0,userEvent:"move.character"})),!0)}},{key:"Ctrl-v",run:Zh}].map((e=>({mac:e.key,run:e.run,shift:e.shift})))));function Pc(){var e=arguments[0];"string"==typeof e&&(e=document.createElement(e));var t=1,i=arguments[1];if(i&&"object"==typeof i&&null==i.nodeType&&!Array.isArray(i)){for(var n in i)if(Object.prototype.hasOwnProperty.call(i,n)){var s=i[n];"string"==typeof s?e.setAttribute(n,s):null!=s&&(e[n]=s)}t++}for(;te.normalize("NFKD"):e=>e;class Ac{constructor(e,t,i=0,n=e.length,s,r){this.test=r,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,n),this.bufferStart=i,this.normalize=s?e=>s(Ec(e)):Ec,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return O(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=b(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=_(e);let n=this.normalize(t);for(let e=0,s=i;;e++){let r=n.charCodeAt(e),o=this.match(r,s);if(e==n.length-1){if(o)return this.value=o,this;break}s==i&&ethis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,n=i+t[0].length;if(this.matchPos=Bc(this.text,n+(i==n?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,n,t)))return this.value={from:i,to:n,match:t},this;e=this.matchPos-this.curLineStart}else{if(!(this.curLineStart+this.curLine.length=i||n.to<=t){let n=new Lc(t,e.sliceString(t,i));return qc.set(e,n),n}if(n.from==t&&n.to==i)return n;let{text:s,from:r}=n;return r>t&&(s=e.sliceString(t,r)+s,r=t),n.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let e=this.flat.from+t.index,i=e+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(e,i,t)))return this.value={from:e,to:i,match:t},this.matchPos=Bc(this.text,i+(e==i?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=Lc.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+2*this.flat.text.length))}}}function Bc(e,t){if(t>=e.length)return t;let i,n=e.lineAt(t);for(;t=56320&&i<57344;)t++;return t}function $c(e){let t=Pc("input",{class:"cm-textfield",name:"line",value:String(e.state.doc.lineAt(e.state.selection.main.head).number)});function i(){let i=/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(t.value);if(!i)return;let{state:n}=e,s=n.doc.lineAt(n.selection.main.head),[,r,o,a,l]=i,h=a?+a.slice(1):0,c=o?+o:s.number;if(o&&l){let e=c/100;r&&(e=e*("-"==r?-1:1)+s.number/n.doc.lines),c=Math.round(n.doc.lines*e)}else o&&r&&(c=c*("-"==r?-1:1)+s.number);let d=n.doc.line(Math.max(1,Math.min(n.doc.lines,c))),u=R.cursor(d.from+Math.max(0,Math.min(h,d.length)));e.dispatch({effects:[Qc.of(!1),Ds.scrollIntoView(u.from,{y:"center"})],selection:u}),e.focus()}return{dom:Pc("form",{class:"cm-gotoLine",onkeydown:t=>{27==t.keyCode?(t.preventDefault(),e.dispatch({effects:Qc.of(!1)}),e.focus()):13==t.keyCode&&(t.preventDefault(),i())},onsubmit:e=>{e.preventDefault(),i()}},Pc("label",e.state.phrase("Go to line"),": ",t)," ",Pc("button",{class:"cm-button",type:"submit"},e.state.phrase("go")))}}"undefined"!=typeof Symbol&&(Ic.prototype[Symbol.iterator]=Nc.prototype[Symbol.iterator]=function(){return this});const Qc=ae.define(),zc=j.define({create:()=>!0,update(e,t){for(let i of t.effects)i.is(Qc)&&(e=i.value);return e},provide:e=>Kr.from(e,(e=>e?$c:null))}),jc=Ds.baseTheme({".cm-panel.cm-gotoLine":{padding:"2px 6px 4px","& label":{fontSize:"80%"}}}),Wc={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},Vc=q.define({combine:e=>be(e,Wc,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})});function Uc(e){let t=[Gc,Yc];return e&&t.push(Vc.of(e)),t}const Fc=Yt.mark({class:"cm-selectionMatch"}),Hc=Yt.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function Xc(e,t,i,n){return!(0!=i&&e(t.sliceDoc(i-1,i))==me.Word||n!=t.doc.length&&e(t.sliceDoc(n,n+1))==me.Word)}const Yc=bi.fromClass(class{constructor(e){this.decorations=this.getDeco(e)}update(e){(e.selectionSet||e.docChanged||e.viewportChanged)&&(this.decorations=this.getDeco(e.view))}getDeco(e){let t=e.state.facet(Vc),{state:i}=e,n=i.selection;if(n.ranges.length>1)return Yt.none;let s,r=n.main,o=null;if(r.empty){if(!t.highlightWordAroundCursor)return Yt.none;let e=i.wordAt(r.head);if(!e)return Yt.none;o=i.charCategorizer(r.head),s=i.sliceDoc(e.from,e.to)}else{let e=r.to-r.from;if(e200)return Yt.none;if(t.wholeWords){if(s=i.sliceDoc(r.from,r.to),o=i.charCategorizer(r.head),!Xc(o,i,r.from,r.to)||!function(e,t,i,n){return e(t.sliceDoc(i,i+1))==me.Word&&e(t.sliceDoc(n-1,n))==me.Word}(o,i,r.from,r.to))return Yt.none}else if(s=i.sliceDoc(r.from,r.to).trim(),!s)return Yt.none}let a=[];for(let n of e.visibleRanges){let e=new Ac(i.doc,s,n.from,n.to);for(;!e.next().done;){let{from:n,to:s}=e.value;if((!o||Xc(o,i,n,s))&&(r.empty&&n<=r.from&&s>=r.to?a.push(Hc.range(n,s)):(n>=r.to||s<=r.from)&&a.push(Fc.range(n,s)),a.length>t.maxMatches))return Yt.none}}return Yt.set(a)}},{decorations:e=>e.decorations}),Gc=Ds.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),Zc=q.define({combine:e=>be(e,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Td(e),scrollToMatch:e=>Ds.scrollIntoView(e)})});class Kc{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||function(e){try{return new RegExp(e,Dc),!0}catch(e){return!1}}(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,((e,t)=>"n"==t?"\n":"r"==t?"\r":"t"==t?"\t":"\\"))}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord}create(){return this.regexp?new rd(this):new td(this)}getCursor(e,t=0,i){let n=e.doc?e:Oe.create({doc:e});return null==i&&(i=n.doc.length),this.regexp?id(this,n,t,i):ed(this,n,t,i)}}class Jc{constructor(e){this.spec=e}}function ed(e,t,i,n){return new Ac(t.doc,e.unquoted,i,n,e.caseSensitive?void 0:e=>e.toLowerCase(),e.wholeWord?function(e,t){return(i,n,s,r)=>((r>i||r+s.length=t)return null;n.push(i.value)}return n}highlight(e,t,i,n){let s=ed(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!s.next().done;)n(s.value.from,s.value.to)}}function id(e,t,i,n){return new Ic(t.doc,e.search,{ignoreCase:!e.caseSensitive,test:e.wholeWord?(s=t.charCategorizer(t.selection.main.head),(e,t,i)=>!i[0].length||(s(nd(i.input,i.index))!=me.Word||s(sd(i.input,i.index))!=me.Word)&&(s(sd(i.input,i.index+i[0].length))!=me.Word||s(nd(i.input,i.index+i[0].length))!=me.Word)):void 0},i,n);var s}function nd(e,t){return e.slice(p(e,t,!1),t)}function sd(e,t){return e.slice(t,p(e,t))}class rd extends Jc{nextMatch(e,t,i){let n=id(this.spec,e,i,e.doc.length).next();return n.done&&(n=id(this.spec,e,0,t).next()),n.done?null:n.value}prevMatchInRange(e,t,i){for(let n=1;;n++){let s=Math.max(t,i-1e4*n),r=id(this.spec,e,s,i),o=null;for(;!r.next().done;)o=r.value;if(o&&(s==t||o.from>s+10))return o;if(s==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace.replace(/\$([$&\d+])/g,((t,i)=>"$"==i?"$":"&"==i?e.match[0]:"0"!=i&&+i=t)return null;n.push(i.value)}return n}highlight(e,t,i,n){let s=id(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!s.next().done;)n(s.value.from,s.value.to)}}const od=ae.define(),ad=ae.define(),ld=j.define({create:e=>new hd(_d(e).create(),null),update(e,t){for(let i of t.effects)i.is(od)?e=new hd(i.value.create(),e.panel):i.is(ad)&&(e=new hd(e.query,i.value?bd:null));return e},provide:e=>Kr.from(e,(e=>e.panel))});class hd{constructor(e,t){this.query=e,this.panel=t}}const cd=Yt.mark({class:"cm-searchMatch"}),dd=Yt.mark({class:"cm-searchMatch cm-searchMatch-selected"}),ud=bi.fromClass(class{constructor(e){this.view=e,this.decorations=this.highlight(e.state.field(ld))}update(e){let t=e.state.field(ld);(t!=e.startState.field(ld)||e.docChanged||e.selectionSet||e.viewportChanged)&&(this.decorations=this.highlight(t))}highlight({query:e,panel:t}){if(!t||!e.spec.valid)return Yt.none;let{view:i}=this,n=new ke;for(let t=0,s=i.visibleRanges,r=s.length;ts[t+1].from-500;)a=s[++t].to;e.highlight(i.state,o,a,((e,t)=>{let s=i.state.selection.ranges.some((i=>i.from==e&&i.to==t));n.add(e,t,s?dd:cd)}))}return n.finish()}},{decorations:e=>e.decorations});function pd(e){return t=>{let i=t.state.field(ld,!1);return i&&i.query.spec.valid?e(t,i):xd(t)}}const fd=pd(((e,{query:t})=>{let{to:i}=e.state.selection.main,n=t.nextMatch(e.state,i,i);if(!n)return!1;let s=R.single(n.from,n.to),r=e.state.facet(Zc);return e.dispatch({selection:s,effects:[Ed(e,n),r.scrollToMatch(s.main,e)],userEvent:"select.search"}),wd(e),!0})),md=pd(((e,{query:t})=>{let{state:i}=e,{from:n}=i.selection.main,s=t.prevMatch(i,n,n);if(!s)return!1;let r=R.single(s.from,s.to),o=e.state.facet(Zc);return e.dispatch({selection:r,effects:[Ed(e,s),o.scrollToMatch(r.main,e)],userEvent:"select.search"}),wd(e),!0})),gd=pd(((e,{query:t})=>{let i=t.matchAll(e.state,1e3);return!(!i||!i.length||(e.dispatch({selection:R.create(i.map((e=>R.range(e.from,e.to)))),userEvent:"select.search.matches"}),0))})),vd=pd(((e,{query:t})=>{let{state:i}=e,{from:n,to:s}=i.selection.main;if(i.readOnly)return!1;let r=t.nextMatch(i,n,n);if(!r)return!1;let o,a,l=[],h=[];if(r.from==n&&r.to==s&&(a=i.toText(t.getReplacement(r)),l.push({from:r.from,to:r.to,insert:a}),r=t.nextMatch(i,r.from,r.to),h.push(Ds.announce.of(i.phrase("replaced match on line $",i.doc.lineAt(n).number)+"."))),r){let t=0==l.length||l[0].from>=r.to?0:r.to-r.from-a.length;o=R.single(r.from-t,r.to-t),h.push(Ed(e,r)),h.push(i.facet(Zc).scrollToMatch(o.main,e))}return e.dispatch({changes:l,selection:o,effects:h,userEvent:"input.replace"}),!0})),Od=pd(((e,{query:t})=>{if(e.state.readOnly)return!1;let i=t.matchAll(e.state,1e9).map((e=>{let{from:i,to:n}=e;return{from:i,to:n,insert:t.getReplacement(e)}}));if(!i.length)return!1;let n=e.state.phrase("replaced $ matches",i.length)+".";return e.dispatch({changes:i,effects:Ds.announce.of(n),userEvent:"input.replace.all"}),!0}));function bd(e){return e.state.facet(Zc).createPanel(e)}function _d(e,t){var i,n,s,r,o;let a=e.selection.main,l=a.empty||a.to>a.from+100?"":e.sliceDoc(a.from,a.to);if(t&&!l)return t;let h=e.facet(Zc);return new Kc({search:(null!==(i=null==t?void 0:t.literal)&&void 0!==i?i:h.literal)?l:l.replace(/\n/g,"\\n"),caseSensitive:null!==(n=null==t?void 0:t.caseSensitive)&&void 0!==n?n:h.caseSensitive,literal:null!==(s=null==t?void 0:t.literal)&&void 0!==s?s:h.literal,regexp:null!==(r=null==t?void 0:t.regexp)&&void 0!==r?r:h.regexp,wholeWord:null!==(o=null==t?void 0:t.wholeWord)&&void 0!==o?o:h.wholeWord})}function yd(e){let t=Xr(e,bd);return t&&t.dom.querySelector("[main-field]")}function wd(e){let t=yd(e);t&&t==e.root.activeElement&&t.select()}const xd=e=>{let t=e.state.field(ld,!1);if(t&&t.panel){let i=yd(e);if(i&&i!=e.root.activeElement){let n=_d(e.state,t.query.spec);n.valid&&e.dispatch({effects:od.of(n)}),i.focus(),i.select()}}else e.dispatch({effects:[ad.of(!0),t?od.of(_d(e.state,t.query.spec)):ae.appendConfig.of(Rd)]});return!0},Sd=e=>{let t=e.state.field(ld,!1);if(!t||!t.panel)return!1;let i=Xr(e,bd);return i&&i.dom.contains(e.root.activeElement)&&e.focus(),e.dispatch({effects:ad.of(!1)}),!0},kd=[{key:"Mod-f",run:xd,scope:"editor search-panel"},{key:"F3",run:fd,shift:md,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:fd,shift:md,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Sd,scope:"editor search-panel"},{key:"Mod-Shift-l",run:({state:e,dispatch:t})=>{let i=e.selection;if(i.ranges.length>1||i.main.empty)return!1;let{from:n,to:s}=i.main,r=[],o=0;for(let t=new Ac(e.doc,e.sliceDoc(n,s));!t.next().done;){if(r.length>1e3)return!1;t.value.from==n&&(o=r.length),r.push(R.range(t.value.from,t.value.to))}return t(e.update({selection:R.create(r,o),userEvent:"select.search.matches"})),!0}},{key:"Alt-g",run:e=>{let t=Xr(e,$c);if(!t){let i=[Qc.of(!0)];null==e.state.field(zc,!1)&&i.push(ae.appendConfig.of([zc,jc])),e.dispatch({effects:i}),t=Xr(e,$c)}return t&&t.dom.querySelector("input").select(),!0}},{key:"Mod-d",run:({state:e,dispatch:t})=>{let{ranges:i}=e.selection;if(i.some((e=>e.from===e.to)))return(({state:e,dispatch:t})=>{let{selection:i}=e,n=R.create(i.ranges.map((t=>e.wordAt(t.head)||R.cursor(t.head))),i.mainIndex);return!n.eq(i)&&(t(e.update({selection:n})),!0)})({state:e,dispatch:t});let n=e.sliceDoc(i[0].from,i[0].to);if(e.selection.ranges.some((t=>e.sliceDoc(t.from,t.to)!=n)))return!1;let s=function(e,t){let{main:i,ranges:n}=e.selection,s=e.wordAt(i.head),r=s&&s.from==i.from&&s.to==i.to;for(let i=!1,s=new Ac(e.doc,t,n[n.length-1].to);;){if(s.next(),!s.done){if(i&&n.some((e=>e.from==s.value.from)))continue;if(r){let t=e.wordAt(s.value.from);if(!t||t.from!=s.value.from||t.to!=s.value.to)continue}return s.value}if(i)return null;s=new Ac(e.doc,t,0,Math.max(0,n[n.length-1].from-1)),i=!0}}(e,n);return!!s&&(t(e.update({selection:e.selection.addRange(R.range(s.from,s.to),!1),effects:Ds.scrollIntoView(s.to)})),!0)},preventDefault:!0}];class Td{constructor(e){this.view=e;let t=this.query=e.state.field(ld).query.spec;function i(e,t,i){return Pc("button",{class:"cm-button",name:e,onclick:t,type:"button"},i)}this.commit=this.commit.bind(this),this.searchField=Pc("input",{value:t.search,placeholder:Cd(e,"Find"),"aria-label":Cd(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=Pc("input",{value:t.replace,placeholder:Cd(e,"Replace"),"aria-label":Cd(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=Pc("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=Pc("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=Pc("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit}),this.dom=Pc("div",{onkeydown:e=>this.keydown(e),class:"cm-search"},[this.searchField,i("next",(()=>fd(e)),[Cd(e,"next")]),i("prev",(()=>md(e)),[Cd(e,"previous")]),i("select",(()=>gd(e)),[Cd(e,"all")]),Pc("label",null,[this.caseField,Cd(e,"match case")]),Pc("label",null,[this.reField,Cd(e,"regexp")]),Pc("label",null,[this.wordField,Cd(e,"by word")]),...e.state.readOnly?[]:[Pc("br"),this.replaceField,i("replace",(()=>vd(e)),[Cd(e,"replace")]),i("replaceAll",(()=>Od(e)),[Cd(e,"replace all")])],Pc("button",{name:"close",onclick:()=>Sd(e),"aria-label":Cd(e,"close"),type:"button"},["×"])])}commit(){let e=new Kc({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:od.of(e)}))}keydown(e){var t,i;i=e,Fs(Ws((t=this.view).state),i,t,"search-panel")?e.preventDefault():13==e.keyCode&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?md:fd)(this.view)):13==e.keyCode&&e.target==this.replaceField&&(e.preventDefault(),vd(this.view))}update(e){for(let t of e.transactions)for(let e of t.effects)e.is(od)&&!e.value.eq(this.query)&&this.setQuery(e.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Zc).top}}function Cd(e,t){return e.state.phrase(t)}const Pd=30,Md=/[\s\.,:;?!]/;function Ed(e,{from:t,to:i}){let n=e.state.doc.lineAt(t),s=e.state.doc.lineAt(i).to,r=Math.max(n.from,t-Pd),o=Math.min(s,i+Pd),a=e.state.sliceDoc(r,o);if(r!=n.from)for(let e=0;ea.length-Pd;e--)if(!Md.test(a[e-1])&&Md.test(a[e])){a=a.slice(0,e);break}return Ds.announce.of(`${e.state.phrase("current match")}. ${a} ${e.state.phrase("on line")} ${n.number}.`)}const Ad=Ds.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Rd=[ld,V.low(ud),Ad];class Dd{constructor(e,t,i){this.state=e,this.pos=t,this.explicit=i,this.abortListeners=[]}tokenBefore(e){let t=Da(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),n=t.text.slice(i-t.from,this.pos-t.from),s=n.search($d(e,!1));return s<0?null:{from:i+s,to:this.pos,text:n.slice(s)}}get aborted(){return null==this.abortListeners}addEventListener(e,t){"abort"==e&&this.abortListeners&&this.abortListeners.push(t)}}function Id(e){let t=Object.keys(e).join(""),i=/\w/.test(t);return i&&(t=t.replace(/\w/g,"")),`[${i?"\\w":""}${t.replace(/[^\w\s]/g,"\\$&")}]`}function qd(e){let t=e.map((e=>"string"==typeof e?{label:e}:e)),[i,n]=t.every((e=>/^\w+$/.test(e.label)))?[/\w*$/,/\w+$/]:function(e){let t=Object.create(null),i=Object.create(null);for(let{label:n}of e){t[n[0]]=!0;for(let e=1;e{let s=e.matchBefore(n);return s||e.explicit?{from:s?s.from:e.pos,options:t,validFor:i}:null}}function Ld(e,t){return i=>{for(let t=Da(i.state).resolveInner(i.pos,-1);t;t=t.parent){if(e.indexOf(t.name)>-1)return null;if(t.type.isTop)break}return t(i)}}class Nd{constructor(e,t,i,n){this.completion=e,this.source=t,this.match=i,this.score=n}}function Bd(e){return e.selection.main.from}function $d(e,t){var i;let{source:n}=e,s=t&&"^"!=n[0],r="$"!=n[n.length-1];return s||r?new RegExp(`${s?"^":""}(?:${n})${r?"$":""}`,null!==(i=e.flags)&&void 0!==i?i:e.ignoreCase?"i":""):e}const Qd=se.define(),zd=new WeakMap;function jd(e){if(!Array.isArray(e))return e;let t=zd.get(e);return t||zd.set(e,t=qd(e)),t}const Wd=ae.define(),Vd=ae.define();class Ud{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&l<=57||l>=97&&l<=122?2:l>=65&&l<=90?1:0:(y=b(l))!=y.toLowerCase()?1:y!=y.toUpperCase()?2:0;(!n||1==w&&m||0==v&&0!=w)&&(t[c]==l||i[c]==l&&(d=!0)?r[c++]=n:r.length&&(g=!1)),v=w,n+=_(l)}return c==a&&0==r[0]&&g?this.result((d?-200:0)-100,r,e):u==a&&0==p?this.ret(-200-e.length+(f==e.length?0:-100),[0,f]):o>-1?this.ret(-700-e.length,[o,o+this.pattern.length]):u==a?this.ret(-900-e.length,[p,f]):c==a?this.result((d?-200:0)-100-700+(g?0:-1100),r,e):2!=t.length&&this.result((n[0]?-700:0)-200-1100,n,e)}result(e,t,i){let n=[],s=0;for(let e of t){let t=e+(this.astral?_(O(i,e)):1);s&&n[s-1]==e?n[s-1]=t:(n[s++]=e,n[s++]=t)}return this.ret(e-i.length,n)}}const Fd=q.define({combine:e=>be(e,{activateOnTyping:!0,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:Xd,compareCompletions:(e,t)=>e.label.localeCompare(t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>Hd(e(i),t(i)),optionClass:(e,t)=>i=>Hd(e(i),t(i)),addToOptions:(e,t)=>e.concat(t)})});function Hd(e,t){return e?t?e+" "+t:e:t}function Xd(e,t,i,n,s,r){let o,a,l=e.textDirection==Ri.RTL,h=l,c=!1,d="top",u=t.left-s.left,p=s.right-t.right,f=n.right-n.left,m=n.bottom-n.top;if(h&&u=m||e>t.top?o=i.bottom-t.top:(d="bottom",o=t.bottom-i.top)}return{style:`${d}: ${o/((t.bottom-t.top)/r.offsetHeight)}px; max-width: ${a/((t.right-t.left)/r.offsetWidth)}px`,class:"cm-completionInfo-"+(c?l?"left-narrow":"right-narrow":h?"left":"right")}}function Yd(e,t,i){if(e<=i)return{from:0,to:e};if(t<0&&(t=0),t<=e>>1){let e=Math.floor(t/i);return{from:e*i,to:(e+1)*i}}let n=Math.floor((e-t)/i);return{from:e-(n+1)*i,to:e-n*i}}class Gd{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:e=>this.placeInfo(e),key:this},this.space=null,this.currentClass="";let n=e.state.field(t),{options:s,selected:r}=n.open,o=e.state.facet(Fd);this.optionContent=function(e){let t=e.addToOptions.slice();return e.icons&&t.push({render(e){let t=document.createElement("div");return t.classList.add("cm-completionIcon"),e.type&&t.classList.add(...e.type.split(/\s+/g).map((e=>"cm-completionIcon-"+e))),t.setAttribute("aria-hidden","true"),t},position:20}),t.push({render(e,t,i){let n=document.createElement("span");n.className="cm-completionLabel";let s=e.displayLabel||e.label,r=0;for(let e=0;er&&n.appendChild(document.createTextNode(s.slice(r,t)));let a=n.appendChild(document.createElement("span"));a.appendChild(document.createTextNode(s.slice(t,o))),a.className="cm-completionMatchedText",r=o}return re.position-t.position)).map((e=>e.render))}(o),this.optionClass=o.optionClass,this.tooltipClass=o.tooltipClass,this.range=Yd(s.length,r,o.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",(i=>{let{options:n}=e.state.field(t).open;for(let t,s=i.target;s&&s!=this.dom;s=s.parentNode)if("LI"==s.nodeName&&(t=/-(\d+)$/.exec(s.id))&&+t[1]{let i=e.state.field(this.stateField,!1);i&&i.tooltip&&e.state.facet(Fd).closeOnBlur&&t.relatedTarget!=e.contentDOM&&e.dispatch({effects:Vd.of(null)})})),this.showOptions(s,n.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",(()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)}))}update(e){var t;let i=e.state.field(this.stateField),n=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=n){let{options:s,selected:r,disabled:o}=i.open;n.open&&n.open.options==s||(this.range=Yd(s.length,r,e.state.facet(Fd).maxRenderedOptions),this.showOptions(s,i.id)),this.updateSel(),o!=(null===(t=n.open)||void 0===t?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!o)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let e of this.currentClass.split(" "))e&&this.dom.classList.remove(e);for(let e of t.split(" "))e&&this.dom.classList.add(e);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;if((t.selected>-1&&t.selected=this.range.to)&&(this.range=Yd(t.options.length,t.selected,this.view.state.facet(Fd).maxRenderedOptions),this.showOptions(t.options,e.id)),this.updateSelectedOption(t.selected)){this.destroyInfo();let{completion:i}=t.options[t.selected],{info:n}=i;if(!n)return;let s="string"==typeof n?document.createTextNode(n):n(i);if(!s)return;"then"in s?s.then((t=>{t&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(t,i)})).catch((e=>mi(this.view.state,e,"completion info"))):this.addInfoPane(s,i)}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",null!=e.nodeType)i.appendChild(e),this.infoDestroy=null;else{let{dom:t,destroy:n}=e;i.appendChild(t),this.infoDestroy=n||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,n=this.range.from;i;i=i.nextSibling,n++)"LI"==i.nodeName&&i.id?n==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&i.removeAttribute("aria-selected"):n--;return t&&function(e,t){let i=e.getBoundingClientRect(),n=t.getBoundingClientRect(),s=i.height/e.offsetHeight;n.topi.bottom&&(e.scrollTop+=(n.bottom-i.bottom)/s)}(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),n=e.getBoundingClientRect(),s=this.space;if(!s){let e=this.dom.ownerDocument.defaultView||window;s={left:0,top:0,right:e.innerWidth,bottom:e.innerHeight}}return n.top>Math.min(s.bottom,t.bottom)-10||n.bottomi.from||0==i.from)&&(s=e,"string"!=typeof l&&l.header?n.appendChild(l.header(l)):n.appendChild(document.createElement("completion-section")).textContent=e)}const h=n.appendChild(document.createElement("li"));h.id=t+"-"+r,h.setAttribute("role","option");let c=this.optionClass(o);c&&(h.className=c);for(let e of this.optionContent){let t=e(o,this.view.state,a);t&&h.appendChild(t)}}return i.from&&n.classList.add("cm-completionListIncompleteTop"),i.tonew Gd(i,e,t)}function Kd(e){return 100*(e.boost||0)+(e.apply?10:0)+(e.info?5:0)+(e.type?1:0)}class Jd{constructor(e,t,i,n,s,r){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=n,this.selected=s,this.disabled=r}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new Jd(this.options,iu(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,n,s){let r=function(e,t){let i=[],n=null,s=e=>{i.push(e);let{section:t}=e.completion;if(t){n||(n=[]);let e="string"==typeof t?t:t.name;n.some((t=>t.name==e))||n.push("string"==typeof t?{name:e}:t)}};for(let n of e)if(n.hasResult()){let e=n.result.getMatch;if(!1===n.result.filter)for(let t of n.result.options)s(new Nd(t,n.source,e?e(t):[],1e9-i.length));else{let i=new Ud(t.sliceDoc(n.from,n.to));for(let t of n.result.options)if(i.match(t.label)){let r=t.displayLabel?e?e(t,i.matched):[]:i.matched;s(new Nd(t,n.source,r,i.score+(t.boost||0)))}}}if(n){let e=Object.create(null),t=0,s=(e,t)=>{var i,n;return(null!==(i=e.rank)&&void 0!==i?i:1e9)-(null!==(n=t.rank)&&void 0!==n?n:1e9)||(e.namet.score-e.score||a(e.completion,t.completion)))){let t=e.completion;!o||o.label!=t.label||o.detail!=t.detail||null!=o.type&&null!=t.type&&o.type!=t.type||o.apply!=t.apply||o.boost!=t.boost?r.push(e):Kd(e.completion)>Kd(o)&&(r[r.length-1]=e),o=e.completion}return r}(e,t);if(!r.length)return n&&e.some((e=>1==e.state))?new Jd(n.options,n.attrs,n.tooltip,n.timestamp,n.selected,!0):null;let o=t.facet(Fd).selectOnOpen?0:-1;if(n&&n.selected!=o&&-1!=n.selected){let e=n.options[n.selected].completion;for(let t=0;tt.hasResult()?Math.min(e,t.from):e),1e8),create:du,above:s.aboveCursor},n?n.timestamp:Date.now(),o,!1)}map(e){return new Jd(this.options,this.attrs,Object.assign(Object.assign({},this.tooltip),{pos:e.mapPos(this.tooltip.pos)}),this.timestamp,this.selected,this.disabled)}}class eu{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new eu(nu,"cm-ac-"+Math.floor(2e6*Math.random()).toString(36),null)}update(e){let{state:t}=e,i=t.facet(Fd),n=(i.override||t.languageDataAt("autocomplete",Bd(t)).map(jd)).map((t=>(this.active.find((e=>e.source==t))||new ru(t,this.active.some((e=>0!=e.state))?1:0)).update(e,i)));n.length==this.active.length&&n.every(((e,t)=>e==this.active[t]))&&(n=this.active);let s=this.open;s&&e.docChanged&&(s=s.map(e.changes)),e.selection||n.some((t=>t.hasResult()&&e.changes.touchesRange(t.from,t.to)))||!function(e,t){if(e==t)return!0;for(let i=0,n=0;;){for(;i1==e.state))&&(s=null),!s&&n.every((e=>1!=e.state))&&n.some((e=>e.hasResult()))&&(n=n.map((e=>e.hasResult()?new ru(e.source,0):e)));for(let t of e.effects)t.is(lu)&&(s=s&&s.setSelected(t.value,this.id));return n==this.active&&s==this.open?this:new eu(n,this.id,s)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:tu}}const tu={"aria-autocomplete":"list"};function iu(e,t){let i={"aria-autocomplete":"list","aria-haspopup":"listbox","aria-controls":e};return t>-1&&(i["aria-activedescendant"]=e+"-"+t),i}const nu=[];function su(e){return e.isUserEvent("input.type")?"input":e.isUserEvent("delete.backward")?"delete":null}class ru{constructor(e,t,i=-1){this.source=e,this.state=t,this.explicitPos=i}hasResult(){return!1}update(e,t){let i=su(e),n=this;i?n=n.handleUserEvent(e,i,t):e.docChanged?n=n.handleChange(e):e.selection&&0!=n.state&&(n=new ru(n.source,0));for(let t of e.effects)if(t.is(Wd))n=new ru(n.source,1,t.value?Bd(e.state):-1);else if(t.is(Vd))n=new ru(n.source,0);else if(t.is(au))for(let e of t.value)e.source==n.source&&(n=e);return n}handleUserEvent(e,t,i){return"delete"!=t&&i.activateOnTyping?new ru(this.source,1):this.map(e.changes)}handleChange(e){return e.changes.touchesRange(Bd(e.startState))?new ru(this.source,0):this.map(e.changes)}map(e){return e.empty||this.explicitPos<0?this:new ru(this.source,this.state,e.mapPos(this.explicitPos))}}class ou extends ru{constructor(e,t,i,n,s){super(e,2,t),this.result=i,this.from=n,this.to=s}hasResult(){return!0}handleUserEvent(e,t,i){var n;let s=e.changes.mapPos(this.from),r=e.changes.mapPos(this.to,1),o=Bd(e.state);if((this.explicitPos<0?o<=s:or||"delete"==t&&Bd(e.startState)==this.from)return new ru(this.source,"input"==t&&i.activateOnTyping?1:0);let a,l=this.explicitPos<0?-1:e.changes.mapPos(this.explicitPos);return function(e,t,i,n){if(!e)return!1;let s=t.sliceDoc(i,n);return"function"==typeof e?e(s,i,n,t):$d(e,!0).test(s)}(this.result.validFor,e.state,s,r)?new ou(this.source,l,this.result,s,r):this.result.update&&(a=this.result.update(this.result,s,r,new Dd(e.state,o,l>=0)))?new ou(this.source,l,a,a.from,null!==(n=a.to)&&void 0!==n?n:Bd(e.state)):new ru(this.source,1,l)}handleChange(e){return e.changes.touchesRange(this.from,this.to)?new ru(this.source,0):this.map(e.changes)}map(e){return e.empty?this:new ou(this.source,this.explicitPos<0?-1:e.mapPos(this.explicitPos),this.result,e.mapPos(this.from),e.mapPos(this.to,1))}}const au=ae.define({map:(e,t)=>e.map((e=>e.map(t)))}),lu=ae.define(),hu=j.define({create:()=>eu.start(),update:(e,t)=>e.update(t),provide:e=>[Br.from(e,(e=>e.tooltip)),Ds.contentAttributes.from(e,(e=>e.attrs))]});function cu(e,t){const i=t.completion.apply||t.completion.label;let n=e.state.field(hu).active.find((e=>e.source==t.source));return n instanceof ou&&("string"==typeof i?e.dispatch(Object.assign(Object.assign({},function(e,t,i,n){let{main:s}=e.selection,r=i-s.from,o=n-s.from;return Object.assign(Object.assign({},e.changeByRange((a=>a!=s&&i!=n&&e.sliceDoc(a.from+r,a.from+o)!=e.sliceDoc(i,n)?{range:a}:{changes:{from:a.from+r,to:n==s.from?a.to:a.from+o,insert:t},range:R.cursor(a.from+r+t.length)}))),{scrollIntoView:!0,userEvent:"input.complete"})}(e.state,i,n.from,n.to)),{annotations:Qd.of(t.completion)})):i(e,t.completion,n.from,n.to),!0)}const du=Zd(hu,cu);function uu(e,t="option"){return i=>{let n=i.state.field(hu,!1);if(!n||!n.open||n.open.disabled||Date.now()-n.open.timestamp-1?n.open.selected+r*(e?1:-1):e?0:o-1;return a<0?a="page"==t?0:o-1:a>=o&&(a="page"==t?o-1:0),i.dispatch({effects:lu.of(a)}),!0}}class pu{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const fu=bi.fromClass(class{constructor(e){this.view=e,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.composing=0;for(let t of e.state.field(hu).active)1==t.state&&this.startQuery(t)}update(e){let t=e.state.field(hu);if(!e.selectionSet&&!e.docChanged&&e.startState.field(hu)==t)return;let i=e.transactions.some((e=>(e.selection||e.docChanged)&&!su(e)));for(let t=0;t50&&Date.now()-n.time>1e3){for(let e of n.context.abortListeners)try{e()}catch(e){mi(this.view.state,e)}n.context.abortListeners=null,this.running.splice(t--,1)}else n.updates.push(...e.transactions)}if(this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),this.debounceUpdate=t.active.some((e=>1==e.state&&!this.running.some((t=>t.active.source==e.source))))?setTimeout((()=>this.startUpdate()),50):-1,0!=this.composing)for(let t of e.transactions)"input"==su(t)?this.composing=2:2==this.composing&&t.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1;let{state:e}=this.view,t=e.field(hu);for(let e of t.active)1!=e.state||this.running.some((t=>t.active.source==e.source))||this.startQuery(e)}startQuery(e){let{state:t}=this.view,i=Bd(t),n=new Dd(t,i,e.explicitPos==i),s=new pu(e,n);this.running.push(s),Promise.resolve(e.source(n)).then((e=>{s.context.aborted||(s.done=e||null,this.scheduleAccept())}),(e=>{this.view.dispatch({effects:Vd.of(null)}),mi(this.view.state,e)}))}scheduleAccept(){this.running.every((e=>void 0!==e.done))?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout((()=>this.accept()),this.view.state.facet(Fd).updateSyncTime))}accept(){var e;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let t=[],i=this.view.state.facet(Fd);for(let n=0;ne.source==s.active.source));if(r&&1==r.state)if(null==s.done){let e=new ru(s.active.source,0);for(let t of s.updates)e=e.update(t,i);1!=e.state&&t.push(e)}else this.startQuery(r)}t.length&&this.view.dispatch({effects:au.of(t)})}},{eventHandlers:{blur(e){let t=this.view.state.field(hu,!1);if(t&&t.tooltip&&this.view.state.facet(Fd).closeOnBlur){let i=t.open&&Ur(this.view,t.open.tooltip);i&&i.dom.contains(e.relatedTarget)||this.view.dispatch({effects:Vd.of(null)})}},compositionstart(){this.composing=1},compositionend(){3==this.composing&&setTimeout((()=>this.view.dispatch({effects:Wd.of(!1)})),20),this.composing=0}}}),mu=Ds.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class gu{constructor(e,t,i,n){this.field=e,this.line=t,this.from=i,this.to=n}}class vu{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,w.TrackDel),i=e.mapPos(this.to,1,w.TrackDel);return null==t||null==i?null:new vu(this.field,t,i)}}class Ou{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],n=[t],s=e.doc.lineAt(t),r=/^\s*/.exec(s.text)[0];for(let s of this.lines){if(i.length){let i=r,o=/^\t*/.exec(s)[0].length;for(let t=0;tnew vu(e.field,n[e.line]+e.from,n[e.line]+e.to)));return{text:i,ranges:o}}static parse(e){let t,i=[],n=[],s=[];for(let r of e.split(/\r\n?|\n/)){for(;t=/[#$]\{(?:(\d+)(?::([^}]*))?|([^}]*))\}/.exec(r);){let e=t[1]?+t[1]:null,o=t[2]||t[3]||"",a=-1;for(let t=0;t=a&&e.field++}s.push(new gu(a,n.length,t.index,t.index+o.length)),r=r.slice(0,t.index)+o+r.slice(t.index+t[0].length)}for(let e;e=/\\([{}])/.exec(r);){r=r.slice(0,e.index)+e[1]+r.slice(e.index+e[0].length);for(let t of s)t.line==n.length&&t.from>e.index&&(t.from--,t.to--)}n.push(r)}return new Ou(n,s)}}let bu=Yt.widget({widget:new class extends Ht{toDOM(){let e=document.createElement("span");return e.className="cm-snippetFieldPosition",e}ignoreEvent(){return!1}}}),_u=Yt.mark({class:"cm-snippetField"});class yu{constructor(e,t){this.ranges=e,this.active=t,this.deco=Yt.set(e.map((e=>(e.from==e.to?bu:_u).range(e.from,e.to))))}map(e){let t=[];for(let i of this.ranges){let n=i.map(e);if(!n)return null;t.push(n)}return new yu(t,this.active)}selectionInsideField(e){return e.ranges.every((e=>this.ranges.some((t=>t.field==this.active&&t.from<=e.from&&t.to>=e.to))))}}const wu=ae.define({map:(e,t)=>e&&e.map(t)}),xu=ae.define(),Su=j.define({create:()=>null,update(e,t){for(let i of t.effects){if(i.is(wu))return i.value;if(i.is(xu)&&e)return new yu(e.ranges,i.value)}return e&&t.docChanged&&(e=e.map(t.changes)),e&&t.selection&&!e.selectionInsideField(t.selection)&&(e=null),e},provide:e=>Ds.decorations.from(e,(e=>e?e.deco:Yt.none))});function ku(e,t){return R.create(e.filter((e=>e.field==t)).map((e=>R.range(e.from,e.to))))}function Tu(t){let i=Ou.parse(t);return(t,n,s,r)=>{let{text:o,ranges:a}=i.instantiate(t.state,s),l={changes:{from:s,to:r,insert:e.of(o)},scrollIntoView:!0,annotations:n?Qd.of(n):void 0};if(a.length&&(l.selection=ku(a,0)),a.length>1){let e=new yu(a,0),i=l.effects=[wu.of(e)];void 0===t.state.field(Su,!1)&&i.push(ae.appendConfig.of([Su,Eu,Ru,mu]))}t.dispatch(t.state.update(l))}}function Cu(e){return({state:t,dispatch:i})=>{let n=t.field(Su,!1);if(!n||e<0&&0==n.active)return!1;let s=n.active+e,r=e>0&&!n.ranges.some((t=>t.field==s+e));return i(t.update({selection:ku(n.ranges,s),effects:wu.of(r?null:new yu(n.ranges,s)),scrollIntoView:!0})),!0}}const Pu=[{key:"Tab",run:Cu(1),shift:Cu(-1)},{key:"Escape",run:({state:e,dispatch:t})=>!!e.field(Su,!1)&&(t(e.update({effects:wu.of(null)})),!0)}],Mu=q.define({combine:e=>e.length?e[0]:Pu}),Eu=V.highest(zs.compute([Mu],(e=>e.facet(Mu))));function Au(e,t){return Object.assign(Object.assign({},t),{apply:Tu(e)})}const Ru=Ds.domEventHandlers({mousedown(e,t){let i,n=t.state.field(Su,!1);if(!n||null==(i=t.posAtCoords({x:e.clientX,y:e.clientY})))return!1;let s=n.ranges.find((e=>e.from<=i&&e.to>=i));return!(!s||s.field==n.active||(t.dispatch({selection:ku(n.ranges,s.field),effects:wu.of(n.ranges.some((e=>e.field>s.field))?new yu(n.ranges,s.field):null),scrollIntoView:!0}),0))}}),Du={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Iu=ae.define({map(e,t){let i=t.mapPos(e,-1,w.TrackAfter);return null==i?void 0:i}}),qu=new class extends _e{};qu.startSide=1,qu.endSide=-1;const Lu=j.define({create:()=>Se.empty,update(e,t){if(t.selection){let i=t.state.doc.lineAt(t.selection.main.head).from,n=t.startState.doc.lineAt(t.startState.selection.main.head).from;i!=t.changes.mapPos(n,-1)&&(e=Se.empty)}e=e.map(t.changes);for(let i of t.effects)i.is(Iu)&&(e=e.update({add:[qu.range(i.value,i.value+1)]}));return e}}),Nu="()[]{}<>";function Bu(e){for(let t=0;t<8;t+=2)if(Nu.charCodeAt(t)==e)return Nu.charAt(t+1);return b(e<128?e:e+1)}function $u(e,t){return e.languageDataAt("closeBrackets",t)[0]||Du}const Qu="object"==typeof navigator&&/Android\b/.test(navigator.userAgent),zu=Ds.inputHandler.of(((e,t,i,n)=>{if((Qu?e.composing:e.compositionStarted)||e.state.readOnly)return!1;let s=e.state.selection.main;if(n.length>2||2==n.length&&1==_(O(n,0))||t!=s.from||i!=s.to)return!1;let r=function(e,t){let i=$u(e,e.selection.main.head),n=i.brackets||Du.brackets;for(let s of n){let r=Bu(O(s,0));if(t==s)return r==s?Hu(e,s,n.indexOf(s+s+s)>-1,i):Uu(e,s,r,i.before||Du.before);if(t==r&&Wu(e,e.selection.main.from))return Fu(e,0,r)}return null}(e.state,n);return!!r&&(e.dispatch(r),!0)})),ju=[{key:"Backspace",run:({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=$u(e,e.selection.main.head).brackets||Du.brackets,n=null,s=e.changeByRange((t=>{if(t.empty){let n=function(e,t){let i=e.sliceString(t-2,t);return _(O(i,0))==i.length?i:i.slice(1)}(e.doc,t.head);for(let s of i)if(s==n&&Vu(e.doc,t.head)==Bu(O(s,0)))return{changes:{from:t.head-s.length,to:t.head+s.length},range:R.cursor(t.head-s.length)}}return{range:n=t}}));return n||t(e.update(s,{scrollIntoView:!0,userEvent:"delete.backward"})),!n}}];function Wu(e,t){let i=!1;return e.field(Lu).between(0,e.doc.length,(e=>{e==t&&(i=!0)})),i}function Vu(e,t){let i=e.sliceString(t,t+2);return i.slice(0,_(O(i,0)))}function Uu(e,t,i,n){let s=null,r=e.changeByRange((r=>{if(!r.empty)return{changes:[{insert:t,from:r.from},{insert:i,from:r.to}],effects:Iu.of(r.to+t.length),range:R.range(r.anchor+t.length,r.head+t.length)};let o=Vu(e.doc,r.head);return!o||/\s/.test(o)||n.indexOf(o)>-1?{changes:{insert:t+i,from:r.head},effects:Iu.of(r.head+t.length),range:R.cursor(r.head+t.length)}:{range:s=r}}));return s?null:e.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function Fu(e,t,i){let n=null,s=e.changeByRange((t=>t.empty&&Vu(e.doc,t.head)==i?{changes:{from:t.head,to:t.head+i.length,insert:i},range:R.cursor(t.head+i.length)}:n={range:t}));return n?null:e.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function Hu(e,t,i,n){let s=n.stringPrefixes||Du.stringPrefixes,r=null,o=e.changeByRange((n=>{if(!n.empty)return{changes:[{insert:t,from:n.from},{insert:t,from:n.to}],effects:Iu.of(n.to+t.length),range:R.range(n.anchor+t.length,n.head+t.length)};let o,a=n.head,l=Vu(e.doc,a);if(l==t){if(Xu(e,a))return{changes:{insert:t+t,from:a},effects:Iu.of(a+t.length),range:R.cursor(a+t.length)};if(Wu(e,a)){let n=i&&e.sliceDoc(a,a+3*t.length)==t+t+t?t+t+t:t;return{changes:{from:a,to:a+n.length,insert:n},range:R.cursor(a+n.length)}}}else{if(i&&e.sliceDoc(a-2*t.length,a)==t+t&&(o=Yu(e,a-2*t.length,s))>-1&&Xu(e,o))return{changes:{insert:t+t+t+t,from:a},effects:Iu.of(a+t.length),range:R.cursor(a+t.length)};if(e.charCategorizer(a)(l)!=me.Word&&Yu(e,a,s)>-1&&!function(e,t,i,n){let s=Da(e).resolveInner(t,-1),r=n.reduce(((e,t)=>Math.max(e,t.length)),0);for(let o=0;o<5;o++){let o=e.sliceDoc(s.from,Math.min(s.to,s.from+i.length+r)),a=o.indexOf(i);if(!a||a>-1&&n.indexOf(o.slice(0,a))>-1){let t=s.firstChild;for(;t&&t.from==s.from&&t.to-t.from>i.length+a;){if(e.sliceDoc(t.to-i.length,t.to)==i)return!1;t=t.firstChild}return!0}let l=s.to==t&&s.parent;if(!l)break;s=l}return!1}(e,a,t,s))return{changes:{insert:t+t,from:a},effects:Iu.of(a+t.length),range:R.cursor(a+t.length)}}return{range:r=n}}));return r?null:e.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function Xu(e,t){let i=Da(e).resolveInner(t+1);return i.parent&&i.from==t}function Yu(e,t,i){let n=e.charCategorizer(t);if(n(e.sliceDoc(t-1,t))!=me.Word)return t;for(let s of i){let i=t-s.length;if(e.sliceDoc(i,t)==s&&n(e.sliceDoc(i-1,i))!=me.Word)return i}return-1}function Gu(e={}){return[hu,Fd.of(e),fu,Ku,mu]}const Zu=[{key:"Ctrl-Space",run:e=>!!e.state.field(hu,!1)&&(e.dispatch({effects:Wd.of(!0)}),!0)},{key:"Escape",run:e=>{let t=e.state.field(hu,!1);return!(!t||!t.active.some((e=>0!=e.state))||(e.dispatch({effects:Vd.of(null)}),0))}},{key:"ArrowDown",run:uu(!0)},{key:"ArrowUp",run:uu(!1)},{key:"PageDown",run:uu(!0,"page")},{key:"PageUp",run:uu(!1,"page")},{key:"Enter",run:e=>{let t=e.state.field(hu,!1);return!(e.state.readOnly||!t||!t.open||t.open.selected<0||t.open.disabled||Date.now()-t.open.timestampe.facet(Fd).defaultKeymap?[Zu]:[])));class Ju{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class ep{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let n=e,s=i.facet(dp).markerFilter;s&&(n=s(n));let r=Yt.set(n.map((e=>e.from==e.to||e.from==e.to-1&&i.doc.lineAt(e.from).to==e.from?Yt.widget({widget:new fp(e),diagnostic:e}).range(e.from):Yt.mark({attributes:{class:"cm-lintRange cm-lintRange-"+e.severity+(e.markClass?" "+e.markClass:"")},diagnostic:e}).range(e.from,e.to))),!0);return new ep(r,t,tp(r))}}function tp(e,t=null,i=0){let n=null;return e.between(i,1e9,((e,i,{spec:s})=>{if(!t||s.diagnostic==t)return n=new Ju(e,i,s.diagnostic),!1})),n}const ip=ae.define(),np=ae.define(),sp=ae.define(),rp=j.define({create:()=>new ep(Yt.none,null,null),update(e,t){if(t.docChanged){let i=e.diagnostics.map(t.changes),n=null;if(e.selected){let s=t.changes.mapPos(e.selected.from,1);n=tp(i,e.selected.diagnostic,s)||tp(i,null,s)}e=new ep(i,e.panel,n)}for(let i of t.effects)i.is(ip)?e=ep.init(i.value,e.panel,t.state):i.is(np)?e=new ep(e.diagnostics,i.value?gp.open:null,e.selected):i.is(sp)&&(e=new ep(e.diagnostics,e.panel,i.value));return e},provide:e=>[Kr.from(e,(e=>e.panel)),Ds.decorations.from(e,(e=>e.diagnostics))]}),op=Yt.mark({class:"cm-lintRange cm-lintRange-active"});function ap(e,t,i){let{diagnostics:n}=e.state.field(rp),s=[],r=2e8,o=0;n.between(t-(i<0?1:0),t+(i>0?1:0),((e,n,{spec:a})=>{t>=e&&t<=n&&(e==n||(t>e||i>0)&&(t({dom:lp(e,s)})}:null}function lp(e,t){return Pc("ul",{class:"cm-tooltip-lint"},t.map((t=>pp(e,t,!1))))}const hp=e=>{let t=e.state.field(rp,!1);return!(!t||!t.panel||(e.dispatch({effects:np.of(!1)}),0))},cp=[{key:"Mod-Shift-m",run:e=>{let t=e.state.field(rp,!1);var i,n;t&&t.panel||e.dispatch({effects:(i=e.state,n=[np.of(!0)],i.field(rp,!1)?n:n.concat(ae.appendConfig.of(bp)))});let s=Xr(e,gp.open);return s&&s.dom.querySelector(".cm-panel-lint ul").focus(),!0},preventDefault:!0},{key:"F8",run:e=>{let t=e.state.field(rp,!1);if(!t)return!1;let i=e.state.selection.main,n=t.diagnostics.iter(i.to+1);return!(!n.value&&(n=t.diagnostics.iter(0),!n.value||n.from==i.from&&n.to==i.to)||(e.dispatch({selection:{anchor:n.from,head:n.to},scrollIntoView:!0}),0))}}],dp=q.define({combine:e=>Object.assign({sources:e.map((e=>e.source))},be(e.map((e=>e.config)),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null},{needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t}))});function up(e){let t=[];if(e)e:for(let{name:i}of e){for(let e=0;ee.toLowerCase()==n.toLowerCase()))){t.push(n);continue e}}t.push("")}return t}function pp(e,t,i){var n;let s=i?up(t.actions):[];return Pc("li",{class:"cm-diagnostic cm-diagnostic-"+t.severity},Pc("span",{class:"cm-diagnosticText"},t.renderMessage?t.renderMessage():t.message),null===(n=t.actions)||void 0===n?void 0:n.map(((i,n)=>{let r=!1,o=n=>{if(n.preventDefault(),r)return;r=!0;let s=tp(e.state.field(rp).diagnostics,t);s&&i.apply(e,s.from,s.to)},{name:a}=i,l=s[n]?a.indexOf(s[n]):-1,h=l<0?a:[a.slice(0,l),Pc("u",a.slice(l,l+1)),a.slice(l+1)];return Pc("button",{type:"button",class:"cm-diagnosticAction",onclick:o,onmousedown:o,"aria-label":` Action: ${a}${l<0?"":` (access key "${s[n]})"`}.`},h)})),t.source&&Pc("div",{class:"cm-diagnosticSource"},t.source))}class fp extends Ht{constructor(e){super(),this.diagnostic=e}eq(e){return e.diagnostic==this.diagnostic}toDOM(){return Pc("span",{class:"cm-lintPoint cm-lintPoint-"+this.diagnostic.severity})}}class mp{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(4294967295*Math.random()).toString(16),this.dom=pp(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class gp{constructor(e){this.view=e,this.items=[],this.list=Pc("ul",{tabIndex:0,role:"listbox","aria-label":this.view.state.phrase("Diagnostics"),onkeydown:t=>{if(27==t.keyCode)hp(this.view),this.view.focus();else if(38==t.keyCode||33==t.keyCode)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(40==t.keyCode||34==t.keyCode)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(36==t.keyCode)this.moveSelection(0);else if(35==t.keyCode)this.moveSelection(this.items.length-1);else if(13==t.keyCode)this.view.focus();else{if(!(t.keyCode>=65&&t.keyCode<=90&&this.selectedIndex>=0))return;{let{diagnostic:i}=this.items[this.selectedIndex],n=up(i.actions);for(let s=0;s{for(let t=0;thp(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(rp).selected;if(!e)return-1;for(let t=0;t{let a,l=-1;for(let e=i;ei&&(this.items.splice(i,l-i),n=!0)),t&&a.diagnostic==t.diagnostic?a.dom.hasAttribute("aria-selected")||(a.dom.setAttribute("aria-selected","true"),s=a):a.dom.hasAttribute("aria-selected")&&a.dom.removeAttribute("aria-selected"),i++}));i({sel:s.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:e,panel:t})=>{let i=t.height/this.list.offsetHeight;e.topt.bottom&&(this.list.scrollTop+=(e.bottom-t.bottom)/i)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),n&&this.sync()}sync(){let e=this.list.firstChild;function t(){let t=e;e=t.nextSibling,t.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=tp(this.view.state.field(rp).diagnostics,this.items[e].diagnostic);t&&this.view.dispatch({selection:{anchor:t.from,head:t.to},scrollIntoView:!0,effects:sp.of(t)})}static open(e){return new gp(e)}}function vp(e){return function(e,t='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(e)}')`}(``,'width="6" height="3"')}const Op=Ds.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:vp("#d11")},".cm-lintRange-warning":{backgroundImage:vp("orange")},".cm-lintRange-info":{backgroundImage:vp("#999")},".cm-lintRange-hint":{backgroundImage:vp("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}}}),bp=[rp,Ds.decorations.compute([rp],(e=>{let{selected:t,panel:i}=e.field(rp);return t&&i&&t.from!=t.to?Yt.set([op.range(t.from,t.to)]):Yt.none})),Vr(ap,{hideOn:function(e,t){let i=e.startState.doc.lineAt(t.pos);return!(!e.effects.some((e=>e.is(ip)))&&!e.changes.touchesRange(i.from,i.to))}}),Op],_p=(()=>[Oo(),yo,Or(),gh(),Tl(),tr(),[hr,cr],Oe.allowMultipleSelections.of(!0),Oe.transactionFilter.of((e=>{if(!e.docChanged||!e.isUserEvent("input.type")&&!e.isUserEvent("input.complete"))return e;let t=e.startState.languageDataAt("indentOnInput",e.startState.selection.main.head);if(!t.length)return e;let i=e.newDoc,{head:n}=e.newSelection.main,s=i.lineAt(n);if(n>s.from+200)return e;let r=i.sliceString(s.from,n);if(!t.some((e=>e.test(r))))return e;let{state:o}=e,a=-1,l=[];for(let{head:e}of o.selection.ranges){let t=o.doc.lineAt(e);if(t.from==a)continue;a=t.from;let i=Xa(o,t.from);if(null==i)continue;let n=/^\s*/.exec(t.text)[0],s=Ha(o,i);n!=s&&l.push({from:t.from,to:t.from+n.length,insert:s})}return l.length?[e,{changes:l,sequential:!0}]:e})),Rl(ql,{fallback:!0}),Ul(),[zu,Lu],Gu(),Tr(),Mr(),xr,Uc(),zs.of([...ju,...Cc,...kd,...Dh,...vl,...Zu,...cp])])();class yp{constructor(e,t,i,n,s,r,o,a,l,h=0,c){this.p=e,this.stack=t,this.state=i,this.reducePos=n,this.pos=s,this.score=r,this.buffer=o,this.bufferBase=a,this.curContext=l,this.lookAhead=h,this.parent=c}toString(){return`[${this.stack.filter(((e,t)=>t%3==0)).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let n=e.parser.context;return new yp(e,[],t,i,i,0,[],0,n?new wp(n,n.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,n=65535&e,{parser:s}=this.p,r=s.dynamicPrecedence(n);if(r&&(this.score+=r),0==i)return this.pushState(s.getGoto(this.state,n,!0),this.reducePos),n=2e3&&!(null===(t=this.p.parser.nodeSet.types[n])||void 0===t?void 0:t.isAnonymous)&&(a==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=l):this.p.lastBigReductionSizeo;)this.stack.pop();this.reduceContext(n,a)}storeNode(e,t,i,n=4,s=!1){if(0==e&&(!this.stack.length||this.stack[this.stack.length-1]0&&0==e.buffer[n-4]&&e.buffer[n-1]>-1){if(t==i)return;if(e.buffer[n-2]>=t)return void(e.buffer[n-2]=i)}}if(s&&this.pos!=i){let s=this.buffer.length;if(s>0&&0!=this.buffer[s-4])for(;s>0&&this.buffer[s-2]>i;)this.buffer[s]=this.buffer[s-4],this.buffer[s+1]=this.buffer[s-3],this.buffer[s+2]=this.buffer[s-2],this.buffer[s+3]=this.buffer[s-1],s-=4,n>4&&(n-=4);this.buffer[s]=e,this.buffer[s+1]=t,this.buffer[s+2]=i,this.buffer[s+3]=n}else this.buffer.push(e,t,i,n)}shift(e,t,i,n){if(131072&e)this.pushState(65535&e,this.pos);else if(0==(262144&e)){let s=e,{parser:r}=this.p;(n>this.pos||t<=r.maxNode)&&(this.pos=n,r.stateFlag(s,1)||(this.reducePos=n)),this.pushState(s,i),this.shiftContext(t,i),t<=r.maxNode&&this.buffer.push(t,i,n,4)}else this.pos=n,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,n,4)}apply(e,t,i,n){65536&e?this.reduce(e):this.shift(e,t,i,n)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let n=this.pos;this.reducePos=this.pos=n+e.length,this.pushState(t,n),this.buffer.push(i,n,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),n=e.bufferBase+t;for(;e&&n==e.bufferBase;)e=e.parent;return new yp(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,n,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new xp(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(0==i)return!1;if(0==(65536&i))return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let i=[];for(let n,s=0;s1&t&&e==n))||i.push(t[e],n)}t=i}let i=[];for(let e=0;e>19,n=65535&t,s=this.stack.length-3*i;if(s<0||e.getGoto(this.stack[s],n,!1)<0){let e=this.findForcedReduction();if(null==e)return!1;t=e}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(n,s)=>{if(!t.includes(n))return t.push(n),e.allActions(n,(t=>{if(393216&t);else if(65536&t){let i=(t>>19)-s;if(i>1){let n=65535&t,s=this.stack.length-3*i;if(s>=0&&e.getGoto(this.stack[s],n,!1)>=0)return i<<19|65536|n}}else{let e=i(t,s+1);if(null!=e)return e}}))};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(3!=this.stack.length)return!1;let{parser:e}=this.p;return 65535==e.data[e.stateSlot(this.state,1)]&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;tthis.lookAhead&&(this.emitLookAhead(),this.lookAhead=e)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}}class wp{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class xp{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=65535&e,i=e>>19;0==i?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=3*(i-1);let n=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=n}}class Sp{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,0==this.index&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Sp(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;null!=e&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,0==this.index&&this.maybeNext()}fork(){return new Sp(this.stack,this.pos,this.index)}}function kp(e,t=Uint16Array){if("string"!=typeof e)return e;let i=null;for(let n=0,s=0;n=92&&t--,t>=34&&t--;let s=t-32;if(s>=46&&(s-=46,i=!0),r+=s,i)break;r*=46}i?i[s++]=r:i=new t(r)}return i}class Tp{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const Cp=new Tp;class Pp{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=Cp,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,n=this.rangeIndex,s=this.pos+e;for(;si.to:s>=i.to;){if(n==this.ranges.length-1)return null;let e=this.ranges[++n];s+=e.from-i.to,i=e}return s}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t,i,n=this.chunkOff+e;if(n>=0&&n=this.chunk2Pos&&tn.to&&(this.chunk2=this.chunk2.slice(0,n.to-t)),i=this.chunk2.charCodeAt(0)}}return t>=this.token.lookAhead&&(this.token.lookAhead=t+1),i}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(null==i||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Cp,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let n of this.ranges){if(n.from>=t)break;n.to>e&&(i+=this.input.read(Math.max(n.from,e),Math.min(n.to,t)))}return i}}class Mp{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;!function(e,t,i,n,s,r){let o=0,a=1<0){let i=e[n];if(l.allows(i)&&(-1==t.token.value||t.token.value==i||Rp(i,t.token.value,s,r))){t.acceptToken(i);break}}let n=t.next,h=0,c=e[o+2];if(!(t.next<0&&c>h&&65535==e[i+3*c-3]&&65535==e[i+3*c-3])){for(;h>1,r=i+s+(s<<1),a=e[r],l=e[r+1]||65536;if(n=l)){o=e[r+2],t.advance();continue e}h=s+1}}break}o=e[i+3*c-1]}}(this.data,e,t,this.id,i.data,i.tokenPrecTable)}}Mp.prototype.contextual=Mp.prototype.fallback=Mp.prototype.extend=!1,Mp.prototype.fallback=Mp.prototype.extend=!1;class Ep{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}}function Ap(e,t,i){for(let n,s=t;65535!=(n=e[s]);s++)if(n==i)return s-t;return-1}function Rp(e,t,i,n){let s=Ap(i,n,t);return s<0||Ap(i,n,e)t)&&!n.type.isError)return i<0?Math.max(0,Math.min(n.to-1,t-25)):Math.min(e.length,Math.max(n.from+1,t+25));if(i<0?n.prevSibling():n.nextSibling())break;if(!n.parent())return i<0?0:e.length}}class Lp{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?qp(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?qp(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=r,null;if(s instanceof Do){if(r==e){if(r=Math.max(this.safeFrom,e)&&(this.trees.push(s),this.start.push(r),this.index.push(0))}else this.index[t]++,this.nextStart=r+s.length}}}class Np{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map((e=>new Tp))}getActions(e){let t=0,i=null,{parser:n}=e.p,{tokenizers:s}=n,r=n.stateSlot(e.state,3),o=e.curContext?e.curContext.hash:0,a=0;for(let n=0;nh.end+25&&(a=Math.max(h.lookAhead,a)),0!=h.value)){let n=t;if(h.extended>-1&&(t=this.addActions(e,h.extended,h.end,t)),t=this.addActions(e,h.value,h.end,t),!l.extend&&(i=h,t>n))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),i||e.pos!=this.stream.end||(i=new Tp,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new Tp,{pos:i,p:n}=e;return t.start=i,t.end=Math.min(i+1,n.stream.end),t.value=i==n.stream.end?n.parser.eofTerm:0,t}updateCachedToken(e,t,i){let n=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(n,e),i),e.value>-1){let{parser:t}=i.p;for(let n=0;n=0&&i.p.parser.dialect.allows(s>>1)){0==(1&s)?e.value=s>>1:e.extended=s>>1;break}}}else e.value=0,e.end=this.stream.clipPos(n+1)}putAction(e,t,i,n){for(let t=0;t4*e.bufferLength?new Lp(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e,t,i=this.stacks,n=this.minStackPos,s=this.stacks=[];if(this.bigReductionCount>300&&1==i.length){let[e]=i;for(;e.forceReduce()&&e.stack.length&&e.stack[e.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let r=0;rn)s.push(o);else{if(this.advanceStack(o,s,i))continue;{e||(e=[],t=[]),e.push(o);let i=this.tokens.getMainToken(o);t.push(i.value,i.end)}}break}}if(!s.length){let t=e&&function(e){let t=null;for(let i of e){let e=i.p.stoppedAt;(i.pos==i.p.stream.end||null!=e&&i.pos>e)&&i.p.parser.stateFlag(i.state,2)&&(!t||t.scorethis.stoppedAt?e[0]:this.runRecovery(e,t,s);if(i)return Dp&&console.log("Force-finish "+this.stackID(i)),this.stackToTree(i.forceAll())}if(this.recovering){let e=1==this.recovering?1:3*this.recovering;if(s.length>e)for(s.sort(((e,t)=>t.score-e.score));s.length>e;)s.pop();s.some((e=>e.reducePos>n))&&this.recovering--}else if(s.length>1){e:for(let e=0;e500&&n.buffer.length>500){if(!((t.score-n.score||t.buffer.length-n.buffer.length)>0)){s.splice(e--,1);continue e}s.splice(i--,1)}}}s.length>12&&s.splice(12,s.length-12)}this.minStackPos=s[0].pos;for(let e=1;e ":"";if(null!=this.stoppedAt&&n>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let t=e.curContext&&e.curContext.tracker.strict,i=t?e.curContext.hash:0;for(let o=this.fragments.nodeAt(n);o;){let n=this.parser.nodeSet.types[o.type.id]==o.type?s.getGoto(e.state,o.type.id):-1;if(n>-1&&o.length&&(!t||(o.prop(ko.contextHash)||0)==i))return e.useNode(o,n),Dp&&console.log(r+this.stackID(e)+` (via reuse of ${s.getName(o.type.id)})`),!0;if(!(o instanceof Do)||0==o.children.length||o.positions[0]>0)break;let a=o.children[0];if(!(a instanceof Do&&0==o.positions[0]))break;o=a}}let o=s.stateSlot(e.state,4);if(o>0)return e.reduce(o),Dp&&console.log(r+this.stackID(e)+` (via always-reduce ${s.getName(65535&o)})`),!0;if(e.stack.length>=9e3)for(;e.stack.length>6e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let o=0;on?t.push(u):i.push(u)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return $p(e,t),!0}}runRecovery(e,t,i){let n=null,s=!1;for(let r=0;r ":"";if(o.deadEnd){if(s)continue;if(s=!0,o.restart(),Dp&&console.log(h+this.stackID(o)+" (restarted)"),this.advanceFully(o,i))continue}let c=o.split(),d=h;for(let e=0;c.forceReduce()&&e<10&&(Dp&&console.log(d+this.stackID(c)+" (via force-reduce)"),!this.advanceFully(c,i));e++)Dp&&(d=this.stackID(c)+" -> ");for(let e of o.recoverByInsert(a))Dp&&console.log(h+this.stackID(e)+" (via recover-insert)"),this.advanceFully(e,i);this.stream.end>o.pos?(l==o.pos&&(l++,a=0),o.recoverByDelete(a,l),Dp&&console.log(h+this.stackID(o)+` (via recover-delete ${this.parser.getName(a)})`),$p(o,i)):(!n||n.scoree;class jp extends Jo{constructor(e){if(super(),this.wrappers=[],14!=e.version)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let i=0;ie.topRules[t][1])),n=[];for(let e=0;e=0)s(n,e,t[i++]);else{let r=t[i+-n];for(let o=-n;o>0;o--)s(t[i++],e,r);i++}}}this.nodeSet=new Mo(t.map(((t,s)=>Po.define({name:s>=this.minRepeatTerm?void 0:t,id:s,props:n[s],top:i.indexOf(s)>-1,error:0==s,skipped:e.skippedNodes&&e.skippedNodes.indexOf(s)>-1})))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=wo;let r=kp(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let e=0;e"number"==typeof e?new Mp(r,e):e)),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let n=new Bp(this,e,t,i);for(let s of this.wrappers)n=s(n,e,t,i);return n}getGoto(e,t,i=!1){let n=this.goto;if(t>=n[0])return-1;for(let s=n[t+1];;){let t=n[s++],r=1&t,o=n[s++];if(r&&i)return o;for(let i=s+(t>>1);s0}validAction(e,t){return!!this.allActions(e,(e=>e==t||null))}allActions(e,t){let i=this.stateSlot(e,4),n=i?t(i):void 0;for(let i=this.stateSlot(e,1);null==n;i+=3){if(65535==this.data[i]){if(1!=this.data[i+1])break;i=Wp(this.data,i+2)}n=t(Wp(this.data,i+1))}return n}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(65535==this.data[i]){if(1!=this.data[i+1])break;i=Wp(this.data,i+2)}if(0==(1&this.data[i+2])){let e=this.data[i+1];t.some(((t,i)=>1&i&&t==e))||t.push(this.data[i],e)}}return t}configure(e){let t=Object.assign(Object.create(jp.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map((t=>{let i=e.tokenizers.find((e=>e.from==t));return i?i.to:t}))),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map(((i,n)=>{let s=e.specializers.find((e=>e.from==i.external));if(!s)return i;let r=Object.assign(Object.assign({},i),{external:s.to});return t.specializers[n]=Vp(r),r}))),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),null!=e.strict&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),null!=e.bufferLength&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return null==t?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map((()=>!1));if(e)for(let n of e.split(" ")){let e=t.indexOf(n);e>=0&&(i[e]=!0)}let n=null;for(let e=0;ee.external(i,n)<<1|t}return e.get}const Up=new Set([27,51,52,270,67,133,58,59,251,64,65,74,62,63,154,155,158,115]);function Fp(e){return 10==e||13==e}const Hp=new Ep(((e,t)=>{let i;if(e.next<0)e.acceptToken(206);else if(t.context.depth<0)Fp(e.next)&&e.acceptToken(205,1);else if(((i=e.peek(-1))<0||Fp(i))&&t.canShift(204)){let t=0;for(;32==e.next||9==e.next;)e.advance(),t++;10!=e.next&&13!=e.next&&35!=e.next||e.acceptToken(204,-t)}else Fp(e.next)&&e.acceptToken(203,1)}),{contextual:!0}),Xp=new Ep(((e,t)=>{let i=t.context.depth;if(i<0)return;let n=e.peek(-1);if(10==n||13==n){let t=0,n=0;for(;;){if(32==e.next)t++;else{if(9!=e.next)break;t+=8-t%8}e.advance(),n++}t!=i&&10!=e.next&&13!=e.next&&35!=e.next&&(t0),this.strict=!1!==e.strict}}({start:Gp,reduce:(e,t)=>e.depth<0&&Up.has(t)?e.parent:e,shift:(e,t,i,n)=>201==t?new Yp(e,function(e){let t=0;for(let i=0;ie.hash}),Kp=new Ep((e=>{for(let t=0;t<5;t++){if(e.next!="print".charCodeAt(t))return;e.advance()}if(!/\w/.test(String.fromCharCode(e.next)))for(let t=0;;t++){let i=e.peek(t);if(32!=i&&9!=i)return void(40!=i&&46!=i&&10!=i&&13!=i&&35!=i&&e.acceptToken(1))}}));function Jp(e,t,i,n,s){return new Ep((r=>{let o=r.pos;for(;!(r.next<0);)if(123==r.next){if(123!=r.peek(1)){if(r.pos==o)return void r.acceptToken(n,1);break}r.advance(2)}else if(92==r.next)r.advance(),r.next>=0&&r.advance();else{if(r.next==e&&(1==t||r.peek(1)==e&&r.peek(2)==e)){if(r.pos==o)return void r.acceptToken(s,t);break}r.advance()}r.pos>o&&r.acceptToken(i)}))}const ef=Jp(39,1,207,2,208),tf=Jp(34,1,209,3,210),nf=Jp(39,3,211,4,212),sf=Jp(34,3,213,5,214),rf=ra({'async "*" "**" FormatConversion FormatSpec':Ta.modifier,"for while if elif else try except finally return raise break continue with pass assert await yield match case":Ta.controlKeyword,"in not and or is del":Ta.operatorKeyword,"from def class global nonlocal lambda":Ta.definitionKeyword,import:Ta.moduleKeyword,"with as print":Ta.keyword,Boolean:Ta.bool,None:Ta.null,VariableName:Ta.variableName,"CallExpression/VariableName":Ta.function(Ta.variableName),"FunctionDefinition/VariableName":Ta.function(Ta.definition(Ta.variableName)),"ClassDefinition/VariableName":Ta.definition(Ta.className),PropertyName:Ta.propertyName,"CallExpression/MemberExpression/PropertyName":Ta.function(Ta.propertyName),Comment:Ta.lineComment,Number:Ta.number,String:Ta.string,FormatString:Ta.special(Ta.string),UpdateOp:Ta.updateOperator,"ArithOp!":Ta.arithmeticOperator,BitOp:Ta.bitwiseOperator,CompareOp:Ta.compareOperator,AssignOp:Ta.definitionOperator,Ellipsis:Ta.punctuation,At:Ta.meta,"( )":Ta.paren,"[ ]":Ta.squareBracket,"{ }":Ta.brace,".":Ta.derefOperator,", ;":Ta.separator}),of={__proto__:null,await:48,or:58,and:60,in:64,not:66,is:68,if:74,else:76,lambda:80,yield:98,from:100,async:106,for:108,None:168,True:170,False:170,del:184,pass:188,break:192,continue:196,return:200,raise:208,import:212,as:214,global:218,nonlocal:220,assert:224,type:229,elif:242,while:246,try:252,except:254,finally:256,with:260,def:264,class:274,match:285,case:291},af=jp.deserialize({version:14,states:"#&jO`Q#yOOP$bOSOOO%kQ&nO'#HcOOQS'#Cq'#CqOOQS'#Cr'#CrO'ZQ#xO'#CpO(|Q&nO'#HbOOQS'#Hc'#HcOOQS'#DW'#DWOOQS'#Hb'#HbO)jQ#xO'#DaO)}Q#xO'#DhO*_Q#xO'#DlOOQS'#Dw'#DwO*rO,UO'#DwO*zO7[O'#DwO+SOWO'#DxO+_O`O'#DxO+jOpO'#DxO+uO!bO'#DxO-wQ&nO'#HSOOQS'#HS'#HSO'ZQ#xO'#HRO/ZQ&nO'#HROOQS'#Ee'#EeO/rQ#xO'#EfOOQS'#HQ'#HQO/|Q#xO'#HPOOQV'#HP'#HPO0XQ#xO'#F]OOQS'#Ge'#GeO0^Q#xO'#F[OOQV'#IY'#IYOOQV'#HO'#HOOOQV'#Ft'#FtQ`Q#yOOO'ZQ#xO'#CsO0lQ#xO'#DPO0sQ#xO'#DTO1RQ#xO'#HgO1cQ&nO'#EYO'ZQ#xO'#EZOOQS'#E]'#E]OOQS'#E_'#E_OOQS'#Ea'#EaO1wQ#xO'#EcO2_Q#xO'#EgO0XQ#xO'#EiO2rQ&nO'#EiO0XQ#xO'#ElO/rQ#xO'#EoO0XQ#xO'#EqO/rQ#xO'#EwO/rQ#xO'#EzO2}Q#xO'#E|O3UQ#xO'#FRO3aQ#xO'#E}O/rQ#xO'#FRO0XQ#xO'#FTO0XQ#xO'#FYO3fQ#xO'#F_P3mO#xO'#G}POOO)CBq)CBqOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Ck'#CkOOQS'#Cl'#ClOOQS'#Cn'#CnO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO'ZQ#xO,59QO3xQ#xO'#DqOOQS,5:[,5:[O4]Q#xO'#HqOOQS,5:_,5:_O4jQMlO,5:_O4oQ&nO,59[O0lQ#xO,59dO0lQ#xO,59dO0lQ#xO,59dO7_Q#xO,59dO7dQ#xO,59dO7kQ#xO,59lO7rQ#xO'#HbO8xQ#xO'#HaOOQS'#Ha'#HaOOQS'#D^'#D^O9aQ#xO,59cO'ZQ#xO,59cO9oQ#xO,59cOOQS,59{,59{O9tQ#xO,5:TO'ZQ#xO,5:TOOQS,5:S,5:SO:SQ#xO,5:SO:XQ#xO,5:ZO'ZQ#xO,5:ZO'ZQ#xO,5:XOOQS,5:W,5:WO:jQ#xO,5:WO:oQ#xO,5:YOOOO'#F|'#F|O:tO,UO,5:cOOQS,5:c,5:cOOOO'#F}'#F}O:|O7[O,5:cO;UQ#xO'#DyOOOW'#GO'#GOO;fOWO,5:dOOQS,5:d,5:dO;UQ#xO'#D}OOO`'#GR'#GRO;qO`O,5:dO;UQ#xO'#EOOOOp'#GS'#GSO;|OpO,5:dO;UQ#xO'#EPOOO!b'#GT'#GTOROOQS,5>R,5>RO/rQ#xO'#EUOOQS'#EV'#EVOGZQ#xO'#GWOGkQ#xO,59OOGkQ#xO,59OO)pQ#xO,5:rOGyQ&nO'#HjOOQS,5:u,5:uOOQS,5:},5:}OH^Q#xO,5;ROHoQ#xO,5;TOOQS'#GZ'#GZOH}Q&nO,5;TOI]Q#xO,5;TOIbQ#xO'#IWOOQS,5;W,5;WOIpQ#xO'#ISOOQS,5;Z,5;ZOJRQ#xO,5;]O3aQ#xO,5;cO3aQ#xO,5;fOJZQ&nO'#IZO'ZQ#xO'#IZOJeQ#xO,5;hO2}Q#xO,5;hO/rQ#xO,5;mO0XQ#xO,5;oOJjQ#yO'#ExOKvQ#{O,5;iO! [Q#xO'#I[O3aQ#xO,5;mO! gQ#xO,5;oO! oQ#xO,5;tO! zQ&nO,5;yO'ZQ#xO,5;yPOOO,5=i,5=iP!!ROSO,5=iP!!WO#xO,5=iO!${Q&nO1G.lO!%SQ&nO1G.lO!'sQ&nO1G.lO!'}Q&nO1G.lO!*hQ&nO1G.lO!*{Q&nO1G.lO!+`Q#xO'#HpO!+nQ&nO'#HSO/rQ#xO'#HpO!+xQ#xO'#HoOOQS,5:],5:]O!,QQ#xO,5:]O!,VQ#xO'#HrO!,bQ#xO'#HrO!,uQ#xO,5>]OOQS'#Du'#DuOOQS1G/y1G/yOOQS1G/O1G/OO!-uQ&nO1G/OO!-|Q&nO1G/OO0lQ#xO1G/OO!.iQ#xO1G/WOOQS'#D]'#D]O/rQ#xO,59vOOQS1G.}1G.}O!.pQ#xO1G/gO!/QQ#xO1G/gO!/YQ#xO1G/hO'ZQ#xO'#HiO!/_Q#xO'#HiO!/dQ&nO1G.}O!/tQ#xO,59kO!0zQ#xO,5>XO!1[Q#xO,5>XO!1dQ#xO1G/oO!1iQ&nO1G/oOOQS1G/n1G/nO!1yQ#xO,5>SO!2pQ#xO,5>SO/rQ#xO1G/sO!3_Q#xO1G/uO!3dQ&nO1G/uO!3tQ&nO1G/sOOQS1G/r1G/rOOQS1G/t1G/tOOOO-E9z-E9zOOQS1G/}1G/}OOOO-E9{-E9{O!4UQ#xO'#H|O/rQ#xO'#H|O!4dQ#xO,5:eOOOW-E9|-E9|OOQS1G0O1G0OO!4oQ#xO,5:iOOO`-E:P-E:PO!4zQ#xO,5:jOOOp-E:Q-E:QO!5VQ#xO,5:kOOO!b-E:R-E:ROOQS-E:S-E:SO!5bQ!LUO1G3XO!6RQ&nO1G3XO'ZQ#xO,5oOOQS1G1c1G1cO!7RQ#xO1G1cOOQS'#DX'#DXO/rQ#xO,5>OOOQS,5>O,5>OO!7WQ#xO'#FuO!7cQ#xO,59qO!7kQ#xO1G/ZO!7uQ&nO,5>SOOQS1G3m1G3mOOQS,5:p,5:pO!8fQ#xO'#HROOQS,5UO!9gQ#xO,5>UO/rQ#xO1G0mO/rQ#xO1G0mO0XQ#xO1G0oOOQS-E:X-E:XO!9xQ#xO1G0oO!:TQ#xO1G0oO!:YQ#xO,5>rO!:hQ#xO,5>rO!:vQ#xO,5>nO!;^Q#xO,5>nO!;oQ#xO'#EsO/rQ#xO1G0wO!;zQ#xO1G0wO!uO!BzQ#xO,5>uO!CSQ&nO,5>uO/rQ#xO1G1SO!C^Q#xO1G1SO3aQ#xO1G1XO! gQ#xO1G1ZOOQV,5;d,5;dO!CcQ#zO,5;dO!ChQ#{O1G1TO!F|Q#xO'#GbO3aQ#xO1G1TO3aQ#xO1G1TO!G^Q#xO,5>vO!GkQ#xO,5>vO0XQ#xO,5>vOOQV1G1X1G1XO!GsQ#xO'#FVO!HUQMlO1G1ZO!H^Q#xO1G1ZOOQV1G1`1G1`O3aQ#xO1G1`O!HcQ#xO1G1`O!HkQ#xO'#FaOOQV1G1e1G1eO! zQ&nO1G1ePOOO1G3T1G3TP!HpOSO1G3TOOQS,5>[,5>[OOQS'#Dr'#DrO/rQ#xO,5>[O!HuQ#xO,5>ZO!IYQ#xO,5>ZOOQS1G/w1G/wO!IbQ#xO,5>^O!IrQ#xO,5>^O!IzQ#xO,5>^O!J_Q#xO,5>^O!JoQ#xO,5>^OOQS1G3w1G3wOOQS7+$j7+$jO!7kQ#xO7+$rO!LbQ#xO1G/OO!LiQ#xO1G/OOOQS1G/b1G/bOOQS,5TO'ZQ#xO,5>TOOQS7+$i7+$iO!MVQ#xO7+%RO!M_Q#xO7+%SO!MdQ#xO1G3sOOQS7+%Z7+%ZO!MtQ#xO1G3sO!M|Q#xO7+%ZOOQS,5hO##PQ#xO,5>hO##PQ#xO,5>hO##_O$ISO'#D{O##jO#tO'#H}OOOW1G0P1G0PO##oQ#xO1G0POOO`1G0T1G0TO##wQ#xO1G0TOOOp1G0U1G0UO#$PQ#xO1G0UOOO!b1G0V1G0VO#$XQ#xO1G0VO#$aQ!LUO7+(sO#%QQ&nO1G2]P#%kQ#xO'#GVOOQS,5i,5>iOOOW7+%k7+%kOOO`7+%o7+%oOOOp7+%p7+%pOOO!b7+%q7+%qO#:`Q#xO1G3XO#:yQ#xO1G3XP'ZQ#xO'#FxO/rQ#xO<qO#;mQ#xO,5>qO0XQ#xO,5>qO#pOOQS<sO#sOOQS1G0y1G0yOOQS<xO#DpQ#xO,5>xOOQS,5>x,5>xO#D{Q#xO,5>wO#E^Q#xO,5>wOOQS1G1]1G1]OOQS,5;s,5;sOOQV<XAN>XO#HmQ#xO<eAN>eO/rQ#xO1G2PO#H}Q&nO1G2PP#IXQ#xO'#FyOOQS1G2V1G2VP#IfQ#xO'#GPO#IsQ#xO7+)nO#JZQ#xO,5:hOOOO-E:O-E:OO#JfQ#xO7+(sOOQSAN?_AN?_O#KPQ#xO,5VOOQSANBaANBaOOOO7+%n7+%nOOQS7+'|7+'|O$+jQ#xO<zO$.`Q#xO,5>zO0XQ#xO,5|O$!pQ#xO,5>|OOQS1G1s1G1sO$2WQ&nO,5<_OOQU7+'S7+'SO$$mQ#xO1G/kO$!pQ#xO,5<]O$2_Q#xO,5>}O$2fQ#xO,5>}OOQS1G1v1G1vOOQS7+'V7+'VP$!pQ#xO'#GkO$2nQ#xO1G4hO$2xQ#xO1G4hO$3QQ#xO1G4hOOQS7+%V7+%VO$3`Q#xO1G1wO$3nQ&nO'#FdO$3uQ#xO,5=UOOQS,5=U,5=UO$4TQ#xO1G4iOOQS-E:h-E:hO$!pQ#xO,5=TO$4[Q#xO,5=TO$4aQ#xO7+*SOOQS-E:g-E:gO$4kQ#xO7+*SO$!pQ#xO,5<^P$!pQ#xO'#GjO$4sQ#xO1G2oO$!pQ#xO1G2oP$5RQ#xO'#GiO$5YQ#xO<fPP>i?Z?^PP'a'aPP?vPP'a'aPP'a'a'a'a'a?z@t'aP@wP@}EXHxPH|IYI^IbIf'aPPPIjIs'XP'X'XP'XP'XP'XP'XP'X'X'XP'XPP'XPP'XP'XPIyJVJ_PJfJlPJfPJfJfPPPJfPLzPMTM_MeLzPJfMnPJfPMuM{PNPNe! S! mNPNP! s!!QNPNPNPNP!!f!!l!!o!!t!!w!#R!#X!#e!#w!#}!$X!$_!${!%R!%X!%_!%i!%o!%u!%{!&R!&X!&k!&u!&{!'R!'X!'c!'i!'o!'u!'{!(V!(]!(g!(m!(v!(|!)]!)e!)o!)vPPPPPPPPPPPPPPPPP!)|!*P!*V!*`!*j!*uPPPPPPPPPPPP!/l!1Q!5T!8hPP!8p!9S!9]!:U!9{!:_!:e!:h!:k!:n!:v!;gPPPPPPPPP!;j!;yPPPP!V!>`!?[!?_]jOs#v$w*W,d(TeOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)V)X)a)d)p)w)y)}*O*S*W*^*b*l*v*y*z*}+T+U+W+Y+]+^+a+d+h+i+l+t+v+w,O,],^,d,l,m,p,z,{,|-O-P-S-U-W-Y-[-^-_-b-y-{.S.V.Y.}/O/o/s0[0z0{0|0}1P1Q1R1S1T1V1Z}!hQ#r$P$b$q$}%r%w%}&O&t'a'x)W)c)|+R+[,[-Z0Y1O!P!iQ#r$P$b$q$}%S%r%w%}&O&t'a'x)W)c)|+R+[,[-Z0Y1O!R!jQ#r$P$b$q$}%S%T%r%w%}&O&t'a'x)W)c)|+R+[,[-Z0Y1O!T!kQ#r$P$b$q$}%S%T%U%r%w%}&O&t'a'x)W)c)|+R+[,[-Z0Y1O!V!lQ#r$P$b$q$}%S%T%U%V%r%w%}&O&t'a'x)W)c)|+R+[,[-Z0Y1O!X!mQ#r$P$b$q$}%S%T%U%V%W%r%w%}&O&t'a'x)W)c)|+R+[,[-Z0Y1O!]!mQ!s#r$P$b$q$}%S%T%U%V%W%X%r%w%}&O&t'a'x)W)c)|+R+[,[-Z0Y1O(TTOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)V)X)a)d)p)w)y)}*O*S*W*^*b*l*v*y*z*}+T+U+W+Y+]+^+a+d+h+i+l+t+v+w,O,],^,d,l,m,p,z,{,|-O-P-S-U-W-Y-[-^-_-b-y-{.S.V.Y.}/O/o/s0[0z0{0|0}1P1Q1R1S1T1V1Z&iVOYZ[isuw}!O!S!U!V!Z!n!p!t!u!v!x!y#c#g#j#m#s#v$Y$[$^$a$u$w%[%a%h%k%m%t%y%{&V&b&o&s'O'P'W'Z'b'i'l'}(O(R(T(U(Y(a(i(o(u(x)V)X)a)p)w)y*S*W*^*b*l*v*y*z*}+T+U+W+Y+]+^+a+h+i+l+t+w,O,d,l,m,p,z,{,|-O-P-S-U-W-Y-[-^-_-b-y-{.S.V.Y.}/O/s0[0z0{0|0}1P1Q1R1S1V1Z%sXOYZ[isw}!O!S!U!V!Z!n!p#c#g#j#m#s#v$Y$[$^$a$u$w%[%a%k%m%t%y%{&V&b&o&s'O'P'W'Z'b'i'l'}(O(R(T(U(Y(a(i(o(u(x)V)X)a)p)w)y*S*W*^*b*l*v*y*z*}+T+W+Y+]+^+a+h+i+l+t+w,O,d,l,m,p,z,{,|-O-P-S-W-Y-[-^-_-b-y-{.S.V.}/O/s1Q1R1SQ$VvQ/t/SR1W1Y'zeOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(R(T(U(Y(_(a(e(i(n(o(u(x)V)X)a)d)p)w)y)}*O*S*W*^*b*l*y*z*}+T+U+W+Y+]+^+a+d+h+i+l+t+v+w,O,],^,d,l,m,p,{,|-O-P-S-U-W-Y-[-^-_-b-y-{.S.V.Y.}/O/o/s0[0z0{0|0}1P1Q1R1S1T1V1ZW#ym!P!Q$hW$Rv&q/S1YQ$j!RQ$n!TQ${![Q$|!]W%Z!n(O*v,zS&p$S$TQ'e$vQ)Y&jQ)h'QU)i'S)j)kU)l'U)m+}W)s'Y,Q-j.dQ*d'nW*e'p,s-}.lQ,P)rS,r*f*gY-d+x-e.a.b/XQ-g+zQ-t,hQ-x,kQ.j-vl.o.R.u.v.x/d/f/k0R0W0]0b0m0r0uQ/W.`Q/l.wQ/x/^Q0T/hU0h0^0k0sX0n0c0o0v0wR&o$R!_!|YZ!U!V!p%a%m%t(R(T(U(a(i)y*y*z*}+T+W+Y,{,|-O-P-S.S.V.}/O/sR%k!{Q#QYQ&W#cQ&Z#gQ&]#jQ&_#mQ&x$^Q&{$aR-`+lT/R.Y0[![!oQ!s#r$P$b$q$}%S%T%U%V%W%X%r%w%}&O&t'a'x)W)c)|+R+[,[-Z0Y1OQ&m#zQ't$|R*p'uR'}%ZQ%d!rR/v/[(SdOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)V)X)a)d)p)w)y)}*O*S*W*^*b*l*v*y*z*}+T+U+W+Y+]+^+a+d+h+i+l+t+v+w,O,],^,d,l,m,p,z,{,|-O-P-S-U-W-Y-[-^-_-b-y-{.S.V.Y.}/O/o/s0[0z0{0|0}1P1Q1R1S1T1V1ZS#pd#q!P.s.R.u.v.w.x/^/d/f/k0R0W0]0^0b0c0k0m0o0r0s0u0v0w(SdOTYZ[fistuwy}!O!S!U!V!W!Z!^!h!i!j!k!l!m!n!p!t!u!v!x!y#P#T#X#Y#c#g#j#m#s#v$X$Y$[$^$a$r$t$u$w%O%[%a%h%k%m%p%t%y%{&V&b&d&o&s&|'O'P'W'Z'_'b'i'l'}(O(R(T(U(Y(_(a(e(i(n(o(u(x)V)X)a)d)p)w)y)}*O*S*W*^*b*l*v*y*z*}+T+U+W+Y+]+^+a+d+h+i+l+t+v+w,O,],^,d,l,m,p,z,{,|-O-P-S-U-W-Y-[-^-_-b-y-{.S.V.Y.}/O/o/s0[0z0{0|0}1P1Q1R1S1T1V1ZT#pd#qT#d`#ee(|&W&Z&]&_)O)Q)S)U-`._T+m({+nT#ha#iT#kb#lT#nc#oQ$`xQ,P)sR,q*eX$^x$_$`&zQ'[$nQ'r${Q'u$|R*V'eQ)t'YV-i,Q-j.dZlOs$w*W,dXpOs*W,dQ$x!YQ']$oQ'^$pQ'o$zQ's$|Q*T'dQ*['iQ*_'jQ*`'kQ*m'qS*o't'uQ,W)yQ,Y)zQ,Z){Q,_*RS,a*U*nQ,e*YQ,f*ZS,g*]*^Q,w*pQ-l,VQ-m,XQ-o,`S-p,b,cQ-u,iQ-w,jQ.e-nQ.g-qQ.h-sQ.i-tQ/Y.fQ/Z.jQ/p.{R0Z/qWpOs*W,dR#|oQ'q${S*U'e'rR,c*VQ,p*eR-{,qQ*n'qQ,b*UR-q,cZnOos*W,dQ'w$}R*r'xT.P,x.Qu.z.R.u.v.x/^/d/f/k0R0W0]0^0b0k0m0r0s0ut.z.R.u.v.x/^/d/f/k0R0W0]0^0b0k0m0r0s0uQ/l.wX0n0c0o0v0w!P.r.R.u.v.w.x/^/d/f/k0R0W0]0^0b0c0k0m0o0r0s0u0v0wQ/a.qR/}/bg/d.t/e/y0Q0V0e0g0i0t0x0yu.y.R.u.v.x/^/d/f/k0R0W0]0^0b0k0m0r0s0uX/_.o.y/x0hR/z/^V0j0^0k0sR/q.{QsOS$Os,dR,d*WQ&r$UR)_&rS%z#W$WS(p%z(sT(s%}&tQ%n#OQ%u#SW(b%n%u(g(kQ(g%rR(k%wQ&}$bR)e&}Q(v&OQ+_(qT+e(v+_Q(P%]R*w(PS(S%`%aY*{(S*|-Q.W/PU*|(T(U(VU-Q*}+O+PS.W-R-SR/P.XQ#_^R&R#_Q#b_R&T#bQ#e`R&X#eQ(y&US+j(y+kR+k(zQ+n({R-a+nQ#iaR&[#iQ#lbR&^#lQ#ocR&`#oQ#qdR&a#qQ#tgQ&c#rW&f#t&c)b+uQ)b&wR+u1OQ$_xS&y$_&zR&z$`Q'X$lR)q'XQ&k#yR)Z&kQ$h!QR'R$hQ+y)iS-f+y.cR.c-gQ'V$jR)n'VQ,R)tR-k,RQ#wkR&h#wQ)x']R,U)xQ'`$qS*P'`*QR*Q'aQ'h$xR*X'hQ'm$yS*c'm,nR,n*dQ,t*iR.O,tWoOs*W,dR#{oQ.Q,xR.m.Qd/e.t/y0Q0V0e0g0i0t0x0yR0P/eU/].o/x0hR/w/]Q0d0VS0p0d0qR0q0eS0_/y/zR0l0_Q/g.tR0S/gR!`PXrOs*W,dWqOs*W,dR'f$wYkOs$w*W,dR&g#v[xOs#v$w*W,dR&x$^&hQOYZ[isuw}!O!S!U!V!Z!n!p!t!u!v!x!y#c#g#j#m#s#v$Y$[$^$a$u$w%[%a%h%k%m%t%y%{&V&b&o&s'O'P'W'Z'b'i'l'}(O(R(T(U(Y(a(i(o(u(x)V)X)a)p)w)y*S*W*^*b*l*v*y*z*}+T+U+W+Y+]+^+a+h+i+l+t+w,O,d,l,m,p,z,{,|-O-P-S-U-W-Y-[-^-_-b-y-{.S.V.Y.}/O/s0[0z0{0|0}1P1Q1R1S1V1ZQ!sTQ#rfQ$PtU$by%p(eS$q!W$tQ$}!^Q%S!hQ%T!iQ%U!jQ%V!kQ%W!lQ%X!mQ%r#PQ%w#TQ%}#XQ&O#YQ&t$XQ'a$rQ'x%OQ)W&dU)c&|)d+vW)|'_*O,],^Q+R(_Q+[(nQ,[)}Q-Z+dQ0Y/oR1O1TQ#OYQ#SZQ$o!UQ$p!VQ%`!pQ(V%a^(^%m%t(a(i+T+W+Y^*x(R*z-O-P.V/O/sQ+O(TQ+P(UQ,X)yQ,}*yQ-R*}Q.T,{Q.U,|Q.X-SQ.|.SR/r.}[gOs#v$w*W,d!^!{YZ!U!V!p%a%m%t(R(T(U(a(i)y*y*z*}+T+W+Y,{,|-O-P-S.S.V.}/O/sQ#W[Q#uiS$Ww}Q$e!OW$l!S$a'b*SS$y!Z$uW%Y!n(O*v,zY&U#c#g#j#m+l`&e#s&b)V)X)a+t-b1SQ&u$YQ&v$[Q&w$^Q'{%[Q(]%kW(m%y(o+]+aQ(q%{Q(z&VQ)]&oS)`&s1QQ)f'OQ)g'PU)o'W)p,OQ)v'ZQ*]'iY*a'l*b,l,m-yQ*t'}S+Q(Y1RW+c(u+^-W-[W+g(x+i-^-_Q,T)wQ,i*^Q,v*lQ-]+hQ-c+wQ-z,pQ.]-YR.k-{hUOs#s#v$w&b&s(Y)V)X*W,d%Y!zYZ[iw}!O!S!U!V!Z!n!p#c#g#j#m$Y$[$^$a$u%[%a%k%m%t%y%{&V&o'O'P'W'Z'b'i'l'}(O(R(T(U(a(i(o(u(x)a)p)w)y*S*^*b*l*v*y*z*}+T+W+Y+]+^+a+h+i+l+t+w,O,l,m,p,z,{,|-O-P-S-W-Y-[-^-_-b-y-{.S.V.}/O/s1Q1R1SQ$QuW%e!t!x0{1VQ%f!uQ%g!vQ%i!yQ%s0zS(X%h1PQ(Z0|Q([0}Q-T+UQ.[-US/Q.Y0[R1X1ZU$Uv/S1YR)^&q[hOs#v$w*W,da!}Y#c#g#j#m$^$a+lQ#][Q$ZwR$d}Q%o#OQ%v#SQ%|#WQ'{%YQ(h%rQ(l%wQ(t%}Q(w&OQ+`(qQ,y*tQ.Z-TQ/U.[R/u/TQ$cyQ(d%pR+V(eQ/T.YR0f0[R#VZR#[[R%_!nQ%]!nV*u(O*v,z!]!qQ!s#r$P$b$q$}%S%T%U%V%W%X%r%w%}&O&t'a'x)W)c)|+R+[,[-Z0Y1OR%b!pQ&W#cQ&Z#gQ&]#jQ&_#mR-`+lQ(}&WQ)P&ZQ)R&]Q)T&_Q+p)OQ+q)QQ+r)SQ+s)UQ.^-`R/V._Q$m!SQ&{$aQ*R'bR,`*SQ#zmQ$f!PQ$i!QR'T$hQ)h'SR+|)kQ)h'SQ+{)jR+|)kR$k!RR)u'YXqOs*W,dQ$s!WR'c$tQ$z!ZR'd$uR*k'pQ*i'pV-|,s-}.lQ.{.RQ/i.uR/j.vU.t.R.u.vQ/n.xQ/y/^Q0O/dU0Q/f0R0bQ0V/kQ0e0WQ0g0]U0i0^0k0sQ0t0mQ0x0rR0y0uR/m.wR/{/^",nodeNames:"⚠ print { { { { Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ) ( ParenthesizedExpression BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from TupleExpression ComprehensionExpression async for LambdaExpression ] [ ArrayExpression ArrayComprehensionExpression } { DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatConversion FormatSpec FormatReplacement FormatReplacement FormatReplacement FormatReplacement ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert TypeDefinition type TypeParamList TypeParam StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At MatchStatement match MatchBody MatchClause case CapturePattern LiteralPattern ArithOp ArithOp AsPattern OrPattern LogicOp AttributePattern SequencePattern MappingPattern StarPattern ClassPattern PatternArgList KeywordPattern KeywordPattern Guard",maxTerm:283,context:Zp,nodeProps:[["group",-15,8,88,90,91,93,95,97,99,101,102,103,105,108,111,113,"Statement Statement",-22,10,20,23,27,42,51,52,58,59,62,63,64,65,66,69,72,73,74,82,83,84,85,"Expression",-10,117,119,122,124,125,129,131,136,138,141,"Statement",-9,146,147,150,151,153,154,155,156,157,"Pattern"],["openedBy",25,"(",56,"[",60,"{"],["closedBy",26,")",57,"]",61,"}"]],propSources:[rf],skippedNodes:[0,6],repeatNodeCount:38,tokenData:"%-W#sR!`OX%TXY=|Y[%T[]=|]p%Tpq=|qr@_rsDOst!+|tu%Tuv!Nnvw#!|wx#$Wxy#:Uyz#;Yz{#<^{|#>x|}#@S}!O#AW!O!P#Ci!P!Q#N_!Q!R$!y!R![$&w![!]$1e!]!^$3s!^!_$4w!_!`$7c!`!a$8m!a!b%T!b!c$;U!c!d$W!e!h$W#V#Y$Q<%lO$Xc&r!b&jS&mW%p!TOX%TXY=|Y[%T[]=|]p%Tpq=|qr%Trs&Vsw%Twx/Xx#O%T#O#P?d#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s?i[&r!bOY%TYZ=|Z]%T]^=|^#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=P;=`<%l8^<%lO%T!q@hd&r!b&jS&mWOr%Trs&Vsw%Twx/Xx!_%T!_!`Av!`#O%T#O#P7o#P#T%T#T#UBz#U#f%T#f#gBz#g#hBz#h#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!qBR]oR&r!b&jS&mWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!qCV]!nR&r!b&jS&mWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#cDXa&r!b&jS&hsOYE^YZ%TZ]E^]^%T^rE^rs!)|swE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cEia&r!b&jS&mW&hsOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cFw]&r!b&jS&hsOr%Trs'Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#cGya&r!b&mW&hsOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxIOx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cIXa&r!b&mW&hsOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxJ^x#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#_Jg_&r!b&mW&hsOYJ^YZ1XZ]J^]^1X^rJ^rsKfs#OJ^#O#PL`#P#oJ^#o#pL}#p#qJ^#q#rL}#r;'SJ^;'S;=`!!o<%lOJ^#_KmZ&r!b&hsOr1Xrs2ys#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#_LeW&r!bO#oJ^#o#pL}#p#qJ^#q#rL}#r;'SJ^;'S;=`! r;=`<%lL}<%lOJ^{MUZ&mW&hsOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l<%lOL}{M|V&hsOr4`rs5ds#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`{NfRO;'SL};'S;=`No;=`OL}{Nv[&mW&hsOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l;=`<%lL}<%lOL}{! oP;=`<%lL}#_! y[&mW&hsOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l;=`<%lJ^<%lOL}#_!!rP;=`<%lJ^#c!!zW&r!bO#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!(q;=`<%l!#d<%lOE^!P!#m]&jS&mW&hsOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!%Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k<%lO!#d!P!$mX&jS&hsOr8^rs9rsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`^s#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!>e_U!T&r!bOY!=UYZ1XZ]!=U]^1X^r!=Urs!?ds#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!?k_U!T&r!bOY!=UYZ1XZ]!=U]^1X^r!=Urs!3`s#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!@q[U!T&r!bOY!=UYZ1XZ]!=U]^1X^#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!Ec;=`<%l4`<%lO!=U!]!AnZU!T&mWOY!AgYZ4`Z]!Ag]^4`^r!Agrs!Bas#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!BfZU!TOY!AgYZ4`Z]!Ag]^4`^r!Agrs!CXs#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!C^ZU!TOY!AgYZ4`Z]!Ag]^4`^r!Agrs!4Ys#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!DUWU!TOY!AgYZ4`Z]!Ag]^4`^;'S!Ag;'S;=`!Dn;=`<%l4`<%lO!Ag!]!DsW&mWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l!Ag<%lO4`!]!E`P;=`<%l!Ag#o!EhW&mWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l!=U<%lO4`#o!FTP;=`<%l!=U#s!F_[U!T&r!bOY!+|YZ%TZ]!+|]^%T^#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Mq;=`<%l8^<%lO!+|!a!G^]U!T&jS&mWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!H^]U!T&jSOY!GTYZ8^Z]!GT]^8^^r!GTrs!IVsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!I^]U!T&jSOY!GTYZ8^Z]!GT]^8^^r!GTrs!5wsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!J^]U!T&mWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!KVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!K^]U!T&mWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!Agx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!L[WU!TOY!GTYZ8^Z]!GT]^8^^;'S!GT;'S;=`!Lt;=`<%l8^<%lO!GT!a!L{Y&jS&mWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`Q<%lO$TP;=`<%l$ei&r!b&jS&mW&g`&SsOr%Trs$@Ssw%Twx$C`x!Q%T!Q![$Q<%lO$Q<%lO$Q<%lO$Q<%lO$Q<%lO$of[e]||-1}],tokenPrec:7372}),lf=new Zo,hf=new Set(["Script","Body","FunctionDefinition","ClassDefinition","LambdaExpression","ForStatement","MatchClause"]);function cf(e){return(t,i,n)=>{if(n)return!1;let s=t.node.getChild("VariableName");return s&&i(s,e),!0}}const df={FunctionDefinition:cf("function"),ClassDefinition:cf("class"),ForStatement(e,t,i){if(i)for(let i=e.node.firstChild;i;i=i.nextSibling)if("VariableName"==i.name)t(i,"variable");else if("in"==i.name)break},ImportStatement(e,t){var i,n;let{node:s}=e,r="from"==(null===(i=s.firstChild)||void 0===i?void 0:i.name);for(let e=s.getChild("import");e;e=e.nextSibling)"VariableName"==e.name&&"as"!=(null===(n=e.nextSibling)||void 0===n?void 0:n.name)&&t(e,r?"variable":"namespace")},AssignStatement(e,t){for(let i=e.node.firstChild;i;i=i.nextSibling)if("VariableName"==i.name)t(i,"variable");else if(":"==i.name||"AssignOp"==i.name)break},ParamList(e,t){for(let i=null,n=e.node.firstChild;n;n=n.nextSibling)"VariableName"!=n.name||i&&/\*|AssignOp/.test(i.name)||t(n,"variable"),i=n},CapturePattern:cf("variable"),AsPattern:cf("variable"),__proto__:null};function uf(e,t){let i=lf.get(t);if(i)return i;let n=[],s=!0;function r(t,i){let s=e.sliceString(t.from,t.to);n.push({label:s,type:i})}return t.cursor(Ro.IncludeAnonymous).iterate((t=>{if(t.name){let e=df[t.name];if(e&&e(t,r,s)||!s&&hf.has(t.name))return!1;s=!1}else if(t.to-t.from>8192){for(let i of uf(e,t.node))n.push(i);return!1}})),lf.set(t,n),n}const pf=/^[\w\xa1-\uffff][\w\d\xa1-\uffff]*$/,ff=["String","FormatString","Comment","PropertyName"];function mf(e){let t=Da(e.state).resolveInner(e.pos,-1);if(ff.indexOf(t.name)>-1)return null;let i="VariableName"==t.name||t.to-t.from<20&&pf.test(e.state.sliceDoc(t.from,t.to));if(!i&&!e.explicit)return null;let n=[];for(let i=t;i;i=i.parent)hf.has(i.name)&&(n=n.concat(uf(e.state.doc,i)));return{options:n,from:i?t.from:e.pos,validFor:pf}}const gf=["__annotations__","__builtins__","__debug__","__doc__","__import__","__name__","__loader__","__package__","__spec__","False","None","True"].map((e=>({label:e,type:"constant"}))).concat(["ArithmeticError","AssertionError","AttributeError","BaseException","BlockingIOError","BrokenPipeError","BufferError","BytesWarning","ChildProcessError","ConnectionAbortedError","ConnectionError","ConnectionRefusedError","ConnectionResetError","DeprecationWarning","EOFError","Ellipsis","EncodingWarning","EnvironmentError","Exception","FileExistsError","FileNotFoundError","FloatingPointError","FutureWarning","GeneratorExit","IOError","ImportError","ImportWarning","IndentationError","IndexError","InterruptedError","IsADirectoryError","KeyError","KeyboardInterrupt","LookupError","MemoryError","ModuleNotFoundError","NameError","NotADirectoryError","NotImplemented","NotImplementedError","OSError","OverflowError","PendingDeprecationWarning","PermissionError","ProcessLookupError","RecursionError","ReferenceError","ResourceWarning","RuntimeError","RuntimeWarning","StopAsyncIteration","StopIteration","SyntaxError","SyntaxWarning","SystemError","SystemExit","TabError","TimeoutError","TypeError","UnboundLocalError","UnicodeDecodeError","UnicodeEncodeError","UnicodeError","UnicodeTranslateError","UnicodeWarning","UserWarning","ValueError","Warning","ZeroDivisionError"].map((e=>({label:e,type:"type"})))).concat(["bool","bytearray","bytes","classmethod","complex","float","frozenset","int","list","map","memoryview","object","range","set","staticmethod","str","super","tuple","type"].map((e=>({label:e,type:"class"})))).concat(["abs","aiter","all","anext","any","ascii","bin","breakpoint","callable","chr","compile","delattr","dict","dir","divmod","enumerate","eval","exec","exit","filter","format","getattr","globals","hasattr","hash","help","hex","id","input","isinstance","issubclass","iter","len","license","locals","max","min","next","oct","open","ord","pow","print","property","quit","repr","reversed","round","setattr","slice","sorted","sum","vars","zip"].map((e=>({label:e,type:"function"})))),vf=[Au("def ${name}(${params}):\n\t${}",{label:"def",detail:"function",type:"keyword"}),Au("for ${name} in ${collection}:\n\t${}",{label:"for",detail:"loop",type:"keyword"}),Au("while ${}:\n\t${}",{label:"while",detail:"loop",type:"keyword"}),Au("try:\n\t${}\nexcept ${error}:\n\t${}",{label:"try",detail:"/ except block",type:"keyword"}),Au("if ${}:\n\t\n",{label:"if",detail:"block",type:"keyword"}),Au("if ${}:\n\t${}\nelse:\n\t${}",{label:"if",detail:"/ else block",type:"keyword"}),Au("class ${name}:\n\tdef __init__(self, ${params}):\n\t\t\t${}",{label:"class",detail:"definition",type:"keyword"}),Au("import ${module}",{label:"import",detail:"statement",type:"keyword"}),Au("from ${module} import ${names}",{label:"from",detail:"import",type:"keyword"})],Of=Ld(ff,qd(gf.concat(vf)));function bf(e,t){let i=e.baseIndentFor(t),n=e.lineAt(e.pos,-1),s=n.from+n.text.length;return/^\s*($|#)/.test(n.text)&&e.node.toi?null:i+e.unit}const _f=Ra.define({name:"python",parser:af.configure({props:[Ga.add({Body:e=>{var t;return null!==(t=bf(e,e.node))&&void 0!==t?t:e.continue()},IfStatement:e=>/^\s*(else:|elif )/.test(e.textAfter)?e.baseIndent:e.continue(),TryStatement:e=>/^\s*(except |finally:|else:)/.test(e.textAfter)?e.baseIndent:e.continue(),"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression":il({closing:")"}),"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression":il({closing:"}"}),"ArrayExpression ArrayComprehensionExpression":il({closing:"]"}),"String FormatString":()=>null,Script:e=>{if(e.pos+/\s*/.exec(e.textAfter)[0].length>=e.node.to){let t=null;for(let i=e.node,n=i.to;i=i.lastChild,i&&i.to==n;)"Body"==i.type.name&&(t=i);if(t){let i=bf(e,t);if(null!=i)return i}}return e.continue()}}),rl.add({"ArrayExpression DictionaryExpression SetExpression TupleExpression":function(e){let t=e.firstChild,i=e.lastChild;return t&&t.to({from:e.from+1,to:e.to-(e.to==t.doc.length?0:1)})})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"'''",'"""'],stringPrefixes:["f","fr","rf","r","u","b","br","rb","F","FR","RF","R","U","B","BR","RB"]},commentTokens:{line:"#"},indentOnInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/}}),yf="#e06c75",wf="#abb2bf",xf="#7d8799",Sf="#d19a66",kf="#2c313a",Tf="#282c34",Cf="#353a42",Pf="#528bff",Mf=[Ds.theme({"&":{color:wf,backgroundColor:Tf},".cm-content":{caretColor:Pf},".cm-cursor, .cm-dropCursor":{borderLeftColor:Pf},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:"#3E4451"},".cm-panels":{backgroundColor:"#21252b",color:wf},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:Tf,color:xf,border:"none"},".cm-activeLineGutter":{backgroundColor:kf},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Cf},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Cf,borderBottomColor:Cf},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:kf,color:wf}}},{dark:!0}),Rl(Pl.define([{tag:Ta.keyword,color:"#c678dd"},{tag:[Ta.name,Ta.deleted,Ta.character,Ta.propertyName,Ta.macroName],color:yf},{tag:[Ta.function(Ta.variableName),Ta.labelName],color:"#61afef"},{tag:[Ta.color,Ta.constant(Ta.name),Ta.standard(Ta.name)],color:Sf},{tag:[Ta.definition(Ta.name),Ta.separator],color:wf},{tag:[Ta.typeName,Ta.className,Ta.number,Ta.changed,Ta.annotation,Ta.modifier,Ta.self,Ta.namespace],color:"#e5c07b"},{tag:[Ta.operator,Ta.operatorKeyword,Ta.url,Ta.escape,Ta.regexp,Ta.link,Ta.special(Ta.string)],color:"#56b6c2"},{tag:[Ta.meta,Ta.comment],color:xf},{tag:Ta.strong,fontWeight:"bold"},{tag:Ta.emphasis,fontStyle:"italic"},{tag:Ta.strikethrough,textDecoration:"line-through"},{tag:Ta.link,color:xf,textDecoration:"underline"},{tag:Ta.heading,fontWeight:"bold",color:yf},{tag:[Ta.atom,Ta.bool,Ta.special(Ta.variableName)],color:Sf},{tag:[Ta.processingInstruction,Ta.string,Ta.inserted],color:"#98c379"},{tag:Ta.invalid,color:"#ffffff"}]))];var Ef,Af,Rf,Df,If,qf,Lf,Nf,Bf,$f=__webpack_require__(5247),Qf=__webpack_require__(5895),zf=__webpack_require__(6424),jf=__webpack_require__(7564),Wf=__webpack_require__(3911);!function(e){e.copyText=function(e){const t=document.body,i=n=>{n.preventDefault(),n.stopPropagation(),n.clipboardData.setData("text",e),t.removeEventListener("copy",i,!0)};t.addEventListener("copy",i,!0),document.execCommand("copy")}}(Ef||(Ef={})),(Bf=Af||(Af={})).boxSizing=function(e){let t=window.getComputedStyle(e),i=parseFloat(t.borderTopWidth)||0,n=parseFloat(t.borderLeftWidth)||0,s=parseFloat(t.borderRightWidth)||0,r=parseFloat(t.borderBottomWidth)||0,o=parseFloat(t.paddingTop)||0,a=parseFloat(t.paddingLeft)||0,l=parseFloat(t.paddingRight)||0,h=parseFloat(t.paddingBottom)||0;return{borderTop:i,borderLeft:n,borderRight:s,borderBottom:r,paddingTop:o,paddingLeft:a,paddingRight:l,paddingBottom:h,horizontalSum:n+a+l+s,verticalSum:i+o+h+r}},Bf.sizeLimits=function(e){let t=window.getComputedStyle(e),i=parseFloat(t.minWidth)||0,n=parseFloat(t.minHeight)||0,s=parseFloat(t.maxWidth)||1/0,r=parseFloat(t.maxHeight)||1/0;return s=Math.max(i,s),r=Math.max(n,r),{minWidth:i,minHeight:n,maxWidth:s,maxHeight:r}},Bf.hitTest=function(e,t,i){let n=e.getBoundingClientRect();return t>=n.left&&t=n.top&&i=i.bottom||(n.topi.bottom&&n.height>=i.height?e.scrollTop-=i.top-n.top:(n.topi.height||n.bottom>i.bottom&&n.height{let e=Element.prototype;return e.matches||e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector||function(e){let t=this,i=t.ownerDocument?t.ownerDocument.querySelectorAll(e):[];return-1!==Array.prototype.indexOf.call(i,t)}})(),e.calculateSingle=function(e){let h=0,c=0,d=0;function u(t){let i=e.match(t);return null!==i&&(e=e.slice(i[0].length),!0)}for(e=(e=e.split(",",1)[0]).replace(l," $1 ");e.length>0;)if(u(t))h++;else if(u(i))c++;else if(u(n))c++;else if(u(r))d++;else if(u(o))c++;else if(u(s))d++;else if(!u(a))return 0;return h=Math.min(h,255),c=Math.min(c,255),d=Math.min(d,255),h<<16|c<<8|d};const t=/^#[^\s\+>~#\.\[:]+/,i=/^\.[^\s\+>~#\.\[:]+/,n=/^\[[^\]]+\]/,s=/^[^\s\+>~#\.\[:]+/,r=/^(::[^\s\+>~#\.\[:]+|:first-line|:first-letter|:before|:after)/,o=/^:[^\s\+>~#\.\[:]+/,a=/^[\s\+>~\*]+/,l=/:not\(([^\)]+)\)/g}(If||(If={}));class Vf{constructor(){this._first=null,this._last=null,this._size=0}get isEmpty(){return 0===this._size}get size(){return this._size}get length(){return this._size}get first(){return this._first?this._first.value:void 0}get last(){return this._last?this._last.value:void 0}get firstNode(){return this._first}get lastNode(){return this._last}*[Symbol.iterator](){let e=this._first;for(;e;)yield e.value,e=e.next}*retro(){let e=this._last;for(;e;)yield e.value,e=e.prev}*nodes(){let e=this._first;for(;e;)yield e,e=e.next}*retroNodes(){let e=this._last;for(;e;)yield e,e=e.prev}assign(e){this.clear();for(const t of e)this.addLast(t)}push(e){this.addLast(e)}pop(){return this.removeLast()}shift(e){this.addFirst(e)}unshift(){return this.removeFirst()}addFirst(e){let t=new qf.LinkedListNode(this,e);return this._first?(t.next=this._first,this._first.prev=t,this._first=t):(this._first=t,this._last=t),this._size++,t}addLast(e){let t=new qf.LinkedListNode(this,e);return this._last?(t.prev=this._last,this._last.next=t,this._last=t):(this._first=t,this._last=t),this._size++,t}insertBefore(e,t){if(!t||t===this._first)return this.addFirst(e);if(!(t instanceof qf.LinkedListNode)||t.list!==this)throw new Error("Reference node is not owned by the list.");let i=new qf.LinkedListNode(this,e),n=t,s=n.prev;return i.next=n,i.prev=s,n.prev=i,s.next=i,this._size++,i}insertAfter(e,t){if(!t||t===this._last)return this.addLast(e);if(!(t instanceof qf.LinkedListNode)||t.list!==this)throw new Error("Reference node is not owned by the list.");let i=new qf.LinkedListNode(this,e),n=t,s=n.next;return i.next=s,i.prev=n,n.next=i,s.prev=i,this._size++,i}removeFirst(){let e=this._first;if(e)return e===this._last?(this._first=null,this._last=null):(this._first=e.next,this._first.prev=null),e.list=null,e.next=null,e.prev=null,this._size--,e.value}removeLast(){let e=this._last;if(e)return e===this._first?(this._first=null,this._last=null):(this._last=e.prev,this._last.next=null),e.list=null,e.next=null,e.prev=null,this._size--,e.value}removeNode(e){if(!(e instanceof qf.LinkedListNode)||e.list!==this)throw new Error("Node is not owned by the list.");let t=e;t===this._first&&t===this._last?(this._first=null,this._last=null):t===this._first?(this._first=t.next,this._first.prev=null):t===this._last?(this._last=t.prev,this._last.next=null):(t.next.prev=t.prev,t.prev.next=t.next),t.list=null,t.next=null,t.prev=null,this._size--}clear(){let e=this._first;for(;e;){let t=e.next;e.list=null,e.prev=null,e.next=null,e=t}this._first=null,this._last=null,this._size=0}}!function(e){e.from=function(t){let i=new e;return i.assign(t),i}}(Vf||(Vf={})),function(e){e.LinkedListNode=class{constructor(e,t){this.list=null,this.next=null,this.prev=null,this.list=e,this.value=t}}}(qf||(qf={}));class Uf{constructor(e){this.type=e}get isConflatable(){return!1}conflate(e){return!1}}class Ff extends Uf{get isConflatable(){return!0}conflate(e){return!0}}!function(e){let t=null;const i=(n=Promise.resolve(),e=>{let t=!1;return n.then((()=>!t&&e())),()=>{t=!0}});var n;function s(e,t){let i=o.get(e);if(!i||0===i.length)return void c(e,t);let n=(0,jf.yW)((0,jf.kh)(i),(i=>!i||function(e,t,i){let n=!0;try{n="function"==typeof e?e(t,i):e.messageHook(t,i)}catch(e){l(e)}return n}(i,e,t)));n&&c(e,t)}e.sendMessage=s,e.postMessage=function(e,t){t.isConflatable&&(0,jf.G)(r,(i=>i.handler===e&&!!i.msg&&i.msg.type===t.type&&!!i.msg.isConflatable&&i.msg.conflate(t)))||d(e,t)},e.installMessageHook=function(e,t){let i=o.get(e);i&&-1!==i.indexOf(t)||(i?i.push(t):o.set(e,[t]))},e.removeMessageHook=function(e,t){let i=o.get(e);if(!i)return;let n=i.indexOf(t);-1!==n&&(i[n]=null,p(i))},e.clearData=function(e){let t=o.get(e);t&&t.length>0&&(jf.RO.fill(t,null),p(t));for(const t of r)t.handler===e&&(t.handler=null,t.msg=null)},e.flush=function(){h||null===t||(t(),t=null,h=!0,u(),h=!1)},e.getExceptionHandler=function(){return l},e.setExceptionHandler=function(e){let t=l;return l=e,t};const r=new Vf,o=new WeakMap,a=new Set;let l=e=>{console.error(e)},h=!1;function c(e,t){try{e.processMessage(t)}catch(e){l(e)}}function d(e,n){r.addLast({handler:e,msg:n}),null===t&&(t=i(u))}function u(){if(t=null,r.isEmpty)return;let e={handler:null,msg:null};for(r.addLast(e);;){let t=r.removeFirst();if(t===e)return;t.handler&&t.msg&&s(t.handler,t.msg)}}function p(e){0===a.size&&i(f),a.add(e)}function f(){a.forEach(m),a.clear()}function m(e){jf.RO.removeAllWhere(e,g)}function g(e){return null===e}}(Lf||(Lf={}));var Hf,Xf=__webpack_require__(4050),Yf=__webpack_require__(1122);class Gf{constructor(e){this._onScrollFrame=()=>{if(!this._scrollTarget)return;let{element:e,edge:t,distance:i}=this._scrollTarget,n=Hf.SCROLL_EDGE_SIZE-i,s=Math.pow(n/Hf.SCROLL_EDGE_SIZE,2),r=Math.max(1,Math.round(s*Hf.SCROLL_EDGE_SIZE));switch(t){case"top":e.scrollTop-=r;break;case"left":e.scrollLeft-=r;break;case"right":e.scrollLeft+=r;break;case"bottom":e.scrollTop+=r}requestAnimationFrame(this._onScrollFrame)},this._disposed=!1,this._dropAction="none",this._override=null,this._currentTarget=null,this._currentElement=null,this._promise=null,this._scrollTarget=null,this._resolve=null,this.document=e.document||document,this.mimeData=e.mimeData,this.dragImage=e.dragImage||null,this.proposedAction=e.proposedAction||"copy",this.supportedActions=e.supportedActions||"all",this.source=e.source||null}dispose(){if(!this._disposed){if(this._disposed=!0,this._currentTarget){let e=new PointerEvent("pointerup",{bubbles:!0,cancelable:!0,clientX:-1,clientY:-1});Hf.dispatchDragLeave(this,this._currentTarget,null,e)}this._finalize("none")}}get isDisposed(){return this._disposed}start(e,t){if(this._disposed)return Promise.resolve("none");if(this._promise)return this._promise;this._addListeners(),this._attachDragImage(e,t),this._promise=new Promise((e=>{this._resolve=e}));let i=new PointerEvent("pointermove",{bubbles:!0,cancelable:!0,clientX:e,clientY:t});return document.dispatchEvent(i),this._promise}handleEvent(e){switch(e.type){case"pointermove":this._evtPointerMove(e);break;case"pointerup":this._evtPointerUp(e);break;case"keydown":this._evtKeyDown(e);break;default:e.preventDefault(),e.stopPropagation()}}moveDragImage(e,t){this.dragImage&&(this.dragImage.style.transform=`translate(${e}px, ${t}px)`)}_evtPointerMove(e){e.preventDefault(),e.stopPropagation(),this._updateCurrentTarget(e),this._updateDragScroll(e),this.moveDragImage(e.clientX,e.clientY)}_evtPointerUp(e){if(e.preventDefault(),e.stopPropagation(),0!==e.button)return;if(this._updateCurrentTarget(e),!this._currentTarget)return void this._finalize("none");if("none"===this._dropAction)return Hf.dispatchDragLeave(this,this._currentTarget,null,e),void this._finalize("none");let t=Hf.dispatchDrop(this,this._currentTarget,e);this._finalize(t)}_evtKeyDown(e){e.preventDefault(),e.stopPropagation(),27===e.keyCode&&this.dispose()}_addListeners(){document.addEventListener("pointerdown",this,!0),document.addEventListener("pointermove",this,!0),document.addEventListener("pointerup",this,!0),document.addEventListener("pointerenter",this,!0),document.addEventListener("pointerleave",this,!0),document.addEventListener("pointerover",this,!0),document.addEventListener("pointerout",this,!0),document.addEventListener("keydown",this,!0),document.addEventListener("keyup",this,!0),document.addEventListener("keypress",this,!0),document.addEventListener("contextmenu",this,!0)}_removeListeners(){document.removeEventListener("pointerdown",this,!0),document.removeEventListener("pointermove",this,!0),document.removeEventListener("pointerup",this,!0),document.removeEventListener("pointerenter",this,!0),document.removeEventListener("pointerleave",this,!0),document.removeEventListener("pointerover",this,!0),document.removeEventListener("pointerout",this,!0),document.removeEventListener("keydown",this,!0),document.removeEventListener("keyup",this,!0),document.removeEventListener("keypress",this,!0),document.removeEventListener("contextmenu",this,!0)}_updateDragScroll(e){let t=Hf.findScrollTarget(e);(this._scrollTarget||t)&&(this._scrollTarget||setTimeout(this._onScrollFrame,500),this._scrollTarget=t)}_updateCurrentTarget(e){let t=this._currentTarget,i=this._currentTarget,n=this._currentElement,s=Hf.findElementBehidBackdrop(e,this.document);this._currentElement=s,s!==n&&s!==i&&Hf.dispatchDragExit(this,i,s,e),s!==n&&s!==i&&(i=Hf.dispatchDragEnter(this,s,i,e)),i!==t&&(this._currentTarget=i,Hf.dispatchDragLeave(this,t,i,e));let r=Hf.dispatchDragOver(this,i,e);this._setDropAction(r)}_attachDragImage(e,t){if(!this.dragImage)return;this.dragImage.classList.add("lm-mod-drag-image");let i=this.dragImage.style;i.pointerEvents="none",i.position="fixed",i.transform=`translate(${e}px, ${t}px)`,(this.document instanceof Document?this.document.body:this.document.firstElementChild).appendChild(this.dragImage)}_detachDragImage(){if(!this.dragImage)return;let e=this.dragImage.parentNode;e&&e.removeChild(this.dragImage)}_setDropAction(e){if(e=Hf.validateAction(e,this.supportedActions),!this._override||this._dropAction!==e)switch(e){case"none":this._dropAction=e,this._override=Gf.overrideCursor("no-drop",this.document);break;case"copy":this._dropAction=e,this._override=Gf.overrideCursor("copy",this.document);break;case"link":this._dropAction=e,this._override=Gf.overrideCursor("alias",this.document);break;case"move":this._dropAction=e,this._override=Gf.overrideCursor("move",this.document)}}_finalize(e){let t=this._resolve;this._removeListeners(),this._detachDragImage(),this._override&&(this._override.dispose(),this._override=null),this.mimeData.clear(),this._disposed=!0,this._dropAction="none",this._currentTarget=null,this._currentElement=null,this._scrollTarget=null,this._promise=null,this._resolve=null,t&&t(e)}}function Zf(){return em.keyboardLayout}!function(e){class t extends DragEvent{constructor(e,t){super(t.type,{bubbles:!0,cancelable:!0,altKey:e.altKey,button:e.button,clientX:e.clientX,clientY:e.clientY,ctrlKey:e.ctrlKey,detail:0,metaKey:e.metaKey,relatedTarget:t.related,screenX:e.screenX,screenY:e.screenY,shiftKey:e.shiftKey,view:window});const{drag:i}=t;this.dropAction="none",this.mimeData=i.mimeData,this.proposedAction=i.proposedAction,this.supportedActions=i.supportedActions,this.source=i.source}}e.Event=t,e.overrideCursor=function(e,t=document){return Hf.overrideCursor(e,t)}}(Gf||(Gf={})),function(e){function t(t,n=document){if(i&&t==i.event)return i.element;e.cursorBackdrop.style.zIndex="-1000";const s=n.elementFromPoint(t.clientX,t.clientY);return e.cursorBackdrop.style.zIndex="",i={event:t,element:s},s}e.SCROLL_EDGE_SIZE=20,e.validateAction=function(e,t){return n[e]&s[t]?e:"none"},e.findElementBehidBackdrop=t;let i=null;e.findScrollTarget=function(i){let n=i.clientX,s=i.clientY,r=t(i);for(;r;r=r.parentElement){if(!r.hasAttribute("data-lm-dragscroll"))continue;let t=0,i=0;r===document.body&&(t=window.pageXOffset,i=window.pageYOffset);let o=r.getBoundingClientRect(),a=o.top+i,l=o.left+t,h=l+o.width,c=a+o.height;if(n=h||s=c)continue;let d,u=n-l+1,p=s-a+1,f=h-n,m=c-s,g=Math.min(u,p,f,m);if(g>e.SCROLL_EDGE_SIZE)continue;switch(g){case m:d="bottom";break;case p:d="top";break;case f:d="right";break;case u:d="left";break;default:throw"unreachable"}let v,O=r.scrollWidth-r.clientWidth,b=r.scrollHeight-r.clientHeight;switch(d){case"top":v=b>0&&r.scrollTop>0;break;case"left":v=O>0&&r.scrollLeft>0;break;case"right":v=O>0&&r.scrollLeft0&&r.scrollTop{n===o&&e.cursorBackdrop.isConnected&&(document.removeEventListener("pointermove",r,!0),s.removeChild(e.cursorBackdrop))}))};let o=0;e.cursorBackdrop=function(){const e=document.createElement("div");return e.classList.add("lm-cursor-backdrop"),e}()}(Hf||(Hf={}));class Kf{constructor(e,t,i=[]){this.name=e,this._codes=t,this._keys=Kf.extractKeys(t),this._modifierKeys=Kf.convertToKeySet(i)}keys(){return Object.keys(this._keys)}isValidKey(e){return e in this._keys}isModifierKey(e){return e in this._modifierKeys}keyForKeydownEvent(e){return this._codes[e.keyCode]||""}}!function(e){e.extractKeys=function(e){let t=Object.create(null);for(let i in e)t[e[i]]=!0;return t},e.convertToKeySet=function(e){let t=Object(null);for(let i=0,n=e.length;i{this._commands.delete(e),this._commandChanged.emit({id:e,type:"removed"})}))}notifyCommandChanged(e){if(void 0!==e&&!this._commands.has(e))throw new Error(`Command '${e}' is not registered.`);this._commandChanged.emit({id:e,type:e?"changed":"many-changed"})}describedBy(e,t=Wf.JSONExt.emptyObject){var i;let n=this._commands.get(e);return Promise.resolve(null!==(i=null==n?void 0:n.describedBy.call(void 0,t))&&void 0!==i?i:{args:null})}label(e,t=Wf.JSONExt.emptyObject){var i;let n=this._commands.get(e);return null!==(i=null==n?void 0:n.label.call(void 0,t))&&void 0!==i?i:""}mnemonic(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return i?i.mnemonic.call(void 0,t):-1}icon(e,t=Wf.JSONExt.emptyObject){var i;return null===(i=this._commands.get(e))||void 0===i?void 0:i.icon.call(void 0,t)}iconClass(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return i?i.iconClass.call(void 0,t):""}iconLabel(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return i?i.iconLabel.call(void 0,t):""}caption(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return i?i.caption.call(void 0,t):""}usage(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return i?i.usage.call(void 0,t):""}className(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return i?i.className.call(void 0,t):""}dataset(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return i?i.dataset.call(void 0,t):{}}isEnabled(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return!!i&&i.isEnabled.call(void 0,t)}isToggled(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return!!i&&i.isToggled.call(void 0,t)}isToggleable(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return!!i&&i.isToggleable}isVisible(e,t=Wf.JSONExt.emptyObject){let i=this._commands.get(e);return!!i&&i.isVisible.call(void 0,t)}execute(e,t=Wf.JSONExt.emptyObject){let i,n=this._commands.get(e);if(!n)return Promise.reject(new Error(`Command '${e}' not registered.`));try{i=n.execute.call(void 0,t)}catch(e){i=Promise.reject(e)}let s=Promise.resolve(i);return this._commandExecuted.emit({id:e,args:t,result:s}),s}addKeyBinding(e){let t=tm.createKeyBinding(e);return this._keyBindings.push(t),this._keyBindingChanged.emit({binding:t,type:"added"}),new Yf.DisposableDelegate((()=>{jf.RO.removeFirstOf(this._keyBindings,t),this._keyBindingChanged.emit({binding:t,type:"removed"})}))}processKeydownEvent(e){if(this._replaying||lm.isModifierKeyPressed(e))return;let t=lm.keystrokeForKeydownEvent(e);if(!t)return this._replayKeydownEvents(),void this._clearPendingState();this._keystrokes.push(t);let{exact:i,partial:n}=tm.matchKeyBinding(this._keyBindings,this._keystrokes,e);return i||n?(e.preventDefault(),e.stopPropagation(),i&&!n?(this._executeKeyBinding(i),void this._clearPendingState()):(i&&(this._exactKeyMatch=i),this._keydownEvents.push(e),void this._startTimer())):(this._replayKeydownEvents(),void this._clearPendingState())}_startTimer(){this._clearTimer(),this._timerID=window.setTimeout((()=>{this._onPendingTimeout()}),tm.CHORD_TIMEOUT)}_clearTimer(){0!==this._timerID&&(clearTimeout(this._timerID),this._timerID=0)}_replayKeydownEvents(){0!==this._keydownEvents.length&&(this._replaying=!0,this._keydownEvents.forEach(tm.replayKeyEvent),this._replaying=!1)}_executeKeyBinding(e){let{command:t,args:i}=e;if(this.hasCommand(t)&&this.isEnabled(t,i))this.execute(t,i);else{let i=this.hasCommand(t)?"enabled":"registered",n=`Cannot execute key binding '${e.keys.join(", ")}':`,s=`command '${t}' is not ${i}.`;console.warn(`${n} ${s}`)}}_clearPendingState(){this._clearTimer(),this._exactKeyMatch=null,this._keystrokes.length=0,this._keydownEvents.length=0}_onPendingTimeout(){this._timerID=0,this._exactKeyMatch?this._executeKeyBinding(this._exactKeyMatch):this._replayKeydownEvents(),this._clearPendingState()}}!function(e){function t(e){let t="",i=!1,n=!1,s=!1,r=!1;for(let o of e.split(/\s+/))"Accel"===o?Rf.IS_MAC?n=!0:s=!0:"Alt"===o?i=!0:"Cmd"===o?n=!0:"Ctrl"===o?s=!0:"Shift"===o?r=!0:o.length>0&&(t=o);return{cmd:n,ctrl:s,alt:i,shift:r,key:t}}function i(e){let i="",n=t(e);return n.ctrl&&(i+="Ctrl "),n.alt&&(i+="Alt "),n.shift&&(i+="Shift "),n.cmd&&Rf.IS_MAC&&(i+="Cmd "),i+n.key}e.parseKeystroke=t,e.normalizeKeystroke=i,e.normalizeKeys=function(e){let t;return t=Rf.IS_WIN?e.winKeys||e.keys:Rf.IS_MAC?e.macKeys||e.keys:e.linuxKeys||e.keys,t.map(i)},e.formatKeystroke=function(e){return"string"==typeof e?i(e):e.map(i).join(", ");function i(e){let i=[],n=Rf.IS_MAC?" ":"+",s=t(e);return s.ctrl&&i.push("Ctrl"),s.alt&&i.push("Alt"),s.shift&&i.push("Shift"),Rf.IS_MAC&&s.cmd&&i.push("Cmd"),i.push(s.key),i.map(tm.formatKey).join(n)}},e.isModifierKeyPressed=function(e){let t=Zf(),i=t.keyForKeydownEvent(e);return t.isModifierKey(i)},e.keystrokeForKeydownEvent=function(e){let t=Zf(),i=t.keyForKeydownEvent(e);if(!i||t.isModifierKey(i))return"";let n=[];return e.ctrlKey&&n.push("Ctrl"),e.altKey&&n.push("Alt"),e.shiftKey&&n.push("Shift"),e.metaKey&&Rf.IS_MAC&&n.push("Cmd"),n.push(i),n.join(" ")}}(lm||(lm={})),function(e){e.CHORD_TIMEOUT=1e3,e.createCommand=function(e){return{execute:e.execute,describedBy:h("function"==typeof e.describedBy?e.describedBy:{args:null,...e.describedBy},(()=>({args:null}))),label:h(e.label,n),mnemonic:h(e.mnemonic,s),icon:h(e.icon,l),iconClass:h(e.iconClass,n),iconLabel:h(e.iconLabel,n),caption:h(e.caption,n),usage:h(e.usage,n),className:h(e.className,n),dataset:h(e.dataset,a),isEnabled:e.isEnabled||r,isToggled:e.isToggled||o,isToggleable:e.isToggleable||!!e.isToggled,isVisible:e.isVisible||r}},e.createKeyBinding=function(e){return{keys:lm.normalizeKeys(e),selector:c(e),command:e.command,args:e.args||Wf.JSONExt.emptyObject}},e.matchKeyBinding=function(e,t,i){let n=null,s=!1,r=1/0,o=0;for(let a=0,l=e.length;ar)continue;let p=Df.calculateSpecificity(l.selector);(!n||c=o)&&(n=l,r=c,o=p)}return{exact:n,partial:s}},e.replayKeyEvent=function(e){e.target.dispatchEvent(function(e){let t=document.createEvent("Event"),i=e.bubbles||!0,n=e.cancelable||!0;return t.initEvent(e.type||"keydown",i,n),t.key=e.key||"",t.keyCode=e.keyCode||0,t.which=e.keyCode||0,t.ctrlKey=e.ctrlKey||!1,t.altKey=e.altKey||!1,t.shiftKey=e.shiftKey||!1,t.metaKey=e.metaKey||!1,t.view=e.view||window,t}(e))},e.formatKey=function(e){return Rf.IS_MAC?t.hasOwnProperty(e)?t[e]:e:i.hasOwnProperty(e)?i[e]:e};const t={Backspace:"⌫",Tab:"⇥",Enter:"⏎",Shift:"⇧",Ctrl:"⌃",Alt:"⌥",Escape:"⎋",PageUp:"⇞",PageDown:"⇟",End:"↘",Home:"↖",ArrowLeft:"←",ArrowUp:"↑",ArrowRight:"→",ArrowDown:"↓",Delete:"⌦",Cmd:"⌘"},i={Escape:"Esc",PageUp:"Page Up",PageDown:"Page Down",ArrowLeft:"Left",ArrowUp:"Up",ArrowRight:"Right",ArrowDown:"Down",Delete:"Del"},n=()=>"",s=()=>-1,r=()=>!0,o=()=>!1,a=()=>({}),l=()=>{};function h(e,t){return void 0===e?t:"function"==typeof e?e:()=>e}function c(e){if(-1!==e.selector.indexOf(","))throw new Error(`Selector cannot contain commas: ${e.selector}`);if(!Df.isValid(e.selector))throw new Error(`Invalid selector: ${e.selector}`);return e.selector}function d(e,t){if(e.lengtht.length?2:1}function u(e,t){let i=t.target,n=t.currentTarget;for(let t=0;null!==i;i=i.parentElement,++t){if(i.hasAttribute("data-lm-suppress-shortcuts"))return-1;if(Df.matches(i,e))return t;if(i===n)return-1}return-1}}(tm||(tm={}));class hm{constructor(e){this.type="text",this.content=e}}class cm{constructor(e,t,i,n){this.type="element",this.tag=e,this.attrs=t,this.children=i,this.renderer=n}}function dm(e){let t,i={},n=[];for(let e=1,r=arguments.length;e=n;--r){const n=t[r],o=s?e.lastChild:e.childNodes[r];"text"===n.type||(n.renderer&&n.renderer.unrender?n.renderer.unrender(o,{attrs:n.attrs,children:n.children}):i(o,n.children,0,!1)),s&&e.removeChild(o)}}e.hostMap=new WeakMap,e.asContentArray=function(e){return e?e instanceof Array?e:[e]:[]},e.createDOMNode=t,e.updateContent=function e(n,r,o){if(r===o)return;let a=function(e,t){let i=e.firstChild,n=Object.create(null);for(let e of t)"element"===e.type&&e.attrs.key&&(n[e.attrs.key]={vNode:e,element:i}),i=i.nextSibling;return n}(n,r),l=r.slice(),h=n.firstChild,c=o.length;for(let i=0;i=l.length){t(o[i],n);continue}let r=l[i],c=o[i];if(r===c){h=h.nextSibling;continue}if("text"===r.type&&"text"===c.type){h.textContent!==c.content&&(h.textContent=c.content),h=h.nextSibling;continue}if("text"===r.type||"text"===c.type){jf.RO.insert(l,i,c),t(c,n,h);continue}if(!r.renderer!=!c.renderer){jf.RO.insert(l,i,c),t(c,n,h);continue}let d=c.attrs.key;if(d&&d in a){let e=a[d];e.vNode!==r&&(jf.RO.move(l,l.indexOf(e.vNode,i+1),i),n.insertBefore(e.element,h),r=e.vNode,h=e.element)}if(r===c){h=h.nextSibling;continue}let u=r.attrs.key;u&&u!==d?(jf.RO.insert(l,i,c),t(c,n,h)):r.tag===c.tag?(s(h,r.attrs,c.attrs),c.renderer?c.renderer.render(h,{attrs:c.attrs,children:c.children}):e(h,r.children,c.children),h=h.nextSibling):(jf.RO.insert(l,i,c),t(c,n,h))}i(n,l,c,!0)};const n={key:!0,className:!0,htmlFor:!0,dataset:!0,style:!0};function s(e,t,i){if(t===i)return;let s;for(s in t)s in n||s in i||("on"===s.substr(0,2)?e[s]=null:e.removeAttribute(s));for(s in i)s in n||t[s]===i[s]||("on"===s.substr(0,2)?e[s]=i[s]:e.setAttribute(s,i[s]));t.className!==i.className&&(void 0!==i.className?e.setAttribute("class",i.className):e.removeAttribute("class")),t.htmlFor!==i.htmlFor&&(void 0!==i.htmlFor?e.setAttribute("for",i.htmlFor):e.removeAttribute("for")),t.dataset!==i.dataset&&function(e,t,i){for(let n in t)n in i||e.removeAttribute(`data-${n}`);for(let n in i)t[n]!==i[n]&&e.setAttribute(`data-${n}`,i[n])}(e,t.dataset||{},i.dataset||{}),t.style!==i.style&&function(e,t,i){let n,s=e.style;for(n in t)n in i||(s[n]="");for(n in i)t[n]!==i[n]&&(s[n]=i[n])}(e,t.style||{},i.style||{})}}(nm||(nm={}));class um{constructor(){this.sizeHint=0,this.minSize=0,this.maxSize=1/0,this.stretch=1,this.size=0,this.done=!1}}!function(e){e.calc=function(e,t){let i=e.length;if(0===i)return t;let n=0,s=0,r=0,o=0,a=0;for(let t=0;t0&&(o+=i.stretch,a++)}if(t===r)return 0;if(t<=n){for(let t=0;t=s){for(let t=0;t0&&n>l;){let t=n,s=o;for(let r=0;r0&&n>l;){let t=n/h;for(let s=0;s0&&n>l;){let t=n,s=o;for(let r=0;r=i.maxSize?(n-=i.maxSize-i.size,o-=i.stretch,i.size=i.maxSize,i.done=!0,h--,a--):(n-=l,i.size+=l)}}for(;h>0&&n>l;){let t=n/h;for(let s=0;s=i.maxSize?(n-=i.maxSize-i.size,i.size=i.maxSize,i.done=!0,h--):(n-=t,i.size+=t))}}}return 0},e.adjust=function(e,t,i){0!==e.length&&0!==i&&(i>0?function(e,t,i){let n=0;for(let i=0;i<=t;++i){let t=e[i];n+=t.maxSize-t.size}let s=0;for(let i=t+1,n=e.length;i=0&&r>0;--i){let t=e[i],n=t.maxSize-t.size;n>=r?(t.sizeHint=t.size+r,r=0):(t.sizeHint=t.size+n,r-=n)}let o=i;for(let i=t+1,n=e.length;i0;++i){let t=e[i],n=t.size-t.minSize;n>=o?(t.sizeHint=t.size-o,o=0):(t.sizeHint=t.size-n,o-=n)}}(e,t,i):function(e,t,i){let n=0;for(let i=t+1,s=e.length;i0;++i){let t=e[i],n=t.maxSize-t.size;n>=r?(t.sizeHint=t.size+r,r=0):(t.sizeHint=t.size+n,r-=n)}let o=i;for(let i=t;i>=0&&o>0;--i){let t=e[i],n=t.size-t.minSize;n>=o?(t.sizeHint=t.size-o,o=0):(t.sizeHint=t.size-n,o-=n)}}(e,t,-i))}}(sm||(sm={}));class pm{constructor(e){this._label="",this._caption="",this._mnemonic=-1,this._icon=void 0,this._iconClass="",this._iconLabel="",this._className="",this._closable=!1,this._changed=new zf.Signal(this),this._isDisposed=!1,this.owner=e.owner,void 0!==e.label&&(this._label=e.label),void 0!==e.mnemonic&&(this._mnemonic=e.mnemonic),void 0!==e.icon&&(this._icon=e.icon),void 0!==e.iconClass&&(this._iconClass=e.iconClass),void 0!==e.iconLabel&&(this._iconLabel=e.iconLabel),void 0!==e.caption&&(this._caption=e.caption),void 0!==e.className&&(this._className=e.className),void 0!==e.closable&&(this._closable=e.closable),this._dataset=e.dataset||{}}get changed(){return this._changed}get label(){return this._label}set label(e){this._label!==e&&(this._label=e,this._changed.emit(void 0))}get mnemonic(){return this._mnemonic}set mnemonic(e){this._mnemonic!==e&&(this._mnemonic=e,this._changed.emit(void 0))}get icon(){return this._icon}set icon(e){this._icon!==e&&(this._icon=e,this._changed.emit(void 0))}get iconClass(){return this._iconClass}set iconClass(e){this._iconClass!==e&&(this._iconClass=e,this._changed.emit(void 0))}get iconLabel(){return this._iconLabel}set iconLabel(e){this._iconLabel!==e&&(this._iconLabel=e,this._changed.emit(void 0))}get caption(){return this._caption}set caption(e){this._caption!==e&&(this._caption=e,this._changed.emit(void 0))}get className(){return this._className}set className(e){this._className!==e&&(this._className=e,this._changed.emit(void 0))}get closable(){return this._closable}set closable(e){this._closable!==e&&(this._closable=e,this._changed.emit(void 0))}get dataset(){return this._dataset}set dataset(e){this._dataset!==e&&(this._dataset=e,this._changed.emit(void 0))}get isDisposed(){return this._isDisposed}dispose(){this.isDisposed||(this._isDisposed=!0,zf.Signal.clearData(this))}}class fm{constructor(e={}){this._flags=0,this._layout=null,this._parent=null,this._disposed=new zf.Signal(this),this._hiddenMode=fm.HiddenMode.Display,this.node=rm.createNode(e),this.addClass("lm-Widget")}dispose(){this.isDisposed||(this.setFlag(fm.Flag.IsDisposed),this._disposed.emit(void 0),this.parent?this.parent=null:this.isAttached&&fm.detach(this),this._layout&&(this._layout.dispose(),this._layout=null),this.title.dispose(),zf.Signal.clearData(this),Lf.clearData(this),Xf.AttachedProperty.clearData(this))}get disposed(){return this._disposed}get isDisposed(){return this.testFlag(fm.Flag.IsDisposed)}get isAttached(){return this.testFlag(fm.Flag.IsAttached)}get isHidden(){return this.testFlag(fm.Flag.IsHidden)}get isVisible(){return this.testFlag(fm.Flag.IsVisible)}get title(){return rm.titleProperty.get(this)}get id(){return this.node.id}set id(e){this.node.id=e}get dataset(){return this.node.dataset}get hiddenMode(){return this._hiddenMode}set hiddenMode(e){this._hiddenMode!==e&&(this.isHidden&&this._toggleHidden(!1),e==fm.HiddenMode.Scale?this.node.style.willChange="transform":this.node.style.willChange="auto",this._hiddenMode=e,this.isHidden&&this._toggleHidden(!0))}get parent(){return this._parent}set parent(e){if(this._parent!==e){if(e&&this.contains(e))throw new Error("Invalid parent widget.");if(this._parent&&!this._parent.isDisposed){let e=new fm.ChildMessage("child-removed",this);Lf.sendMessage(this._parent,e)}if(this._parent=e,this._parent&&!this._parent.isDisposed){let e=new fm.ChildMessage("child-added",this);Lf.sendMessage(this._parent,e)}this.isDisposed||Lf.sendMessage(this,fm.Msg.ParentChanged)}}get layout(){return this._layout}set layout(e){if(this._layout!==e){if(this.testFlag(fm.Flag.DisallowLayout))throw new Error("Cannot set widget layout.");if(this._layout)throw new Error("Cannot change widget layout.");if(e.parent)throw new Error("Cannot change layout parent.");this._layout=e,e.parent=this}}*children(){this._layout&&(yield*this._layout)}contains(e){for(let t=e;t;t=t._parent)if(t===this)return!0;return!1}hasClass(e){return this.node.classList.contains(e)}addClass(e){this.node.classList.add(e)}removeClass(e){this.node.classList.remove(e)}toggleClass(e,t){return!0===t?(this.node.classList.add(e),!0):!1===t?(this.node.classList.remove(e),!1):this.node.classList.toggle(e)}update(){Lf.postMessage(this,fm.Msg.UpdateRequest)}fit(){Lf.postMessage(this,fm.Msg.FitRequest)}activate(){Lf.postMessage(this,fm.Msg.ActivateRequest)}close(){Lf.sendMessage(this,fm.Msg.CloseRequest)}show(){if(this.testFlag(fm.Flag.IsHidden)&&(!this.isAttached||this.parent&&!this.parent.isVisible||Lf.sendMessage(this,fm.Msg.BeforeShow),this.clearFlag(fm.Flag.IsHidden),this._toggleHidden(!1),!this.isAttached||this.parent&&!this.parent.isVisible||Lf.sendMessage(this,fm.Msg.AfterShow),this.parent)){let e=new fm.ChildMessage("child-shown",this);Lf.sendMessage(this.parent,e)}}hide(){if(!this.testFlag(fm.Flag.IsHidden)&&(!this.isAttached||this.parent&&!this.parent.isVisible||Lf.sendMessage(this,fm.Msg.BeforeHide),this.setFlag(fm.Flag.IsHidden),this._toggleHidden(!0),!this.isAttached||this.parent&&!this.parent.isVisible||Lf.sendMessage(this,fm.Msg.AfterHide),this.parent)){let e=new fm.ChildMessage("child-hidden",this);Lf.sendMessage(this.parent,e)}}setHidden(e){e?this.hide():this.show()}testFlag(e){return 0!=(this._flags&e)}setFlag(e){this._flags|=e}clearFlag(e){this._flags&=~e}processMessage(e){switch(e.type){case"resize":this.notifyLayout(e),this.onResize(e);break;case"update-request":this.notifyLayout(e),this.onUpdateRequest(e);break;case"fit-request":this.notifyLayout(e),this.onFitRequest(e);break;case"before-show":this.notifyLayout(e),this.onBeforeShow(e);break;case"after-show":this.setFlag(fm.Flag.IsVisible),this.notifyLayout(e),this.onAfterShow(e);break;case"before-hide":this.notifyLayout(e),this.onBeforeHide(e);break;case"after-hide":this.clearFlag(fm.Flag.IsVisible),this.notifyLayout(e),this.onAfterHide(e);break;case"before-attach":this.notifyLayout(e),this.onBeforeAttach(e);break;case"after-attach":this.isHidden||this.parent&&!this.parent.isVisible||this.setFlag(fm.Flag.IsVisible),this.setFlag(fm.Flag.IsAttached),this.notifyLayout(e),this.onAfterAttach(e);break;case"before-detach":this.notifyLayout(e),this.onBeforeDetach(e);break;case"after-detach":this.clearFlag(fm.Flag.IsVisible),this.clearFlag(fm.Flag.IsAttached),this.notifyLayout(e),this.onAfterDetach(e);break;case"activate-request":this.notifyLayout(e),this.onActivateRequest(e);break;case"close-request":this.notifyLayout(e),this.onCloseRequest(e);break;case"child-added":this.notifyLayout(e),this.onChildAdded(e);break;case"child-removed":this.notifyLayout(e),this.onChildRemoved(e);break;default:this.notifyLayout(e)}}notifyLayout(e){this._layout&&this._layout.processParentMessage(e)}onCloseRequest(e){this.parent?this.parent=null:this.isAttached&&fm.detach(this)}onResize(e){}onUpdateRequest(e){}onFitRequest(e){}onActivateRequest(e){}onBeforeShow(e){}onAfterShow(e){}onBeforeHide(e){}onAfterHide(e){}onBeforeAttach(e){}onAfterAttach(e){}onBeforeDetach(e){}onAfterDetach(e){}onChildAdded(e){}onChildRemoved(e){}_toggleHidden(e){if(e)switch(this._hiddenMode){case fm.HiddenMode.Display:this.addClass("lm-mod-hidden");break;case fm.HiddenMode.Scale:this.node.style.transform="scale(0)",this.node.setAttribute("aria-hidden","true");break;case fm.HiddenMode.ContentVisibility:this.node.style.contentVisibility="hidden",this.node.style.zIndex="-1"}else switch(this._hiddenMode){case fm.HiddenMode.Display:this.removeClass("lm-mod-hidden");break;case fm.HiddenMode.Scale:this.node.style.transform="",this.node.removeAttribute("aria-hidden");break;case fm.HiddenMode.ContentVisibility:this.node.style.contentVisibility="",this.node.style.zIndex=""}}}!function(e){var t,i,n;(t=e.HiddenMode||(e.HiddenMode={}))[t.Display=0]="Display",t[t.Scale=1]="Scale",t[t.ContentVisibility=2]="ContentVisibility",(i=e.Flag||(e.Flag={}))[i.IsDisposed=1]="IsDisposed",i[i.IsAttached=2]="IsAttached",i[i.IsHidden=4]="IsHidden",i[i.IsVisible=8]="IsVisible",i[i.DisallowLayout=16]="DisallowLayout",(n=e.Msg||(e.Msg={})).BeforeShow=new Uf("before-show"),n.AfterShow=new Uf("after-show"),n.BeforeHide=new Uf("before-hide"),n.AfterHide=new Uf("after-hide"),n.BeforeAttach=new Uf("before-attach"),n.AfterAttach=new Uf("after-attach"),n.BeforeDetach=new Uf("before-detach"),n.AfterDetach=new Uf("after-detach"),n.ParentChanged=new Uf("parent-changed"),n.UpdateRequest=new Ff("update-request"),n.FitRequest=new Ff("fit-request"),n.ActivateRequest=new Ff("activate-request"),n.CloseRequest=new Ff("close-request"),e.ChildMessage=class extends Uf{constructor(e,t){super(e),this.child=t}};class s extends Uf{constructor(e,t){super("resize"),this.width=e,this.height=t}}e.ResizeMessage=s,function(e){e.UnknownSize=new e(-1,-1)}(s=e.ResizeMessage||(e.ResizeMessage={})),e.attach=function(t,i,n=null){if(t.parent)throw new Error("Cannot attach a child widget.");if(t.isAttached||t.node.isConnected)throw new Error("Widget is already attached.");if(!i.isConnected)throw new Error("Host is not attached.");Lf.sendMessage(t,e.Msg.BeforeAttach),i.insertBefore(t.node,n),Lf.sendMessage(t,e.Msg.AfterAttach)},e.detach=function(t){if(t.parent)throw new Error("Cannot detach a child widget.");if(!t.isAttached||!t.node.isConnected)throw new Error("Widget is not attached.");Lf.sendMessage(t,e.Msg.BeforeDetach),t.node.parentNode.removeChild(t.node),Lf.sendMessage(t,e.Msg.AfterDetach)}}(fm||(fm={})),function(e){e.titleProperty=new Xf.AttachedProperty({name:"title",create:e=>new pm({owner:e})}),e.createNode=function(e){return e.node||document.createElement(e.tag||"div")}}(rm||(rm={}));class mm{constructor(e={}){this._disposed=!1,this._parent=null,this._fitPolicy=e.fitPolicy||"set-min-size"}dispose(){this._parent=null,this._disposed=!0,zf.Signal.clearData(this),Xf.AttachedProperty.clearData(this)}get isDisposed(){return this._disposed}get parent(){return this._parent}set parent(e){if(this._parent!==e){if(this._parent)throw new Error("Cannot change parent widget.");if(e.layout!==this)throw new Error("Invalid parent widget.");this._parent=e,this.init()}}get fitPolicy(){return this._fitPolicy}set fitPolicy(e){if(this._fitPolicy!==e&&(this._fitPolicy=e,this._parent)){let e=this._parent.node.style;e.minWidth="",e.minHeight="",e.maxWidth="",e.maxHeight="",this._parent.fit()}}processParentMessage(e){switch(e.type){case"resize":this.onResize(e);break;case"update-request":this.onUpdateRequest(e);break;case"fit-request":this.onFitRequest(e);break;case"before-show":this.onBeforeShow(e);break;case"after-show":this.onAfterShow(e);break;case"before-hide":this.onBeforeHide(e);break;case"after-hide":this.onAfterHide(e);break;case"before-attach":this.onBeforeAttach(e);break;case"after-attach":this.onAfterAttach(e);break;case"before-detach":this.onBeforeDetach(e);break;case"after-detach":this.onAfterDetach(e);break;case"child-removed":this.onChildRemoved(e);break;case"child-shown":this.onChildShown(e);break;case"child-hidden":this.onChildHidden(e)}}init(){for(const e of this)e.parent=this.parent}onResize(e){for(const e of this)Lf.sendMessage(e,fm.ResizeMessage.UnknownSize)}onUpdateRequest(e){for(const e of this)Lf.sendMessage(e,fm.ResizeMessage.UnknownSize)}onBeforeAttach(e){for(const t of this)Lf.sendMessage(t,e)}onAfterAttach(e){for(const t of this)Lf.sendMessage(t,e)}onBeforeDetach(e){for(const t of this)Lf.sendMessage(t,e)}onAfterDetach(e){for(const t of this)Lf.sendMessage(t,e)}onBeforeShow(e){for(const t of this)t.isHidden||Lf.sendMessage(t,e)}onAfterShow(e){for(const t of this)t.isHidden||Lf.sendMessage(t,e)}onBeforeHide(e){for(const t of this)t.isHidden||Lf.sendMessage(t,e)}onAfterHide(e){for(const t of this)t.isHidden||Lf.sendMessage(t,e)}onChildRemoved(e){this.removeWidget(e.child)}onFitRequest(e){}onChildShown(e){}onChildHidden(e){}}!function(e){e.getHorizontalAlignment=function(e){return om.horizontalAlignmentProperty.get(e)},e.setHorizontalAlignment=function(e,t){om.horizontalAlignmentProperty.set(e,t)},e.getVerticalAlignment=function(e){return om.verticalAlignmentProperty.get(e)},e.setVerticalAlignment=function(e,t){om.verticalAlignmentProperty.set(e,t)}}(mm||(mm={}));class gm{constructor(e){this._top=NaN,this._left=NaN,this._width=NaN,this._height=NaN,this._minWidth=0,this._minHeight=0,this._maxWidth=1/0,this._maxHeight=1/0,this._disposed=!1,this.widget=e,this.widget.node.style.position="absolute",this.widget.node.style.contain="strict"}dispose(){if(this._disposed)return;this._disposed=!0;let e=this.widget.node.style;e.position="",e.top="",e.left="",e.width="",e.height="",e.contain=""}get minWidth(){return this._minWidth}get minHeight(){return this._minHeight}get maxWidth(){return this._maxWidth}get maxHeight(){return this._maxHeight}get isDisposed(){return this._disposed}get isHidden(){return this.widget.isHidden}get isVisible(){return this.widget.isVisible}get isAttached(){return this.widget.isAttached}fit(){let e=Af.sizeLimits(this.widget.node);this._minWidth=e.minWidth,this._minHeight=e.minHeight,this._maxWidth=e.maxWidth,this._maxHeight=e.maxHeight}update(e,t,i,n){let s=Math.max(this._minWidth,Math.min(i,this._maxWidth)),r=Math.max(this._minHeight,Math.min(n,this._maxHeight));if(s"center",changed:t}),e.verticalAlignmentProperty=new Xf.AttachedProperty({name:"verticalAlignment",create:()=>"top",changed:t})}(om||(om={}));class vm extends mm{constructor(){super(...arguments),this._widgets=[]}dispose(){for(;this._widgets.length>0;)this._widgets.pop().dispose();super.dispose()}get widgets(){return this._widgets}*[Symbol.iterator](){yield*this._widgets}addWidget(e){this.insertWidget(this._widgets.length,e)}insertWidget(e,t){t.parent=this.parent;let i=this._widgets.indexOf(t),n=Math.max(0,Math.min(e,this._widgets.length));if(-1===i)return jf.RO.insert(this._widgets,n,t),void(this.parent&&this.attachWidget(n,t));n===this._widgets.length&&n--,i!==n&&(jf.RO.move(this._widgets,i,n),this.parent&&this.moveWidget(i,n,t))}removeWidget(e){this.removeWidgetAt(this._widgets.indexOf(e))}removeWidgetAt(e){let t=jf.RO.removeAt(this._widgets,e);t&&this.parent&&this.detachWidget(e,t)}init(){super.init();let e=0;for(const t of this)this.attachWidget(e++,t)}attachWidget(e,t){let i=this.parent.node.children[e];this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.BeforeAttach),this.parent.node.insertBefore(t.node,i),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.AfterAttach)}moveWidget(e,t,i){this.parent.isAttached&&Lf.sendMessage(i,fm.Msg.BeforeDetach),this.parent.node.removeChild(i.node),this.parent.isAttached&&Lf.sendMessage(i,fm.Msg.AfterDetach);let n=this.parent.node.children[t];this.parent.isAttached&&Lf.sendMessage(i,fm.Msg.BeforeAttach),this.parent.node.insertBefore(i.node,n),this.parent.isAttached&&Lf.sendMessage(i,fm.Msg.AfterAttach)}detachWidget(e,t){this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.BeforeDetach),this.parent.node.removeChild(t.node),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.AfterDetach)}}!function(e){e.clampDimension=function(e){return Math.max(0,Math.floor(e))}}(am||(am={}));var Om,bm,_m,ym,wm,xm,Sm,km,Tm,Cm,Pm=am;class Mm extends vm{constructor(e){super(),this.widgetOffset=0,this._fixed=0,this._spacing=4,this._dirty=!1,this._hasNormedSizes=!1,this._sizers=[],this._items=[],this._handles=[],this._box=null,this._alignment="start",this._orientation="horizontal",this.renderer=e.renderer,void 0!==e.orientation&&(this._orientation=e.orientation),void 0!==e.alignment&&(this._alignment=e.alignment),void 0!==e.spacing&&(this._spacing=am.clampDimension(e.spacing))}dispose(){for(const e of this._items)e.dispose();this._box=null,this._items.length=0,this._sizers.length=0,this._handles.length=0,super.dispose()}get orientation(){return this._orientation}set orientation(e){this._orientation!==e&&(this._orientation=e,this.parent&&(this.parent.dataset.orientation=e,this.parent.fit()))}get alignment(){return this._alignment}set alignment(e){this._alignment!==e&&(this._alignment=e,this.parent&&(this.parent.dataset.alignment=e,this.parent.update()))}get spacing(){return this._spacing}set spacing(e){e=am.clampDimension(e),this._spacing!==e&&(this._spacing=e,this.parent&&this.parent.fit())}get handles(){return this._handles}absoluteSizes(){return this._sizers.map((e=>e.size))}relativeSizes(){return Om.normalize(this._sizers.map((e=>e.size)))}setRelativeSizes(e,t=!0){let i=this._sizers.length,n=e.slice(0,i);for(;n.length0&&(e.sizeHint=e.size);sm.adjust(this._sizers,e,i),this.parent&&this.parent.update()}}init(){this.parent.dataset.orientation=this.orientation,this.parent.dataset.alignment=this.alignment,super.init()}attachWidget(e,t){let i=new gm(t),n=Om.createHandle(this.renderer),s=Om.averageSize(this._sizers),r=Om.createSizer(s);jf.RO.insert(this._items,e,i),jf.RO.insert(this._sizers,e,r),jf.RO.insert(this._handles,e,n),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.BeforeAttach),this.parent.node.appendChild(t.node),this.parent.node.appendChild(n),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.AfterAttach),this.parent.fit()}moveWidget(e,t,i){jf.RO.move(this._items,e,t),jf.RO.move(this._sizers,e,t),jf.RO.move(this._handles,e,t),this.parent.fit()}detachWidget(e,t){let i=jf.RO.removeAt(this._items,e),n=jf.RO.removeAt(this._handles,e);jf.RO.removeAt(this._sizers,e),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.BeforeDetach),this.parent.node.removeChild(t.node),this.parent.node.removeChild(n),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.AfterDetach),i.dispose(),this.parent.fit()}onBeforeShow(e){super.onBeforeShow(e),this.parent.update()}onBeforeAttach(e){super.onBeforeAttach(e),this.parent.fit()}onChildShown(e){this.parent.fit()}onChildHidden(e){this.parent.fit()}onResize(e){this.parent.isVisible&&this._update(e.width,e.height)}onUpdateRequest(e){this.parent.isVisible&&this._update(-1,-1)}onFitRequest(e){this.parent.isAttached&&this._fit()}updateItemPosition(e,t,i,n,s,r,o){const a=this._items[e];if(a.isHidden)return;let l=this._handles[e].style;t?(i+=this.widgetOffset,a.update(i,n,o,s),i+=o,l.top=`${n}px`,l.left=`${i}px`,l.width=`${this._spacing}px`,l.height=`${s}px`):(n+=this.widgetOffset,a.update(i,n,r,o),n+=o,l.top=`${n}px`,l.left=`${i}px`,l.width=`${r}px`,l.height=`${this._spacing}px`)}_fit(){let e=0,t=-1;for(let i=0,n=this._items.length;i0&&(r.sizeHint=r.size),t.isHidden?(r.minSize=0,r.maxSize=0):(t.fit(),r.stretch=Mm.getStretch(t.widget),i?(r.minSize=t.minWidth,r.maxSize=t.maxWidth,n+=t.minWidth,s=Math.max(s,t.minHeight)):(r.minSize=t.minHeight,r.maxSize=t.maxHeight,s+=t.minHeight,n=Math.max(n,t.minWidth)))}let r=this._box=Af.boxSizing(this.parent.node);n+=r.horizontalSum,s+=r.verticalSum;let o=this.parent.node.style;o.minWidth=`${n}px`,o.minHeight=`${s}px`,this._dirty=!0,this.parent.parent&&Lf.sendMessage(this.parent.parent,fm.Msg.FitRequest),this._dirty&&Lf.sendMessage(this.parent,fm.Msg.UpdateRequest)}_update(e,t){this._dirty=!1;let i=0;for(let e=0,t=this._items.length;e0){let e;if(e=h?Math.max(0,r-this._fixed):Math.max(0,o-this._fixed),this._hasNormedSizes){for(let t of this._sizers)t.sizeHint*=e;this._hasNormedSizes=!1}let t=sm.calc(this._sizers,e);if(t>0)switch(this._alignment){case"start":break;case"center":a=0,l=t/2;break;case"end":a=0,l=t;break;case"justify":a=t/i,l=0;break;default:throw"unreachable"}}for(let e=0,t=this._items.length;e0,coerce:(e,t)=>Math.max(0,Math.floor(t)),changed:function(e){e.parent&&e.parent.layout instanceof Mm&&e.parent.fit()}}),e.createSizer=function(e){let t=new um;return t.sizeHint=Math.floor(e),t},e.createHandle=function(e){let t=e.createHandle();return t.style.position="absolute",t.style.contain="style",t},e.averageSize=function(e){return e.reduce(((e,t)=>e+t.size),0)/e.length||0},e.normalize=function(e){let t=e.length;if(0===t)return[];let i=e.reduce(((e,t)=>e+Math.abs(t)),0);return 0===i?e.map((e=>1/t)):e.map((e=>e/i))}}(Om||(Om={}));class Em extends Mm{constructor(e){super({...e,orientation:e.orientation||"vertical"}),this._titles=[],this.titleSpace=e.titleSpace||22}get titleSpace(){return this.widgetOffset}set titleSpace(e){e=Pm.clampDimension(e),this.widgetOffset!==e&&(this.widgetOffset=e,this.parent&&this.parent.fit())}get titles(){return this._titles}dispose(){this.isDisposed||(this._titles.length=0,super.dispose())}updateTitle(e,t){const i=this._titles[e],n=i.classList.contains("lm-mod-expanded"),s=bm.createTitle(this.renderer,t.title,n);this._titles[e]=s,this.parent.node.replaceChild(s,i)}insertWidget(e,t){t.id||(t.id=`id-${Wf.UUID.uuid4()}`),super.insertWidget(e,t)}attachWidget(e,t){const i=bm.createTitle(this.renderer,t.title);jf.RO.insert(this._titles,e,i),this.parent.node.appendChild(i),t.node.setAttribute("role","region"),t.node.setAttribute("aria-labelledby",i.id),super.attachWidget(e,t)}moveWidget(e,t,i){jf.RO.move(this._titles,e,t),super.moveWidget(e,t,i)}detachWidget(e,t){const i=jf.RO.removeAt(this._titles,e);this.parent.node.removeChild(i),super.detachWidget(e,t)}updateItemPosition(e,t,i,n,s,r,o){const a=this._titles[e].style;a.top=`${n}px`,a.left=`${i}px`,a.height=`${this.widgetOffset}px`,a.width=t?`${s}px`:`${r}px`,super.updateItemPosition(e,t,i,n,s,r,o)}}!function(e){e.createTitle=function(e,t,i=!0){const n=e.createSectionTitle(t);return n.style.position="absolute",n.style.contain="strict",n.setAttribute("aria-label",`${t.label} Section`),n.setAttribute("aria-expanded",i?"true":"false"),n.setAttribute("aria-controls",t.owner.id),i&&n.classList.add("lm-mod-expanded"),n}}(bm||(bm={}));class Am extends fm{constructor(e={}){super(),this.addClass("lm-Panel"),this.layout=_m.createLayout(e)}get widgets(){return this.layout.widgets}addWidget(e){this.layout.addWidget(e)}insertWidget(e,t){this.layout.insertWidget(e,t)}}!function(e){e.createLayout=function(e){return e.layout||new vm}}(_m||(_m={}));class Rm extends Am{constructor(e={}){super({layout:ym.createLayout(e)}),this._handleMoved=new zf.Signal(this),this._pressData=null,this.addClass("lm-SplitPanel")}dispose(){this._releaseMouse(),super.dispose()}get orientation(){return this.layout.orientation}set orientation(e){this.layout.orientation=e}get alignment(){return this.layout.alignment}set alignment(e){this.layout.alignment=e}get spacing(){return this.layout.spacing}set spacing(e){this.layout.spacing=e}get renderer(){return this.layout.renderer}get handleMoved(){return this._handleMoved}get handles(){return this.layout.handles}relativeSizes(){return this.layout.relativeSizes()}setRelativeSizes(e,t=!0){this.layout.setRelativeSizes(e,t)}handleEvent(e){switch(e.type){case"pointerdown":this._evtPointerDown(e);break;case"pointermove":this._evtPointerMove(e);break;case"pointerup":this._evtPointerUp(e);break;case"keydown":this._evtKeyDown(e);break;case"contextmenu":e.preventDefault(),e.stopPropagation()}}onBeforeAttach(e){this.node.addEventListener("pointerdown",this)}onAfterDetach(e){this.node.removeEventListener("pointerdown",this),this._releaseMouse()}onChildAdded(e){e.child.addClass("lm-SplitPanel-child"),this._releaseMouse()}onChildRemoved(e){e.child.removeClass("lm-SplitPanel-child"),this._releaseMouse()}_evtKeyDown(e){this._pressData&&(e.preventDefault(),e.stopPropagation()),27===e.keyCode&&this._releaseMouse()}_evtPointerDown(e){if(0!==e.button)return;let t,i=this.layout,n=jf.RO.findFirstIndex(i.handles,(t=>t.contains(e.target)));if(-1===n)return;e.preventDefault(),e.stopPropagation(),document.addEventListener("pointerup",this,!0),document.addEventListener("pointermove",this,!0),document.addEventListener("keydown",this,!0),document.addEventListener("contextmenu",this,!0);let s=i.handles[n],r=s.getBoundingClientRect();t="horizontal"===i.orientation?e.clientX-r.left:e.clientY-r.top;let o=window.getComputedStyle(s),a=Gf.overrideCursor(o.cursor);this._pressData={index:n,delta:t,override:a}}_evtPointerMove(e){let t;e.preventDefault(),e.stopPropagation();let i=this.layout,n=this.node.getBoundingClientRect();t="horizontal"===i.orientation?e.clientX-n.left-this._pressData.delta:e.clientY-n.top-this._pressData.delta,i.moveHandle(this._pressData.index,t)}_evtPointerUp(e){0===e.button&&(e.preventDefault(),e.stopPropagation(),this._releaseMouse())}_releaseMouse(){this._pressData&&(this._pressData.override.dispose(),this._pressData=null,this._handleMoved.emit(),document.removeEventListener("keydown",this,!0),document.removeEventListener("pointerup",this,!0),document.removeEventListener("pointermove",this,!0),document.removeEventListener("contextmenu",this,!0))}}!function(e){class t{createHandle(){let e=document.createElement("div");return e.className="lm-SplitPanel-handle",e}}e.Renderer=t,e.defaultRenderer=new t,e.getStretch=function(e){return Mm.getStretch(e)},e.setStretch=function(e,t){Mm.setStretch(e,t)}}(Rm||(Rm={})),function(e){e.createLayout=function(e){return e.layout||new Mm({renderer:e.renderer||Rm.defaultRenderer,orientation:e.orientation,alignment:e.alignment,spacing:e.spacing})}}(ym||(ym={}));class Dm extends Rm{constructor(e={}){super({...e,layout:wm.createLayout(e)}),this._widgetSizesCache=new WeakMap,this._expansionToggled=new zf.Signal(this),this.addClass("lm-AccordionPanel")}get renderer(){return this.layout.renderer}get titleSpace(){return this.layout.titleSpace}set titleSpace(e){this.layout.titleSpace=e}get titles(){return this.layout.titles}get expansionToggled(){return this._expansionToggled}addWidget(e){super.addWidget(e),e.title.changed.connect(this._onTitleChanged,this)}collapse(e){const t=this.layout.widgets[e];t&&!t.isHidden&&this._toggleExpansion(e)}expand(e){const t=this.layout.widgets[e];t&&t.isHidden&&this._toggleExpansion(e)}insertWidget(e,t){super.insertWidget(e,t),t.title.changed.connect(this._onTitleChanged,this)}handleEvent(e){switch(super.handleEvent(e),e.type){case"click":this._evtClick(e);break;case"keydown":this._eventKeyDown(e)}}onBeforeAttach(e){this.node.addEventListener("click",this),this.node.addEventListener("keydown",this),super.onBeforeAttach(e)}onAfterDetach(e){super.onAfterDetach(e),this.node.removeEventListener("click",this),this.node.removeEventListener("keydown",this)}_onTitleChanged(e){const t=jf.RO.findFirstIndex(this.widgets,(t=>t.contains(e.owner)));t>=0&&(this.layout.updateTitle(t,e.owner),this.update())}_computeWidgetSize(e){const t=this.layout,i=t.widgets[e];if(!i)return;const n=i.isHidden,s=t.absoluteSizes(),r=(n?-1:1)*this.spacing,o=s.reduce(((e,t)=>e+t));let a=[...s];if(n){const t=this._widgetSizesCache.get(i);if(!t)return;a[e]+=t;const n=a.map((e=>e-t>0)).lastIndexOf(!0);-1===n?a.forEach(((i,n)=>{n!==e&&(a[n]-=s[n]/o*(t-r))})):a[n]-=t-r}else{const t=s[e];this._widgetSizesCache.set(i,t),a[e]=0;const n=a.map((e=>e>0)).lastIndexOf(!0);if(-1===n)return;a[n]=s[n]+t+r}return a.map((e=>e/(o+r)))}_evtClick(e){const t=e.target;if(t){const i=jf.RO.findFirstIndex(this.titles,(e=>e.contains(t)));i>=0&&(e.preventDefault(),e.stopPropagation(),this._toggleExpansion(i))}}_eventKeyDown(e){if(e.defaultPrevented)return;const t=e.target;let i=!1;if(t){const n=jf.RO.findFirstIndex(this.titles,(e=>e.contains(t)));if(n>=0){const s=e.keyCode.toString();if(e.key.match(/Space|Enter/)||s.match(/13|32/))t.click(),i=!0;else if("horizontal"===this.orientation?e.key.match(/ArrowLeft|ArrowRight/)||s.match(/37|39/):e.key.match(/ArrowUp|ArrowDown/)||s.match(/38|40/)){const t=e.key.match(/ArrowLeft|ArrowUp/)||s.match(/37|38/)?-1:1,r=this.titles.length,o=(n+r+t)%r;this.titles[o].focus(),i=!0}else"End"===e.key||"35"===s?(this.titles[this.titles.length-1].focus(),i=!0):"Home"!==e.key&&"36"!==s||(this.titles[0].focus(),i=!0)}i&&e.preventDefault()}}_toggleExpansion(e){const t=this.titles[e],i=this.layout.widgets[e],n=this._computeWidgetSize(e);n&&this.setRelativeSizes(n,!1),i.isHidden?(t.classList.add("lm-mod-expanded"),t.setAttribute("aria-expanded","true"),i.show()):(t.classList.remove("lm-mod-expanded"),t.setAttribute("aria-expanded","false"),i.hide()),this._expansionToggled.emit(e)}}!function(e){class t extends Rm.Renderer{constructor(){super(),this.titleClassName="lm-AccordionPanel-title",this._titleID=0,this._titleKeys=new WeakMap,this._uuid=++t._nInstance}createCollapseIcon(e){return document.createElement("span")}createSectionTitle(e){const t=document.createElement("h3");t.setAttribute("tabindex","0"),t.id=this.createTitleKey(e),t.className=this.titleClassName;for(const i in e.dataset)t.dataset[i]=e.dataset[i];t.appendChild(this.createCollapseIcon(e)).className="lm-AccordionPanel-titleCollapser";const i=t.appendChild(document.createElement("span"));return i.className="lm-AccordionPanel-titleLabel",i.textContent=e.label,i.title=e.caption||e.label,t}createTitleKey(e){let t=this._titleKeys.get(e);return void 0===t&&(t=`title-key-${this._uuid}-${this._titleID++}`,this._titleKeys.set(e,t)),t}}t._nInstance=0,e.Renderer=t,e.defaultRenderer=new t}(Dm||(Dm={})),function(e){e.createLayout=function(e){return e.layout||new Em({renderer:e.renderer||Dm.defaultRenderer,orientation:e.orientation,alignment:e.alignment,spacing:e.spacing,titleSpace:e.titleSpace})}}(wm||(wm={}));class Im extends vm{constructor(e={}){super(),this._fixed=0,this._spacing=4,this._dirty=!1,this._sizers=[],this._items=[],this._box=null,this._alignment="start",this._direction="top-to-bottom",void 0!==e.direction&&(this._direction=e.direction),void 0!==e.alignment&&(this._alignment=e.alignment),void 0!==e.spacing&&(this._spacing=Pm.clampDimension(e.spacing))}dispose(){for(const e of this._items)e.dispose();this._box=null,this._items.length=0,this._sizers.length=0,super.dispose()}get direction(){return this._direction}set direction(e){this._direction!==e&&(this._direction=e,this.parent&&(this.parent.dataset.direction=e,this.parent.fit()))}get alignment(){return this._alignment}set alignment(e){this._alignment!==e&&(this._alignment=e,this.parent&&(this.parent.dataset.alignment=e,this.parent.update()))}get spacing(){return this._spacing}set spacing(e){e=Pm.clampDimension(e),this._spacing!==e&&(this._spacing=e,this.parent&&this.parent.fit())}init(){this.parent.dataset.direction=this.direction,this.parent.dataset.alignment=this.alignment,super.init()}attachWidget(e,t){jf.RO.insert(this._items,e,new gm(t)),jf.RO.insert(this._sizers,e,new um),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.BeforeAttach),this.parent.node.appendChild(t.node),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.AfterAttach),this.parent.fit()}moveWidget(e,t,i){jf.RO.move(this._items,e,t),jf.RO.move(this._sizers,e,t),this.parent.update()}detachWidget(e,t){let i=jf.RO.removeAt(this._items,e);jf.RO.removeAt(this._sizers,e),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.BeforeDetach),this.parent.node.removeChild(t.node),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.AfterDetach),i.dispose(),this.parent.fit()}onBeforeShow(e){super.onBeforeShow(e),this.parent.update()}onBeforeAttach(e){super.onBeforeAttach(e),this.parent.fit()}onChildShown(e){this.parent.fit()}onChildHidden(e){this.parent.fit()}onResize(e){this.parent.isVisible&&this._update(e.width,e.height)}onUpdateRequest(e){this.parent.isVisible&&this._update(-1,-1)}onFitRequest(e){this.parent.isAttached&&this._fit()}_fit(){let e=0;for(let t=0,i=this._items.length;t0)switch(this._alignment){case"start":break;case"center":l=0,h=n/2;break;case"end":l=0,h=n;break;case"justify":l=n/i,h=0;break;default:throw"unreachable"}for(let e=0,t=this._items.length;e0,coerce:(e,t)=>Math.max(0,Math.floor(t)),changed:t}),e.sizeBasisProperty=new Xf.AttachedProperty({name:"sizeBasis",create:()=>0,coerce:(e,t)=>Math.max(0,Math.floor(t)),changed:t}),e.isHorizontal=function(e){return"left-to-right"===e||"right-to-left"===e},e.clampSpacing=function(e){return Math.max(0,Math.floor(e))}}(xm||(xm={}));class qm extends Am{constructor(e={}){super({layout:Sm.createLayout(e)}),this.addClass("lm-BoxPanel")}get direction(){return this.layout.direction}set direction(e){this.layout.direction=e}get alignment(){return this.layout.alignment}set alignment(e){this.layout.alignment=e}get spacing(){return this.layout.spacing}set spacing(e){this.layout.spacing=e}onChildAdded(e){e.child.addClass("lm-BoxPanel-child")}onChildRemoved(e){e.child.removeClass("lm-BoxPanel-child")}}!function(e){e.getStretch=function(e){return Im.getStretch(e)},e.setStretch=function(e,t){Im.setStretch(e,t)},e.getSizeBasis=function(e){return Im.getSizeBasis(e)},e.setSizeBasis=function(e,t){Im.setSizeBasis(e,t)}}(qm||(qm={})),function(e){e.createLayout=function(e){return e.layout||new Im(e)}}(Sm||(Sm={}));class Lm extends fm{constructor(e){super({node:km.createNode()}),this._activeIndex=-1,this._items=[],this._results=null,this.addClass("lm-CommandPalette"),this.setFlag(fm.Flag.DisallowLayout),this.commands=e.commands,this.renderer=e.renderer||Lm.defaultRenderer,this.commands.commandChanged.connect(this._onGenericChange,this),this.commands.keyBindingChanged.connect(this._onGenericChange,this)}dispose(){this._items.length=0,this._results=null,super.dispose()}get searchNode(){return this.node.getElementsByClassName("lm-CommandPalette-search")[0]}get inputNode(){return this.node.getElementsByClassName("lm-CommandPalette-input")[0]}get contentNode(){return this.node.getElementsByClassName("lm-CommandPalette-content")[0]}get items(){return this._items}addItem(e){let t=km.createItem(this.commands,e);return this._items.push(t),this.refresh(),t}addItems(e){const t=e.map((e=>km.createItem(this.commands,e)));return t.forEach((e=>this._items.push(e))),this.refresh(),t}removeItem(e){this.removeItemAt(this._items.indexOf(e))}removeItemAt(e){jf.RO.removeAt(this._items,e)&&this.refresh()}clearItems(){0!==this._items.length&&(this._items.length=0,this.refresh())}refresh(){this._results=null,""!==this.inputNode.value?this.node.getElementsByClassName("lm-close-icon")[0].style.display="inherit":this.node.getElementsByClassName("lm-close-icon")[0].style.display="none",this.update()}handleEvent(e){switch(e.type){case"click":this._evtClick(e);break;case"keydown":this._evtKeyDown(e);break;case"input":this.refresh();break;case"focus":case"blur":this._toggleFocused()}}onBeforeAttach(e){this.node.addEventListener("click",this),this.node.addEventListener("keydown",this),this.node.addEventListener("input",this),this.node.addEventListener("focus",this,!0),this.node.addEventListener("blur",this,!0)}onAfterDetach(e){this.node.removeEventListener("click",this),this.node.removeEventListener("keydown",this),this.node.removeEventListener("input",this),this.node.removeEventListener("focus",this,!0),this.node.removeEventListener("blur",this,!0)}onAfterShow(e){this.update(),super.onAfterShow(e)}onActivateRequest(e){if(this.isAttached){let e=this.inputNode;e.focus(),e.select()}}onUpdateRequest(e){if(this.isHidden)return;let t=this.inputNode.value,i=this.contentNode,n=this._results;if(n||(n=this._results=km.search(this._items,t),this._activeIndex=t?jf.RO.findFirstIndex(n,km.canActivate):-1),!t&&0===n.length)return void im.render(null,i);if(t&&0===n.length){let e=this.renderer.renderEmptyMessage({query:t});return void im.render(e,i)}let s=this.renderer,r=this._activeIndex,o=new Array(n.length);for(let e=0,t=n.length;e=n.length)i.scrollTop=0;else{let e=i.children[r];Af.scrollIntoViewIfNeeded(i,e)}}_evtClick(e){if(0!==e.button)return;if(e.target.classList.contains("lm-close-icon"))return this.inputNode.value="",void this.refresh();let t=jf.RO.findFirstIndex(this.contentNode.children,(t=>t.contains(e.target)));-1!==t&&(e.preventDefault(),e.stopPropagation(),this._execute(t))}_evtKeyDown(e){if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey))switch(e.keyCode){case 13:e.preventDefault(),e.stopPropagation(),this._execute(this._activeIndex);break;case 38:e.preventDefault(),e.stopPropagation(),this._activatePreviousItem();break;case 40:e.preventDefault(),e.stopPropagation(),this._activateNextItem()}}_activateNextItem(){if(!this._results||0===this._results.length)return;let e=this._activeIndex,t=this._results.length,i=ee-t)),h=r.slice(0,l),c=r.slice(l);for(let e=0,t=c.length;ei.command===e&&Wf.JSONExt.deepEqual(i.args,t)))||null}}}(km||(km={}));class Nm extends fm{constructor(e){super({node:Tm.createNode()}),this._childIndex=-1,this._activeIndex=-1,this._openTimerID=0,this._closeTimerID=0,this._items=[],this._childMenu=null,this._parentMenu=null,this._aboutToClose=new zf.Signal(this),this._menuRequested=new zf.Signal(this),this.addClass("lm-Menu"),this.setFlag(fm.Flag.DisallowLayout),this.commands=e.commands,this.renderer=e.renderer||Nm.defaultRenderer}dispose(){this.close(),this._items.length=0,super.dispose()}get aboutToClose(){return this._aboutToClose}get menuRequested(){return this._menuRequested}get parentMenu(){return this._parentMenu}get childMenu(){return this._childMenu}get rootMenu(){let e=this;for(;e._parentMenu;)e=e._parentMenu;return e}get leafMenu(){let e=this;for(;e._childMenu;)e=e._childMenu;return e}get contentNode(){return this.node.getElementsByClassName("lm-Menu-content")[0]}get activeItem(){return this._items[this._activeIndex]||null}set activeItem(e){this.activeIndex=e?this._items.indexOf(e):-1}get activeIndex(){return this._activeIndex}set activeIndex(e){(e<0||e>=this._items.length)&&(e=-1),-1===e||Tm.canActivate(this._items[e])||(e=-1),this._activeIndex!==e&&(this._activeIndex=e,this._activeIndex>=0&&this.contentNode.childNodes[this._activeIndex]&&this.contentNode.childNodes[this._activeIndex].focus(),this.update())}get items(){return this._items}activateNextItem(){let e=this._items.length,t=this._activeIndex,i=t{this.activeIndex=e}})}im.render(r,this.contentNode)}onCloseRequest(e){this._cancelOpenTimer(),this._cancelCloseTimer(),this.activeIndex=-1;let t=this._childMenu;t&&(this._childIndex=-1,this._childMenu=null,t._parentMenu=null,t.close());let i=this._parentMenu;i&&(this._parentMenu=null,i._childIndex=-1,i._childMenu=null,i.activate()),this.isAttached&&this._aboutToClose.emit(void 0),super.onCloseRequest(e)}_evtKeyDown(e){e.preventDefault(),e.stopPropagation();let t=e.keyCode;if(13===t)return void this.triggerActiveItem();if(27===t)return void this.close();if(37===t)return void(this._parentMenu?this.close():this._menuRequested.emit("previous"));if(38===t)return void this.activatePreviousItem();if(39===t){let e=this.activeItem;return void(e&&"submenu"===e.type?this.triggerActiveItem():this.rootMenu._menuRequested.emit("next"))}if(40===t)return void this.activateNextItem();let i=Zf().keyForKeydownEvent(e);if(!i)return;let n=this._activeIndex+1,s=Tm.findMnemonic(this._items,i,n);-1===s.index||s.multiple?-1!==s.index?this.activeIndex=s.index:-1!==s.auto&&(this.activeIndex=s.auto):(this.activeIndex=s.index,this.triggerActiveItem())}_evtMouseUp(e){0===e.button&&(e.preventDefault(),e.stopPropagation(),this.triggerActiveItem())}_evtMouseMove(e){let t=jf.RO.findFirstIndex(this.contentNode.children,(t=>Af.hitTest(t,e.clientX,e.clientY)));if(t===this._activeIndex)return;if(this.activeIndex=t,t=this.activeIndex,t===this._childIndex)return this._cancelOpenTimer(),void this._cancelCloseTimer();-1!==this._childIndex&&this._startCloseTimer(),this._cancelOpenTimer();let i=this.activeItem;i&&"submenu"===i.type&&i.submenu&&this._startOpenTimer()}_evtMouseEnter(e){for(let e=this._parentMenu;e;e=e._parentMenu)e._cancelOpenTimer(),e._cancelCloseTimer(),e.activeIndex=e._childIndex}_evtMouseLeave(e){if(this._cancelOpenTimer(),!this._childMenu)return void(this.activeIndex=-1);let{clientX:t,clientY:i}=e;Af.hitTest(this._childMenu.node,t,i)?this._cancelCloseTimer():(this.activeIndex=-1,this._startCloseTimer())}_evtMouseDown(e){this._parentMenu||(Tm.hitTestMenus(this,e.clientX,e.clientY)?(e.preventDefault(),e.stopPropagation()):this.close())}_openChildMenu(e=!1){let t=this.activeItem;if(!t||"submenu"!==t.type||!t.submenu)return void this._closeChildMenu();let i=t.submenu;if(i===this._childMenu)return;Nm.saveWindowData(),this._closeChildMenu(),this._childMenu=i,this._childIndex=this._activeIndex,i._parentMenu=this,Lf.sendMessage(this,fm.Msg.UpdateRequest);let n=this.contentNode.children[this._activeIndex];Tm.openSubmenu(i,n),e&&(i.activeIndex=-1,i.activateNextItem()),i.activate()}_closeChildMenu(){this._childMenu&&this._childMenu.close()}_startOpenTimer(){0===this._openTimerID&&(this._openTimerID=window.setTimeout((()=>{this._openTimerID=0,this._openChildMenu()}),Tm.TIMER_DELAY))}_startCloseTimer(){0===this._closeTimerID&&(this._closeTimerID=window.setTimeout((()=>{this._closeTimerID=0,this._closeChildMenu()}),Tm.TIMER_DELAY))}_cancelOpenTimer(){0!==this._openTimerID&&(clearTimeout(this._openTimerID),this._openTimerID=0)}_cancelCloseTimer(){0!==this._closeTimerID&&(clearTimeout(this._closeTimerID),this._closeTimerID=0)}static saveWindowData(){Tm.saveWindowData()}}!function(e){class t{renderItem(e){let t=this.createItemClass(e),i=this.createItemDataset(e),n=this.createItemARIA(e);return dm.li({className:t,dataset:i,tabindex:"0",onfocus:e.onfocus,...n},this.renderIcon(e),this.renderLabel(e),this.renderShortcut(e),this.renderSubmenu(e))}renderIcon(e){let t=this.createIconClass(e);return dm.div({className:t},e.item.icon,e.item.iconLabel)}renderLabel(e){let t=this.formatLabel(e);return dm.div({className:"lm-Menu-itemLabel"},t)}renderShortcut(e){let t=this.formatShortcut(e);return dm.div({className:"lm-Menu-itemShortcut"},t)}renderSubmenu(e){return dm.div({className:"lm-Menu-itemSubmenuIcon"})}createItemClass(e){let t="lm-Menu-item";e.item.isEnabled||(t+=" lm-mod-disabled"),e.item.isToggled&&(t+=" lm-mod-toggled"),e.item.isVisible||(t+=" lm-mod-hidden"),e.active&&(t+=" lm-mod-active"),e.collapsed&&(t+=" lm-mod-collapsed");let i=e.item.className;return i&&(t+=` ${i}`),t}createItemDataset(e){let t,{type:i,command:n,dataset:s}=e.item;return t="command"===i?{...s,type:i,command:n}:{...s,type:i},t}createIconClass(e){let t="lm-Menu-itemIcon",i=e.item.iconClass;return i?`${t} ${i}`:t}createItemARIA(e){let t={};switch(e.item.type){case"separator":t.role="presentation";break;case"submenu":t["aria-haspopup"]="true",e.item.isEnabled||(t["aria-disabled"]="true");break;default:e.item.isEnabled||(t["aria-disabled"]="true"),t.role="menuitem"}return t}formatLabel(e){let{label:t,mnemonic:i}=e.item;if(i<0||i>=t.length)return t;let n=t.slice(0,i),s=t.slice(i+1),r=t[i];return[n,dm.span({className:"lm-Menu-itemMnemonic"},r),s]}formatShortcut(e){let t=e.item.keyBinding;return t?lm.formatKeystroke(t.keys):null}}e.Renderer=t,e.defaultRenderer=new t}(Nm||(Nm={})),function(e){e.TIMER_DELAY=300,e.SUBMENU_OVERLAP=3;let t=null,i=0;function n(){return i>0?(i--,t):r()}function s(e){return"separator"!==e.type&&e.isEnabled&&e.isVisible}function r(){return{pageXOffset:window.pageXOffset,pageYOffset:window.pageYOffset,clientWidth:document.documentElement.clientWidth,clientHeight:document.documentElement.clientHeight}}e.saveWindowData=function(){t=r(),i++},e.createNode=function(){let e=document.createElement("div"),t=document.createElement("ul");return t.className="lm-Menu-content",e.appendChild(t),t.setAttribute("role","menu"),e.tabIndex=0,e},e.canActivate=s,e.createItem=function(e,t){return new o(e.commands,t)},e.hitTestMenus=function(e,t,i){for(let n=e;n;n=n.childMenu)if(Af.hitTest(n.node,t,i))return!0;return!1},e.computeCollapsed=function(e){let t=new Array(e.length);jf.RO.fill(t,!1);let i=0,n=e.length;for(;i=0;--s){let i=e[s];if(i.isVisible){if("separator"!==i.type)break;t[s]=!0}}let r=!1;for(;++ia+h&&(t=a+h-f),!r&&i+m>l+c&&(i>l+c?i=l+c-m:i-=m),p.transform=`translate(${Math.max(0,t)}px, ${Math.max(0,i)}px`,p.opacity="1"},e.openSubmenu=function(t,i){const s=n();let r=s.pageXOffset,o=s.pageYOffset,a=s.clientWidth,l=s.clientHeight;Lf.sendMessage(t,fm.Msg.UpdateRequest);let h=l,c=t.node,d=c.style;d.opacity="0",d.maxHeight=`${h}px`,fm.attach(t,document.body);let{width:u,height:p}=c.getBoundingClientRect(),f=Af.boxSizing(t.node),m=i.getBoundingClientRect(),g=m.right-e.SUBMENU_OVERLAP;g+u>r+a&&(g=m.left+e.SUBMENU_OVERLAP-u);let v=m.top-f.borderTop-f.paddingTop;v+p>o+l&&(v=m.bottom+f.borderBottom+f.paddingBottom-p),d.transform=`translate(${Math.max(0,g)}px, ${Math.max(0,v)}px`,d.opacity="1"},e.findMnemonic=function(e,t,i){let n=-1,r=-1,o=!1,a=t.toUpperCase();for(let t=0,l=e.length;t=0&&ui.command===e&&Wf.JSONExt.deepEqual(i.args,t)))||null}return null}}}(Tm||(Tm={})),function(e){function t(e,t){let i=e.rank,n=t.rank;return i!==n?i=this._titles.length)&&(e=-1),this._currentIndex===e)return;let t=this._currentIndex,i=this._titles[t]||null,n=e,s=this._titles[n]||null;this._currentIndex=n,this._previousTitle=i,this.update(),this._currentChanged.emit({previousIndex:t,previousTitle:i,currentIndex:n,currentTitle:s})}get name(){return this._name}set name(e){this._name=e,e?this.contentNode.setAttribute("aria-label",e):this.contentNode.removeAttribute("aria-label")}get orientation(){return this._orientation}set orientation(e){this._orientation!==e&&(this._releaseMouse(),this._orientation=e,this.dataset.orientation=e,this.contentNode.setAttribute("aria-orientation",e))}get addButtonEnabled(){return this._addButtonEnabled}set addButtonEnabled(e){this._addButtonEnabled!==e&&(this._addButtonEnabled=e,e?this.addButtonNode.classList.remove("lm-mod-hidden"):this.addButtonNode.classList.add("lm-mod-hidden"))}get titles(){return this._titles}get contentNode(){return this.node.getElementsByClassName("lm-TabBar-content")[0]}get addButtonNode(){return this.node.getElementsByClassName("lm-TabBar-addButton")[0]}addTab(e){return this.insertTab(this._titles.length,e)}insertTab(e,t){this._releaseMouse();let i=Qm.asTitle(t),n=this._titles.indexOf(i),s=Math.max(0,Math.min(e,this._titles.length));return-1===n?(jf.RO.insert(this._titles,s,i),i.changed.connect(this._onTitleChanged,this),this.update(),this._adjustCurrentForInsert(s,i),i):(s===this._titles.length&&s--,n===s||(jf.RO.move(this._titles,n,s),this.update(),this._adjustCurrentForMove(n,s)),i)}removeTab(e){this.removeTabAt(this._titles.indexOf(e))}removeTabAt(e){this._releaseMouse();let t=jf.RO.removeAt(this._titles,e);t&&(t.changed.disconnect(this._onTitleChanged,this),t===this._previousTitle&&(this._previousTitle=null),this.update(),this._adjustCurrentForRemove(e,t))}clearTabs(){if(0===this._titles.length)return;this._releaseMouse();for(let e of this._titles)e.changed.disconnect(this._onTitleChanged,this);let e=this.currentIndex,t=this.currentTitle;this._currentIndex=-1,this._previousTitle=null,this._titles.length=0,this.update(),-1!==e&&this._currentChanged.emit({previousIndex:e,previousTitle:t,currentIndex:-1,currentTitle:null})}releaseMouse(){this._releaseMouse()}handleEvent(e){switch(e.type){case"pointerdown":this._evtPointerDown(e);break;case"pointermove":this._evtPointerMove(e);break;case"pointerup":this._evtPointerUp(e);break;case"dblclick":this._evtDblClick(e);break;case"keydown":e.eventPhase===Event.CAPTURING_PHASE?this._evtKeyDownCapturing(e):this._evtKeyDown(e);break;case"contextmenu":e.preventDefault(),e.stopPropagation()}}onBeforeAttach(e){this.node.addEventListener("pointerdown",this),this.node.addEventListener("dblclick",this),this.node.addEventListener("keydown",this)}onAfterDetach(e){this.node.removeEventListener("pointerdown",this),this.node.removeEventListener("dblclick",this),this.node.removeEventListener("keydown",this),this._releaseMouse()}onUpdateRequest(e){var t;let i=this._titles,n=this.renderer,s=this.currentTitle,r=new Array(i.length);const o=null!==(t=this._getCurrentTabindex())&&void 0!==t?t:this._currentIndex>-1?this._currentIndex:0;for(let e=0,t=i.length;eAf.hitTest(t,e.clientX,e.clientY)));if(-1===i)return;let n=this.titles[i],s=t[i].querySelector(".lm-TabBar-tabLabel");if(s&&s.contains(e.target)){let e=n.label||"",t=s.innerHTML;s.innerHTML="";let i=document.createElement("input");i.classList.add("lm-TabBar-tabInput"),i.value=e,s.appendChild(i);let r=()=>{i.removeEventListener("blur",r),s.innerHTML=t,this.node.addEventListener("keydown",this)};i.addEventListener("dblclick",(e=>e.stopPropagation())),i.addEventListener("blur",r),i.addEventListener("keydown",(e=>{"Enter"===e.key?(""!==i.value&&(n.label=n.caption=i.value),r()):"Escape"===e.key&&r()})),this.node.removeEventListener("keydown",this),i.select(),i.focus(),s.children.length>0&&s.children[0].focus()}}_evtKeyDownCapturing(e){e.eventPhase===Event.CAPTURING_PHASE&&(e.preventDefault(),e.stopPropagation(),"Escape"===e.key&&this._releaseMouse())}_evtKeyDown(e){var t,i,n;if("Tab"!==e.key&&e.eventPhase!==Event.CAPTURING_PHASE)if("Enter"===e.key||"Spacebar"===e.key||" "===e.key){const t=document.activeElement;if(this.addButtonEnabled&&this.addButtonNode.contains(t))e.preventDefault(),e.stopPropagation(),this._addRequested.emit();else{const i=jf.RO.findFirstIndex(this.contentNode.children,(e=>e.contains(t)));i>=0&&(e.preventDefault(),e.stopPropagation(),this.currentIndex=i)}}else if(Bm.includes(e.key)){const s=[...this.contentNode.children];if(this.addButtonEnabled&&s.push(this.addButtonNode),s.length<=1)return;e.preventDefault(),e.stopPropagation();let r,o=s.indexOf(document.activeElement);-1===o&&(o=this._currentIndex),"ArrowRight"===e.key&&"horizontal"===this._orientation||"ArrowDown"===e.key&&"vertical"===this._orientation?r=null!==(t=s[o+1])&&void 0!==t?t:s[0]:"ArrowLeft"===e.key&&"horizontal"===this._orientation||"ArrowUp"===e.key&&"vertical"===this._orientation?r=null!==(i=s[o-1])&&void 0!==i?i:s[s.length-1]:"Home"===e.key?r=s[0]:"End"===e.key&&(r=s[s.length-1]),r&&(null===(n=s[o])||void 0===n||n.setAttribute("tabindex","-1"),null==r||r.setAttribute("tabindex","0"),r.focus())}}_evtPointerDown(e){if(0!==e.button&&1!==e.button)return;if(this._dragData)return;if(e.target.classList.contains("lm-TabBar-tabInput"))return;let t=this.addButtonEnabled&&this.addButtonNode.contains(e.target),i=this.contentNode.children,n=jf.RO.findFirstIndex(i,(t=>Af.hitTest(t,e.clientX,e.clientY)));if(-1===n&&!t)return;if(e.preventDefault(),e.stopPropagation(),this._dragData={tab:i[n],index:n,pressX:e.clientX,pressY:e.clientY,tabPos:-1,tabSize:-1,tabPressPos:-1,targetIndex:-1,tabLayout:null,contentRect:null,override:null,dragActive:!1,dragAborted:!1,detachRequested:!1},this.document.addEventListener("pointerup",this,!0),1===e.button||t)return;let s=i[n].querySelector(this.renderer.closeIconSelector);s&&s.contains(e.target)||(this.tabsMovable&&(this.document.addEventListener("pointermove",this,!0),this.document.addEventListener("keydown",this,!0),this.document.addEventListener("contextmenu",this,!0)),this.allowDeselect&&this.currentIndex===n?this.currentIndex=-1:this.currentIndex=n,-1!==this.currentIndex&&this._tabActivateRequested.emit({index:this.currentIndex,title:this.currentTitle}))}_evtPointerMove(e){let t=this._dragData;if(!t)return;e.preventDefault(),e.stopPropagation();let i=this.contentNode.children;if(t.dragActive||Qm.dragExceeded(t,e)){if(!t.dragActive){let e=t.tab.getBoundingClientRect();"horizontal"===this._orientation?(t.tabPos=t.tab.offsetLeft,t.tabSize=e.width,t.tabPressPos=t.pressX-e.left):(t.tabPos=t.tab.offsetTop,t.tabSize=e.height,t.tabPressPos=t.pressY-e.top),t.tabPressOffset={x:t.pressX-e.left,y:t.pressY-e.top},t.tabLayout=Qm.snapTabLayout(i,this._orientation),t.contentRect=this.contentNode.getBoundingClientRect(),t.override=Gf.overrideCursor("default"),t.tab.classList.add("lm-mod-dragging"),this.addClass("lm-mod-dragging"),t.dragActive=!0}if(!t.detachRequested&&Qm.detachExceeded(t,e)){t.detachRequested=!0;let n=t.index,s=e.clientX,r=e.clientY,o=i[n],a=this._titles[n];if(this._tabDetachRequested.emit({index:n,title:a,tab:o,clientX:s,clientY:r,offset:t.tabPressOffset}),t.dragAborted)return}Qm.layoutTabs(i,t,e,this._orientation)}}_evtPointerUp(e){if(0!==e.button&&1!==e.button)return;const t=this._dragData;if(!t)return;if(e.preventDefault(),e.stopPropagation(),this.document.removeEventListener("pointermove",this,!0),this.document.removeEventListener("pointerup",this,!0),this.document.removeEventListener("keydown",this,!0),this.document.removeEventListener("contextmenu",this,!0),!t.dragActive){if(this._dragData=null,this.addButtonEnabled&&this.addButtonNode.contains(e.target))return void this._addRequested.emit(void 0);let i=this.contentNode.children,n=jf.RO.findFirstIndex(i,(t=>Af.hitTest(t,e.clientX,e.clientY)));if(n!==t.index)return;let s=this._titles[n];if(!s.closable)return;if(1===e.button)return void this._tabCloseRequested.emit({index:n,title:s});let r=i[n].querySelector(this.renderer.closeIconSelector);return r&&r.contains(e.target)?void this._tabCloseRequested.emit({index:n,title:s}):void 0}if(0!==e.button)return;Qm.finalizeTabPosition(t,this._orientation),t.tab.classList.remove("lm-mod-dragging");let i=Qm.parseTransitionDuration(t.tab);setTimeout((()=>{if(t.dragAborted)return;this._dragData=null,Qm.resetTabPositions(this.contentNode.children,this._orientation),t.override.dispose(),this.removeClass("lm-mod-dragging");let e=t.index,i=t.targetIndex;-1!==i&&e!==i&&(jf.RO.move(this._titles,e,i),this._adjustCurrentForMove(e,i),this._tabMoved.emit({fromIndex:e,toIndex:i,title:this._titles[i]}),Lf.sendMessage(this,fm.Msg.UpdateRequest))}),i)}_releaseMouse(){let e=this._dragData;e&&(this._dragData=null,this.document.removeEventListener("pointermove",this,!0),this.document.removeEventListener("pointerup",this,!0),this.document.removeEventListener("keydown",this,!0),this.document.removeEventListener("contextmenu",this,!0),e.dragAborted=!0,e.dragActive&&(Qm.resetTabPositions(this.contentNode.children,this._orientation),e.override.dispose(),e.tab.classList.remove("lm-mod-dragging"),this.removeClass("lm-mod-dragging")))}_adjustCurrentForInsert(e,t){let i=this.currentTitle,n=this._currentIndex,s=this.insertBehavior;if("select-tab"===s||"select-tab-if-needed"===s&&-1===n)return this._currentIndex=e,this._previousTitle=i,void this._currentChanged.emit({previousIndex:n,previousTitle:i,currentIndex:e,currentTitle:t});n>=e&&this._currentIndex++}_adjustCurrentForMove(e,t){this._currentIndex===e?this._currentIndex=t:this._currentIndex=t?this._currentIndex++:this._currentIndex>e&&this._currentIndex<=t&&this._currentIndex--}_adjustCurrentForRemove(e,t){let i=this._currentIndex,n=this.removeBehavior;if(i===e){if(0===this._titles.length)return this._currentIndex=-1,void this._currentChanged.emit({previousIndex:e,previousTitle:t,currentIndex:-1,currentTitle:null});if("select-tab-after"===n)return this._currentIndex=Math.min(e,this._titles.length-1),void this._currentChanged.emit({previousIndex:e,previousTitle:t,currentIndex:this._currentIndex,currentTitle:this.currentTitle});if("select-tab-before"===n)return this._currentIndex=Math.max(0,e-1),void this._currentChanged.emit({previousIndex:e,previousTitle:t,currentIndex:this._currentIndex,currentTitle:this.currentTitle});if("select-previous-tab"===n)return this._previousTitle?(this._currentIndex=this._titles.indexOf(this._previousTitle),this._previousTitle=null):this._currentIndex=Math.min(e,this._titles.length-1),void this._currentChanged.emit({previousIndex:e,previousTitle:t,currentIndex:this._currentIndex,currentTitle:this.currentTitle});this._currentIndex=-1,this._currentChanged.emit({previousIndex:e,previousTitle:t,currentIndex:-1,currentTitle:null})}else i>e&&this._currentIndex--}_onTitleChanged(e){this.update()}}var Qm,zm,jm,Wm,Vm,Um,Fm,Hm;!function(e){class t{constructor(){this.closeIconSelector=".lm-TabBar-tabCloseIcon",this._tabID=0,this._tabKeys=new WeakMap,this._uuid=++t._nInstance}renderTab(e){let t=e.title.caption,i=this.createTabKey(e),n=i,s=this.createTabStyle(e),r=this.createTabClass(e),o=this.createTabDataset(e),a=this.createTabARIA(e);return e.title.closable?dm.li({id:n,key:i,className:r,title:t,style:s,dataset:o,...a},this.renderIcon(e),this.renderLabel(e),this.renderCloseIcon(e)):dm.li({id:n,key:i,className:r,title:t,style:s,dataset:o,...a},this.renderIcon(e),this.renderLabel(e))}renderIcon(e){const{title:t}=e;let i=this.createIconClass(e);return dm.div({className:i},t.icon,t.iconLabel)}renderLabel(e){return dm.div({className:"lm-TabBar-tabLabel"},e.title.label)}renderCloseIcon(e){return dm.div({className:"lm-TabBar-tabCloseIcon"})}createTabKey(e){let t=this._tabKeys.get(e.title);return void 0===t&&(t=`tab-key-${this._uuid}-${this._tabID++}`,this._tabKeys.set(e.title,t)),t}createTabStyle(e){return{zIndex:`${e.zIndex}`}}createTabClass(e){let t="lm-TabBar-tab";return e.title.className&&(t+=` ${e.title.className}`),e.title.closable&&(t+=" lm-mod-closable"),e.current&&(t+=" lm-mod-current"),t}createTabDataset(e){return e.title.dataset}createTabARIA(e){var t;return{role:"tab","aria-selected":e.current.toString(),tabindex:`${null!==(t=e.tabIndex)&&void 0!==t?t:"-1"}`}}createIconClass(e){let t="lm-TabBar-tabIcon",i=e.title.iconClass;return i?`${t} ${i}`:t}}t._nInstance=0,e.Renderer=t,e.defaultRenderer=new t,e.addButtonSelector=".lm-TabBar-addButton"}($m||($m={})),function(e){e.DRAG_THRESHOLD=5,e.DETACH_THRESHOLD=20,e.createNode=function(){let e=document.createElement("div"),t=document.createElement("ul");t.setAttribute("role","tablist"),t.className="lm-TabBar-content",e.appendChild(t);let i=document.createElement("div");return i.className="lm-TabBar-addButton lm-mod-hidden",i.setAttribute("tabindex","-1"),e.appendChild(i),e},e.asTitle=function(e){return e instanceof pm?e:new pm(e)},e.parseTransitionDuration=function(e){let t=window.getComputedStyle(e);return 1e3*(parseFloat(t.transitionDuration)||0)},e.snapTabLayout=function(e,t){let i=new Array(e.length);for(let n=0,s=e.length;n=e.DRAG_THRESHOLD||s>=e.DRAG_THRESHOLD},e.detachExceeded=function(t,i){let n=t.contentRect;return i.clientX=n.right+e.DETACH_THRESHOLD||i.clientY=n.bottom+e.DETACH_THRESHOLD},e.layoutTabs=function(e,t,i,n){let s,r,o,a;"horizontal"===n?(s=t.pressX,r=i.clientX-t.contentRect.left,o=i.clientX,a=t.contentRect.width):(s=t.pressY,r=i.clientY-t.contentRect.top,o=i.clientY,a=t.contentRect.height);let l=t.index,h=r-t.tabPressPos,c=h+t.tabSize;for(let i=0,r=e.length;i>1);if(it.index&&c>u)r=-t.tabSize-d.margin+"px",l=Math.max(l,i);else if(i===t.index){let e=o-s,i=a-(t.tabPos+t.tabSize);r=`${Math.max(-t.tabPos,Math.min(e,i))}px`}else r="";"horizontal"===n?e[i].style.left=r:e[i].style.top=r}t.targetIndex=l},e.finalizeTabPosition=function(e,t){let i,n;if(i="horizontal"===t?e.contentRect.width:e.contentRect.height,e.targetIndex===e.index)n=0;else if(e.targetIndex>e.index){let t=e.tabLayout[e.targetIndex];n=t.pos+t.size-e.tabSize-e.tabPos}else n=e.tabLayout[e.targetIndex].pos-e.tabPos;let s=i-(e.tabPos+e.tabSize),r=Math.max(-e.tabPos,Math.min(n,s));"horizontal"===t?e.tab.style.left=`${r}px`:e.tab.style.top=`${r}px`},e.resetTabPositions=function(e,t){for(const i of e)"horizontal"===t?i.style.left="":i.style.top=""}}(Qm||(Qm={}));class Xm extends mm{constructor(e){super(),this._spacing=4,this._dirty=!1,this._root=null,this._box=null,this._items=new Map,this.renderer=e.renderer,void 0!==e.spacing&&(this._spacing=Pm.clampDimension(e.spacing)),this._document=e.document||document,this._hiddenMode=void 0!==e.hiddenMode?e.hiddenMode:fm.HiddenMode.Display}dispose(){let e=this[Symbol.iterator]();this._items.forEach((e=>{e.dispose()})),this._box=null,this._root=null,this._items.clear();for(const t of e)t.dispose();super.dispose()}get hiddenMode(){return this._hiddenMode}set hiddenMode(e){if(this._hiddenMode!==e){this._hiddenMode=e;for(const e of this.tabBars())if(e.titles.length>1)for(const t of e.titles)t.owner.hiddenMode=this._hiddenMode}}get spacing(){return this._spacing}set spacing(e){e=Pm.clampDimension(e),this._spacing!==e&&(this._spacing=e,this.parent&&this.parent.fit())}get isEmpty(){return null===this._root}[Symbol.iterator](){return this._root?this._root.iterAllWidgets():(0,jf.cS)()}widgets(){return this._root?this._root.iterUserWidgets():(0,jf.cS)()}selectedWidgets(){return this._root?this._root.iterSelectedWidgets():(0,jf.cS)()}tabBars(){return this._root?this._root.iterTabBars():(0,jf.cS)()}handles(){return this._root?this._root.iterHandles():(0,jf.cS)()}moveHandle(e,t,i){let n=e.classList.contains("lm-mod-hidden");if(!this._root||n)return;let s,r=this._root.findSplitNode(e);r&&(s="horizontal"===r.node.orientation?t-e.offsetLeft:i-e.offsetTop,0!==s&&(r.node.holdSizes(),sm.adjust(r.node.sizers,r.index,s),this.parent&&this.parent.update()))}saveLayout(){return this._root?(this._root.holdAllSizes(),{main:this._root.createConfig()}):{main:null}}restoreLayout(e){let t,i=new Set;t=e.main?zm.normalizeAreaConfig(e.main,i):null;let n=this.widgets(),s=this.tabBars(),r=this.handles();this._root=null;for(const e of n)i.has(e)||(e.parent=null);for(const e of s)e.dispose();for(const e of r)e.parentNode&&e.parentNode.removeChild(e);for(const e of i)e.parent=this.parent;this._root=t?zm.realizeAreaConfig(t,{createTabBar:e=>this._createTabBar(),createHandle:()=>this._createHandle()},this._document):null,this.parent&&(i.forEach((e=>{this.attachWidget(e)})),this.parent.fit())}addWidget(e,t={}){let i=t.ref||null,n=t.mode||"tab-after",s=null;if(this._root&&i&&(s=this._root.findTabNode(i)),i&&!s)throw new Error("Reference widget is not in the layout.");switch(e.parent=this.parent,n){case"tab-after":this._insertTab(e,i,s,!0);break;case"tab-before":this._insertTab(e,i,s,!1);break;case"split-top":this._insertSplit(e,i,s,"vertical",!1);break;case"split-left":this._insertSplit(e,i,s,"horizontal",!1);break;case"split-right":this._insertSplit(e,i,s,"horizontal",!0);break;case"split-bottom":this._insertSplit(e,i,s,"vertical",!0);break;case"merge-top":this._insertSplit(e,i,s,"vertical",!1,!0);break;case"merge-left":this._insertSplit(e,i,s,"horizontal",!1,!0);break;case"merge-right":this._insertSplit(e,i,s,"horizontal",!0,!0);break;case"merge-bottom":this._insertSplit(e,i,s,"vertical",!0,!0)}this.parent&&(this.attachWidget(e),this.parent.fit())}removeWidget(e){this._removeWidget(e),this.parent&&(this.detachWidget(e),this.parent.fit())}hitTestTabAreas(e,t){if(!this._root||!this.parent||!this.parent.isVisible)return null;this._box||(this._box=Af.boxSizing(this.parent.node));let i=this.parent.node.getBoundingClientRect(),n=e-i.left-this._box.borderLeft,s=t-i.top-this._box.borderTop,r=this._root.hitTestTabNodes(n,s);if(!r)return null;let{tabBar:o,top:a,left:l,width:h,height:c}=r,d=this._box.borderLeft+this._box.borderRight,u=this._box.borderTop+this._box.borderBottom;return{tabBar:o,x:n,y:s,top:a,left:l,right:i.width-d-(l+h),bottom:i.height-u-(a+c),width:h,height:c}}init(){super.init();for(const e of this)this.attachWidget(e);for(const e of this.handles())this.parent.node.appendChild(e);this.parent.fit()}attachWidget(e){this.parent.node!==e.node.parentNode&&(this._items.set(e,new gm(e)),this.parent.isAttached&&Lf.sendMessage(e,fm.Msg.BeforeAttach),this.parent.node.appendChild(e.node),this.parent.isAttached&&Lf.sendMessage(e,fm.Msg.AfterAttach))}detachWidget(e){if(this.parent.node!==e.node.parentNode)return;this.parent.isAttached&&Lf.sendMessage(e,fm.Msg.BeforeDetach),this.parent.node.removeChild(e.node),this.parent.isAttached&&Lf.sendMessage(e,fm.Msg.AfterDetach);let t=this._items.get(e);t&&(this._items.delete(e),t.dispose())}onBeforeShow(e){super.onBeforeShow(e),this.parent.update()}onBeforeAttach(e){super.onBeforeAttach(e),this.parent.fit()}onChildShown(e){this.parent.fit()}onChildHidden(e){this.parent.fit()}onResize(e){this.parent.isVisible&&this._update(e.width,e.height)}onUpdateRequest(e){this.parent.isVisible&&this._update(-1,-1)}onFitRequest(e){this.parent.isAttached&&this._fit()}_removeWidget(e){if(!this._root)return;let t=this._root.findTabNode(e);if(!t)return;if(zm.removeAria(e),t.tabBar.titles.length>1)return t.tabBar.removeTab(e.title),void(this._hiddenMode===fm.HiddenMode.Scale&&1==t.tabBar.titles.length&&(t.tabBar.titles[0].owner.hiddenMode=fm.HiddenMode.Display));if(t.tabBar.dispose(),this._root===t)return void(this._root=null);this._root.holdAllSizes();let i=t.parent;t.parent=null;let n=jf.RO.removeFirstOf(i.children,t),s=jf.RO.removeAt(i.handles,n);if(jf.RO.removeAt(i.sizers,n),s.parentNode&&s.parentNode.removeChild(s),i.children.length>1)return void i.syncHandles();let r=i.parent;i.parent=null;let o=i.children[0],a=i.handles[0];if(i.children.length=0,i.handles.length=0,i.sizers.length=0,a.parentNode&&a.parentNode.removeChild(a),this._root===i)return o.parent=null,void(this._root=o);let l=r,h=l.children.indexOf(i);if(o instanceof zm.TabLayoutNode)return o.parent=l,void(l.children[h]=o);let c=jf.RO.removeAt(l.handles,h);jf.RO.removeAt(l.children,h),jf.RO.removeAt(l.sizers,h),c.parentNode&&c.parentNode.removeChild(c);for(let e=0,t=o.children.length;e=i.length)&&(n=0),{type:"tab-area",widgets:i,currentIndex:n}}(t,i):function(t,i){let n=t.orientation,s=[],r=[];for(let o=0,a=t.children.length;o{let l=s(n,i,r),h=t(e.sizes[a]),c=i.createHandle();o.children.push(l),o.handles.push(c),o.sizers.push(h),l.parent=o})),o.syncHandles(),o.normalizeSizes(),o}(r,o,a),l};class i{constructor(e){this.parent=null,this._top=0,this._left=0,this._width=0,this._height=0;let t=new um,i=new um;t.stretch=0,i.stretch=1,this.tabBar=e,this.sizers=[t,i]}get top(){return this._top}get left(){return this._left}get width(){return this._width}get height(){return this._height}*iterAllWidgets(){yield this.tabBar,yield*this.iterUserWidgets()}*iterUserWidgets(){for(const e of this.tabBar.titles)yield e.owner}*iterSelectedWidgets(){let e=this.tabBar.currentTitle;e&&(yield e.owner)}*iterTabBars(){yield this.tabBar}*iterHandles(){}findTabNode(e){return-1!==this.tabBar.titles.indexOf(e.title)?this:null}findSplitNode(e){return null}findFirstTabNode(){return this}hitTestTabNodes(e,t){return e=this._left+this._width||t=this._top+this._height?null:this}createConfig(){return{type:"tab-area",widgets:this.tabBar.titles.map((e=>e.owner)),currentIndex:this.tabBar.currentIndex}}holdAllSizes(){}fit(e,t){let i=0,n=0,s=t.get(this.tabBar),r=this.tabBar.currentTitle,o=r?t.get(r.owner):void 0,[a,l]=this.sizers;return s&&s.fit(),o&&o.fit(),s&&!s.isHidden?(i=Math.max(i,s.minWidth),n+=s.minHeight,a.minSize=s.minHeight,a.maxSize=s.maxHeight):(a.minSize=0,a.maxSize=0),o&&!o.isHidden?(i=Math.max(i,o.minWidth),n+=o.minHeight,l.minSize=o.minHeight,l.maxSize=1/0):(l.minSize=0,l.maxSize=1/0),{minWidth:i,minHeight:n,maxWidth:1/0,maxHeight:1/0}}update(e,t,i,n,s,r){this._top=t,this._left=e,this._width=i,this._height=n;let o=r.get(this.tabBar),a=this.tabBar.currentTitle,l=a?r.get(a.owner):void 0;if(sm.calc(this.sizers,n),o&&!o.isHidden){let n=this.sizers[0].size;o.update(e,t,i,n),t+=n}if(l&&!l.isHidden){let n=this.sizers[1].size;l.update(e,t,i,n)}}}e.TabLayoutNode=i;class n{constructor(e){this.parent=null,this.normalized=!1,this.children=[],this.sizers=[],this.handles=[],this.orientation=e}*iterAllWidgets(){for(const e of this.children)yield*e.iterAllWidgets()}*iterUserWidgets(){for(const e of this.children)yield*e.iterUserWidgets()}*iterSelectedWidgets(){for(const e of this.children)yield*e.iterSelectedWidgets()}*iterTabBars(){for(const e of this.children)yield*e.iterTabBars()}*iterHandles(){yield*this.handles;for(const e of this.children)yield*e.iterHandles()}findTabNode(e){for(let t=0,i=this.children.length;te.createConfig())),sizes:t}}syncHandles(){this.handles.forEach(((e,t)=>{e.setAttribute("data-orientation",this.orientation),t===this.handles.length-1?e.classList.add("lm-mod-hidden"):e.classList.remove("lm-mod-hidden")}))}holdSizes(){for(const e of this.sizers)e.sizeHint=e.size}holdAllSizes(){for(const e of this.children)e.holdAllSizes();this.holdSizes()}normalizeSizes(){let e=this.sizers.length;if(0===e)return;this.holdSizes();let t=this.sizers.reduce(((e,t)=>e+t.sizeHint),0);if(0===t)for(const t of this.sizers)t.size=t.sizeHint=1/e;else for(const e of this.sizers)e.size=e.sizeHint/=t;this.normalized=!0}createNormalizedSizes(){let e=this.sizers.length;if(0===e)return[];let t=this.sizers.map((e=>e.size)),i=t.reduce(((e,t)=>e+t),0);if(0===i)for(let i=t.length-1;i>-1;i--)t[i]=1/e;else for(let e=t.length-1;e>-1;e--)t[e]/=i;return t}fit(e,t){let i="horizontal"===this.orientation,n=Math.max(0,this.children.length-1)*e,s=i?n:0,r=i?0:n;for(let n=0,o=this.children.length;nthis._createTabBar(),createHandle:()=>this._createHandle()};this.layout=new Xm({document:this._document,renderer:t,spacing:e.spacing,hiddenMode:e.hiddenMode}),this.overlay=e.overlay||new Ym.Overlay,this.node.appendChild(this.overlay.node)}dispose(){this._releaseMouse(),this.overlay.hide(0),this._drag&&this._drag.dispose(),super.dispose()}get hiddenMode(){return this.layout.hiddenMode}set hiddenMode(e){this.layout.hiddenMode=e}get layoutModified(){return this._layoutModified}get addRequested(){return this._addRequested}get renderer(){return this.layout.renderer}get spacing(){return this.layout.spacing}set spacing(e){this.layout.spacing=e}get mode(){return this._mode}set mode(e){if(this._mode===e)return;this._mode=e,this.dataset.mode=e;let t=this.layout;switch(e){case"multiple-document":for(const e of t.tabBars())e.show();break;case"single-document":t.restoreLayout(jm.createSingleDocumentConfig(this));break;default:throw"unreachable"}Lf.postMessage(this,jm.LayoutModified)}get tabsMovable(){return this._tabsMovable}set tabsMovable(e){this._tabsMovable=e;for(const t of this.tabBars())t.tabsMovable=e}get tabsConstrained(){return this._tabsConstrained}set tabsConstrained(e){this._tabsConstrained=e}get addButtonEnabled(){return this._addButtonEnabled}set addButtonEnabled(e){this._addButtonEnabled=e;for(const t of this.tabBars())t.addButtonEnabled=e}get isEmpty(){return this.layout.isEmpty}*widgets(){yield*this.layout.widgets()}*selectedWidgets(){yield*this.layout.selectedWidgets()}*tabBars(){yield*this.layout.tabBars()}*handles(){yield*this.layout.handles()}selectWidget(e){let t=(0,jf.sE)(this.tabBars(),(t=>-1!==t.titles.indexOf(e.title)));if(!t)throw new Error("Widget is not contained in the dock panel.");t.currentTitle=e.title}activateWidget(e){this.selectWidget(e),e.activate()}saveLayout(){return this.layout.saveLayout()}restoreLayout(e){this._mode="multiple-document",this.layout.restoreLayout(e),(Rf.IS_EDGE||Rf.IS_IE)&&Lf.flush(),Lf.postMessage(this,jm.LayoutModified)}addWidget(e,t={}){"single-document"===this._mode?this.layout.addWidget(e):this.layout.addWidget(e,t),Lf.postMessage(this,jm.LayoutModified)}processMessage(e){"layout-modified"===e.type?this._layoutModified.emit(void 0):super.processMessage(e)}handleEvent(e){switch(e.type){case"lm-dragenter":this._evtDragEnter(e);break;case"lm-dragleave":this._evtDragLeave(e);break;case"lm-dragover":this._evtDragOver(e);break;case"lm-drop":this._evtDrop(e);break;case"pointerdown":this._evtPointerDown(e);break;case"pointermove":this._evtPointerMove(e);break;case"pointerup":this._evtPointerUp(e);break;case"keydown":this._evtKeyDown(e);break;case"contextmenu":e.preventDefault(),e.stopPropagation()}}onBeforeAttach(e){this.node.addEventListener("lm-dragenter",this),this.node.addEventListener("lm-dragleave",this),this.node.addEventListener("lm-dragover",this),this.node.addEventListener("lm-drop",this),this.node.addEventListener("pointerdown",this)}onAfterDetach(e){this.node.removeEventListener("lm-dragenter",this),this.node.removeEventListener("lm-dragleave",this),this.node.removeEventListener("lm-dragover",this),this.node.removeEventListener("lm-drop",this),this.node.removeEventListener("pointerdown",this),this._releaseMouse()}onChildAdded(e){jm.isGeneratedTabBarProperty.get(e.child)||e.child.addClass("lm-DockPanel-widget")}onChildRemoved(e){jm.isGeneratedTabBarProperty.get(e.child)||(e.child.removeClass("lm-DockPanel-widget"),Lf.postMessage(this,jm.LayoutModified))}_evtDragEnter(e){e.mimeData.hasData("application/vnd.lumino.widget-factory")&&(e.preventDefault(),e.stopPropagation())}_evtDragLeave(e){e.preventDefault(),this._tabsConstrained&&e.source!==this||(e.stopPropagation(),this.overlay.hide(1))}_evtDragOver(e){e.preventDefault(),this._tabsConstrained&&e.source!==this||"invalid"===this._showOverlay(e.clientX,e.clientY)?e.dropAction="none":(e.stopPropagation(),e.dropAction=e.proposedAction)}_evtDrop(e){if(e.preventDefault(),this.overlay.hide(0),"none"===e.proposedAction)return void(e.dropAction="none");let{clientX:t,clientY:i}=e,{zone:n,target:s}=jm.findDropTarget(this,t,i,this._edges);if(this._tabsConstrained&&e.source!==this||"invalid"===n)return void(e.dropAction="none");let r=e.mimeData.getData("application/vnd.lumino.widget-factory");if("function"!=typeof r)return void(e.dropAction="none");let o=r();if(!(o instanceof fm))return void(e.dropAction="none");if(o.contains(this))return void(e.dropAction="none");let a=s?jm.getDropRef(s.tabBar):null;switch(n){case"root-all":this.addWidget(o);break;case"root-top":this.addWidget(o,{mode:"split-top"});break;case"root-left":this.addWidget(o,{mode:"split-left"});break;case"root-right":this.addWidget(o,{mode:"split-right"});break;case"root-bottom":this.addWidget(o,{mode:"split-bottom"});break;case"widget-all":case"widget-tab":this.addWidget(o,{mode:"tab-after",ref:a});break;case"widget-top":this.addWidget(o,{mode:"split-top",ref:a});break;case"widget-left":this.addWidget(o,{mode:"split-left",ref:a});break;case"widget-right":this.addWidget(o,{mode:"split-right",ref:a});break;case"widget-bottom":this.addWidget(o,{mode:"split-bottom",ref:a});break;default:throw"unreachable"}e.dropAction=e.proposedAction,e.stopPropagation(),this.activateWidget(o)}_evtKeyDown(e){e.preventDefault(),e.stopPropagation(),27===e.keyCode&&(this._releaseMouse(),Lf.postMessage(this,jm.LayoutModified))}_evtPointerDown(e){if(0!==e.button)return;let t=this.layout,i=e.target,n=(0,jf.sE)(t.handles(),(e=>e.contains(i)));if(!n)return;e.preventDefault(),e.stopPropagation(),this._document.addEventListener("keydown",this,!0),this._document.addEventListener("pointerup",this,!0),this._document.addEventListener("pointermove",this,!0),this._document.addEventListener("contextmenu",this,!0);let s=n.getBoundingClientRect(),r=e.clientX-s.left,o=e.clientY-s.top,a=window.getComputedStyle(n),l=Gf.overrideCursor(a.cursor,this._document);this._pressData={handle:n,deltaX:r,deltaY:o,override:l}}_evtPointerMove(e){if(!this._pressData)return;e.preventDefault(),e.stopPropagation();let t=this.node.getBoundingClientRect(),i=e.clientX-t.left-this._pressData.deltaX,n=e.clientY-t.top-this._pressData.deltaY;this.layout.moveHandle(this._pressData.handle,i,n)}_evtPointerUp(e){0===e.button&&(e.preventDefault(),e.stopPropagation(),this._releaseMouse(),Lf.postMessage(this,jm.LayoutModified))}_releaseMouse(){this._pressData&&(this._pressData.override.dispose(),this._pressData=null,this._document.removeEventListener("keydown",this,!0),this._document.removeEventListener("pointerup",this,!0),this._document.removeEventListener("pointermove",this,!0),this._document.removeEventListener("contextmenu",this,!0))}_showOverlay(e,t){let i,n,s,r,{zone:o,target:a}=jm.findDropTarget(this,e,t,this._edges);if("invalid"===o)return this.overlay.hide(100),o;let l=Af.boxSizing(this.node),h=this.node.getBoundingClientRect();switch(o){case"root-all":i=l.paddingTop,n=l.paddingLeft,s=l.paddingRight,r=l.paddingBottom;break;case"root-top":i=l.paddingTop,n=l.paddingLeft,s=l.paddingRight,r=h.height*jm.GOLDEN_RATIO;break;case"root-left":i=l.paddingTop,n=l.paddingLeft,s=h.width*jm.GOLDEN_RATIO,r=l.paddingBottom;break;case"root-right":i=l.paddingTop,n=h.width*jm.GOLDEN_RATIO,s=l.paddingRight,r=l.paddingBottom;break;case"root-bottom":i=h.height*jm.GOLDEN_RATIO,n=l.paddingLeft,s=l.paddingRight,r=l.paddingBottom;break;case"widget-all":i=a.top,n=a.left,s=a.right,r=a.bottom;break;case"widget-top":i=a.top,n=a.left,s=a.right,r=a.bottom+a.height/2;break;case"widget-left":i=a.top,n=a.left,s=a.right+a.width/2,r=a.bottom;break;case"widget-right":i=a.top,n=a.left+a.width/2,s=a.right,r=a.bottom;break;case"widget-bottom":i=a.top+a.height/2,n=a.left,s=a.right,r=a.bottom;break;case"widget-tab":{const e=a.tabBar.node.getBoundingClientRect().height;i=a.top,n=a.left,s=a.right,r=a.bottom+a.height-e;break}default:throw"unreachable"}return this.overlay.show({top:i,left:n,right:s,bottom:r}),o}_createTabBar(){let e=this._renderer.createTabBar(this._document);return jm.isGeneratedTabBarProperty.set(e,!0),"single-document"===this._mode&&e.hide(),e.tabsMovable=this._tabsMovable,e.allowDeselect=!1,e.addButtonEnabled=this._addButtonEnabled,e.removeBehavior="select-previous-tab",e.insertBehavior="select-tab-if-needed",e.tabMoved.connect(this._onTabMoved,this),e.currentChanged.connect(this._onCurrentChanged,this),e.tabCloseRequested.connect(this._onTabCloseRequested,this),e.tabDetachRequested.connect(this._onTabDetachRequested,this),e.tabActivateRequested.connect(this._onTabActivateRequested,this),e.addRequested.connect(this._onTabAddRequested,this),e}_createHandle(){return this._renderer.createHandle()}_onTabMoved(){Lf.postMessage(this,jm.LayoutModified)}_onCurrentChanged(e,t){let{previousTitle:i,currentTitle:n}=t;i&&i.owner.hide(),n&&n.owner.show(),(Rf.IS_EDGE||Rf.IS_IE)&&Lf.flush(),Lf.postMessage(this,jm.LayoutModified)}_onTabAddRequested(e){this._addRequested.emit(e)}_onTabActivateRequested(e,t){t.title.owner.activate()}_onTabCloseRequested(e,t){t.title.owner.close()}_onTabDetachRequested(e,t){if(this._drag)return;e.releaseMouse();let{title:i,tab:n,clientX:s,clientY:r,offset:o}=t,a=new Wf.MimeData;a.setData("application/vnd.lumino.widget-factory",(()=>i.owner));let l=n.cloneNode(!0);o&&(l.style.top=`-${o.y}px`,l.style.left=`-${o.x}px`),this._drag=new Gf({document:this._document,mimeData:a,dragImage:l,proposedAction:"move",supportedActions:"move",source:this}),n.classList.add("lm-mod-hidden"),this._drag.start(s,r).then((()=>{this._drag=null,n.classList.remove("lm-mod-hidden")}))}}!function(e){e.Overlay=class{constructor(){this._timer=-1,this._hidden=!0,this.node=document.createElement("div"),this.node.classList.add("lm-DockPanel-overlay"),this.node.classList.add("lm-mod-hidden"),this.node.style.position="absolute",this.node.style.contain="strict"}show(e){let t=this.node.style;t.top=`${e.top}px`,t.left=`${e.left}px`,t.right=`${e.right}px`,t.bottom=`${e.bottom}px`,clearTimeout(this._timer),this._timer=-1,this._hidden&&(this._hidden=!1,this.node.classList.remove("lm-mod-hidden"))}hide(e){if(!this._hidden)return e<=0?(clearTimeout(this._timer),this._timer=-1,this._hidden=!0,void this.node.classList.add("lm-mod-hidden")):void(-1===this._timer&&(this._timer=window.setTimeout((()=>{this._timer=-1,this._hidden=!0,this.node.classList.add("lm-mod-hidden")}),e)))}};class t{createTabBar(e){let t=new $m({document:e});return t.addClass("lm-DockPanel-tabBar"),t}createHandle(){let e=document.createElement("div");return e.className="lm-DockPanel-handle",e}}e.Renderer=t,e.defaultRenderer=new t}(Ym||(Ym={})),function(e){e.GOLDEN_RATIO=.618,e.DEFAULT_EDGES={top:12,right:40,bottom:40,left:40},e.LayoutModified=new Ff("layout-modified"),e.isGeneratedTabBarProperty=new Xf.AttachedProperty({name:"isGeneratedTabBar",create:()=>!1}),e.createSingleDocumentConfig=function(e){if(e.isEmpty)return{main:null};let t=Array.from(e.widgets()),i=e.selectedWidgets().next().value,n=i?t.indexOf(i):-1;return{main:{type:"tab-area",widgets:t,currentIndex:n}}},e.findDropTarget=function(e,t,i,n){if(!Af.hitTest(e.node,t,i))return{zone:"invalid",target:null};let s=e.layout;if(s.isEmpty)return{zone:"root-all",target:null};if("multiple-document"===e.mode){let s=e.node.getBoundingClientRect(),r=t-s.left+1,o=i-s.top+1,a=s.right-t,l=s.bottom-i;switch(Math.min(o,a,l,r)){case o:if(od&&l>d&&a>u&&h>u)return{zone:"widget-all",target:r};switch(o/=d,a/=u,l/=d,h/=u,Math.min(o,a,l,h)){case o:c="widget-left";break;case a:c="widget-top";break;case l:c="widget-right";break;case h:c="widget-bottom";break;default:throw"unreachable"}return{zone:c,target:r}},e.getDropRef=function(e){return 0===e.titles.length?null:e.currentTitle?e.currentTitle.owner:e.titles[e.titles.length-1].owner}}(jm||(jm={}));class Gm{constructor(){this._counter=0,this._widgets=[],this._activeWidget=null,this._currentWidget=null,this._numbers=new Map,this._nodes=new Map,this._activeChanged=new zf.Signal(this),this._currentChanged=new zf.Signal(this)}dispose(){if(!(this._counter<0)){this._counter=-1,zf.Signal.clearData(this);for(const e of this._widgets)e.node.removeEventListener("focus",this,!0),e.node.removeEventListener("blur",this,!0);this._activeWidget=null,this._currentWidget=null,this._nodes.clear(),this._numbers.clear(),this._widgets.length=0}}get currentChanged(){return this._currentChanged}get activeChanged(){return this._activeChanged}get isDisposed(){return this._counter<0}get currentWidget(){return this._currentWidget}get activeWidget(){return this._activeWidget}get widgets(){return this._widgets}focusNumber(e){let t=this._numbers.get(e);return void 0===t?-1:t}has(e){return this._numbers.has(e)}add(e){if(this._numbers.has(e))return;let t=e.node.contains(document.activeElement),i=t?this._counter++:-1;this._widgets.push(e),this._numbers.set(e,i),this._nodes.set(e.node,e),e.node.addEventListener("focus",this,!0),e.node.addEventListener("blur",this,!0),e.disposed.connect(this._onWidgetDisposed,this),t&&this._setWidgets(e,e)}remove(e){if(!this._numbers.has(e))return;if(e.disposed.disconnect(this._onWidgetDisposed,this),e.node.removeEventListener("focus",this,!0),e.node.removeEventListener("blur",this,!0),jf.RO.removeFirstOf(this._widgets,e),this._nodes.delete(e.node),this._numbers.delete(e),this._currentWidget!==e)return;let t=this._widgets.filter((e=>-1!==this._numbers.get(e))),i=(0,jf.Fp)(t,((e,t)=>this._numbers.get(e)-this._numbers.get(t)))||null;this._setWidgets(i,null)}handleEvent(e){switch(e.type){case"focus":this._evtFocus(e);break;case"blur":this._evtBlur(e)}}_setWidgets(e,t){let i=this._currentWidget;this._currentWidget=e;let n=this._activeWidget;this._activeWidget=t,i!==e&&this._currentChanged.emit({oldValue:i,newValue:e}),n!==t&&this._activeChanged.emit({oldValue:n,newValue:t})}_evtFocus(e){let t=this._nodes.get(e.currentTarget);t!==this._currentWidget&&this._numbers.set(t,this._counter++),this._setWidgets(t,t)}_evtBlur(e){let t=this._nodes.get(e.currentTarget),i=e.relatedTarget;i&&(t.node.contains(i)||(0,jf.sE)(this._widgets,(e=>e.node.contains(i))))||this._setWidgets(this._currentWidget,null)}_onWidgetDisposed(e){this.remove(e)}}class Zm extends mm{constructor(e={}){super(e),this._dirty=!1,this._rowSpacing=4,this._columnSpacing=4,this._items=[],this._rowStarts=[],this._columnStarts=[],this._rowSizers=[new um],this._columnSizers=[new um],this._box=null,void 0!==e.rowCount&&Wm.reallocSizers(this._rowSizers,e.rowCount),void 0!==e.columnCount&&Wm.reallocSizers(this._columnSizers,e.columnCount),void 0!==e.rowSpacing&&(this._rowSpacing=Wm.clampValue(e.rowSpacing)),void 0!==e.columnSpacing&&(this._columnSpacing=Wm.clampValue(e.columnSpacing))}dispose(){for(const e of this._items){let t=e.widget;e.dispose(),t.dispose()}this._box=null,this._items.length=0,this._rowStarts.length=0,this._rowSizers.length=0,this._columnStarts.length=0,this._columnSizers.length=0,super.dispose()}get rowCount(){return this._rowSizers.length}set rowCount(e){e!==this.rowCount&&(Wm.reallocSizers(this._rowSizers,e),this.parent&&this.parent.fit())}get columnCount(){return this._columnSizers.length}set columnCount(e){e!==this.columnCount&&(Wm.reallocSizers(this._columnSizers,e),this.parent&&this.parent.fit())}get rowSpacing(){return this._rowSpacing}set rowSpacing(e){e=Wm.clampValue(e),this._rowSpacing!==e&&(this._rowSpacing=e,this.parent&&this.parent.fit())}get columnSpacing(){return this._columnSpacing}set columnSpacing(e){e=Wm.clampValue(e),this._columnSpacing!==e&&(this._columnSpacing=e,this.parent&&this.parent.fit())}rowStretch(e){let t=this._rowSizers[e];return t?t.stretch:-1}setRowStretch(e,t){let i=this._rowSizers[e];i&&(t=Wm.clampValue(t),i.stretch!==t&&(i.stretch=t,this.parent&&this.parent.update()))}columnStretch(e){let t=this._columnSizers[e];return t?t.stretch:-1}setColumnStretch(e,t){let i=this._columnSizers[e];i&&(t=Wm.clampValue(t),i.stretch!==t&&(i.stretch=t,this.parent&&this.parent.update()))}*[Symbol.iterator](){for(const e of this._items)yield e.widget}addWidget(e){-1===jf.RO.findFirstIndex(this._items,(t=>t.widget===e))&&(this._items.push(new gm(e)),this.parent&&this.attachWidget(e))}removeWidget(e){let t=jf.RO.findFirstIndex(this._items,(t=>t.widget===e));if(-1===t)return;let i=jf.RO.removeAt(this._items,t);this.parent&&this.detachWidget(e),i.dispose()}init(){super.init();for(const e of this)this.attachWidget(e)}attachWidget(e){this.parent.isAttached&&Lf.sendMessage(e,fm.Msg.BeforeAttach),this.parent.node.appendChild(e.node),this.parent.isAttached&&Lf.sendMessage(e,fm.Msg.AfterAttach),this.parent.fit()}detachWidget(e){this.parent.isAttached&&Lf.sendMessage(e,fm.Msg.BeforeDetach),this.parent.node.removeChild(e.node),this.parent.isAttached&&Lf.sendMessage(e,fm.Msg.AfterDetach),this.parent.fit()}onBeforeShow(e){super.onBeforeShow(e),this.parent.update()}onBeforeAttach(e){super.onBeforeAttach(e),this.parent.fit()}onChildShown(e){this.parent.fit()}onChildHidden(e){this.parent.fit()}onResize(e){this.parent.isVisible&&this._update(e.width,e.height)}onUpdateRequest(e){this.parent.isVisible&&this._update(-1,-1)}onFitRequest(e){this.parent.isAttached&&this._fit()}_fit(){for(let e=0,t=this.rowCount;e!e.isHidden));for(let t=0,i=e.length;t({row:0,column:0,rowSpan:1,columnSpan:1}),changed:function(e){e.parent&&e.parent.layout instanceof Zm&&e.parent.fit()}}),e.normalizeConfig=function(e){return{row:Math.max(0,Math.floor(e.row||0)),column:Math.max(0,Math.floor(e.column||0)),rowSpan:Math.max(1,Math.floor(e.rowSpan||0)),columnSpan:Math.max(1,Math.floor(e.columnSpan||0))}},e.clampValue=function(e){return Math.max(0,Math.floor(e))},e.rowSpanCmp=function(t,i){let n=e.cellConfigProperty.get(t.widget),s=e.cellConfigProperty.get(i.widget);return n.rowSpan-s.rowSpan},e.columnSpanCmp=function(t,i){let n=e.cellConfigProperty.get(t.widget),s=e.cellConfigProperty.get(i.widget);return n.columnSpan-s.columnSpan},e.reallocSizers=function(e,t){for(t=Math.max(1,Math.floor(t));e.lengtht&&(e.length=t)},e.distributeMin=function(e,t,i,n){if(i=n)return;let r=(n-s)/(i-t+1);for(let n=t;n<=i;++n)e[n].minSize+=r}}(Wm||(Wm={}));class Km extends fm{constructor(e={}){super({node:Vm.createNode()}),this._activeIndex=-1,this._tabFocusIndex=0,this._menus=[],this._childMenu=null,this._overflowMenu=null,this._menuItemSizes=[],this._overflowIndex=-1,this.addClass("lm-MenuBar"),this.setFlag(fm.Flag.DisallowLayout),this.renderer=e.renderer||Km.defaultRenderer,this._forceItemsPosition=e.forceItemsPosition||{forceX:!0,forceY:!0},this._overflowMenuOptions=e.overflowMenuOptions||{isVisible:!0}}dispose(){this._closeChildMenu(),this._menus.length=0,super.dispose()}get childMenu(){return this._childMenu}get overflowIndex(){return this._overflowIndex}get overflowMenu(){return this._overflowMenu}get contentNode(){return this.node.getElementsByClassName("lm-MenuBar-content")[0]}get activeMenu(){return this._menus[this._activeIndex]||null}set activeMenu(e){this.activeIndex=e?this._menus.indexOf(e):-1}get activeIndex(){return this._activeIndex}set activeIndex(e){(e<0||e>=this._menus.length)&&(e=-1),this._activeIndex!==e&&(this._activeIndex=e,-1!==e&&(this._tabFocusIndex=e),this._activeIndex>=0&&this.contentNode.childNodes[this._activeIndex]&&this.contentNode.childNodes[this._activeIndex].focus(),this.update())}get menus(){return this._menus}openActiveMenu(){-1!==this._activeIndex&&(this._openChildMenu(),this._childMenu&&(this._childMenu.activeIndex=-1,this._childMenu.activateNextItem()))}addMenu(e,t=!0){this.insertMenu(this._menus.length,e,t)}insertMenu(e,t,i=!0){this._closeChildMenu();let n=this._menus.indexOf(t),s=Math.max(0,Math.min(e,this._menus.length));if(-1===n)return jf.RO.insert(this._menus,s,t),t.addClass("lm-MenuBar-menu"),t.aboutToClose.connect(this._onMenuAboutToClose,this),t.menuRequested.connect(this._onMenuMenuRequested,this),t.title.changed.connect(this._onTitleChanged,this),void(i&&this.update());s===this._menus.length&&s--,n!==s&&(jf.RO.move(this._menus,n,s),i&&this.update())}removeMenu(e,t=!0){this.removeMenuAt(this._menus.indexOf(e),t)}removeMenuAt(e,t=!0){this._closeChildMenu();let i=jf.RO.removeAt(this._menus,e);i&&(i.aboutToClose.disconnect(this._onMenuAboutToClose,this),i.menuRequested.disconnect(this._onMenuMenuRequested,this),i.title.changed.disconnect(this._onTitleChanged,this),i.removeClass("lm-MenuBar-menu"),t&&this.update())}clearMenus(){if(0!==this._menus.length){this._closeChildMenu();for(let e of this._menus)e.aboutToClose.disconnect(this._onMenuAboutToClose,this),e.menuRequested.disconnect(this._onMenuMenuRequested,this),e.title.changed.disconnect(this._onTitleChanged,this),e.removeClass("lm-MenuBar-menu");this._menus.length=0,this.update()}}handleEvent(e){switch(e.type){case"keydown":this._evtKeyDown(e);break;case"mousedown":this._evtMouseDown(e);break;case"mousemove":this._evtMouseMove(e);break;case"mouseleave":this._evtMouseLeave(e);break;case"contextmenu":e.preventDefault(),e.stopPropagation()}}onBeforeAttach(e){this.node.addEventListener("keydown",this),this.node.addEventListener("mousedown",this),this.node.addEventListener("mousemove",this),this.node.addEventListener("mouseleave",this),this.node.addEventListener("contextmenu",this)}onAfterDetach(e){this.node.removeEventListener("keydown",this),this.node.removeEventListener("mousedown",this),this.node.removeEventListener("mousemove",this),this.node.removeEventListener("mouseleave",this),this.node.removeEventListener("contextmenu",this),this._closeChildMenu()}onActivateRequest(e){this.isAttached&&(this.activeIndex=0)}onResize(e){this.update(),super.onResize(e)}onUpdateRequest(e){var t;let i=this._menus,n=this.renderer,s=this._activeIndex,r=this._tabFocusIndex>=0&&this._tabFocusIndex-1?this._overflowIndex:i.length,a=0,l=!1;o=null!==this._overflowMenu?o-1:o;let h=new Array(o);for(let e=0;e{this.activeIndex=e}}),a+=this._menuItemSizes[e],i[e].title.label===this._overflowMenuOptions.title&&(l=!0,o--);if(this._overflowMenuOptions.isVisible)if(this._overflowIndex>-1&&!l){if(null===this._overflowMenu){const e=null!==(t=this._overflowMenuOptions.title)&&void 0!==t?t:"...";this._overflowMenu=new Nm({commands:new lm}),this._overflowMenu.title.label=e,this._overflowMenu.title.mnemonic=0,this.addMenu(this._overflowMenu,!1)}for(let e=i.length-2;e>=o;e--){const t=this.menus[e];t.title.mnemonic=0,this._overflowMenu.insertItem(0,{type:"submenu",submenu:t}),this.removeMenu(t,!1)}h[o]=n.renderItem({title:this._overflowMenu.title,active:o===s&&0!==i[o].items.length,tabbable:o===r,onfocus:()=>{this.activeIndex=o}}),o++}else if(null!==this._overflowMenu){let e=this._overflowMenu.items,t=this.node.offsetWidth,s=this._overflowMenu.items.length;for(let l=0;lthis._menuItemSizes[s]){let t=e[0].submenu;this._overflowMenu.removeItemAt(0),this.insertMenu(o,t,!1),h[o]=n.renderItem({title:t.title,active:!1,tabbable:o===r,onfocus:()=>{this.activeIndex=o}}),o++}}0===this._overflowMenu.items.length&&(this.removeMenu(this._overflowMenu,!1),h.pop(),this._overflowMenu=null,this._overflowIndex=-1)}im.render(h,this.contentNode),this._updateOverflowIndex()}_updateOverflowIndex(){if(!this._overflowMenuOptions.isVisible)return;const e=this.contentNode.childNodes;let t=this.node.offsetWidth,i=0,n=-1,s=e.length;if(0==this._menuItemSizes.length)for(let r=0;rt&&-1===n&&(n=r)}else for(let e=0;et){n=e;break}this._overflowIndex=n}_evtKeyDown(e){let t=e.keyCode;if(9===t)return void(this.activeIndex=-1);if(e.preventDefault(),e.stopPropagation(),13===t||32===t||38===t||40===t)return void this.openActiveMenu();if(27===t)return this._closeChildMenu(),this.activeIndex=-1,void this.node.blur();if(37===t){let e=this._activeIndex,t=this._menus.length;return void(this.activeIndex=0===e?t-1:e-1)}if(39===t){let e=this._activeIndex,t=this._menus.length;return void(this.activeIndex=e===t-1?0:e+1)}let i=Zf().keyForKeydownEvent(e);if(!i)return;let n=this._activeIndex+1,s=Vm.findMnemonic(this._menus,i,n);-1===s.index||s.multiple?-1!==s.index?this.activeIndex=s.index:-1!==s.auto&&(this.activeIndex=s.auto):(this.activeIndex=s.index,this.openActiveMenu())}_evtMouseDown(e){if(!Af.hitTest(this.node,e.clientX,e.clientY))return;e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation();let t=jf.RO.findFirstIndex(this.contentNode.children,(t=>Af.hitTest(t,e.clientX,e.clientY)));if(-1!==t){if(0===e.button)if(this._childMenu)this._closeChildMenu(),this.activeIndex=t;else{const e=this._positionForMenu(t);Nm.saveWindowData(),this.activeIndex=t,this._openChildMenu(e)}}else this._closeChildMenu()}_evtMouseMove(e){let t=jf.RO.findFirstIndex(this.contentNode.children,(t=>Af.hitTest(t,e.clientX,e.clientY)));if(t===this._activeIndex)return;if(-1===t&&this._childMenu)return;const i=t>=0&&this._childMenu?this._positionForMenu(t):null;Nm.saveWindowData(),this.activeIndex=t,i&&this._openChildMenu(i)}_positionForMenu(e){let t=this.contentNode.children[e],{left:i,bottom:n}=t.getBoundingClientRect();return{top:n,left:i}}_evtMouseLeave(e){this._childMenu||(this.activeIndex=-1)}_openChildMenu(e={}){let t=this.activeMenu;if(!t)return void this._closeChildMenu();let i=this._childMenu;if(i===t)return;this._childMenu=t,i?i.close():document.addEventListener("mousedown",this,!0),Lf.sendMessage(this,fm.Msg.UpdateRequest);let{left:n,top:s}=e;void 0!==n&&void 0!==s||({left:n,top:s}=this._positionForMenu(this._activeIndex)),i||this.addClass("lm-mod-active"),t.items.length>0&&t.open(n,s,this._forceItemsPosition)}_closeChildMenu(){if(!this._childMenu)return;this.removeClass("lm-mod-active"),document.removeEventListener("mousedown",this,!0);let e=this._childMenu;this._childMenu=null,e.close(),this.activeIndex=-1}_onMenuAboutToClose(e){e===this._childMenu&&(this.removeClass("lm-mod-active"),document.removeEventListener("mousedown",this,!0),this._childMenu=null,this.activeIndex=-1)}_onMenuMenuRequested(e,t){if(e!==this._childMenu)return;let i=this._activeIndex,n=this._menus.length;switch(t){case"next":this.activeIndex=i===n-1?0:i+1;break;case"previous":this.activeIndex=0===i?n-1:i-1}this.openActiveMenu()}_onTitleChanged(){this.update()}}!function(e){class t{renderItem(e){let t=this.createItemClass(e),i=this.createItemDataset(e),n=this.createItemARIA(e);return dm.li({className:t,dataset:i,tabindex:e.tabbable?"0":"-1",onfocus:e.onfocus,...n},this.renderIcon(e),this.renderLabel(e))}renderIcon(e){let t=this.createIconClass(e);return dm.div({className:t},e.title.icon,e.title.iconLabel)}renderLabel(e){let t=this.formatLabel(e);return dm.div({className:"lm-MenuBar-itemLabel"},t)}createItemClass(e){let t="lm-MenuBar-item";return e.title.className&&(t+=` ${e.title.className}`),e.active&&(t+=" lm-mod-active"),t}createItemDataset(e){return e.title.dataset}createItemARIA(e){return{role:"menuitem","aria-haspopup":"true"}}createIconClass(e){let t="lm-MenuBar-itemIcon",i=e.title.iconClass;return i?`${t} ${i}`:t}formatLabel(e){let{label:t,mnemonic:i}=e.title;if(i<0||i>=t.length)return t;let n=t.slice(0,i),s=t.slice(i+1),r=t[i];return[n,dm.span({className:"lm-MenuBar-itemMnemonic"},r),s]}}e.Renderer=t,e.defaultRenderer=new t}(Km||(Km={})),function(e){e.createNode=function(){let e=document.createElement("div"),t=document.createElement("ul");return t.className="lm-MenuBar-content",e.appendChild(t),t.setAttribute("role","menubar"),e},e.findMnemonic=function(e,t,i){let n=-1,s=-1,r=!1,o=t.toUpperCase();for(let t=0,a=e.length;t=0&&c1&&this.widgets.forEach((e=>{e.hiddenMode=this._hiddenMode})))}dispose(){for(const e of this._items)e.dispose();this._box=null,this._items.length=0,super.dispose()}attachWidget(e,t){this._hiddenMode===fm.HiddenMode.Scale&&this._items.length>0?(1===this._items.length&&(this.widgets[0].hiddenMode=fm.HiddenMode.Scale),t.hiddenMode=fm.HiddenMode.Scale):t.hiddenMode=fm.HiddenMode.Display,jf.RO.insert(this._items,e,new gm(t)),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.BeforeAttach),this.parent.node.appendChild(t.node),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.AfterAttach),this.parent.fit()}moveWidget(e,t,i){jf.RO.move(this._items,e,t),this.parent.update()}detachWidget(e,t){let i=jf.RO.removeAt(this._items,e);this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.BeforeDetach),this.parent.node.removeChild(t.node),this.parent.isAttached&&Lf.sendMessage(t,fm.Msg.AfterDetach),i.widget.node.style.zIndex="",this._hiddenMode===fm.HiddenMode.Scale&&(t.hiddenMode=fm.HiddenMode.Display,1===this._items.length&&(this._items[0].widget.hiddenMode=fm.HiddenMode.Display)),i.dispose(),this.parent.fit()}onBeforeShow(e){super.onBeforeShow(e),this.parent.update()}onBeforeAttach(e){super.onBeforeAttach(e),this.parent.fit()}onChildShown(e){this.parent.fit()}onChildHidden(e){this.parent.fit()}onResize(e){this.parent.isVisible&&this._update(e.width,e.height)}onUpdateRequest(e){this.parent.isVisible&&this._update(-1,-1)}onFitRequest(e){this.parent.isAttached&&this._fit()}_fit(){let e=0,t=0;for(let i=0,n=this._items.length;i{t.newValue!==this.currentWidget&&(i.current=t.newValue)}),this),i.added.connect(((e,t)=>{this._widgetAdded.emit(t)}),this),i.currentChanged.connect(((e,n)=>{null===n&&t.currentWidget?i.current=t.currentWidget:(this.onCurrentChanged(n),this._currentChanged.emit(n))}),this),i.updated.connect(((e,t)=>{this._widgetUpdated.emit(t)}),this)}get currentChanged(){return this._currentChanged}get currentWidget(){return this._pool.current||null}get restored(){return this._deferred?Promise.resolve():this._pool.restored}get size(){return this._pool.size}get widgetAdded(){return this._widgetAdded}get widgetUpdated(){return this._widgetUpdated}async add(e){this._focusTracker.add(e),await this._pool.add(e),this._focusTracker.activeWidget||(this._pool.current=e)}get isDisposed(){return this._isDisposed}dispose(){this.isDisposed||(this._isDisposed=!0,this._pool.dispose(),this._focusTracker.dispose(),zf.Signal.clearData(this))}find(e){return this._pool.find(e)}forEach(e){return this._pool.forEach(e)}filter(e){return this._pool.filter(e)}inject(e){return this._pool.inject(e)}has(e){return this._pool.has(e)}async restore(e){const t=this._deferred;return t?(this._deferred=null,this._pool.restore(t)):e?this._pool.restore(e):void console.warn("No options provided to restore the tracker.")}defer(e){this._deferred=e}async save(e){return this._pool.save(e)}onCurrentChanged(e){}}function tg(e){return e.replace("-","_")}class ig{constructor(e){e=e||{},this._defaults={domain:"messages",locale:document.documentElement.getAttribute("lang")||"en",pluralFunc:function(e){return{nplurals:2,plural:1!=e?1:0}},contextDelimiter:String.fromCharCode(4),stringsPrefix:""},this._locale=(e.locale||this._defaults.locale).replace("_","-"),this._domain=tg(e.domain||this._defaults.domain),this._contextDelimiter=e.contextDelimiter||this._defaults.contextDelimiter,this._stringsPrefix=e.stringsPrefix||this._defaults.stringsPrefix,this._pluralFuncs={},this._dictionary={},this._pluralForms={},e.messages&&(this._dictionary[this._domain]={},this._dictionary[this._domain][this._locale]=e.messages),e.pluralForms&&(this._pluralForms[this._locale]=e.pluralForms)}setContextDelimiter(e){this._contextDelimiter=e}getContextDelimiter(){return this._contextDelimiter}setLocale(e){this._locale=e.replace("_","-")}getLocale(){return this._locale}setDomain(e){this._domain=tg(e)}getDomain(){return this._domain}setStringsPrefix(e){this._stringsPrefix=e}getStringsPrefix(){return this._stringsPrefix}static strfmt(e,...t){return e.replace(/%%/g,"%% ").replace(/%(\d+)/g,(function(e,i){return t[i-1]})).replace(/%% /g,"%")}loadJSON(e,t){if(!e[""]||!e[""].language||!e[""].pluralForms)throw new Error(`Wrong jsonData, it must have an empty key ("") with "language" and "pluralForms" information: ${e}`);t=tg(t);let i=e[""],n=JSON.parse(JSON.stringify(e));delete n[""],this.setMessages(t||this._defaults.domain,i.language,n,i.pluralForms)}__(e,...t){return this.gettext(e,...t)}_n(e,t,i,...n){return this.ngettext(e,t,i,...n)}_p(e,t,...i){return this.pgettext(e,t,...i)}_np(e,t,i,n,...s){return this.npgettext(e,t,i,n,...s)}gettext(e,...t){return this.dcnpgettext("","",e,"",0,...t)}ngettext(e,t,i,...n){return this.dcnpgettext("","",e,t,i,...n)}pgettext(e,t,...i){return this.dcnpgettext("",e,t,"",0,...i)}npgettext(e,t,i,n,...s){return this.dcnpgettext("",e,t,i,n,...s)}dcnpgettext(e,t,i,n,s,...r){let o;e=tg(e)||this._domain;let a=t?t+this._contextDelimiter+i:i,l={pluralForm:!1},h=!1,c=this._locale,d=this.expandLocale(this._locale);for(let t in d)if(c=d[t],h=this._dictionary[e]&&this._dictionary[e][c]&&this._dictionary[e][c][a],h=n?h&&this._dictionary[e][c][a].length>1:h&&1==this._dictionary[e][c][a].length,h){l.locale=c;break}if(h?o=this._dictionary[e][c][a]:(o=[i],l.pluralFunc=this._defaults.pluralFunc),!n)return this.t(o,s,l,...r);l.pluralForm=!0;let u=h?o:[i,n];return this.t(u,s,l,...r)}expandLocale(e){let t=[e],i=e.lastIndexOf("-");for(;i>0;)e=e.slice(0,i),t.push(e),i=e.lastIndexOf("-");return t}getPluralFunc(e){if(!new RegExp("^\\s*nplurals\\s*=\\s*[0-9]+\\s*;\\s*plural\\s*=\\s*(?:\\s|[-\\?\\|&=!<>+*/%:;n0-9_()])+").test(e))throw new Error(ig.strfmt('The plural form "%1" is not valid',e));return new Function("n","let plural, nplurals; "+e+" return { nplurals: nplurals, plural: (plural === true ? 1 : (plural ? plural : 0)) };")}removeContext(e){return-1!==e.indexOf(this._contextDelimiter)?e.split(this._contextDelimiter)[1]:e}t(e,t,i,...n){if(!i.pluralForm)return this._stringsPrefix+ig.strfmt(this.removeContext(e[0]),...n);let s;return i.pluralFunc?s=i.pluralFunc(t):(this._pluralFuncs[i.locale||""]||(this._pluralFuncs[i.locale||""]=this.getPluralFunc(this._pluralForms[i.locale||""])),s=this._pluralFuncs[i.locale||""](t)),(void 0===!s.plural||s.plural>s.nplurals||e.length<=s.plural)&&(s.plural=0),this._stringsPrefix+ig.strfmt(this.removeContext(e[s.plural]),...[t].concat(n))}setMessages(e,t,i,n){e=tg(e),n&&(this._pluralForms[t]=n),this._dictionary[e]||(this._dictionary[e]={}),this._dictionary[e][t]=i}}const ng=new class{constructor(e){this.languageCode="en",this._languageBundle=e}load(e){return this._languageBundle}}(new class{__(e,...t){return this.gettext(e,...t)}_n(e,t,i,...n){return this.ngettext(e,t,i,...n)}_p(e,t,...i){return this.pgettext(e,t,...i)}_np(e,t,i,n,...s){return this.npgettext(e,t,i,n,...s)}gettext(e,...t){return ig.strfmt(e,...t)}ngettext(e,t,i,...n){return ig.strfmt(1==i?e:t,...[i].concat(n))}pgettext(e,t,...i){return ig.strfmt(t,...i)}npgettext(e,t,i,n,...s){return this.ngettext(t,i,n,...s)}dcnpgettext(e,t,i,n,s,...r){return this.ngettext(i,n,s,...r)}});new Wf.Token("@jupyterlab/translation:ITranslatorConnector","A service to connect to the server translation endpoint."),new Wf.Token("@jupyterlab/translation:ITranslator","A service to translate strings.");const sg="jp-OutputArea-child",rg="jp-OutputArea-output",og="jp-OutputArea-prompt";class ag extends fm{constructor(e){var t,i,n,s;super(),this.outputLengthChanged=new zf.Signal(this),this._onIOPub=e=>{const t=this.model,i=e.header.msg_type;let n;const s=(e.content.transient||{}).display_id;let r;switch(i){case"execute_result":case"display_data":case"stream":case"error":n={...e.content,output_type:i},t.add(n);break;case"clear_output":{const i=e.content.wait;t.clear(i);break}case"update_display_data":if(n={...e.content,output_type:"display_data"},r=this._displayIdMap.get(s),r)for(const e of r)t.set(e,n)}s&&"display_data"===i&&(r=this._displayIdMap.get(s)||[],r.push(t.length-1),this._displayIdMap.set(s,r))},this._onExecuteReply=e=>{const t=this.model,i=e.content;if("ok"!==i.status)return;const n=i&&i.payload;if(!n||!n.length)return;const s=n.filter((e=>"page"===e.source));if(!s.length)return;const r={output_type:"display_data",data:JSON.parse(JSON.stringify(s[0])).data,metadata:{}};t.add(r)},this._displayIdMap=new Map,this._minHeightTimeout=null,this._inputRequested=new zf.Signal(this),this._toggleScrolling=new zf.Signal(this),this._outputTracker=new eg({namespace:Wf.UUID.uuid4()}),this._inputHistoryScope="global",super.layout=new vm,this.addClass("jp-OutputArea"),this.contentFactory=null!==(t=e.contentFactory)&&void 0!==t?t:ag.defaultContentFactory,this.rendermime=e.rendermime,this._maxNumberOutputs=null!==(i=e.maxNumberOutputs)&&void 0!==i?i:1/0,this._translator=null!==(n=e.translator)&&void 0!==n?n:ng,this._inputHistoryScope=null!==(s=e.inputHistoryScope)&&void 0!==s?s:"global";const r=this.model=e.model;for(let e=0;e{$f.KernelMessage.isInputRequestMsg(t)&&this.onInputRequest(t,e)})}get inputRequested(){return this._inputRequested}get maxNumberOutputs(){return this._maxNumberOutputs}set maxNumberOutputs(e){if(e<=0)return void console.warn("OutputArea.maxNumberOutputs must be strictly positive.");const t=this._maxNumberOutputs;this._maxNumberOutputs=e,t{this._toggleScrolling.emit()})),this.node.appendChild(e)}_moveDisplayIdIndices(e,t){this._displayIdMap.forEach((i=>{const n=e+t;for(let s=i.length-1;s>=0;--s){const r=i[s];r>=e&&r=n&&(i[s]-=t)}}))}onStateChanged(e,t){const i=Math.min(this.model.length,this._maxNumberOutputs);if(t){if(t>=this._maxNumberOutputs)return;this._setOutput(t,this.model.get(t))}else for(let e=0;e{this.isDisposed||(this.node.style.minHeight="")}),50)}onInputRequest(e,t){const i=this.contentFactory,n=e.content.prompt,s=e.content.password,r=new Am;r.addClass(sg),r.addClass("jp-OutputArea-stdin-item");const o=i.createOutputPrompt();o.addClass(og),r.addWidget(o);const a=i.createStdin({parent_header:e.header,prompt:n,password:s,future:t,translator:this._translator,inputHistoryScope:this._inputHistoryScope});a.addClass(rg),r.addWidget(a),this.model.length>=this.maxNumberOutputs&&(this.maxNumberOutputs=this.model.length),this.layout.addWidget(r),this._inputRequested.emit(),a.value.then((e=>{this.model.length>=this.maxNumberOutputs&&(this.maxNumberOutputs=this.model.length+1),this.model.add({output_type:"stream",name:"stdin",text:e+"\n"}),r.dispose()}))}_setOutput(e,t){if(e>=this._maxNumberOutputs)return;const i=this.layout.widgets[e],n=i.widgets?i.widgets[1]:i,s=this.rendermime.preferredMimeType(t.data,t.trusted?"any":"ensure");cg.currentPreferredMimetype.get(n)===s&&ag.isIsolated(s,t.metadata)===n instanceof cg.IsolatedRenderer?n.renderModel(t):(this.layout.widgets[e].dispose(),this._insertOutput(e,t))}_insertOutput(e,t){if(e>this._maxNumberOutputs)return;const i=this.layout;if(e===this._maxNumberOutputs){const t=new cg.TrimmedOutputs(this._maxNumberOutputs,(()=>{const e=this._maxNumberOutputs;this._maxNumberOutputs=1/0,this._showTrimmedOutputs(e)}));i.insertWidget(e,this._wrappedOutput(t))}else{let n=this.createOutputItem(t);n?n.toggleClass("jp-OutputArea-executeResult",null!==t.executionCount):n=new fm,this._outputTracker.has(n)||this._outputTracker.add(n),i.insertWidget(e,n)}}get outputTracker(){return this._outputTracker}_showTrimmedOutputs(e){this.widgets[e].dispose();for(let t=e;t{const t=document.createElement("pre"),n=this._translator.load("jupyterlab");t.textContent=n.__("Javascript Error: %1",e.message),i.node.appendChild(t),i.node.className="lm-Widget jp-RenderedText",i.node.setAttribute("data-mime-type","application/vnd.jupyter.stderr")})),i}_wrappedOutput(e,t=null){const i=new cg.OutputPanel;i.addClass(sg);const n=this.contentFactory.createOutputPrompt();return n.executionCount=t,n.addClass(og),i.addWidget(n),e.addClass(rg),i.addWidget(e),i}}!function(e){e.execute=async function(e,t,i,n){var s;let r=!0;n&&Array.isArray(n.tags)&&-1!==n.tags.indexOf("raises-exception")&&(r=!1);const o={code:e,stop_on_error:r},a=null===(s=i.session)||void 0===s?void 0:s.kernel;if(!a)throw new Error("Session has no kernel.");const l=a.requestExecute(o,!1,n);return t.future=l,l.done},e.isIsolated=function(e,t){const i=t[e];return i&&void 0!==i.isolated?!!i.isolated:!!t.isolated};class t{createOutputPrompt(){return new lg}createStdin(e){return new hg(e)}}e.ContentFactory=t,e.defaultContentFactory=new t}(ag||(ag={}));class lg extends fm{constructor(){super(),this._executionCount=null,this.addClass("jp-OutputPrompt")}get executionCount(){return this._executionCount}set executionCount(e){this._executionCount=e,this.node.textContent=null===e?"":`[${e}]:`}}class hg extends fm{static _historyIx(e,t){const i=hg._history.get(e);if(!i)return;const n=i.length;return t<=0?n+t:void 0}static _historyAt(e,t){const i=hg._history.get(e);if(!i)return;const n=i.length,s=hg._historyIx(e,t);return void 0!==s&&s1e3&&i.shift()}static _historySearch(e,t,i,n=!0){const s=hg._history.get(e),r=s.length,o=hg._historyIx(e,i),a=e=>-1!==e.search(t);if(void 0!==o)if(n){if(0===o)return;const e=s.slice(0,o).findLastIndex(a);if(-1!==e)return e-r}else{if(o>=r-1)return;const e=s.slice(o+1).findIndex(a);if(-1!==e)return e-r+o+1}}constructor(e){var t;super({node:cg.createInputWidgetNode(e.prompt,e.password)}),this._promise=new Wf.PromiseDelegate,this.addClass("jp-Stdin"),this._future=e.future,this._historyIndex=0,this._historyKey="session"===e.inputHistoryScope?e.parent_header.session:"",this._historyPat="",this._parentHeader=e.parent_header,this._password=e.password,this._trans=(null!==(t=e.translator)&&void 0!==t?t:ng).load("jupyterlab"),this._value=e.prompt+" ",this._input=this.node.getElementsByTagName("input")[0],this._input.placeholder=this._trans.__("↑↓ for history. Search history with c-↑/c-↓"),hg._history.has(this._historyKey)||hg._history.set(this._historyKey,[])}get value(){return this._promise.promise.then((()=>this._value))}handleEvent(e){const t=this._input;if("keydown"===e.type)if("Enter"===e.key)this.resetSearch(),this._future.sendInputReply({status:"ok",value:t.value},this._parentHeader),this._password?this._value+="········":(this._value+=t.value,hg._historyPush(this._historyKey,t.value)),this._promise.resolve(void 0);else if("Escape"===e.key)this.resetSearch(),t.blur();else if(!e.ctrlKey||"ArrowUp"!==e.key&&"ArrowDown"!==e.key){if("ArrowUp"===e.key){this.resetSearch();const i=hg._historyAt(this._historyKey,this._historyIndex-1);i&&(0===this._historyIndex&&(this._valueCache=t.value),this._setInputValue(i),--this._historyIndex,e.preventDefault())}else if("ArrowDown"===e.key)if(this.resetSearch(),0===this._historyIndex);else if(-1===this._historyIndex)this._setInputValue(this._valueCache),++this._historyIndex;else{const e=hg._historyAt(this._historyKey,this._historyIndex+1);e&&(this._setInputValue(e),++this._historyIndex)}}else{""===this._historyPat&&(this._historyPat=t.value);const i="ArrowUp"===e.key,n=hg._historySearch(this._historyKey,this._historyPat,this._historyIndex,i);if(void 0!==n){const i=hg._historyAt(this._historyKey,n);void 0!==i&&(0===this._historyIndex&&(this._valueCache=t.value),this._setInputValue(i),this._historyIndex=n,e.preventDefault())}}}resetSearch(){this._historyPat=""}onAfterAttach(e){this._input.addEventListener("keydown",this),this._input.focus()}onBeforeDetach(e){this._input.removeEventListener("keydown",this)}_setInputValue(e){this._input.value=e,this._input.setSelectionRange(e.length,e.length)}}var cg,dg,ug,pg,fg;function mg(e){return"execute_result"===e.output_type}function gg(e){return"display_data"===e.output_type}function vg(e){return"stream"===e.output_type}hg._history=new Map,function(e){e.createInputWidgetNode=function(e,t){const i=document.createElement("div"),n=document.createElement("pre");n.className="jp-Stdin-prompt",n.textContent=e;const s=document.createElement("input");return s.className="jp-Stdin-input",t&&(s.type="password"),i.appendChild(n),n.appendChild(s),i},e.IsolatedRenderer=class extends fm{constructor(e){super({node:document.createElement("iframe")}),this.addClass("jp-mod-isolated"),this._wrapped=e;const t=this.node;t.frameBorder="0",t.scrolling="auto",t.addEventListener("load",(()=>{t.contentDocument.open(),t.contentDocument.write(this._wrapped.node.innerHTML),t.contentDocument.close();const e=t.contentDocument.body;t.style.height=`${e.scrollHeight}px`,t.heightChangeObserver=new ResizeObserver((()=>{t.style.height=`${e.scrollHeight}px`})),t.heightChangeObserver.observe(e)}))}renderModel(e){return this._wrapped.renderModel(e)}},e.currentPreferredMimetype=new Xf.AttachedProperty({name:"preferredMimetype",create:e=>""}),e.OutputPanel=class extends Am{constructor(e){super(e)}_onContext(e){this.node.focus()}onAfterAttach(e){super.onAfterAttach(e),this.node.addEventListener("contextmenu",this._onContext.bind(this))}onBeforeDetach(e){super.onAfterDetach(e),this.node.removeEventListener("contextmenu",this._onContext.bind(this))}},e.TrimmedOutputs=class extends fm{constructor(e,t){const i=document.createElement("div"),n=`The first ${e} are displayed`;i.insertAdjacentHTML("afterbegin",`\n

      Show more outputs
      \n `),super({node:i}),this._onClick=t,this.addClass("jp-TrimmedOutputs"),this.addClass("jp-RenderedHTMLCommon")}handleEvent(e){"click"===e.type&&this._onClick(e)}onAfterAttach(e){super.onAfterAttach(e),this.node.addEventListener("click",this)}onBeforeDetach(e){super.onBeforeDetach(e),this.node.removeEventListener("click",this)}}}(cg||(cg={}));class Og{constructor(e={}){if(this._array=[],this._isDisposed=!1,this._changed=new zf.Signal(this),e.values)for(const t of e.values)this._array.push(t);this._itemCmp=e.itemCmp||dg.itemCmp}get type(){return"List"}get changed(){return this._changed}get length(){return this._array.length}get isDisposed(){return this._isDisposed}dispose(){this._isDisposed||(this._isDisposed=!0,zf.Signal.clearData(this),this.clear())}[Symbol.iterator](){return this._array[Symbol.iterator]()}get(e){return this._array[e]}set(e,t){const i=this._array[e];if(void 0===t)throw new Error("Cannot set an undefined item");(0,this._itemCmp)(i,t)||(this._array[e]=t,this._changed.emit({type:"set",oldIndex:e,newIndex:e,oldValues:[i],newValues:[t]}))}push(e){const t=this._array.push(e);return this._changed.emit({type:"add",oldIndex:-1,newIndex:this.length-1,oldValues:[],newValues:[e]}),t}insert(e,t){e===this._array.length?this._array.push(t):jf.RO.insert(this._array,e,t),this._changed.emit({type:"add",oldIndex:-2,newIndex:e,oldValues:[],newValues:[t]})}removeValue(e){const t=this._itemCmp,i=jf.RO.findFirstIndex(this._array,(i=>t(i,e)));return this.remove(i),i}remove(e){const t=jf.RO.removeAt(this._array,e);if(void 0!==t)return this._changed.emit({type:"remove",oldIndex:e,newIndex:-1,newValues:[],oldValues:[t]}),t}clear(){const e=this._array.slice();this._array.length=0,this._changed.emit({type:"remove",oldIndex:0,newIndex:0,newValues:[],oldValues:e})}move(e,t){if(this.length<=1||e===t)return;const i=[this._array[e]];jf.RO.move(this._array,e,t),this._changed.emit({type:"move",oldIndex:e,newIndex:t,oldValues:i,newValues:i})}pushAll(e){const t=this.length;for(const t of e)this._array.push(t);return this._changed.emit({type:"add",oldIndex:-1,newIndex:t,oldValues:[],newValues:Array.from(e)}),this.length}insertAll(e,t){const i=e;for(const i of t)jf.RO.insert(this._array,e++,i);this._changed.emit({type:"add",oldIndex:-2,newIndex:i,oldValues:[],newValues:Array.from(t)})}removeRange(e,t){const i=this._array.slice(e,t);for(let i=e;i{e.push(i)})),e}values(){const e=[];return this._map.forEach(((t,i)=>{e.push(t)})),e}delete(e){const t=this._map.get(e);return this._map.delete(e)&&this._changed.emit({type:"remove",key:e,oldValue:t,newValue:void 0}),t}clear(){const e=this.keys();for(let t=0;te.toJSON())))}_add(e){const t=this._trusted;if(e=Wf.JSONExt.deepCopy(e),fg.normalize(e),vg(e)&&this._lastStream&&e.name===this._lastName&&this.shouldCombine({value:e,lastModel:this.list.get(this.length-1)})){this._lastStream+=e.text,this._lastStream=fg.removeOverwrittenChars(this._lastStream),e.text=this._lastStream;const i=this._createItem({value:e,trusted:t}),n=this.length-1,s=this.list.get(n);return this.list.set(n,i),s.dispose(),this.length}vg(e)&&(e.text=fg.removeOverwrittenChars(e.text));const i=this._createItem({value:e,trusted:t});return vg(e)?(this._lastStream=e.text,this._lastName=e.name):this._lastStream="",this.list.push(i)}shouldCombine(e){return!0}_createItem(e){return this.contentFactory.createOutputModel(e)}_onListChanged(e,t){switch(t.type){case"add":t.newValues.forEach((e=>{e.changed.connect(this._onGenericChange,this)}));break;case"remove":t.oldValues.forEach((e=>{e.changed.disconnect(this._onGenericChange,this)}));break;case"set":t.newValues.forEach((e=>{e.changed.connect(this._onGenericChange,this)})),t.oldValues.forEach((e=>{e.changed.disconnect(this._onGenericChange,this)}))}this._changed.emit(t)}_onGenericChange(e){let t,i=null;for(t=0;t-1;){const t=e.match(/^(.*)\r+/m)[1];let i=e.match(/\r+(.*)$/m)[1];i+=t.slice(i.length,t.length),e=e.replace(/\r+.*$/m,"\r").replace(/^.*\r/m,i)}return e}(function(e){let t=e;do{t=(e=t).replace(/[^\n]\x08/gm,"")}while(t.length{const n=e[t],s=e[i];return n.rank!==s.rank?n.rank-s.rank:n.id-s.id}))}}(Pg||(Pg={}));var Rg=__webpack_require__(6145),Dg=__webpack_require__.n(Rg);const Ig=/(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i;function qg(e,t,i,n,s){let r=s.slice(e,t+1).join("").replace(/&/g,"&").replace(//g,">");for(navigator&&"Microsoft Internet Explorer"===navigator.appName&&(r=r.replace(/(%[^\n]*)\n/g,"$1
      \n"));t>e;)s[t]="",t--;return s[e]="@@"+n.length+"@@",i&&(r=i(r)),n.push(r),s}function Lg(e){let{host:t,source:i,trusted:n,sanitizer:s,resolver:r,linkHandler:o,shouldTypeset:a,latexTypesetter:l,translator:h}=e;h=h||ng;const c=null==h?void 0:h.load("jupyterlab");let d,u=i;if(!i)return t.textContent="",Promise.resolve(void 0);if(n||(u=`${i}`,i=s.sanitize(i)),t.innerHTML=i,t.getElementsByTagName("script").length>0)if(n)zg.evalInnerHTMLScriptTags(t);else{const e=document.createElement("div"),i=document.createElement("pre");i.textContent=c.__("This HTML output contains inline scripts. Are you sure that you want to run arbitrary Javascript within your JupyterLab session?");const n=document.createElement("button");n.textContent=c.__("Run"),n.onclick=e=>{t.innerHTML=u,zg.evalInnerHTMLScriptTags(t),t.firstChild&&t.removeChild(t.firstChild)},e.appendChild(i),e.appendChild(n),t.insertBefore(e,t.firstChild)}return zg.handleDefaults(t,r),d=r?zg.handleUrls(t,r,o):Promise.resolve(void 0),d.then((()=>{a&&l&&l.typeset(t)}))}async function Ng(e){const{host:t,source:i,markdownParser:n,...s}=e;if(!i)return void(t.textContent="");let r="";if(n){const e=function(e){const t=[];let i,n=null,s=null,r=null,o=0;e.includes("`")||e.includes("~~~")?(e=e.replace(/~/g,"~T").replace(/^(?`{3,}|(~T){3,})[^`\n]*\n([\s\S]*?)^\k`*$/gm,(e=>e.replace(/\$/g,"~D"))).replace(/(^|[^\\])(`+)([^\n]*?[^`\n])\2(?!`)/gm,(e=>e.replace(/\$/g,"~D"))),i=e=>e.replace(/~([TD])/g,((e,t)=>"T"===t?"~":"$"))):i=e=>e;let a=e.replace(/\r\n?/g,"\n").split(Ig);for(let e=1,l=a.length;e{let i=a[t];return"\\\\("===i.substr(0,3)&&"\\\\)"===i.substr(i.length-3)?i="\\("+i.substring(3,i.length-3)+"\\)":"\\\\["===i.substr(0,3)&&"\\\\]"===i.substr(i.length-3)&&(i="\\["+i.substring(3,i.length-3)+"\\]"),i}))}else r=`
      ${i}
      `;var o,a;await Lg({host:t,source:r,...s}),zg.headerAnchors(t)}function Bg(e,t){var i,n;const s=e.cloneNode();s.textContent=null===(i=e.textContent)||void 0===i?void 0:i.slice(0,t);const r=e.cloneNode();return r.textContent=null===(n=e.textContent)||void 0===n?void 0:n.slice(t),{pre:s,post:r}}function*$g(e){var t;let i,n=0;for(let s of e)i=n+((null===(t=s.textContent)||void 0===t?void 0:t.length)||0),yield{node:s,start:n,end:i,isText:s.nodeType===Node.TEXT_NODE},n=i}function Qg(e){var t,i;const{host:n,sanitizer:s,source:r}=e,o=s.sanitize(zg.ansiSpan(r),{allowedTags:["span"]}),a=document.createElement("pre"),l=document.createElement("pre");l.innerHTML=o;const h=l.textContent;if(h){const e=null===(i=null===(t=s.getAutolink)||void 0===t?void 0:t.call(s))||void 0===i||i?function(e){const t="\\u0000-\\u0020\\u007f-\\u009f",i=new RegExp("(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\\/\\/|data:|www\\.)[^\\s"+t+'"]{2,}[^\\s'+t+"\"'(){}\\[\\],:;.!?]","ug"),n=[];let s,r=0;for(;null!=(s=i.exec(e));){s.index!==r&&n.push(document.createTextNode(e.slice(r,s.index)));let t=s[0];const i=t.slice(-1),o=-1!==[">","<"].indexOf(i)?t.length-1:t.length,a=document.createElement("a");t=t.slice(0,o),a.href=t.startsWith("www.")?"https://"+t:t,a.rel="noopener",a.target="_blank",a.appendChild(document.createTextNode(t.slice(0,o))),n.push(a),r=s.index+o}return r!==e.length&&n.push(document.createTextNode(e.slice(r,e.length))),n}(h):[document.createTextNode(o)];let n=!1;const r=[],c=Array.from(l.childNodes);for(let t of function*(e,t){var i,n;let s=$g(e),r=$g(t),o=s.next(),a=r.next();for(;!o.done&&!a.done;){let e=o.value,t=a.value;if(e.isText&&e.start<=t.start&&e.end>=t.end)yield[null,t.node],a=r.next();else if(t.isText&&t.start<=e.start&&t.end>=e.end)yield[e.node,null],o=s.next();else if(e.end===t.end&&e.start===t.start)yield[e.node,t.node],o=s.next(),a=r.next();else if(e.end>t.end){let{pre:n,post:s}=Bg(e.node,t.end-e.start);t.starte.end))throw new Error(`Unexpected intersection: ${JSON.stringify(e)} ${JSON.stringify(t)}`);{let{pre:i,post:r}=Bg(t.node,e.end-t.start);e.start{const s=decodeURIComponent(n);return i&&i.handleLink(e,s,r),t.getDownloadUrl(n)})).then((t=>{e.href=t+r})).catch((t=>{e.href=""}))}e.evalInnerHTMLScriptTags=function(e){const t=Array.from(e.getElementsByTagName("script"));for(const e of t){if(!e.parentNode)continue;const t=document.createElement("script"),i=e.attributes;for(let e=0,n=i.length;e{}))},e.headerAnchors=function(e){const t=["h1","h2","h3","h4","h5","h6"];for(const i of t){const t=e.getElementsByTagName(i);for(let e=0;e"),a.push(e),a.push("")):a.push(e)}}function r(e){let t,i,n;const s=e.shift();if(2===s&&e.length>=3){if(t=e.shift(),i=e.shift(),n=e.shift(),[t,i,n].some((e=>e<0||255=1))throw new RangeError("Invalid extended color specification");{const s=e.shift();if(s<0)throw new RangeError("Color index must be >= 0");if(s<16)return s;if(s<232)t=Math.floor((s-16)/36),t=t>0?55+40*t:0,i=Math.floor((s-16)%36/6),i=i>0?55+40*i:0,n=(s-16)%6,n=n>0?55+40*n:0;else{if(!(s<256))throw new RangeError("Color index must be < 256");t=i=n=10*(s-232)+8}}}return[t,i,n]}e.ansiSpan=function(e){const t=/\x1b\[(.*?)([@-~])/g;let i,n=[],o=[],a=!1,l=!1,h=!1;const c=[],d=[];let u=0;for(e=Dg()(e),e+="";i=t.exec(e);){if("m"===i[2]){const e=i[1].split(";");for(let t=0;t]+xmlns=[^>]+svg")<0&&(i=i.replace("new Vg(e)},{safe:!0,mimeTypes:["text/markdown"],defaultRank:60,createRenderer:e=>new Hg(e)},{safe:!0,mimeTypes:["text/latex"],defaultRank:70,createRenderer:e=>new Ug(e)},{safe:!1,mimeTypes:["image/svg+xml"],defaultRank:80,createRenderer:e=>new Xg(e)},{safe:!0,mimeTypes:["image/bmp","image/png","image/jpeg","image/gif","image/webp"],defaultRank:90,createRenderer:e=>new Fg(e)},{safe:!1,mimeTypes:["text/javascript","application/javascript"],defaultRank:110,createRenderer:e=>new Gg(e)},{safe:!0,mimeTypes:["text/plain","application/vnd.jupyter.stdout","application/vnd.jupyter.stderr"],defaultRank:120,createRenderer:e=>new Yg(e)}];var Kg=function(e,t,i,n){return new(i||(i=Promise))((function(s,r){function o(e){try{l(n.next(e))}catch(e){r(e)}}function a(e){try{l(n.throw(e))}catch(e){r(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((n=n.apply(e,t||[])).next())}))};const Jg={cell:"manim-binder-cell",input:"manim-binder-input",button:"manim-binder-button",output:"manim-binder-output",wrapper:"manim-binder-wrapper",title:"manim-binder-title",meta:"manim-binder-meta",buttonWrapper:"manim-binder-button-wrapper"};!function(e){let t="ManimCommunity/jupyter_examples",i="main",n=60,s="manim-notebook-kernel",r="python3",o=Jg,a="https://mybinder.org",l=!1,h=null,c=null,d=null,u=null;function p(t){if(void 0!==e){const i=(new Date).getTime()+60*n*1e3,r=JSON.stringify({settings:t,timestamp:i});e.localStorage.setItem(s,r)}const i=$f.ServerConnection.makeSettings(t);return c=new $f.KernelManager({serverSettings:i}),u=new $f.ContentsManager({serverSettings:i}),c.startNew({name:r}).then((e=>e))}function f(e,t="",i=""){const n=document.createElement(e);return n.className=t,n.textContent=i,n}function m(e,t){return Kg(this,void 0,void 0,(function*(){const i=h.requestExecute({code:"from manim import *"});yield i.done,console.log("Import done. Now running code"),e.future=h.requestExecute({code:t}),e.model.add({output_type:"stream",name:"loading",text:"Loading..."}),e.model.clear(!0)}))}function g(n,r){if(h)return n.model.clear(),n.model.add({output_type:"stream",name:"loading",text:"Loading..."}),void m(n,r);const o=a.split("//")[1],c=l?"Reconnecting to":"Launching";n.model.clear(),n.model.add({output_type:"stream",name:"stdout",text:`${c} Docker container on ${o}...`}),new Promise(((n,r)=>function(){if(void 0!==e){const t=e.localStorage.getItem(s);if(t){l=!0;const{settings:i,timestamp:n}=JSON.parse(t);if(n&&(new Date).getTime(){const i=new EventSource(n);i.onerror=e=>{i.close(),t(new Error("Unable to connect to Binder"))};let s=null;i.onmessage=({data:n})=>{const r=JSON.parse(n);if(r.phase&&r.phase!=s&&(s=r.phase.toLowerCase()),"failed"==r.phase)i.close(),t(new Error(r));else if("ready"==r.phase){i.close();const t={baseUrl:r.url,wsUrl:`ws${r.url.slice(4)}`,token:r.token};e(t)}}}))}(t,i,a).then((e=>p(e)))}().then(n).catch(r))).then((e=>{h=e,m(n,r)})).catch((()=>{h=null,void 0!==e&&(l=!1,e.localStorage.removeItem(s)),n.model.clear(),n.model.add({output_type:"stream",name:"failure",text:"Failed to connect to kernel"})}))}e.initManimBinder=function({repo:l,branch:h,storage_expire:c,storage_key:p,kernel_type:m,class_names:v,binder_url:O}={}){t=l||t,i=h||i,n=c||n,s=p||s,r=m||r,o=v||o,a=O||a,function(){const e=document.createElement("style");e.textContent=`\n .${o.wrapper} {\n padding: 10px;\n }\n\n .${o.title} {\n text-align: center;\n display: flex;\n justify-content: space-between;\n }\n\n .${o.meta} {\n font-size: 0.75rem;\n font-weight: 400;\n padding-top: 0.1rem;\n color: #666;\n }\n\n .${o.button} {\n cursor: pointer;\n }\n `,document.head.appendChild(e)}(),[...document.querySelectorAll("[data-manim-binder]")].forEach((t=>function(t){const i=t.getAttribute("data-manim-classname");if(!i)return void console.error("No manim classname provided.");const n=f("div",o.buttonWrapper);t.replaceWith(n);const s=f("button",o.button,"Make interactive");n.appendChild(s),s.addEventListener("click",(s=>{let r=t.textContent||"";r+="\n\n# don't remove below command for run button to work",r+=`\n%manim -qm -v WARNING ${i}`,function(t,i=""){const n=new ag({model:new wg({trusted:!0}),rendermime:new Ag({initialFactories:(d||(d=Zg.filter((t=>!t.mimeTypes.includes("text/latex")||void 0!==e&&e.MathJax))),d)})}),s=f("div",o.wrapper);t.replaceWith(s);const r=f("h4",o.title,"Try out manim!");s.appendChild(r);const l=f("span",o.meta,"Python 3 · via ");r.appendChild(l);const h=f("a","","Binder");h.setAttribute("href",a),l.appendChild(h);const c=f("div",o.cell);s.appendChild(c);const p=f("div",o.input);c.appendChild(p);const m=f("button",o.button,"Run");c.appendChild(m);const v=f("div",o.output);c.appendChild(v),Lf.sendMessage(n,fm.Msg.BeforeAttach),v.appendChild(n.node),Lf.sendMessage(n,fm.Msg.AfterAttach),n.model.changed.connect((()=>{v.querySelectorAll("video").forEach((e=>Kg(this,void 0,void 0,(function*(){console.log("fixing video");const t=e.getAttribute("src");if(!t)return void console.error("no src for the video.");e.style.maxWidth="100%";const i=yield u.get(t);if(!i.mimetype.startsWith("video/"))return void console.error("not a video");const n=atob(i.content),s=new ArrayBuffer(n.length),r=new Uint8Array(s);for(let e=0;e(g(n,O.state.doc.toString()),!0)},{key:"Ctrl-Enter",run:()=>(g(n,O.state.doc.toString()),!0)}]),zs.of([...Cc,...Dh])],parent:p});O.contentDOM.setAttribute("data-enable-grammarly","false"),O.dispatch({changes:{from:0,to:O.state.doc.length,insert:i.trim()}}),m.addEventListener("click",(e=>g(n,O.state.doc.toString())))}(n,r)}))}(t)))}}(window)})()})(); +//# sourceMappingURL=manim-binder.min.js.map diff --git a/docs/source/_static/manim-binder.min.js.LICENSE.txt b/docs/source/_static/manim-binder.min.js.LICENSE.txt new file mode 100644 index 0000000000..fe4c1fe307 --- /dev/null +++ b/docs/source/_static/manim-binder.min.js.LICENSE.txt @@ -0,0 +1,6 @@ +/*! + * is-plain-object + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ diff --git a/docs/source/_static/manim-binder.min.js.map b/docs/source/_static/manim-binder.min.js.map new file mode 100644 index 0000000000..25b36df03d --- /dev/null +++ b/docs/source/_static/manim-binder.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"manim-binder.min.js","mappings":"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CT,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,aACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,UACA,OACA,WACA,KACA,MACA,UACA,MACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,KACA,IAGA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,MACA,OACA,OACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,MACA,WACA,IACA,UACA,IACA,OACA,UACA,SACA,QACA,SACA,OACA,SACA,SACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,OAIJM,kBAAmB,CACf,IAAK,CACD,QACA,MACA,YACA,SACA,KACA,QACA,WACA,UACA,YACA,OACA,aACA,QACA,QACA,aAGJp7D,EAAG,CACC,YACA,SACA,OACA,WACA,OACA,MACA,QACA,WACA,SACA,QAEJ+8J,KAAM,CACF,YACA,MACA,SACA,OACA,SACA,QACA,YAGJ+P,MAAO,CACH,WACA,WACA,OACA,aACA,QACA,UACA,OAEJE,IAAK,CAAC,OACNr8H,WAAY,CAAC,QACbmgD,GAAI,CAAC,SACL7gD,OAAQ,CACJ,YACA,0BACA,6BACA,WACA,OACA,WACA,OACA,SAEJg9H,OAAQ,CAAC,SAAU,SACnB/E,QAAS,CAAC,SACVpgH,IAAK,CAAC,QAAS,OAAQ,UAAW,OAAQ,SAAU,SACpDqlH,SAAU,CAAC,QAAS,OAAQ,UAAW,OAAQ,SAAU,SACzDl9I,QAAS,CACL,UACA,UACA,WACA,OACA,QACA,aACA,QAEJttB,KAAM,CAAC,SACPygG,IAAK,CAAC,OAAQ,YACdxyD,QAAS,CAAC,QACVn0C,IAAK,CAAC,WACNo0C,IAAK,CAAC,SACNC,GAAI,CAAC,WACLC,SAAU,CAAC,YACX6rG,KAAM,CAAC,QAAS,OAAQ,QACxBzr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","sources":["webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+coreutils@6.0.7/node_modules/@jupyterlab/coreutils/lib/activitymonitor.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+coreutils@6.0.7/node_modules/@jupyterlab/coreutils/lib/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+coreutils@6.0.7/node_modules/@jupyterlab/coreutils/lib/interfaces.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+coreutils@6.0.7/node_modules/@jupyterlab/coreutils/lib/markdowncodeblocks.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+coreutils@6.0.7/node_modules/@jupyterlab/coreutils/lib/pageconfig.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+coreutils@6.0.7/node_modules/@jupyterlab/coreutils/lib/path.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+coreutils@6.0.7/node_modules/@jupyterlab/coreutils/lib/signal.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+coreutils@6.0.7/node_modules/@jupyterlab/coreutils/lib/text.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+coreutils@6.0.7/node_modules/@jupyterlab/coreutils/lib/time.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+coreutils@6.0.7/node_modules/@jupyterlab/coreutils/lib/url.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/basemanager.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/builder/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/config/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/contents/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/contents/validate.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/event/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernel/comm.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernel/default.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernel/future.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernel/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernel/kernel.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernel/manager.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernel/messages.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernel/restapi.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernel/serialize.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernel/validate.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernelspec/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernelspec/kernelspec.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernelspec/manager.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernelspec/restapi.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/kernelspec/validate.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/manager.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/nbconvert/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/serverconnection.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/session/default.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/session/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/session/manager.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/session/restapi.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/session/session.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/session/validate.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/setting/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/shim/ws.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/terminal/default.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/terminal/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/terminal/manager.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/terminal/restapi.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/terminal/terminal.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/user/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/validate.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+services@7.0.7_react@18.2.0/node_modules/@jupyterlab/services/lib/workspace/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+statedb@4.0.7/node_modules/@jupyterlab/statedb/lib/dataconnector.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+statedb@4.0.7/node_modules/@jupyterlab/statedb/lib/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+statedb@4.0.7/node_modules/@jupyterlab/statedb/lib/interfaces.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+statedb@4.0.7/node_modules/@jupyterlab/statedb/lib/restorablepool.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+statedb@4.0.7/node_modules/@jupyterlab/statedb/lib/statedb.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+statedb@4.0.7/node_modules/@jupyterlab/statedb/lib/tokens.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+algorithm@2.0.1/node_modules/@lumino/algorithm/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+coreutils@2.1.2/node_modules/@lumino/coreutils/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+disposable@2.1.2/node_modules/@lumino/disposable/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+polling@2.1.2/node_modules/@lumino/polling/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+properties@2.0.1/node_modules/@lumino/properties/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+signaling@2.1.2/node_modules/@lumino/signaling/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js","webpack://manim-binder/./node_modules/.pnpm/dom-serializer@1.4.1/node_modules/dom-serializer/lib/foreignNames.js","webpack://manim-binder/./node_modules/.pnpm/dom-serializer@1.4.1/node_modules/dom-serializer/lib/index.js","webpack://manim-binder/./node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/index.js","webpack://manim-binder/./node_modules/.pnpm/domhandler@4.3.1/node_modules/domhandler/lib/index.js","webpack://manim-binder/./node_modules/.pnpm/domhandler@4.3.1/node_modules/domhandler/lib/node.js","webpack://manim-binder/./node_modules/.pnpm/domutils@2.8.0/node_modules/domutils/lib/feeds.js","webpack://manim-binder/./node_modules/.pnpm/domutils@2.8.0/node_modules/domutils/lib/helpers.js","webpack://manim-binder/./node_modules/.pnpm/domutils@2.8.0/node_modules/domutils/lib/index.js","webpack://manim-binder/./node_modules/.pnpm/domutils@2.8.0/node_modules/domutils/lib/legacy.js","webpack://manim-binder/./node_modules/.pnpm/domutils@2.8.0/node_modules/domutils/lib/manipulation.js","webpack://manim-binder/./node_modules/.pnpm/domutils@2.8.0/node_modules/domutils/lib/querying.js","webpack://manim-binder/./node_modules/.pnpm/domutils@2.8.0/node_modules/domutils/lib/stringify.js","webpack://manim-binder/./node_modules/.pnpm/domutils@2.8.0/node_modules/domutils/lib/traversal.js","webpack://manim-binder/./node_modules/.pnpm/entities@2.2.0/node_modules/entities/lib/decode.js","webpack://manim-binder/./node_modules/.pnpm/entities@2.2.0/node_modules/entities/lib/decode_codepoint.js","webpack://manim-binder/./node_modules/.pnpm/entities@2.2.0/node_modules/entities/lib/encode.js","webpack://manim-binder/./node_modules/.pnpm/entities@2.2.0/node_modules/entities/lib/index.js","webpack://manim-binder/./node_modules/.pnpm/escape-string-regexp@4.0.0/node_modules/escape-string-regexp/index.js","webpack://manim-binder/./node_modules/.pnpm/htmlparser2@6.1.0/node_modules/htmlparser2/lib/FeedHandler.js","webpack://manim-binder/./node_modules/.pnpm/htmlparser2@6.1.0/node_modules/htmlparser2/lib/Parser.js","webpack://manim-binder/./node_modules/.pnpm/htmlparser2@6.1.0/node_modules/htmlparser2/lib/Tokenizer.js","webpack://manim-binder/./node_modules/.pnpm/htmlparser2@6.1.0/node_modules/htmlparser2/lib/index.js","webpack://manim-binder/./node_modules/.pnpm/is-plain-object@5.0.0/node_modules/is-plain-object/dist/is-plain-object.js","webpack://manim-binder/./node_modules/.pnpm/lodash.escape@4.0.1/node_modules/lodash.escape/index.js","webpack://manim-binder/./node_modules/.pnpm/minimist@1.2.8/node_modules/minimist/index.js","webpack://manim-binder/./node_modules/.pnpm/parse-srcset@1.0.2/node_modules/parse-srcset/src/parse-srcset.js","webpack://manim-binder/./node_modules/.pnpm/path-browserify@1.0.1/node_modules/path-browserify/index.js","webpack://manim-binder/./node_modules/.pnpm/picocolors@1.0.0/node_modules/picocolors/picocolors.browser.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/at-rule.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/comment.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/container.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/css-syntax-error.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/declaration.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/document.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/fromJSON.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/input.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/lazy-result.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/list.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/map-generator.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/no-work-result.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/node.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/parse.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/parser.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/postcss.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/previous-map.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/processor.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/result.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/root.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/rule.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/stringifier.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/stringify.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/symbols.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/tokenize.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/warn-once.js","webpack://manim-binder/./node_modules/.pnpm/postcss@8.4.31/node_modules/postcss/lib/warning.js","webpack://manim-binder/./node_modules/.pnpm/querystringify@2.2.0/node_modules/querystringify/index.js","webpack://manim-binder/./node_modules/.pnpm/requires-port@1.0.0/node_modules/requires-port/index.js","webpack://manim-binder/./node_modules/.pnpm/sanitize-html@2.7.3/node_modules/sanitize-html/index.js","webpack://manim-binder/./node_modules/.pnpm/url-parse@1.5.10/node_modules/url-parse/index.js","webpack://manim-binder/./node_modules/.pnpm/nanoid@3.3.6/node_modules/nanoid/non-secure/index.cjs","webpack://manim-binder/webpack/bootstrap","webpack://manim-binder/webpack/runtime/compat get default export","webpack://manim-binder/webpack/runtime/define property getters","webpack://manim-binder/webpack/runtime/global","webpack://manim-binder/webpack/runtime/hasOwnProperty shorthand","webpack://manim-binder/webpack/runtime/make namespace object","webpack://manim-binder/./node_modules/.pnpm/@codemirror+state@6.3.1/node_modules/@codemirror/state/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/style-mod@4.1.0/node_modules/style-mod/src/style-mod.js","webpack://manim-binder/./node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.js","webpack://manim-binder/./node_modules/.pnpm/@codemirror+view@6.21.4/node_modules/@codemirror/view/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@lezer+common@1.1.0/node_modules/@lezer/common/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@lezer+highlight@1.1.6/node_modules/@lezer/highlight/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@codemirror+language@6.9.2/node_modules/@codemirror/language/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@codemirror+commands@6.3.0/node_modules/@codemirror/commands/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/crelt@1.0.6/node_modules/crelt/index.js","webpack://manim-binder/./node_modules/.pnpm/@codemirror+search@6.5.4/node_modules/@codemirror/search/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@codemirror+autocomplete@6.10.2_@codemirror+language@6.9.2_@codemirror+state@6.3.1_@codemirro_qlo7c5orcxst6mqbb4ug325pdq/node_modules/@codemirror/autocomplete/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@codemirror+lint@6.4.2/node_modules/@codemirror/lint/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/codemirror@6.0.1_@lezer+common@1.1.0/node_modules/codemirror/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@lezer+lr@1.3.13/node_modules/@lezer/lr/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@lezer+python@1.1.9/node_modules/@lezer/python/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@codemirror+lang-python@6.1.3_@codemirror+state@6.3.1_@codemirror+view@6.21.4_@lezer+common@1.1.0/node_modules/@codemirror/lang-python/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@codemirror+theme-one-dark@6.1.2/node_modules/@codemirror/theme-one-dark/dist/index.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+domutils@2.0.1/node_modules/@lumino/domutils/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+collections@2.0.1/node_modules/@lumino/collections/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+messaging@2.0.1/node_modules/@lumino/messaging/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+dragdrop@2.1.3/node_modules/@lumino/dragdrop/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+keyboard@2.0.1/node_modules/@lumino/keyboard/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+commands@2.1.3/node_modules/@lumino/commands/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+virtualdom@2.0.1/node_modules/@lumino/virtualdom/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@lumino+widgets@2.3.0/node_modules/@lumino/widgets/dist/index.es6.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+apputils@4.1.7/node_modules/@jupyterlab/apputils/lib/widgettracker.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+translation@4.0.7_react@18.2.0/node_modules/@jupyterlab/translation/lib/utils.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+translation@4.0.7_react@18.2.0/node_modules/@jupyterlab/translation/lib/gettext.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+translation@4.0.7_react@18.2.0/node_modules/@jupyterlab/translation/lib/base.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+translation@4.0.7_react@18.2.0/node_modules/@jupyterlab/translation/lib/tokens.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+outputarea@4.0.7_react@18.2.0/node_modules/@jupyterlab/outputarea/lib/widget.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+observables@5.0.7/node_modules/@jupyterlab/observables/lib/observablelist.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+observables@5.0.7/node_modules/@jupyterlab/observables/lib/observablemap.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+rendermime@4.0.7_react@18.2.0/node_modules/@jupyterlab/rendermime/lib/outputmodel.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+outputarea@4.0.7_react@18.2.0/node_modules/@jupyterlab/outputarea/lib/model.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+nbformat@4.0.7/node_modules/@jupyterlab/nbformat/lib/index.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+observables@5.0.7/node_modules/@jupyterlab/observables/lib/observablejson.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+apputils@4.1.7/node_modules/@jupyterlab/apputils/lib/sanitizer.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+rendermime@4.0.7_react@18.2.0/node_modules/@jupyterlab/rendermime/lib/mimemodel.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+rendermime@4.0.7_react@18.2.0/node_modules/@jupyterlab/rendermime/lib/registry.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+rendermime@4.0.7_react@18.2.0/node_modules/@jupyterlab/rendermime/lib/latex.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+rendermime@4.0.7_react@18.2.0/node_modules/@jupyterlab/rendermime/lib/renderers.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+rendermime@4.0.7_react@18.2.0/node_modules/@jupyterlab/rendermime/lib/widgets.js","webpack://manim-binder/./node_modules/.pnpm/@jupyterlab+rendermime@4.0.7_react@18.2.0/node_modules/@jupyterlab/rendermime/lib/factories.js","webpack://manim-binder/./src/main.ts"],"sourcesContent":["\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActivityMonitor = void 0;\nconst signaling_1 = require(\"@lumino/signaling\");\n/**\n * A class that monitors activity on a signal.\n */\nclass ActivityMonitor {\n /**\n * Construct a new activity monitor.\n */\n constructor(options) {\n this._timer = -1;\n this._timeout = -1;\n this._isDisposed = false;\n this._activityStopped = new signaling_1.Signal(this);\n options.signal.connect(this._onSignalFired, this);\n this._timeout = options.timeout || 1000;\n }\n /**\n * A signal emitted when activity has ceased.\n */\n get activityStopped() {\n return this._activityStopped;\n }\n /**\n * The timeout associated with the monitor, in milliseconds.\n */\n get timeout() {\n return this._timeout;\n }\n set timeout(value) {\n this._timeout = value;\n }\n /**\n * Test whether the monitor has been disposed.\n *\n * #### Notes\n * This is a read-only property.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the resources used by the activity monitor.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n signaling_1.Signal.clearData(this);\n }\n /**\n * A signal handler for the monitored signal.\n */\n _onSignalFired(sender, args) {\n clearTimeout(this._timer);\n this._sender = sender;\n this._args = args;\n this._timer = setTimeout(() => {\n this._activityStopped.emit({\n sender: this._sender,\n args: this._args\n });\n }, this._timeout);\n }\n}\nexports.ActivityMonitor = ActivityMonitor;\n//# sourceMappingURL=activitymonitor.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module coreutils\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./activitymonitor\"), exports);\n__exportStar(require(\"./interfaces\"), exports);\n__exportStar(require(\"./markdowncodeblocks\"), exports);\n__exportStar(require(\"./pageconfig\"), exports);\n__exportStar(require(\"./path\"), exports);\n__exportStar(require(\"./signal\"), exports);\n__exportStar(require(\"./text\"), exports);\n__exportStar(require(\"./time\"), exports);\n__exportStar(require(\"./url\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=interfaces.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MarkdownCodeBlocks = void 0;\n/**\n * The namespace for code block functions which help\n * in extract code from markdown text\n */\nvar MarkdownCodeBlocks;\n(function (MarkdownCodeBlocks) {\n MarkdownCodeBlocks.CODE_BLOCK_MARKER = '```';\n const markdownExtensions = [\n '.markdown',\n '.mdown',\n '.mkdn',\n '.md',\n '.mkd',\n '.mdwn',\n '.mdtxt',\n '.mdtext',\n '.text',\n '.txt',\n '.Rmd'\n ];\n class MarkdownCodeBlock {\n constructor(startLine) {\n this.startLine = startLine;\n this.code = '';\n this.endLine = -1;\n }\n }\n MarkdownCodeBlocks.MarkdownCodeBlock = MarkdownCodeBlock;\n /**\n * Check whether the given file extension is a markdown extension\n * @param extension - A file extension\n *\n * @returns true/false depending on whether this is a supported markdown extension\n */\n function isMarkdown(extension) {\n return markdownExtensions.indexOf(extension) > -1;\n }\n MarkdownCodeBlocks.isMarkdown = isMarkdown;\n /**\n * Construct all code snippets from current text\n * (this could be potentially optimized if we can cache and detect differences)\n * @param text - A string to parse codeblocks from\n *\n * @returns An array of MarkdownCodeBlocks.\n */\n function findMarkdownCodeBlocks(text) {\n if (!text || text === '') {\n return [];\n }\n const lines = text.split('\\n');\n const codeBlocks = [];\n let currentBlock = null;\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const line = lines[lineIndex];\n const lineContainsMarker = line.indexOf(MarkdownCodeBlocks.CODE_BLOCK_MARKER) === 0;\n const constructingBlock = currentBlock != null;\n // Skip this line if it is not part of any code block and doesn't contain a marker.\n if (!lineContainsMarker && !constructingBlock) {\n continue;\n }\n // Check if we are already constructing a code block.\n if (!constructingBlock) {\n // Start constructing a new code block.\n currentBlock = new MarkdownCodeBlock(lineIndex);\n // Check whether this is a single line code block of the form ```a = 10```.\n const firstIndex = line.indexOf(MarkdownCodeBlocks.CODE_BLOCK_MARKER);\n const lastIndex = line.lastIndexOf(MarkdownCodeBlocks.CODE_BLOCK_MARKER);\n const isSingleLine = firstIndex !== lastIndex;\n if (isSingleLine) {\n currentBlock.code = line.substring(firstIndex + MarkdownCodeBlocks.CODE_BLOCK_MARKER.length, lastIndex);\n currentBlock.endLine = lineIndex;\n codeBlocks.push(currentBlock);\n currentBlock = null;\n }\n }\n else if (currentBlock) {\n if (lineContainsMarker) {\n // End of block, finish it up.\n currentBlock.endLine = lineIndex - 1;\n codeBlocks.push(currentBlock);\n currentBlock = null;\n }\n else {\n // Append the current line.\n currentBlock.code += line + '\\n';\n }\n }\n }\n return codeBlocks;\n }\n MarkdownCodeBlocks.findMarkdownCodeBlocks = findMarkdownCodeBlocks;\n})(MarkdownCodeBlocks = exports.MarkdownCodeBlocks || (exports.MarkdownCodeBlocks = {}));\n//# sourceMappingURL=markdowncodeblocks.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PageConfig = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nconst minimist_1 = __importDefault(require(\"minimist\"));\nconst url_1 = require(\"./url\");\n/**\n * The namespace for `PageConfig` functions.\n */\nvar PageConfig;\n(function (PageConfig) {\n /**\n * Get global configuration data for the Jupyter application.\n *\n * @param name - The name of the configuration option.\n *\n * @returns The config value or an empty string if not found.\n *\n * #### Notes\n * All values are treated as strings.\n * For browser based applications, it is assumed that the page HTML\n * includes a script tag with the id `jupyter-config-data` containing the\n * configuration as valid JSON. In order to support the classic Notebook,\n * we fall back on checking for `body` data of the given `name`.\n *\n * For node applications, it is assumed that the process was launched\n * with a `--jupyter-config-data` option pointing to a JSON settings\n * file.\n */\n function getOption(name) {\n if (configData) {\n return configData[name] || getBodyData(name);\n }\n configData = Object.create(null);\n let found = false;\n // Use script tag if available.\n if (typeof document !== 'undefined' && document) {\n const el = document.getElementById('jupyter-config-data');\n if (el) {\n configData = JSON.parse(el.textContent || '');\n found = true;\n }\n }\n // Otherwise use CLI if given.\n if (!found && typeof process !== 'undefined' && process.argv) {\n try {\n const cli = (0, minimist_1.default)(process.argv.slice(2));\n const path = require('path');\n let fullPath = '';\n if ('jupyter-config-data' in cli) {\n fullPath = path.resolve(cli['jupyter-config-data']);\n }\n else if ('JUPYTER_CONFIG_DATA' in process.env) {\n fullPath = path.resolve(process.env['JUPYTER_CONFIG_DATA']);\n }\n if (fullPath) {\n // Force Webpack to ignore this require.\n // eslint-disable-next-line\n configData = eval('require')(fullPath);\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n if (!coreutils_1.JSONExt.isObject(configData)) {\n configData = Object.create(null);\n }\n else {\n for (const key in configData) {\n // PageConfig expects strings\n if (typeof configData[key] !== 'string') {\n configData[key] = JSON.stringify(configData[key]);\n }\n }\n }\n return configData[name] || getBodyData(name);\n }\n PageConfig.getOption = getOption;\n /**\n * Set global configuration data for the Jupyter application.\n *\n * @param name - The name of the configuration option.\n * @param value - The value to set the option to.\n *\n * @returns The last config value or an empty string if it doesn't exist.\n */\n function setOption(name, value) {\n const last = getOption(name);\n configData[name] = value;\n return last;\n }\n PageConfig.setOption = setOption;\n /**\n * Get the base url for a Jupyter application, or the base url of the page.\n */\n function getBaseUrl() {\n return url_1.URLExt.normalize(getOption('baseUrl') || '/');\n }\n PageConfig.getBaseUrl = getBaseUrl;\n /**\n * Get the tree url for a JupyterLab application.\n */\n function getTreeUrl() {\n return url_1.URLExt.join(getBaseUrl(), getOption('treeUrl'));\n }\n PageConfig.getTreeUrl = getTreeUrl;\n /**\n * Get the base url for sharing links (usually baseUrl)\n */\n function getShareUrl() {\n return url_1.URLExt.normalize(getOption('shareUrl') || getBaseUrl());\n }\n PageConfig.getShareUrl = getShareUrl;\n /**\n * Get the tree url for shareable links.\n * Usually the same as treeUrl,\n * but overrideable e.g. when sharing with JupyterHub.\n */\n function getTreeShareUrl() {\n return url_1.URLExt.normalize(url_1.URLExt.join(getShareUrl(), getOption('treeUrl')));\n }\n PageConfig.getTreeShareUrl = getTreeShareUrl;\n /**\n * Create a new URL given an optional mode and tree path.\n *\n * This is used to create URLS when the mode or tree path change as the user\n * changes mode or the current document in the main area. If fields in\n * options are omitted, the value in PageConfig will be used.\n *\n * @param options - IGetUrlOptions for the new path.\n */\n function getUrl(options) {\n var _a, _b, _c, _d;\n let path = options.toShare ? getShareUrl() : getBaseUrl();\n const mode = (_a = options.mode) !== null && _a !== void 0 ? _a : getOption('mode');\n const workspace = (_b = options.workspace) !== null && _b !== void 0 ? _b : getOption('workspace');\n const labOrDoc = mode === 'single-document' ? 'doc' : 'lab';\n path = url_1.URLExt.join(path, labOrDoc);\n if (workspace !== PageConfig.defaultWorkspace) {\n path = url_1.URLExt.join(path, 'workspaces', encodeURIComponent((_c = getOption('workspace')) !== null && _c !== void 0 ? _c : PageConfig.defaultWorkspace));\n }\n const treePath = (_d = options.treePath) !== null && _d !== void 0 ? _d : getOption('treePath');\n if (treePath) {\n path = url_1.URLExt.join(path, 'tree', url_1.URLExt.encodeParts(treePath));\n }\n return path;\n }\n PageConfig.getUrl = getUrl;\n PageConfig.defaultWorkspace = 'default';\n /**\n * Get the base websocket url for a Jupyter application, or an empty string.\n */\n function getWsUrl(baseUrl) {\n let wsUrl = getOption('wsUrl');\n if (!wsUrl) {\n baseUrl = baseUrl ? url_1.URLExt.normalize(baseUrl) : getBaseUrl();\n if (baseUrl.indexOf('http') !== 0) {\n return '';\n }\n wsUrl = 'ws' + baseUrl.slice(4);\n }\n return url_1.URLExt.normalize(wsUrl);\n }\n PageConfig.getWsUrl = getWsUrl;\n /**\n * Returns the URL converting this notebook to a certain\n * format with nbconvert.\n */\n function getNBConvertURL({ path, format, download }) {\n const notebookPath = url_1.URLExt.encodeParts(path);\n const url = url_1.URLExt.join(getBaseUrl(), 'nbconvert', format, notebookPath);\n if (download) {\n return url + '?download=true';\n }\n return url;\n }\n PageConfig.getNBConvertURL = getNBConvertURL;\n /**\n * Get the authorization token for a Jupyter application.\n */\n function getToken() {\n return getOption('token') || getBodyData('jupyterApiToken');\n }\n PageConfig.getToken = getToken;\n /**\n * Get the Notebook version info [major, minor, patch].\n */\n function getNotebookVersion() {\n const notebookVersion = getOption('notebookVersion');\n if (notebookVersion === '') {\n return [0, 0, 0];\n }\n return JSON.parse(notebookVersion);\n }\n PageConfig.getNotebookVersion = getNotebookVersion;\n /**\n * Private page config data for the Jupyter application.\n */\n let configData = null;\n /**\n * Get a url-encoded item from `body.data` and decode it\n * We should never have any encoded URLs anywhere else in code\n * until we are building an actual request.\n */\n function getBodyData(key) {\n if (typeof document === 'undefined' || !document.body) {\n return '';\n }\n const val = document.body.dataset[key];\n if (typeof val === 'undefined') {\n return '';\n }\n return decodeURIComponent(val);\n }\n /**\n * The namespace for page config `Extension` functions.\n */\n let Extension;\n (function (Extension) {\n /**\n * Populate an array from page config.\n *\n * @param key - The page config key (e.g., `deferredExtensions`).\n *\n * #### Notes\n * This is intended for `deferredExtensions` and `disabledExtensions`.\n */\n function populate(key) {\n try {\n const raw = getOption(key);\n if (raw) {\n return JSON.parse(raw);\n }\n }\n catch (error) {\n console.warn(`Unable to parse ${key}.`, error);\n }\n return [];\n }\n /**\n * The collection of deferred extensions in page config.\n */\n Extension.deferred = populate('deferredExtensions');\n /**\n * The collection of disabled extensions in page config.\n */\n Extension.disabled = populate('disabledExtensions');\n /**\n * Returns whether a plugin is deferred.\n *\n * @param id - The plugin ID.\n */\n function isDeferred(id) {\n // Check for either a full plugin id match or an extension\n // name match.\n const separatorIndex = id.indexOf(':');\n let extName = '';\n if (separatorIndex !== -1) {\n extName = id.slice(0, separatorIndex);\n }\n return Extension.deferred.some(val => val === id || (extName && val === extName));\n }\n Extension.isDeferred = isDeferred;\n /**\n * Returns whether a plugin is disabled.\n *\n * @param id - The plugin ID.\n */\n function isDisabled(id) {\n // Check for either a full plugin id match or an extension\n // name match.\n const separatorIndex = id.indexOf(':');\n let extName = '';\n if (separatorIndex !== -1) {\n extName = id.slice(0, separatorIndex);\n }\n return Extension.disabled.some(val => val === id || (extName && val === extName));\n }\n Extension.isDisabled = isDisabled;\n })(Extension = PageConfig.Extension || (PageConfig.Extension = {}));\n})(PageConfig = exports.PageConfig || (exports.PageConfig = {}));\n//# sourceMappingURL=pageconfig.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PathExt = void 0;\nconst path_1 = require(\"path\");\n/**\n * The namespace for path-related functions.\n *\n * Note that Jupyter server paths do not start with a leading slash.\n */\nvar PathExt;\n(function (PathExt) {\n /**\n * Join all arguments together and normalize the resulting path.\n * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.\n *\n * @param paths - The string paths to join.\n */\n function join(...paths) {\n const path = path_1.posix.join(...paths);\n return path === '.' ? '' : removeSlash(path);\n }\n PathExt.join = join;\n /**\n * Return the last portion of a path. Similar to the Unix basename command.\n * Often used to extract the file name from a fully qualified path.\n *\n * @param path - The path to evaluate.\n *\n * @param ext - An extension to remove from the result.\n */\n function basename(path, ext) {\n return path_1.posix.basename(path, ext);\n }\n PathExt.basename = basename;\n /**\n * Get the directory name of a path, similar to the Unix dirname command.\n * When an empty path is given, returns the root path.\n *\n * @param path - The file path.\n */\n function dirname(path) {\n const dir = removeSlash(path_1.posix.dirname(path));\n return dir === '.' ? '' : dir;\n }\n PathExt.dirname = dirname;\n /**\n * Get the extension of the path.\n *\n * @param path - The file path.\n *\n * @returns the extension of the file.\n *\n * #### Notes\n * The extension is the string from the last occurrence of the `.`\n * character to end of string in the last portion of the path, inclusive.\n * If there is no `.` in the last portion of the path, or if the first\n * character of the basename of path [[basename]] is `.`, then an\n * empty string is returned.\n */\n function extname(path) {\n return path_1.posix.extname(path);\n }\n PathExt.extname = extname;\n /**\n * Normalize a string path, reducing '..' and '.' parts.\n * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used.\n * When an empty path is given, returns the root path.\n *\n * @param path - The string path to normalize.\n */\n function normalize(path) {\n if (path === '') {\n return '';\n }\n return removeSlash(path_1.posix.normalize(path));\n }\n PathExt.normalize = normalize;\n /**\n * Resolve a sequence of paths or path segments into an absolute path.\n * The root path in the application has no leading slash, so it is removed.\n *\n * @param parts - The paths to join.\n *\n * #### Notes\n * The right-most parameter is considered \\{to\\}. Other parameters are considered an array of \\{from\\}.\n *\n * Starting from leftmost \\{from\\} parameter, resolves \\{to\\} to an absolute path.\n *\n * If \\{to\\} isn't already absolute, \\{from\\} arguments are prepended in right to left order, until an absolute path is found. If after using all \\{from\\} paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory.\n */\n function resolve(...parts) {\n return removeSlash(path_1.posix.resolve(...parts));\n }\n PathExt.resolve = resolve;\n /**\n * Solve the relative path from \\{from\\} to \\{to\\}.\n *\n * @param from - The source path.\n *\n * @param to - The target path.\n *\n * #### Notes\n * If from and to each resolve to the same path (after calling\n * path.resolve() on each), a zero-length string is returned.\n * If a zero-length string is passed as from or to, `/`\n * will be used instead of the zero-length strings.\n */\n function relative(from, to) {\n return removeSlash(path_1.posix.relative(from, to));\n }\n PathExt.relative = relative;\n /**\n * Normalize a file extension to be of the type `'.foo'`.\n *\n * @param extension - the file extension.\n *\n * #### Notes\n * Adds a leading dot if not present and converts to lower case.\n */\n function normalizeExtension(extension) {\n if (extension.length > 0 && extension.indexOf('.') !== 0) {\n extension = `.${extension}`;\n }\n return extension;\n }\n PathExt.normalizeExtension = normalizeExtension;\n /**\n * Remove the leading slash from a path.\n *\n * @param path: the path from which to remove a leading slash.\n */\n function removeSlash(path) {\n if (path.indexOf('/') === 0) {\n path = path.slice(1);\n }\n return path;\n }\n PathExt.removeSlash = removeSlash;\n})(PathExt = exports.PathExt || (exports.PathExt = {}));\n//# sourceMappingURL=path.js.map","\"use strict\";\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.signalToPromise = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\n/**\n * Convert a signal into a promise for the first emitted value.\n *\n * @param signal - The signal we are listening to.\n * @param timeout - Timeout to wait for signal in ms (not timeout if not defined or 0)\n *\n * @returns a Promise that resolves with a `(sender, args)` pair.\n */\nfunction signalToPromise(signal, timeout) {\n const waitForSignal = new coreutils_1.PromiseDelegate();\n function cleanup() {\n signal.disconnect(slot);\n }\n function slot(sender, args) {\n cleanup();\n waitForSignal.resolve([sender, args]);\n }\n signal.connect(slot);\n if ((timeout !== null && timeout !== void 0 ? timeout : 0) > 0) {\n setTimeout(() => {\n cleanup();\n waitForSignal.reject(`Signal not emitted within ${timeout} ms.`);\n }, timeout);\n }\n return waitForSignal.promise;\n}\nexports.signalToPromise = signalToPromise;\n//# sourceMappingURL=signal.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Text = void 0;\n/**\n * The namespace for text-related functions.\n */\nvar Text;\n(function (Text) {\n // javascript stores text as utf16 and string indices use \"code units\",\n // which stores high-codepoint characters as \"surrogate pairs\",\n // which occupy two indices in the javascript string.\n // We need to translate cursor_pos in the Jupyter protocol (in characters)\n // to js offset (with surrogate pairs taking two spots).\n const HAS_SURROGATES = '𝐚'.length > 1;\n /**\n * Convert a javascript string index into a unicode character offset\n *\n * @param jsIdx - The javascript string index (counting surrogate pairs)\n *\n * @param text - The text in which the offset is calculated\n *\n * @returns The unicode character offset\n */\n function jsIndexToCharIndex(jsIdx, text) {\n if (HAS_SURROGATES) {\n // not using surrogates, nothing to do\n return jsIdx;\n }\n let charIdx = jsIdx;\n for (let i = 0; i + 1 < text.length && i < jsIdx; i++) {\n const charCode = text.charCodeAt(i);\n // check for surrogate pair\n if (charCode >= 0xd800 && charCode <= 0xdbff) {\n const nextCharCode = text.charCodeAt(i + 1);\n if (nextCharCode >= 0xdc00 && nextCharCode <= 0xdfff) {\n charIdx--;\n i++;\n }\n }\n }\n return charIdx;\n }\n Text.jsIndexToCharIndex = jsIndexToCharIndex;\n /**\n * Convert a unicode character offset to a javascript string index.\n *\n * @param charIdx - The index in unicode characters\n *\n * @param text - The text in which the offset is calculated\n *\n * @returns The js-native index\n */\n function charIndexToJsIndex(charIdx, text) {\n if (HAS_SURROGATES) {\n // not using surrogates, nothing to do\n return charIdx;\n }\n let jsIdx = charIdx;\n for (let i = 0; i + 1 < text.length && i < jsIdx; i++) {\n const charCode = text.charCodeAt(i);\n // check for surrogate pair\n if (charCode >= 0xd800 && charCode <= 0xdbff) {\n const nextCharCode = text.charCodeAt(i + 1);\n if (nextCharCode >= 0xdc00 && nextCharCode <= 0xdfff) {\n jsIdx++;\n i++;\n }\n }\n }\n return jsIdx;\n }\n Text.charIndexToJsIndex = charIndexToJsIndex;\n /**\n * Given a 'snake-case', 'snake_case', 'snake:case', or\n * 'snake case' string, will return the camel case version: 'snakeCase'.\n *\n * @param str: the snake-case input string.\n *\n * @param upper: default = false. If true, the first letter of the\n * returned string will be capitalized.\n *\n * @returns the camel case version of the input string.\n */\n function camelCase(str, upper = false) {\n return str.replace(/^(\\w)|[\\s-_:]+(\\w)/g, function (match, p1, p2) {\n if (p2) {\n return p2.toUpperCase();\n }\n else {\n return upper ? p1.toUpperCase() : p1.toLowerCase();\n }\n });\n }\n Text.camelCase = camelCase;\n /**\n * Given a string, title case the words in the string.\n *\n * @param str: the string to title case.\n *\n * @returns the same string, but with each word capitalized.\n */\n function titleCase(str) {\n return (str || '')\n .toLowerCase()\n .split(' ')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n }\n Text.titleCase = titleCase;\n})(Text = exports.Text || (exports.Text = {}));\n//# sourceMappingURL=text.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Time = void 0;\n/**\n * A list of time units with their associated value in milliseconds.\n */\nconst UNITS = [\n { name: 'years', milliseconds: 365 * 24 * 60 * 60 * 1000 },\n { name: 'months', milliseconds: 30 * 24 * 60 * 60 * 1000 },\n { name: 'days', milliseconds: 24 * 60 * 60 * 1000 },\n { name: 'hours', milliseconds: 60 * 60 * 1000 },\n { name: 'minutes', milliseconds: 60 * 1000 },\n { name: 'seconds', milliseconds: 1000 }\n];\n/**\n * The namespace for date functions.\n */\nvar Time;\n(function (Time) {\n /**\n * Convert a timestring to a human readable string (e.g. 'two minutes ago').\n *\n * @param value - The date timestring or date object.\n *\n * @returns A formatted date.\n */\n function formatHuman(value) {\n const lang = document.documentElement.lang || 'en';\n const formatter = new Intl.RelativeTimeFormat(lang, { numeric: 'auto' });\n const delta = new Date(value).getTime() - Date.now();\n for (let unit of UNITS) {\n const amount = Math.ceil(delta / unit.milliseconds);\n if (amount === 0) {\n continue;\n }\n return formatter.format(amount, unit.name);\n }\n return formatter.format(0, 'seconds');\n }\n Time.formatHuman = formatHuman;\n /**\n * Convenient helper to convert a timestring to a date format.\n *\n * @param value - The date timestring or date object.\n *\n * @returns A formatted date.\n */\n function format(value) {\n const lang = document.documentElement.lang || 'en';\n const formatter = new Intl.DateTimeFormat(lang, {\n dateStyle: 'short',\n timeStyle: 'short'\n });\n return formatter.format(new Date(value));\n }\n Time.format = format;\n})(Time = exports.Time || (exports.Time = {}));\n//# sourceMappingURL=time.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URLExt = void 0;\nconst path_1 = require(\"path\");\nconst url_parse_1 = __importDefault(require(\"url-parse\"));\n/**\n * The namespace for URL-related functions.\n */\nvar URLExt;\n(function (URLExt) {\n /**\n * Parse a url into a URL object.\n *\n * @param urlString - The URL string to parse.\n *\n * @returns A URL object.\n */\n function parse(url) {\n if (typeof document !== 'undefined' && document) {\n const a = document.createElement('a');\n a.href = url;\n return a;\n }\n return (0, url_parse_1.default)(url);\n }\n URLExt.parse = parse;\n /**\n * Parse URL and retrieve hostname\n *\n * @param url - The URL string to parse\n *\n * @returns a hostname string value\n */\n function getHostName(url) {\n return (0, url_parse_1.default)(url).hostname;\n }\n URLExt.getHostName = getHostName;\n function normalize(url) {\n return url && parse(url).toString();\n }\n URLExt.normalize = normalize;\n /**\n * Join a sequence of url components and normalizes as in node `path.join`.\n *\n * @param parts - The url components.\n *\n * @returns the joined url.\n */\n function join(...parts) {\n let u = (0, url_parse_1.default)(parts[0], {});\n // Schema-less URL can be only parsed as relative to a base URL\n // see https://github.com/unshiftio/url-parse/issues/219#issuecomment-1002219326\n const isSchemaLess = u.protocol === '' && u.slashes;\n if (isSchemaLess) {\n u = (0, url_parse_1.default)(parts[0], 'https:' + parts[0]);\n }\n const prefix = `${isSchemaLess ? '' : u.protocol}${u.slashes ? '//' : ''}${u.auth}${u.auth ? '@' : ''}${u.host}`;\n // If there was a prefix, then the first path must start at the root.\n const path = path_1.posix.join(`${!!prefix && u.pathname[0] !== '/' ? '/' : ''}${u.pathname}`, ...parts.slice(1));\n return `${prefix}${path === '.' ? '' : path}`;\n }\n URLExt.join = join;\n /**\n * Encode the components of a multi-segment url.\n *\n * @param url - The url to encode.\n *\n * @returns the encoded url.\n *\n * #### Notes\n * Preserves the `'/'` separators.\n * Should not include the base url, since all parts are escaped.\n */\n function encodeParts(url) {\n return join(...url.split('/').map(encodeURIComponent));\n }\n URLExt.encodeParts = encodeParts;\n /**\n * Return a serialized object string suitable for a query.\n *\n * @param object - The source object.\n *\n * @returns an encoded url query.\n *\n * #### Notes\n * Modified version of [stackoverflow](http://stackoverflow.com/a/30707423).\n */\n function objectToQueryString(value) {\n const keys = Object.keys(value).filter(key => key.length > 0);\n if (!keys.length) {\n return '';\n }\n return ('?' +\n keys\n .map(key => {\n const content = encodeURIComponent(String(value[key]));\n return key + (content ? '=' + content : '');\n })\n .join('&'));\n }\n URLExt.objectToQueryString = objectToQueryString;\n /**\n * Return a parsed object that represents the values in a query string.\n */\n function queryStringToObject(value) {\n return value\n .replace(/^\\?/, '')\n .split('&')\n .reduce((acc, val) => {\n const [key, value] = val.split('=');\n if (key.length > 0) {\n acc[key] = decodeURIComponent(value || '');\n }\n return acc;\n }, {});\n }\n URLExt.queryStringToObject = queryStringToObject;\n /**\n * Test whether the url is a local url.\n *\n * #### Notes\n * This function returns `false` for any fully qualified url, including\n * `data:`, `file:`, and `//` protocol URLs.\n */\n function isLocal(url) {\n const { protocol } = parse(url);\n return ((!protocol || url.toLowerCase().indexOf(protocol) !== 0) &&\n url.indexOf('/') !== 0);\n }\n URLExt.isLocal = isLocal;\n})(URLExt = exports.URLExt || (exports.URLExt = {}));\n//# sourceMappingURL=url.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseManager = void 0;\nconst signaling_1 = require(\"@lumino/signaling\");\nconst serverconnection_1 = require(\"./serverconnection\");\nclass BaseManager {\n constructor(options) {\n var _a;\n this._isDisposed = false;\n this._disposed = new signaling_1.Signal(this);\n this.serverSettings =\n (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n }\n /**\n * A signal emitted when the delegate is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Test whether the delegate has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Whether the manager is active.\n */\n get isActive() {\n return true;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._disposed.emit(undefined);\n signaling_1.Signal.clearData(this);\n }\n}\nexports.BaseManager = BaseManager;\n//# sourceMappingURL=basemanager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BuildManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst serverconnection_1 = require(\"../serverconnection\");\n/**\n * The url for the lab build service.\n */\nconst BUILD_SETTINGS_URL = 'api/build';\n/**\n * The build API service manager.\n */\nclass BuildManager {\n /**\n * Create a new setting manager.\n */\n constructor(options = {}) {\n var _a;\n this._url = '';\n this.serverSettings =\n (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n const { baseUrl, appUrl } = this.serverSettings;\n this._url = coreutils_1.URLExt.join(baseUrl, appUrl, BUILD_SETTINGS_URL);\n }\n /**\n * Test whether the build service is available.\n */\n get isAvailable() {\n return coreutils_1.PageConfig.getOption('buildAvailable').toLowerCase() === 'true';\n }\n /**\n * Test whether to check build status automatically.\n */\n get shouldCheck() {\n return coreutils_1.PageConfig.getOption('buildCheck').toLowerCase() === 'true';\n }\n /**\n * Get whether the application should be built.\n */\n getStatus() {\n const { _url, serverSettings } = this;\n const promise = serverconnection_1.ServerConnection.makeRequest(_url, {}, serverSettings);\n return promise\n .then(response => {\n if (response.status !== 200) {\n throw new serverconnection_1.ServerConnection.ResponseError(response);\n }\n return response.json();\n })\n .then(data => {\n if (typeof data.status !== 'string') {\n throw new Error('Invalid data');\n }\n if (typeof data.message !== 'string') {\n throw new Error('Invalid data');\n }\n return data;\n });\n }\n /**\n * Build the application.\n */\n build() {\n const { _url, serverSettings } = this;\n const init = { method: 'POST' };\n const promise = serverconnection_1.ServerConnection.makeRequest(_url, init, serverSettings);\n return promise.then(response => {\n if (response.status === 400) {\n throw new serverconnection_1.ServerConnection.ResponseError(response, 'Build aborted');\n }\n if (response.status !== 200) {\n const message = `Build failed with ${response.status}.\n\n If you are experiencing the build failure after installing an extension (or trying to include previously installed extension after updating JupyterLab) please check the extension repository for new installation instructions as many extensions migrated to the prebuilt extensions system which no longer requires rebuilding JupyterLab (but uses a different installation procedure, typically involving a package manager such as 'pip' or 'conda').\n\n If you specifically intended to install a source extension, please run 'jupyter lab build' on the server for full output.`;\n throw new serverconnection_1.ServerConnection.ResponseError(response, message);\n }\n });\n }\n /**\n * Cancel an active build.\n */\n cancel() {\n const { _url, serverSettings } = this;\n const init = { method: 'DELETE' };\n const promise = serverconnection_1.ServerConnection.makeRequest(_url, init, serverSettings);\n return promise.then(response => {\n if (response.status !== 204) {\n throw new serverconnection_1.ServerConnection.ResponseError(response);\n }\n });\n }\n}\nexports.BuildManager = BuildManager;\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConfigWithDefaults = exports.ConfigSection = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst __1 = require(\"..\");\n/**\n * The url for the config service.\n */\nconst SERVICE_CONFIG_URL = 'api/config';\n/**\n * The namespace for ConfigSection statics.\n */\nvar ConfigSection;\n(function (ConfigSection) {\n /**\n * Create a config section.\n *\n * @returns A Promise that is fulfilled with the config section is loaded.\n */\n function create(options) {\n const section = new DefaultConfigSection(options);\n return section.load().then(() => {\n return section;\n });\n }\n ConfigSection.create = create;\n})(ConfigSection = exports.ConfigSection || (exports.ConfigSection = {}));\n/**\n * Implementation of the Configurable data section.\n */\nclass DefaultConfigSection {\n /**\n * Construct a new config section.\n */\n constructor(options) {\n var _a;\n this._url = 'unknown';\n const settings = (this.serverSettings =\n (_a = options.serverSettings) !== null && _a !== void 0 ? _a : __1.ServerConnection.makeSettings());\n this._url = coreutils_1.URLExt.join(settings.baseUrl, SERVICE_CONFIG_URL, encodeURIComponent(options.name));\n }\n /**\n * Get the data for this section.\n */\n get data() {\n return this._data;\n }\n /**\n * Load the initial data for this section.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/config).\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\n async load() {\n const response = await __1.ServerConnection.makeRequest(this._url, {}, this.serverSettings);\n if (response.status !== 200) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n this._data = await response.json();\n }\n /**\n * Modify the stored config values.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/config).\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n *\n * Updates the local data immediately, sends the change to the server,\n * and updates the local data with the response, and fulfils the promise\n * with that data.\n */\n async update(newdata) {\n this._data = { ...this._data, ...newdata };\n const init = {\n method: 'PATCH',\n body: JSON.stringify(newdata)\n };\n const response = await __1.ServerConnection.makeRequest(this._url, init, this.serverSettings);\n if (response.status !== 200) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n this._data = await response.json();\n return this._data;\n }\n}\n/**\n * Configurable object with defaults.\n */\nclass ConfigWithDefaults {\n /**\n * Create a new config with defaults.\n */\n constructor(options) {\n var _a, _b;\n this._className = '';\n this._section = options.section;\n this._defaults = (_a = options.defaults) !== null && _a !== void 0 ? _a : {};\n this._className = (_b = options.className) !== null && _b !== void 0 ? _b : '';\n }\n /**\n * Get data from the config section or fall back to defaults.\n */\n get(key) {\n const data = this._classData();\n return key in data ? data[key] : this._defaults[key];\n }\n /**\n * Set a config value.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/config).\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n *\n * Sends the update to the server, and changes our local copy of the data\n * immediately.\n */\n set(key, value) {\n const d = {};\n d[key] = value;\n if (this._className) {\n const d2 = {};\n d2[this._className] = d;\n return this._section.update(d2);\n }\n else {\n return this._section.update(d);\n }\n }\n /**\n * Get data from the Section with our classname, if available.\n *\n * #### Notes\n * If we have no classname, get all of the data in the Section\n */\n _classData() {\n const data = this._section.data;\n if (this._className && this._className in data) {\n return data[this._className];\n }\n return data;\n }\n}\nexports.ConfigWithDefaults = ConfigWithDefaults;\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Drive = exports.ContentsManager = exports.Contents = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst validate = __importStar(require(\"./validate\"));\n/**\n * The url for the default drive service.\n */\nconst SERVICE_DRIVE_URL = 'api/contents';\n/**\n * The url for the file access.\n */\nconst FILES_URL = 'files';\n/**\n * A namespace for contents interfaces.\n */\nvar Contents;\n(function (Contents) {\n /**\n * Validates an IModel, throwing an error if it does not pass.\n */\n function validateContentsModel(contents) {\n validate.validateContentsModel(contents);\n }\n Contents.validateContentsModel = validateContentsModel;\n /**\n * Validates an ICheckpointModel, throwing an error if it does not pass.\n */\n function validateCheckpointModel(checkpoint) {\n validate.validateCheckpointModel(checkpoint);\n }\n Contents.validateCheckpointModel = validateCheckpointModel;\n})(Contents = exports.Contents || (exports.Contents = {}));\n/**\n * A contents manager that passes file operations to the server.\n * Multiple servers implementing the `IDrive` interface can be\n * attached to the contents manager, so that the same session can\n * perform file operations on multiple backends.\n *\n * This includes checkpointing with the normal file operations.\n */\nclass ContentsManager {\n /**\n * Construct a new contents manager object.\n *\n * @param options - The options used to initialize the object.\n */\n constructor(options = {}) {\n var _a, _b;\n this._isDisposed = false;\n this._additionalDrives = new Map();\n this._fileChanged = new signaling_1.Signal(this);\n const serverSettings = (this.serverSettings =\n (_a = options.serverSettings) !== null && _a !== void 0 ? _a : __1.ServerConnection.makeSettings());\n this._defaultDrive = (_b = options.defaultDrive) !== null && _b !== void 0 ? _b : new Drive({ serverSettings });\n this._defaultDrive.fileChanged.connect(this._onFileChanged, this);\n }\n /**\n * A signal emitted when a file operation takes place.\n */\n get fileChanged() {\n return this._fileChanged;\n }\n /**\n * Test whether the manager has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the resources held by the manager.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n signaling_1.Signal.clearData(this);\n }\n /**\n * Add an `IDrive` to the manager.\n */\n addDrive(drive) {\n this._additionalDrives.set(drive.name, drive);\n drive.fileChanged.connect(this._onFileChanged, this);\n }\n /**\n * Given a path, get a shared model factory from the\n * relevant backend. Returns `null` if the backend\n * does not provide one.\n */\n getSharedModelFactory(path) {\n var _a;\n const [drive] = this._driveForPath(path);\n return (_a = drive === null || drive === void 0 ? void 0 : drive.sharedModelFactory) !== null && _a !== void 0 ? _a : null;\n }\n /**\n * Given a path of the form `drive:local/portion/of/it.txt`\n * get the local part of it.\n *\n * @param path: the path.\n *\n * @returns The local part of the path.\n */\n localPath(path) {\n const parts = path.split('/');\n const firstParts = parts[0].split(':');\n if (firstParts.length === 1 || !this._additionalDrives.has(firstParts[0])) {\n return coreutils_1.PathExt.removeSlash(path);\n }\n return coreutils_1.PathExt.join(firstParts.slice(1).join(':'), ...parts.slice(1));\n }\n /**\n * Normalize a global path. Reduces '..' and '.' parts, and removes\n * leading slashes from the local part of the path, while retaining\n * the drive name if it exists.\n *\n * @param path: the path.\n *\n * @returns The normalized path.\n */\n normalize(path) {\n const parts = path.split(':');\n if (parts.length === 1) {\n return coreutils_1.PathExt.normalize(path);\n }\n return `${parts[0]}:${coreutils_1.PathExt.normalize(parts.slice(1).join(':'))}`;\n }\n /**\n * Resolve a global path, starting from the root path. Behaves like\n * posix-path.resolve, with 3 differences:\n * - will never prepend cwd\n * - if root has a drive name, the result is prefixed with \":\"\n * - before adding drive name, leading slashes are removed\n *\n * @param path: the path.\n *\n * @returns The normalized path.\n */\n resolvePath(root, path) {\n const driveName = this.driveName(root);\n const localPath = this.localPath(root);\n const resolved = coreutils_1.PathExt.resolve('/', localPath, path);\n return driveName ? `${driveName}:${resolved}` : resolved;\n }\n /**\n * Given a path of the form `drive:local/portion/of/it.txt`\n * get the name of the drive. If the path is missing\n * a drive portion, returns an empty string.\n *\n * @param path: the path.\n *\n * @returns The drive name for the path, or the empty string.\n */\n driveName(path) {\n const parts = path.split('/');\n const firstParts = parts[0].split(':');\n if (firstParts.length === 1) {\n return '';\n }\n if (this._additionalDrives.has(firstParts[0])) {\n return firstParts[0];\n }\n return '';\n }\n /**\n * Get a file or directory.\n *\n * @param path: The path to the file.\n *\n * @param options: The options used to fetch the file.\n *\n * @returns A promise which resolves with the file content.\n */\n get(path, options) {\n const [drive, localPath] = this._driveForPath(path);\n return drive.get(localPath, options).then(contentsModel => {\n const listing = [];\n if (contentsModel.type === 'directory' && contentsModel.content) {\n for (const item of contentsModel.content) {\n listing.push({ ...item, path: this._toGlobalPath(drive, item.path) });\n }\n return {\n ...contentsModel,\n path: this._toGlobalPath(drive, localPath),\n content: listing,\n serverPath: contentsModel.path\n };\n }\n else {\n return {\n ...contentsModel,\n path: this._toGlobalPath(drive, localPath),\n serverPath: contentsModel.path\n };\n }\n });\n }\n /**\n * Get an encoded download url given a file path.\n *\n * @param path - An absolute POSIX file path on the server.\n *\n * #### Notes\n * It is expected that the path contains no relative paths.\n *\n * The returned URL may include a query parameter.\n */\n getDownloadUrl(path) {\n const [drive, localPath] = this._driveForPath(path);\n return drive.getDownloadUrl(localPath);\n }\n /**\n * Create a new untitled file or directory in the specified directory path.\n *\n * @param options: The options used to create the file.\n *\n * @returns A promise which resolves with the created file content when the\n * file is created.\n */\n newUntitled(options = {}) {\n if (options.path) {\n const globalPath = this.normalize(options.path);\n const [drive, localPath] = this._driveForPath(globalPath);\n return drive\n .newUntitled({ ...options, path: localPath })\n .then(contentsModel => {\n return {\n ...contentsModel,\n path: coreutils_1.PathExt.join(globalPath, contentsModel.name),\n serverPath: contentsModel.path\n };\n });\n }\n else {\n return this._defaultDrive.newUntitled(options);\n }\n }\n /**\n * Delete a file.\n *\n * @param path - The path to the file.\n *\n * @returns A promise which resolves when the file is deleted.\n */\n delete(path) {\n const [drive, localPath] = this._driveForPath(path);\n return drive.delete(localPath);\n }\n /**\n * Rename a file or directory.\n *\n * @param path - The original file path.\n *\n * @param newPath - The new file path.\n *\n * @returns A promise which resolves with the new file contents model when\n * the file is renamed.\n */\n rename(path, newPath) {\n const [drive1, path1] = this._driveForPath(path);\n const [drive2, path2] = this._driveForPath(newPath);\n if (drive1 !== drive2) {\n throw Error('ContentsManager: renaming files must occur within a Drive');\n }\n return drive1.rename(path1, path2).then(contentsModel => {\n return {\n ...contentsModel,\n path: this._toGlobalPath(drive1, path2),\n serverPath: contentsModel.path\n };\n });\n }\n /**\n * Save a file.\n *\n * @param path - The desired file path.\n *\n * @param options - Optional overrides to the model.\n *\n * @returns A promise which resolves with the file content model when the\n * file is saved.\n *\n * #### Notes\n * Ensure that `model.content` is populated for the file.\n */\n save(path, options = {}) {\n const globalPath = this.normalize(path);\n const [drive, localPath] = this._driveForPath(path);\n return drive\n .save(localPath, { ...options, path: localPath })\n .then(contentsModel => {\n return {\n ...contentsModel,\n path: globalPath,\n serverPath: contentsModel.path\n };\n });\n }\n /**\n * Copy a file into a given directory.\n *\n * @param path - The original file path.\n *\n * @param toDir - The destination directory path.\n *\n * @returns A promise which resolves with the new contents model when the\n * file is copied.\n *\n * #### Notes\n * The server will select the name of the copied file.\n */\n copy(fromFile, toDir) {\n const [drive1, path1] = this._driveForPath(fromFile);\n const [drive2, path2] = this._driveForPath(toDir);\n if (drive1 === drive2) {\n return drive1.copy(path1, path2).then(contentsModel => {\n return {\n ...contentsModel,\n path: this._toGlobalPath(drive1, contentsModel.path),\n serverPath: contentsModel.path\n };\n });\n }\n else {\n throw Error('Copying files between drives is not currently implemented');\n }\n }\n /**\n * Create a checkpoint for a file.\n *\n * @param path - The path of the file.\n *\n * @returns A promise which resolves with the new checkpoint model when the\n * checkpoint is created.\n */\n createCheckpoint(path) {\n const [drive, localPath] = this._driveForPath(path);\n return drive.createCheckpoint(localPath);\n }\n /**\n * List available checkpoints for a file.\n *\n * @param path - The path of the file.\n *\n * @returns A promise which resolves with a list of checkpoint models for\n * the file.\n */\n listCheckpoints(path) {\n const [drive, localPath] = this._driveForPath(path);\n return drive.listCheckpoints(localPath);\n }\n /**\n * Restore a file to a known checkpoint state.\n *\n * @param path - The path of the file.\n *\n * @param checkpointID - The id of the checkpoint to restore.\n *\n * @returns A promise which resolves when the checkpoint is restored.\n */\n restoreCheckpoint(path, checkpointID) {\n const [drive, localPath] = this._driveForPath(path);\n return drive.restoreCheckpoint(localPath, checkpointID);\n }\n /**\n * Delete a checkpoint for a file.\n *\n * @param path - The path of the file.\n *\n * @param checkpointID - The id of the checkpoint to delete.\n *\n * @returns A promise which resolves when the checkpoint is deleted.\n */\n deleteCheckpoint(path, checkpointID) {\n const [drive, localPath] = this._driveForPath(path);\n return drive.deleteCheckpoint(localPath, checkpointID);\n }\n /**\n * Given a drive and a local path, construct a fully qualified\n * path. The inverse of `_driveForPath`.\n *\n * @param drive: an `IDrive`.\n *\n * @param localPath: the local path on the drive.\n *\n * @returns the fully qualified path.\n */\n _toGlobalPath(drive, localPath) {\n if (drive === this._defaultDrive) {\n return coreutils_1.PathExt.removeSlash(localPath);\n }\n else {\n return `${drive.name}:${coreutils_1.PathExt.removeSlash(localPath)}`;\n }\n }\n /**\n * Given a path, get the `IDrive to which it refers,\n * where the path satisfies the pattern\n * `'driveName:path/to/file'`. If there is no `driveName`\n * prepended to the path, it returns the default drive.\n *\n * @param path: a path to a file.\n *\n * @returns A tuple containing an `IDrive` object for the path,\n * and a local path for that drive.\n */\n _driveForPath(path) {\n const driveName = this.driveName(path);\n const localPath = this.localPath(path);\n if (driveName) {\n return [this._additionalDrives.get(driveName), localPath];\n }\n else {\n return [this._defaultDrive, localPath];\n }\n }\n /**\n * Respond to fileChanged signals from the drives attached to\n * the manager. This prepends the drive name to the path if necessary,\n * and then forwards the signal.\n */\n _onFileChanged(sender, args) {\n var _a, _b;\n if (sender === this._defaultDrive) {\n this._fileChanged.emit(args);\n }\n else {\n let newValue = null;\n let oldValue = null;\n if ((_a = args.newValue) === null || _a === void 0 ? void 0 : _a.path) {\n newValue = {\n ...args.newValue,\n path: this._toGlobalPath(sender, args.newValue.path)\n };\n }\n if ((_b = args.oldValue) === null || _b === void 0 ? void 0 : _b.path) {\n oldValue = {\n ...args.oldValue,\n path: this._toGlobalPath(sender, args.oldValue.path)\n };\n }\n this._fileChanged.emit({\n type: args.type,\n newValue,\n oldValue\n });\n }\n }\n}\nexports.ContentsManager = ContentsManager;\n/**\n * A default implementation for an `IDrive`, talking to the\n * server using the Jupyter REST API.\n */\nclass Drive {\n /**\n * Construct a new contents manager object.\n *\n * @param options - The options used to initialize the object.\n */\n constructor(options = {}) {\n var _a, _b, _c;\n this._isDisposed = false;\n this._fileChanged = new signaling_1.Signal(this);\n this.name = (_a = options.name) !== null && _a !== void 0 ? _a : 'Default';\n this._apiEndpoint = (_b = options.apiEndpoint) !== null && _b !== void 0 ? _b : SERVICE_DRIVE_URL;\n this.serverSettings =\n (_c = options.serverSettings) !== null && _c !== void 0 ? _c : __1.ServerConnection.makeSettings();\n }\n /**\n * A signal emitted when a file operation takes place.\n */\n get fileChanged() {\n return this._fileChanged;\n }\n /**\n * Test whether the manager has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the resources held by the manager.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n signaling_1.Signal.clearData(this);\n }\n /**\n * Get a file or directory.\n *\n * @param localPath: The path to the file.\n *\n * @param options: The options used to fetch the file.\n *\n * @returns A promise which resolves with the file content.\n *\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n */\n async get(localPath, options) {\n let url = this._getUrl(localPath);\n if (options) {\n // The notebook type cannot take an format option.\n if (options.type === 'notebook') {\n delete options['format'];\n }\n const content = options.content ? '1' : '0';\n const params = { ...options, content };\n url += coreutils_1.URLExt.objectToQueryString(params);\n }\n const settings = this.serverSettings;\n const response = await __1.ServerConnection.makeRequest(url, {}, settings);\n if (response.status !== 200) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n validate.validateContentsModel(data);\n return data;\n }\n /**\n * Get an encoded download url given a file path.\n *\n * @param localPath - An absolute POSIX file path on the server.\n *\n * #### Notes\n * It is expected that the path contains no relative paths.\n *\n * The returned URL may include a query parameter.\n */\n getDownloadUrl(localPath) {\n const baseUrl = this.serverSettings.baseUrl;\n let url = coreutils_1.URLExt.join(baseUrl, FILES_URL, coreutils_1.URLExt.encodeParts(localPath));\n const xsrfTokenMatch = document.cookie.match('\\\\b_xsrf=([^;]*)\\\\b');\n if (xsrfTokenMatch) {\n const fullUrl = new URL(url);\n fullUrl.searchParams.append('_xsrf', xsrfTokenMatch[1]);\n url = fullUrl.toString();\n }\n return Promise.resolve(url);\n }\n /**\n * Create a new untitled file or directory in the specified directory path.\n *\n * @param options: The options used to create the file.\n *\n * @returns A promise which resolves with the created file content when the\n * file is created.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n */\n async newUntitled(options = {}) {\n var _a;\n let body = '{}';\n if (options) {\n if (options.ext) {\n options.ext = Private.normalizeExtension(options.ext);\n }\n body = JSON.stringify(options);\n }\n const settings = this.serverSettings;\n const url = this._getUrl((_a = options.path) !== null && _a !== void 0 ? _a : '');\n const init = {\n method: 'POST',\n body\n };\n const response = await __1.ServerConnection.makeRequest(url, init, settings);\n if (response.status !== 201) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n validate.validateContentsModel(data);\n this._fileChanged.emit({\n type: 'new',\n oldValue: null,\n newValue: data\n });\n return data;\n }\n /**\n * Delete a file.\n *\n * @param localPath - The path to the file.\n *\n * @returns A promise which resolves when the file is deleted.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents).\n */\n async delete(localPath) {\n const url = this._getUrl(localPath);\n const settings = this.serverSettings;\n const init = { method: 'DELETE' };\n const response = await __1.ServerConnection.makeRequest(url, init, settings);\n // TODO: update IPEP27 to specify errors more precisely, so\n // that error types can be detected here with certainty.\n if (response.status !== 204) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n this._fileChanged.emit({\n type: 'delete',\n oldValue: { path: localPath },\n newValue: null\n });\n }\n /**\n * Rename a file or directory.\n *\n * @param oldLocalPath - The original file path.\n *\n * @param newLocalPath - The new file path.\n *\n * @returns A promise which resolves with the new file contents model when\n * the file is renamed.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n */\n async rename(oldLocalPath, newLocalPath) {\n const settings = this.serverSettings;\n const url = this._getUrl(oldLocalPath);\n const init = {\n method: 'PATCH',\n body: JSON.stringify({ path: newLocalPath })\n };\n const response = await __1.ServerConnection.makeRequest(url, init, settings);\n if (response.status !== 200) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n validate.validateContentsModel(data);\n this._fileChanged.emit({\n type: 'rename',\n oldValue: { path: oldLocalPath },\n newValue: data\n });\n return data;\n }\n /**\n * Save a file.\n *\n * @param localPath - The desired file path.\n *\n * @param options - Optional overrides to the model.\n *\n * @returns A promise which resolves with the file content model when the\n * file is saved.\n *\n * #### Notes\n * Ensure that `model.content` is populated for the file.\n *\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n */\n async save(localPath, options = {}) {\n const settings = this.serverSettings;\n const url = this._getUrl(localPath);\n const init = {\n method: 'PUT',\n body: JSON.stringify(options)\n };\n const response = await __1.ServerConnection.makeRequest(url, init, settings);\n // will return 200 for an existing file and 201 for a new file\n if (response.status !== 200 && response.status !== 201) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n validate.validateContentsModel(data);\n this._fileChanged.emit({\n type: 'save',\n oldValue: null,\n newValue: data\n });\n return data;\n }\n /**\n * Copy a file into a given directory.\n *\n * @param localPath - The original file path.\n *\n * @param toDir - The destination directory path.\n *\n * @returns A promise which resolves with the new contents model when the\n * file is copied.\n *\n * #### Notes\n * The server will select the name of the copied file.\n *\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n */\n async copy(fromFile, toDir) {\n const settings = this.serverSettings;\n const url = this._getUrl(toDir);\n const init = {\n method: 'POST',\n body: JSON.stringify({ copy_from: fromFile })\n };\n const response = await __1.ServerConnection.makeRequest(url, init, settings);\n if (response.status !== 201) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n validate.validateContentsModel(data);\n this._fileChanged.emit({\n type: 'new',\n oldValue: null,\n newValue: data\n });\n return data;\n }\n /**\n * Create a checkpoint for a file.\n *\n * @param localPath - The path of the file.\n *\n * @returns A promise which resolves with the new checkpoint model when the\n * checkpoint is created.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n */\n async createCheckpoint(localPath) {\n const url = this._getUrl(localPath, 'checkpoints');\n const init = { method: 'POST' };\n const response = await __1.ServerConnection.makeRequest(url, init, this.serverSettings);\n if (response.status !== 201) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n validate.validateCheckpointModel(data);\n return data;\n }\n /**\n * List available checkpoints for a file.\n *\n * @param localPath - The path of the file.\n *\n * @returns A promise which resolves with a list of checkpoint models for\n * the file.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n */\n async listCheckpoints(localPath) {\n const url = this._getUrl(localPath, 'checkpoints');\n const response = await __1.ServerConnection.makeRequest(url, {}, this.serverSettings);\n if (response.status !== 200) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n if (!Array.isArray(data)) {\n throw new Error('Invalid Checkpoint list');\n }\n for (let i = 0; i < data.length; i++) {\n validate.validateCheckpointModel(data[i]);\n }\n return data;\n }\n /**\n * Restore a file to a known checkpoint state.\n *\n * @param localPath - The path of the file.\n *\n * @param checkpointID - The id of the checkpoint to restore.\n *\n * @returns A promise which resolves when the checkpoint is restored.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents).\n */\n async restoreCheckpoint(localPath, checkpointID) {\n const url = this._getUrl(localPath, 'checkpoints', checkpointID);\n const init = { method: 'POST' };\n const response = await __1.ServerConnection.makeRequest(url, init, this.serverSettings);\n if (response.status !== 204) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n }\n /**\n * Delete a checkpoint for a file.\n *\n * @param localPath - The path of the file.\n *\n * @param checkpointID - The id of the checkpoint to delete.\n *\n * @returns A promise which resolves when the checkpoint is deleted.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents).\n */\n async deleteCheckpoint(localPath, checkpointID) {\n const url = this._getUrl(localPath, 'checkpoints', checkpointID);\n const init = { method: 'DELETE' };\n const response = await __1.ServerConnection.makeRequest(url, init, this.serverSettings);\n if (response.status !== 204) {\n const err = await __1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n }\n /**\n * Get a REST url for a file given a path.\n */\n _getUrl(...args) {\n const parts = args.map(path => coreutils_1.URLExt.encodeParts(path));\n const baseUrl = this.serverSettings.baseUrl;\n return coreutils_1.URLExt.join(baseUrl, this._apiEndpoint, ...parts);\n }\n}\nexports.Drive = Drive;\n/**\n * A namespace for module private data.\n */\nvar Private;\n(function (Private) {\n /**\n * Normalize a file extension to be of the type `'.foo'`.\n *\n * Adds a leading dot if not present and converts to lower case.\n */\n function normalizeExtension(extension) {\n if (extension.length > 0 && extension.indexOf('.') !== 0) {\n extension = `.${extension}`;\n }\n return extension;\n }\n Private.normalizeExtension = normalizeExtension;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateCheckpointModel = exports.validateContentsModel = void 0;\nconst validate_1 = require(\"../validate\");\n/**\n * Validate an `Contents.IModel` object.\n */\nfunction validateContentsModel(model) {\n (0, validate_1.validateProperty)(model, 'name', 'string');\n (0, validate_1.validateProperty)(model, 'path', 'string');\n (0, validate_1.validateProperty)(model, 'type', 'string');\n (0, validate_1.validateProperty)(model, 'created', 'string');\n (0, validate_1.validateProperty)(model, 'last_modified', 'string');\n (0, validate_1.validateProperty)(model, 'mimetype', 'object');\n (0, validate_1.validateProperty)(model, 'content', 'object');\n (0, validate_1.validateProperty)(model, 'format', 'object');\n}\nexports.validateContentsModel = validateContentsModel;\n/**\n * Validate an `Contents.ICheckpointModel` object.\n */\nfunction validateCheckpointModel(model) {\n (0, validate_1.validateProperty)(model, 'id', 'string');\n (0, validate_1.validateProperty)(model, 'last_modified', 'string');\n}\nexports.validateCheckpointModel = validateCheckpointModel;\n//# sourceMappingURL=validate.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst serverconnection_1 = require(\"../serverconnection\");\n/**\n * The url for the jupyter-server events service.\n */\nconst SERVICE_EVENTS_URL = 'api/events';\n/**\n * The events API service manager.\n */\nclass EventManager {\n /**\n * Create a new event manager.\n */\n constructor(options = {}) {\n var _a;\n this._socket = null;\n this.serverSettings =\n (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n // If subscription fails, the poll attempts to reconnect and backs off.\n this._poll = new polling_1.Poll({ factory: () => this._subscribe() });\n this._stream = new signaling_1.Stream(this);\n // Subscribe to the events socket.\n void this._poll.start();\n }\n /**\n * Whether the event manager is disposed.\n */\n get isDisposed() {\n return this._poll.isDisposed;\n }\n /**\n * An event stream that emits and yields each new event.\n */\n get stream() {\n return this._stream;\n }\n /**\n * Dispose the event manager.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n // Clean up poll.\n this._poll.dispose();\n // Clean up socket.\n const socket = this._socket;\n if (socket) {\n this._socket = null;\n socket.onopen = () => undefined;\n socket.onerror = () => undefined;\n socket.onmessage = () => undefined;\n socket.onclose = () => undefined;\n socket.close();\n }\n // Clean up stream.\n signaling_1.Signal.clearData(this);\n this._stream.stop();\n }\n /**\n * Post an event request to be emitted by the event bus.\n */\n async emit(event) {\n const { serverSettings } = this;\n const { baseUrl, token } = serverSettings;\n const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n const url = coreutils_1.URLExt.join(baseUrl, SERVICE_EVENTS_URL) +\n (token ? `?token=${token}` : '');\n const init = { body: JSON.stringify(event), method: 'POST' };\n const response = await makeRequest(url, init, serverSettings);\n if (response.status !== 204) {\n throw new ResponseError(response);\n }\n }\n /**\n * Subscribe to event bus emissions.\n */\n _subscribe() {\n return new Promise((_, reject) => {\n if (this.isDisposed) {\n return;\n }\n const { token, WebSocket, wsUrl } = this.serverSettings;\n const url = coreutils_1.URLExt.join(wsUrl, SERVICE_EVENTS_URL, 'subscribe') +\n (token ? `?token=${encodeURIComponent(token)}` : '');\n const socket = (this._socket = new WebSocket(url));\n const stream = this._stream;\n socket.onclose = () => reject(new Error('EventManager socket closed'));\n socket.onmessage = msg => msg.data && stream.emit(JSON.parse(msg.data));\n });\n }\n}\nexports.EventManager = EventManager;\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module services\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./basemanager\"), exports);\n__exportStar(require(\"./config\"), exports);\n__exportStar(require(\"./contents\"), exports);\n__exportStar(require(\"./event\"), exports);\n__exportStar(require(\"./kernel\"), exports);\n__exportStar(require(\"./kernelspec\"), exports);\n__exportStar(require(\"./manager\"), exports);\n__exportStar(require(\"./serverconnection\"), exports);\n__exportStar(require(\"./session\"), exports);\n__exportStar(require(\"./setting\"), exports);\n__exportStar(require(\"./terminal\"), exports);\n__exportStar(require(\"./user\"), exports);\n__exportStar(require(\"./workspace\"), exports);\n__exportStar(require(\"./nbconvert\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CommHandler = void 0;\nconst disposable_1 = require(\"@lumino/disposable\");\nconst KernelMessage = __importStar(require(\"./messages\"));\n/**\n * Comm channel handler.\n */\nclass CommHandler extends disposable_1.DisposableDelegate {\n /**\n * Construct a new comm channel.\n */\n constructor(target, id, kernel, disposeCb) {\n super(disposeCb);\n this._target = '';\n this._id = '';\n this._id = id;\n this._target = target;\n this._kernel = kernel;\n }\n /**\n * The unique id for the comm channel.\n */\n get commId() {\n return this._id;\n }\n /**\n * The target name for the comm channel.\n */\n get targetName() {\n return this._target;\n }\n /**\n * Get the callback for a comm close event.\n *\n * #### Notes\n * This is called when the comm is closed from either the server or client.\n *\n * **See also:** [[ICommClose]], [[close]]\n */\n get onClose() {\n return this._onClose;\n }\n /**\n * Set the callback for a comm close event.\n *\n * #### Notes\n * This is called when the comm is closed from either the server or client. If\n * the function returns a promise, and the kernel was closed from the server,\n * kernel message processing will pause until the returned promise is\n * fulfilled.\n *\n * **See also:** [[close]]\n */\n set onClose(cb) {\n this._onClose = cb;\n }\n /**\n * Get the callback for a comm message received event.\n */\n get onMsg() {\n return this._onMsg;\n }\n /**\n * Set the callback for a comm message received event.\n *\n * #### Notes\n * This is called when a comm message is received. If the function returns a\n * promise, kernel message processing will pause until it is fulfilled.\n */\n set onMsg(cb) {\n this._onMsg = cb;\n }\n /**\n * Open a comm with optional data and metadata.\n *\n * #### Notes\n * This sends a `comm_open` message to the server.\n *\n * **See also:** [[ICommOpen]]\n */\n open(data, metadata, buffers = []) {\n if (this.isDisposed || this._kernel.isDisposed) {\n throw new Error('Cannot open');\n }\n const msg = KernelMessage.createMessage({\n msgType: 'comm_open',\n channel: 'shell',\n username: this._kernel.username,\n session: this._kernel.clientId,\n content: {\n comm_id: this._id,\n target_name: this._target,\n data: data !== null && data !== void 0 ? data : {}\n },\n metadata,\n buffers\n });\n return this._kernel.sendShellMessage(msg, false, true);\n }\n /**\n * Send a `comm_msg` message to the kernel.\n *\n * #### Notes\n * This is a no-op if the comm has been closed.\n *\n * **See also:** [[ICommMsg]]\n */\n send(data, metadata, buffers = [], disposeOnDone = true) {\n if (this.isDisposed || this._kernel.isDisposed) {\n throw new Error('Cannot send');\n }\n const msg = KernelMessage.createMessage({\n msgType: 'comm_msg',\n channel: 'shell',\n username: this._kernel.username,\n session: this._kernel.clientId,\n content: {\n comm_id: this._id,\n data: data\n },\n metadata,\n buffers\n });\n return this._kernel.sendShellMessage(msg, false, disposeOnDone);\n }\n /**\n * Close the comm.\n *\n * #### Notes\n * This will send a `comm_close` message to the kernel, and call the\n * `onClose` callback if set.\n *\n * This is a no-op if the comm is already closed.\n *\n * **See also:** [[ICommClose]], [[onClose]]\n */\n close(data, metadata, buffers = []) {\n if (this.isDisposed || this._kernel.isDisposed) {\n throw new Error('Cannot close');\n }\n const msg = KernelMessage.createMessage({\n msgType: 'comm_close',\n channel: 'shell',\n username: this._kernel.username,\n session: this._kernel.clientId,\n content: {\n comm_id: this._id,\n data: data !== null && data !== void 0 ? data : {}\n },\n metadata,\n buffers\n });\n const future = this._kernel.sendShellMessage(msg, false, true);\n const onClose = this._onClose;\n if (onClose) {\n const ioMsg = KernelMessage.createMessage({\n msgType: 'comm_close',\n channel: 'iopub',\n username: this._kernel.username,\n session: this._kernel.clientId,\n content: {\n comm_id: this._id,\n data: data !== null && data !== void 0 ? data : {}\n },\n metadata,\n buffers\n });\n // In the future, we may want to communicate back to the user the possible\n // promise returned from onClose.\n void onClose(ioMsg);\n }\n this.dispose();\n return future;\n }\n}\nexports.CommHandler = CommHandler;\n//# sourceMappingURL=comm.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelConnection = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst coreutils_2 = require(\"@lumino/coreutils\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst comm_1 = require(\"./comm\");\nconst KernelMessage = __importStar(require(\"./messages\"));\nconst future_1 = require(\"./future\");\nconst serialize_1 = require(\"./serialize\");\nconst validate = __importStar(require(\"./validate\"));\nconst kernelspec_1 = require(\"../kernelspec\");\nconst restapi = __importStar(require(\"./restapi\"));\nconst KERNEL_INFO_TIMEOUT = 3000;\nconst RESTARTING_KERNEL_SESSION = '_RESTARTING_';\nconst STARTING_KERNEL_SESSION = '';\n/**\n * Implementation of the Kernel object.\n *\n * #### Notes\n * Messages from the server are handled in the order they were received and\n * asynchronously. Any message handler can return a promise, and message\n * handling will pause until the promise is fulfilled.\n */\nclass KernelConnection {\n /**\n * Construct a kernel object.\n */\n constructor(options) {\n var _a, _b, _c, _d;\n /**\n * Create the kernel websocket connection and add socket status handlers.\n */\n this._createSocket = (useProtocols = true) => {\n this._errorIfDisposed();\n // Make sure the socket is clear\n this._clearSocket();\n // Update the connection status to reflect opening a new connection.\n this._updateConnectionStatus('connecting');\n const settings = this.serverSettings;\n const partialUrl = coreutils_1.URLExt.join(settings.wsUrl, restapi.KERNEL_SERVICE_URL, encodeURIComponent(this._id));\n // Strip any authentication from the display string.\n const display = partialUrl.replace(/^((?:\\w+:)?\\/\\/)(?:[^@\\/]+@)/, '$1');\n console.debug(`Starting WebSocket: ${display}`);\n let url = coreutils_1.URLExt.join(partialUrl, 'channels?session_id=' + encodeURIComponent(this._clientId));\n // If token authentication is in use.\n const token = settings.token;\n if (settings.appendToken && token !== '') {\n url = url + `&token=${encodeURIComponent(token)}`;\n }\n // Try opening the websocket with our list of subprotocols.\n // If the server doesn't handle subprotocols,\n // the accepted protocol will be ''.\n // But we cannot send '' as a subprotocol, so if connection fails,\n // reconnect without subprotocols.\n const supportedProtocols = useProtocols ? this._supportedProtocols : [];\n this._ws = new settings.WebSocket(url, supportedProtocols);\n // Ensure incoming binary messages are not Blobs\n this._ws.binaryType = 'arraybuffer';\n let alreadyCalledOnclose = false;\n const getKernelModel = async (evt) => {\n var _a, _b;\n if (this._isDisposed) {\n return;\n }\n this._reason = '';\n this._model = undefined;\n try {\n const model = await restapi.getKernelModel(this._id, settings);\n this._model = model;\n if ((model === null || model === void 0 ? void 0 : model.execution_state) === 'dead') {\n this._updateStatus('dead');\n }\n else {\n this._onWSClose(evt);\n }\n }\n catch (err) {\n // Try again, if there is a network failure\n // Handle network errors, as well as cases where we are on a\n // JupyterHub and the server is not running. JupyterHub returns a\n // 503 (<2.0) or 424 (>2.0) in that case.\n if (err instanceof __1.ServerConnection.NetworkError ||\n ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 503 ||\n ((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 424) {\n const timeout = Private.getRandomIntInclusive(10, 30) * 1e3;\n setTimeout(getKernelModel, timeout, evt);\n }\n else {\n this._reason = 'Kernel died unexpectedly';\n this._updateStatus('dead');\n }\n }\n return;\n };\n const earlyClose = async (evt) => {\n // If the websocket was closed early, that could mean\n // that the kernel is actually dead. Try getting\n // information about the kernel from the API call,\n // if that fails, then assume the kernel is dead,\n // otherwise just follow the typical websocket closed\n // protocol.\n if (alreadyCalledOnclose) {\n return;\n }\n alreadyCalledOnclose = true;\n await getKernelModel(evt);\n return;\n };\n this._ws.onmessage = this._onWSMessage;\n this._ws.onopen = this._onWSOpen;\n this._ws.onclose = earlyClose;\n this._ws.onerror = earlyClose;\n };\n // Make websocket callbacks arrow functions so they bind `this`.\n /**\n * Handle a websocket open event.\n */\n this._onWSOpen = (evt) => {\n if (this._ws.protocol !== '' &&\n !this._supportedProtocols.includes(this._ws.protocol)) {\n console.log('Server selected unknown kernel wire protocol:', this._ws.protocol);\n this._updateStatus('dead');\n throw new Error(`Unknown kernel wire protocol: ${this._ws.protocol}`);\n }\n // Remember the kernel wire protocol selected by the server.\n this._selectedProtocol = this._ws.protocol;\n this._ws.onclose = this._onWSClose;\n this._ws.onerror = this._onWSClose;\n this._updateConnectionStatus('connected');\n };\n /**\n * Handle a websocket message, validating and routing appropriately.\n */\n this._onWSMessage = (evt) => {\n // Notify immediately if there is an error with the message.\n let msg;\n try {\n msg = (0, serialize_1.deserialize)(evt.data, this._ws.protocol);\n validate.validateMessage(msg);\n }\n catch (error) {\n error.message = `Kernel message validation error: ${error.message}`;\n // We throw the error so that it bubbles up to the top, and displays the right stack.\n throw error;\n }\n // Update the current kernel session id\n this._kernelSession = msg.header.session;\n // Handle the message asynchronously, in the order received.\n this._msgChain = this._msgChain\n .then(() => {\n // Return so that any promises from handling a message are fulfilled\n // before proceeding to the next message.\n return this._handleMessage(msg);\n })\n .catch(error => {\n // Log any errors in handling the message, thus resetting the _msgChain\n // promise so we can process more messages.\n // Ignore the \"Canceled\" errors that are thrown during kernel dispose.\n if (error.message.startsWith('Canceled future for ')) {\n console.error(error);\n }\n });\n // Emit the message receive signal\n this._anyMessage.emit({ msg, direction: 'recv' });\n };\n /**\n * Handle a websocket close event.\n */\n this._onWSClose = (evt) => {\n if (!this.isDisposed) {\n this._reconnect();\n }\n };\n this._id = '';\n this._name = '';\n this._status = 'unknown';\n this._connectionStatus = 'connecting';\n this._kernelSession = '';\n this._isDisposed = false;\n /**\n * Websocket to communicate with kernel.\n */\n this._ws = null;\n this._username = '';\n this._reconnectLimit = 7;\n this._reconnectAttempt = 0;\n this._reconnectTimeout = null;\n this._supportedProtocols = Object.values(KernelMessage.supportedKernelWebSocketProtocols);\n this._selectedProtocol = '';\n this._futures = new Map();\n this._comms = new Map();\n this._targetRegistry = Object.create(null);\n this._info = new coreutils_2.PromiseDelegate();\n this._pendingMessages = [];\n this._statusChanged = new signaling_1.Signal(this);\n this._connectionStatusChanged = new signaling_1.Signal(this);\n this._disposed = new signaling_1.Signal(this);\n this._iopubMessage = new signaling_1.Signal(this);\n this._anyMessage = new signaling_1.Signal(this);\n this._pendingInput = new signaling_1.Signal(this);\n this._unhandledMessage = new signaling_1.Signal(this);\n this._displayIdToParentIds = new Map();\n this._msgIdToDisplayIds = new Map();\n this._msgChain = Promise.resolve();\n this._hasPendingInput = false;\n this._reason = '';\n this._noOp = () => {\n /* no-op */\n };\n this._name = options.model.name;\n this._id = options.model.id;\n this.serverSettings =\n (_a = options.serverSettings) !== null && _a !== void 0 ? _a : __1.ServerConnection.makeSettings();\n this._clientId = (_b = options.clientId) !== null && _b !== void 0 ? _b : coreutils_2.UUID.uuid4();\n this._username = (_c = options.username) !== null && _c !== void 0 ? _c : '';\n this.handleComms = (_d = options.handleComms) !== null && _d !== void 0 ? _d : true;\n this._createSocket();\n }\n get disposed() {\n return this._disposed;\n }\n /**\n * A signal emitted when the kernel status changes.\n */\n get statusChanged() {\n return this._statusChanged;\n }\n /**\n * A signal emitted when the kernel status changes.\n */\n get connectionStatusChanged() {\n return this._connectionStatusChanged;\n }\n /**\n * A signal emitted for iopub kernel messages.\n *\n * #### Notes\n * This signal is emitted after the iopub message is handled asynchronously.\n */\n get iopubMessage() {\n return this._iopubMessage;\n }\n /**\n * A signal emitted for unhandled kernel message.\n *\n * #### Notes\n * This signal is emitted for a message that was not handled. It is emitted\n * during the asynchronous message handling code.\n */\n get unhandledMessage() {\n return this._unhandledMessage;\n }\n /**\n * The kernel model\n */\n get model() {\n return (this._model || {\n id: this.id,\n name: this.name,\n reason: this._reason\n });\n }\n /**\n * A signal emitted for any kernel message.\n *\n * #### Notes\n * This signal is emitted when a message is received, before it is handled\n * asynchronously.\n *\n * This message is emitted when a message is queued for sending (either in\n * the websocket buffer, or our own pending message buffer). The message may\n * actually be sent across the wire at a later time.\n *\n * The message emitted in this signal should not be modified in any way.\n */\n get anyMessage() {\n return this._anyMessage;\n }\n /**\n * A signal emitted when a kernel has pending inputs from the user.\n */\n get pendingInput() {\n return this._pendingInput;\n }\n /**\n * The id of the server-side kernel.\n */\n get id() {\n return this._id;\n }\n /**\n * The name of the server-side kernel.\n */\n get name() {\n return this._name;\n }\n /**\n * The client username.\n */\n get username() {\n return this._username;\n }\n /**\n * The client unique id.\n */\n get clientId() {\n return this._clientId;\n }\n /**\n * The current status of the kernel.\n */\n get status() {\n return this._status;\n }\n /**\n * The current connection status of the kernel connection.\n */\n get connectionStatus() {\n return this._connectionStatus;\n }\n /**\n * Test whether the kernel has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * The cached kernel info.\n *\n * @returns A promise that resolves to the kernel info.\n */\n get info() {\n return this._info.promise;\n }\n /**\n * The kernel spec.\n *\n * @returns A promise that resolves to the kernel spec.\n */\n get spec() {\n if (this._specPromise) {\n return this._specPromise;\n }\n this._specPromise = kernelspec_1.KernelSpecAPI.getSpecs(this.serverSettings).then(specs => {\n return specs.kernelspecs[this._name];\n });\n return this._specPromise;\n }\n /**\n * Clone the current kernel with a new clientId.\n */\n clone(options = {}) {\n return new KernelConnection({\n model: this.model,\n username: this.username,\n serverSettings: this.serverSettings,\n // handleComms defaults to false since that is safer\n handleComms: false,\n ...options\n });\n }\n /**\n * Dispose of the resources held by the kernel.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n this._disposed.emit();\n this._updateConnectionStatus('disconnected');\n this._clearKernelState();\n this._pendingMessages = [];\n this._clearSocket();\n // Clear Lumino signals\n signaling_1.Signal.clearData(this);\n }\n /**\n * Send a shell message to the kernel.\n *\n * #### Notes\n * Send a message to the kernel's shell channel, yielding a future object\n * for accepting replies.\n *\n * If `expectReply` is given and `true`, the future is disposed when both a\n * shell reply and an idle status message are received. If `expectReply`\n * is not given or is `false`, the future is resolved when an idle status\n * message is received.\n * If `disposeOnDone` is not given or is `true`, the Future is disposed at this point.\n * If `disposeOnDone` is given and `false`, it is up to the caller to dispose of the Future.\n *\n * All replies are validated as valid kernel messages.\n *\n * If the kernel status is `dead`, this will throw an error.\n */\n sendShellMessage(msg, expectReply = false, disposeOnDone = true) {\n return this._sendKernelShellControl(future_1.KernelShellFutureHandler, msg, expectReply, disposeOnDone);\n }\n /**\n * Send a control message to the kernel.\n *\n * #### Notes\n * Send a message to the kernel's control channel, yielding a future object\n * for accepting replies.\n *\n * If `expectReply` is given and `true`, the future is disposed when both a\n * control reply and an idle status message are received. If `expectReply`\n * is not given or is `false`, the future is resolved when an idle status\n * message is received.\n * If `disposeOnDone` is not given or is `true`, the Future is disposed at this point.\n * If `disposeOnDone` is given and `false`, it is up to the caller to dispose of the Future.\n *\n * All replies are validated as valid kernel messages.\n *\n * If the kernel status is `dead`, this will throw an error.\n */\n sendControlMessage(msg, expectReply = false, disposeOnDone = true) {\n return this._sendKernelShellControl(future_1.KernelControlFutureHandler, msg, expectReply, disposeOnDone);\n }\n _sendKernelShellControl(ctor, msg, expectReply = false, disposeOnDone = true) {\n this._sendMessage(msg);\n this._anyMessage.emit({ msg, direction: 'send' });\n const future = new ctor(() => {\n const msgId = msg.header.msg_id;\n this._futures.delete(msgId);\n // Remove stored display id information.\n const displayIds = this._msgIdToDisplayIds.get(msgId);\n if (!displayIds) {\n return;\n }\n displayIds.forEach(displayId => {\n const msgIds = this._displayIdToParentIds.get(displayId);\n if (msgIds) {\n const idx = msgIds.indexOf(msgId);\n if (idx === -1) {\n return;\n }\n if (msgIds.length === 1) {\n this._displayIdToParentIds.delete(displayId);\n }\n else {\n msgIds.splice(idx, 1);\n this._displayIdToParentIds.set(displayId, msgIds);\n }\n }\n });\n this._msgIdToDisplayIds.delete(msgId);\n }, msg, expectReply, disposeOnDone, this);\n this._futures.set(msg.header.msg_id, future);\n return future;\n }\n /**\n * Send a message on the websocket.\n *\n * If queue is true, queue the message for later sending if we cannot send\n * now. Otherwise throw an error.\n *\n * #### Notes\n * As an exception to the queueing, if we are sending a kernel_info_request\n * message while we think the kernel is restarting, we send the message\n * immediately without queueing. This is so that we can trigger a message\n * back, which will then clear the kernel restarting state.\n */\n _sendMessage(msg, queue = true) {\n if (this.status === 'dead') {\n throw new Error('Kernel is dead');\n }\n // If we have a kernel_info_request and we are starting or restarting, send the\n // kernel_info_request immediately if we can, and if not throw an error so\n // we can retry later. On restarting we do this because we must get at least one message\n // from the kernel to reset the kernel session (thus clearing the restart\n // status sentinel).\n if ((this._kernelSession === STARTING_KERNEL_SESSION ||\n this._kernelSession === RESTARTING_KERNEL_SESSION) &&\n KernelMessage.isInfoRequestMsg(msg)) {\n if (this.connectionStatus === 'connected') {\n this._ws.send((0, serialize_1.serialize)(msg, this._ws.protocol));\n return;\n }\n else {\n throw new Error('Could not send message: status is not connected');\n }\n }\n // If there are pending messages, add to the queue so we keep messages in order\n if (queue && this._pendingMessages.length > 0) {\n this._pendingMessages.push(msg);\n return;\n }\n // Send if the ws allows it, otherwise queue the message.\n if (this.connectionStatus === 'connected' &&\n this._kernelSession !== RESTARTING_KERNEL_SESSION) {\n this._ws.send((0, serialize_1.serialize)(msg, this._ws.protocol));\n }\n else if (queue) {\n this._pendingMessages.push(msg);\n }\n else {\n throw new Error('Could not send message');\n }\n }\n /**\n * Interrupt a kernel.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels).\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n *\n * It is assumed that the API call does not mutate the kernel id or name.\n *\n * The promise will be rejected if the kernel status is `Dead` or if the\n * request fails or the response is invalid.\n */\n async interrupt() {\n this.hasPendingInput = false;\n if (this.status === 'dead') {\n throw new Error('Kernel is dead');\n }\n return restapi.interruptKernel(this.id, this.serverSettings);\n }\n /**\n * Request a kernel restart.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels)\n * and validates the response model.\n *\n * Any existing Future or Comm objects are cleared once the kernel has\n * actually be restarted.\n *\n * The promise is fulfilled on a valid server response (after the kernel restarts)\n * and rejected otherwise.\n *\n * It is assumed that the API call does not mutate the kernel id or name.\n *\n * The promise will be rejected if the request fails or the response is\n * invalid.\n */\n async restart() {\n if (this.status === 'dead') {\n throw new Error('Kernel is dead');\n }\n this._updateStatus('restarting');\n this._clearKernelState();\n this._kernelSession = RESTARTING_KERNEL_SESSION;\n await restapi.restartKernel(this.id, this.serverSettings);\n // Reconnect to the kernel to address cases where kernel ports\n // have changed during the restart.\n await this.reconnect();\n this.hasPendingInput = false;\n }\n /**\n * Reconnect to a kernel.\n *\n * #### Notes\n * This may try multiple times to reconnect to a kernel, and will sever any\n * existing connection.\n */\n reconnect() {\n this._errorIfDisposed();\n const result = new coreutils_2.PromiseDelegate();\n // Set up a listener for the connection status changing, which accepts or\n // rejects after the retries are done.\n const fulfill = (sender, status) => {\n if (status === 'connected') {\n result.resolve();\n this.connectionStatusChanged.disconnect(fulfill, this);\n }\n else if (status === 'disconnected') {\n result.reject(new Error('Kernel connection disconnected'));\n this.connectionStatusChanged.disconnect(fulfill, this);\n }\n };\n this.connectionStatusChanged.connect(fulfill, this);\n // Reset the reconnect limit so we start the connection attempts fresh\n this._reconnectAttempt = 0;\n // Start the reconnection process, which will also clear any existing\n // connection.\n this._reconnect();\n // Return the promise that should resolve on connection or reject if the\n // retries don't work.\n return result.promise;\n }\n /**\n * Shutdown a kernel.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels).\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n *\n * On a valid response, disposes this kernel connection.\n *\n * If the kernel is already `dead`, disposes this kernel connection without\n * a server request.\n */\n async shutdown() {\n if (this.status !== 'dead') {\n await restapi.shutdownKernel(this.id, this.serverSettings);\n }\n this.handleShutdown();\n }\n /**\n * Handles a kernel shutdown.\n *\n * #### Notes\n * This method should be called if we know from outside information that a\n * kernel is dead (for example, we cannot find the kernel model on the\n * server).\n */\n handleShutdown() {\n this._updateStatus('dead');\n this.dispose();\n }\n /**\n * Send a `kernel_info_request` message.\n *\n * #### Notes\n * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#kernel-info).\n *\n * Fulfills with the `kernel_info_response` content when the shell reply is\n * received and validated.\n */\n async requestKernelInfo() {\n const msg = KernelMessage.createMessage({\n msgType: 'kernel_info_request',\n channel: 'shell',\n username: this._username,\n session: this._clientId,\n content: {}\n });\n let reply;\n try {\n reply = (await Private.handleShellMessage(this, msg));\n }\n catch (e) {\n // If we rejected because the future was disposed, ignore and return.\n if (this.isDisposed) {\n return;\n }\n else {\n throw e;\n }\n }\n this._errorIfDisposed();\n if (!reply) {\n return;\n }\n // Kernels sometimes do not include a status field on kernel_info_reply\n // messages, so set a default for now.\n // See https://github.com/jupyterlab/jupyterlab/issues/6760\n if (reply.content.status === undefined) {\n reply.content.status = 'ok';\n }\n if (reply.content.status !== 'ok') {\n this._info.reject('Kernel info reply errored');\n return reply;\n }\n this._info.resolve(reply.content);\n this._kernelSession = reply.header.session;\n return reply;\n }\n /**\n * Send a `complete_request` message.\n *\n * #### Notes\n * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#completion).\n *\n * Fulfills with the `complete_reply` content when the shell reply is\n * received and validated.\n */\n requestComplete(content) {\n const msg = KernelMessage.createMessage({\n msgType: 'complete_request',\n channel: 'shell',\n username: this._username,\n session: this._clientId,\n content\n });\n return Private.handleShellMessage(this, msg);\n }\n /**\n * Send an `inspect_request` message.\n *\n * #### Notes\n * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#introspection).\n *\n * Fulfills with the `inspect_reply` content when the shell reply is\n * received and validated.\n */\n requestInspect(content) {\n const msg = KernelMessage.createMessage({\n msgType: 'inspect_request',\n channel: 'shell',\n username: this._username,\n session: this._clientId,\n content: content\n });\n return Private.handleShellMessage(this, msg);\n }\n /**\n * Send a `history_request` message.\n *\n * #### Notes\n * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#history).\n *\n * Fulfills with the `history_reply` content when the shell reply is\n * received and validated.\n */\n requestHistory(content) {\n const msg = KernelMessage.createMessage({\n msgType: 'history_request',\n channel: 'shell',\n username: this._username,\n session: this._clientId,\n content\n });\n return Private.handleShellMessage(this, msg);\n }\n /**\n * Send an `execute_request` message.\n *\n * #### Notes\n * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#execute).\n *\n * Future `onReply` is called with the `execute_reply` content when the\n * shell reply is received and validated. The future will resolve when\n * this message is received and the `idle` iopub status is received.\n * The future will also be disposed at this point unless `disposeOnDone`\n * is specified and `false`, in which case it is up to the caller to dispose\n * of the future.\n *\n * **See also:** [[IExecuteReply]]\n */\n requestExecute(content, disposeOnDone = true, metadata) {\n const defaults = {\n silent: false,\n store_history: true,\n user_expressions: {},\n allow_stdin: true,\n stop_on_error: false\n };\n const msg = KernelMessage.createMessage({\n msgType: 'execute_request',\n channel: 'shell',\n username: this._username,\n session: this._clientId,\n content: { ...defaults, ...content },\n metadata\n });\n return this.sendShellMessage(msg, true, disposeOnDone);\n }\n /**\n * Send an experimental `debug_request` message.\n *\n * @hidden\n *\n * #### Notes\n * Debug messages are experimental messages that are not in the official\n * kernel message specification. As such, this function is *NOT* considered\n * part of the public API, and may change without notice.\n */\n requestDebug(content, disposeOnDone = true) {\n const msg = KernelMessage.createMessage({\n msgType: 'debug_request',\n channel: 'control',\n username: this._username,\n session: this._clientId,\n content\n });\n return this.sendControlMessage(msg, true, disposeOnDone);\n }\n /**\n * Send an `is_complete_request` message.\n *\n * #### Notes\n * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#code-completeness).\n *\n * Fulfills with the `is_complete_response` content when the shell reply is\n * received and validated.\n */\n requestIsComplete(content) {\n const msg = KernelMessage.createMessage({\n msgType: 'is_complete_request',\n channel: 'shell',\n username: this._username,\n session: this._clientId,\n content\n });\n return Private.handleShellMessage(this, msg);\n }\n /**\n * Send a `comm_info_request` message.\n *\n * #### Notes\n * Fulfills with the `comm_info_reply` content when the shell reply is\n * received and validated.\n */\n requestCommInfo(content) {\n const msg = KernelMessage.createMessage({\n msgType: 'comm_info_request',\n channel: 'shell',\n username: this._username,\n session: this._clientId,\n content\n });\n return Private.handleShellMessage(this, msg);\n }\n /**\n * Send an `input_reply` message.\n *\n * #### Notes\n * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#messages-on-the-stdin-router-dealer-sockets).\n */\n sendInputReply(content, parent_header) {\n const msg = KernelMessage.createMessage({\n msgType: 'input_reply',\n channel: 'stdin',\n username: this._username,\n session: this._clientId,\n content\n });\n msg.parent_header = parent_header;\n this._sendMessage(msg);\n this._anyMessage.emit({ msg, direction: 'send' });\n this.hasPendingInput = false;\n }\n /**\n * Create a new comm.\n *\n * #### Notes\n * If a client-side comm already exists with the given commId, an error is thrown.\n * If the kernel does not handle comms, an error is thrown.\n */\n createComm(targetName, commId = coreutils_2.UUID.uuid4()) {\n if (!this.handleComms) {\n throw new Error('Comms are disabled on this kernel connection');\n }\n if (this._comms.has(commId)) {\n throw new Error('Comm is already created');\n }\n const comm = new comm_1.CommHandler(targetName, commId, this, () => {\n this._unregisterComm(commId);\n });\n this._comms.set(commId, comm);\n return comm;\n }\n /**\n * Check if a comm exists.\n */\n hasComm(commId) {\n return this._comms.has(commId);\n }\n /**\n * Register a comm target handler.\n *\n * @param targetName - The name of the comm target.\n *\n * @param callback - The callback invoked for a comm open message.\n *\n * @returns A disposable used to unregister the comm target.\n *\n * #### Notes\n * Only one comm target can be registered to a target name at a time, an\n * existing callback for the same target name will be overridden. A registered\n * comm target handler will take precedence over a comm which specifies a\n * `target_module`.\n *\n * If the callback returns a promise, kernel message processing will pause\n * until the returned promise is fulfilled.\n */\n registerCommTarget(targetName, callback) {\n if (!this.handleComms) {\n return;\n }\n this._targetRegistry[targetName] = callback;\n }\n /**\n * Remove a comm target handler.\n *\n * @param targetName - The name of the comm target to remove.\n *\n * @param callback - The callback to remove.\n *\n * #### Notes\n * The comm target is only removed if the callback argument matches.\n */\n removeCommTarget(targetName, callback) {\n if (!this.handleComms) {\n return;\n }\n if (!this.isDisposed && this._targetRegistry[targetName] === callback) {\n delete this._targetRegistry[targetName];\n }\n }\n /**\n * Register an IOPub message hook.\n *\n * @param msg_id - The parent_header message id the hook will intercept.\n *\n * @param hook - The callback invoked for the message.\n *\n * #### Notes\n * The IOPub hook system allows you to preempt the handlers for IOPub\n * messages that are responses to a given message id.\n *\n * The most recently registered hook is run first. A hook can return a\n * boolean or a promise to a boolean, in which case all kernel message\n * processing pauses until the promise is fulfilled. If a hook return value\n * resolves to false, any later hooks will not run and the function will\n * return a promise resolving to false. If a hook throws an error, the error\n * is logged to the console and the next hook is run. If a hook is\n * registered during the hook processing, it will not run until the next\n * message. If a hook is removed during the hook processing, it will be\n * deactivated immediately.\n *\n * See also [[IFuture.registerMessageHook]].\n */\n registerMessageHook(msgId, hook) {\n var _a;\n const future = (_a = this._futures) === null || _a === void 0 ? void 0 : _a.get(msgId);\n if (future) {\n future.registerMessageHook(hook);\n }\n }\n /**\n * Remove an IOPub message hook.\n *\n * @param msg_id - The parent_header message id the hook intercepted.\n *\n * @param hook - The callback invoked for the message.\n *\n */\n removeMessageHook(msgId, hook) {\n var _a;\n const future = (_a = this._futures) === null || _a === void 0 ? void 0 : _a.get(msgId);\n if (future) {\n future.removeMessageHook(hook);\n }\n }\n /**\n * Remove the input guard, if any.\n */\n removeInputGuard() {\n this.hasPendingInput = false;\n }\n /**\n * Handle a message with a display id.\n *\n * @returns Whether the message was handled.\n */\n async _handleDisplayId(displayId, msg) {\n var _a, _b;\n const msgId = msg.parent_header.msg_id;\n let parentIds = this._displayIdToParentIds.get(displayId);\n if (parentIds) {\n // We've seen it before, update existing outputs with same display_id\n // by handling display_data as update_display_data.\n const updateMsg = {\n header: coreutils_2.JSONExt.deepCopy(msg.header),\n parent_header: coreutils_2.JSONExt.deepCopy(msg.parent_header),\n metadata: coreutils_2.JSONExt.deepCopy(msg.metadata),\n content: coreutils_2.JSONExt.deepCopy(msg.content),\n channel: msg.channel,\n buffers: msg.buffers ? msg.buffers.slice() : []\n };\n updateMsg.header.msg_type = 'update_display_data';\n await Promise.all(parentIds.map(async (parentId) => {\n const future = this._futures && this._futures.get(parentId);\n if (future) {\n await future.handleMsg(updateMsg);\n }\n }));\n }\n // We're done here if it's update_display.\n if (msg.header.msg_type === 'update_display_data') {\n // It's an update, don't proceed to the normal display.\n return true;\n }\n // Regular display_data with id, record it for future updating\n // in _displayIdToParentIds for future lookup.\n parentIds = (_a = this._displayIdToParentIds.get(displayId)) !== null && _a !== void 0 ? _a : [];\n if (parentIds.indexOf(msgId) === -1) {\n parentIds.push(msgId);\n }\n this._displayIdToParentIds.set(displayId, parentIds);\n // Add to our map of display ids for this message.\n const displayIds = (_b = this._msgIdToDisplayIds.get(msgId)) !== null && _b !== void 0 ? _b : [];\n if (displayIds.indexOf(msgId) === -1) {\n displayIds.push(msgId);\n }\n this._msgIdToDisplayIds.set(msgId, displayIds);\n // Let the message propagate to the intended recipient.\n return false;\n }\n /**\n * Forcefully clear the socket state.\n *\n * #### Notes\n * This will clear all socket state without calling any handlers and will\n * not update the connection status. If you call this method, you are\n * responsible for updating the connection status as needed and recreating\n * the socket if you plan to reconnect.\n */\n _clearSocket() {\n if (this._ws !== null) {\n // Clear the websocket event handlers and the socket itself.\n this._ws.onopen = this._noOp;\n this._ws.onclose = this._noOp;\n this._ws.onerror = this._noOp;\n this._ws.onmessage = this._noOp;\n this._ws.close();\n this._ws = null;\n }\n }\n /**\n * Handle status iopub messages from the kernel.\n */\n _updateStatus(status) {\n if (this._status === status || this._status === 'dead') {\n return;\n }\n this._status = status;\n Private.logKernelStatus(this);\n this._statusChanged.emit(status);\n if (status === 'dead') {\n this.dispose();\n }\n }\n /**\n * Send pending messages to the kernel.\n */\n _sendPending() {\n // We check to make sure we are still connected each time. For\n // example, if a websocket buffer overflows, it may close, so we should\n // stop sending messages.\n while (this.connectionStatus === 'connected' &&\n this._kernelSession !== RESTARTING_KERNEL_SESSION &&\n this._pendingMessages.length > 0) {\n this._sendMessage(this._pendingMessages[0], false);\n // We shift the message off the queue after the message is sent so that\n // if there is an exception, the message is still pending.\n this._pendingMessages.shift();\n }\n }\n /**\n * Clear the internal state.\n */\n _clearKernelState() {\n this._kernelSession = '';\n this._pendingMessages = [];\n this._futures.forEach(future => {\n future.dispose();\n });\n this._comms.forEach(comm => {\n comm.dispose();\n });\n this._msgChain = Promise.resolve();\n this._futures = new Map();\n this._comms = new Map();\n this._displayIdToParentIds.clear();\n this._msgIdToDisplayIds.clear();\n }\n /**\n * Check to make sure it is okay to proceed to handle a message.\n *\n * #### Notes\n * Because we handle messages asynchronously, before a message is handled the\n * kernel might be disposed or restarted (and have a different session id).\n * This function throws an error in each of these cases. This is meant to be\n * called at the start of an asynchronous message handler to cancel message\n * processing if the message no longer is valid.\n */\n _assertCurrentMessage(msg) {\n this._errorIfDisposed();\n if (msg.header.session !== this._kernelSession) {\n throw new Error(`Canceling handling of old message: ${msg.header.msg_type}`);\n }\n }\n /**\n * Handle a `comm_open` kernel message.\n */\n async _handleCommOpen(msg) {\n this._assertCurrentMessage(msg);\n const content = msg.content;\n const comm = new comm_1.CommHandler(content.target_name, content.comm_id, this, () => {\n this._unregisterComm(content.comm_id);\n });\n this._comms.set(content.comm_id, comm);\n try {\n const target = await Private.loadObject(content.target_name, content.target_module, this._targetRegistry);\n await target(comm, msg);\n }\n catch (e) {\n // Close the comm asynchronously. We cannot block message processing on\n // kernel messages to wait for another kernel message.\n comm.close();\n console.error('Exception opening new comm');\n throw e;\n }\n }\n /**\n * Handle 'comm_close' kernel message.\n */\n async _handleCommClose(msg) {\n this._assertCurrentMessage(msg);\n const content = msg.content;\n const comm = this._comms.get(content.comm_id);\n if (!comm) {\n console.error('Comm not found for comm id ' + content.comm_id);\n return;\n }\n this._unregisterComm(comm.commId);\n const onClose = comm.onClose;\n if (onClose) {\n // tslint:disable-next-line:await-promise\n await onClose(msg);\n }\n comm.dispose();\n }\n /**\n * Handle a 'comm_msg' kernel message.\n */\n async _handleCommMsg(msg) {\n this._assertCurrentMessage(msg);\n const content = msg.content;\n const comm = this._comms.get(content.comm_id);\n if (!comm) {\n return;\n }\n const onMsg = comm.onMsg;\n if (onMsg) {\n // tslint:disable-next-line:await-promise\n await onMsg(msg);\n }\n }\n /**\n * Unregister a comm instance.\n */\n _unregisterComm(commId) {\n this._comms.delete(commId);\n }\n /**\n * Handle connection status changes.\n */\n _updateConnectionStatus(connectionStatus) {\n if (this._connectionStatus === connectionStatus) {\n return;\n }\n this._connectionStatus = connectionStatus;\n // If we are not 'connecting', reset any reconnection attempts.\n if (connectionStatus !== 'connecting') {\n this._reconnectAttempt = 0;\n clearTimeout(this._reconnectTimeout);\n }\n if (this.status !== 'dead') {\n if (connectionStatus === 'connected') {\n let restarting = this._kernelSession === RESTARTING_KERNEL_SESSION;\n // Send a kernel info request to make sure we send at least one\n // message to get kernel status back. Always request kernel info\n // first, to get kernel status back and ensure iopub is fully\n // established. If we are restarting, this message will skip the queue\n // and be sent immediately.\n let p = this.requestKernelInfo();\n // Send any pending messages after the kernelInfo resolves, or after a\n // timeout as a failsafe.\n let sendPendingCalled = false;\n let sendPendingOnce = () => {\n if (sendPendingCalled) {\n return;\n }\n sendPendingCalled = true;\n if (restarting && this._kernelSession === RESTARTING_KERNEL_SESSION) {\n // We were restarting and a message didn't arrive to set the\n // session, but we just assume the restart succeeded and send any\n // pending messages.\n // FIXME: it would be better to retry the kernel_info_request here\n this._kernelSession = '';\n }\n clearTimeout(timeoutHandle);\n if (this._pendingMessages.length > 0) {\n this._sendPending();\n }\n };\n void p.then(sendPendingOnce);\n // FIXME: if sent while zmq subscriptions are not established,\n // kernelInfo may not resolve, so use a timeout to ensure we don't hang forever.\n // It may be preferable to retry kernelInfo rather than give up after one timeout.\n let timeoutHandle = setTimeout(sendPendingOnce, KERNEL_INFO_TIMEOUT);\n }\n else {\n // If the connection is down, then we do not know what is happening\n // with the kernel, so set the status to unknown.\n this._updateStatus('unknown');\n }\n }\n // Notify others that the connection status changed.\n this._connectionStatusChanged.emit(connectionStatus);\n }\n async _handleMessage(msg) {\n var _a, _b;\n let handled = false;\n // Check to see if we have a display_id we need to reroute.\n if (msg.parent_header &&\n msg.channel === 'iopub' &&\n (KernelMessage.isDisplayDataMsg(msg) ||\n KernelMessage.isUpdateDisplayDataMsg(msg) ||\n KernelMessage.isExecuteResultMsg(msg))) {\n // display_data messages may re-route based on their display_id.\n const transient = ((_a = msg.content.transient) !== null && _a !== void 0 ? _a : {});\n const displayId = transient['display_id'];\n if (displayId) {\n handled = await this._handleDisplayId(displayId, msg);\n // The await above may make this message out of date, so check again.\n this._assertCurrentMessage(msg);\n }\n }\n if (!handled && msg.parent_header) {\n const parentHeader = msg.parent_header;\n const future = (_b = this._futures) === null || _b === void 0 ? void 0 : _b.get(parentHeader.msg_id);\n if (future) {\n await future.handleMsg(msg);\n this._assertCurrentMessage(msg);\n }\n else {\n // If the message was sent by us and was not iopub, it is orphaned.\n const owned = parentHeader.session === this.clientId;\n if (msg.channel !== 'iopub' && owned) {\n this._unhandledMessage.emit(msg);\n }\n }\n }\n if (msg.channel === 'iopub') {\n switch (msg.header.msg_type) {\n case 'status': {\n // Updating the status is synchronous, and we call no async user code\n const executionState = msg.content\n .execution_state;\n if (executionState === 'restarting') {\n // The kernel has been auto-restarted by the server. After\n // processing for this message is completely done, we want to\n // handle this restart, so we don't await, but instead schedule\n // the work as a microtask (i.e., in a promise resolution). We\n // schedule this here so that it comes before any microtasks that\n // might be scheduled in the status signal emission below.\n void Promise.resolve().then(async () => {\n this._updateStatus('autorestarting');\n this._clearKernelState();\n // We must reconnect since the kernel connection information may have\n // changed, and the server only refreshes its zmq connection when a new\n // websocket is opened.\n await this.reconnect();\n });\n }\n this._updateStatus(executionState);\n break;\n }\n case 'comm_open':\n if (this.handleComms) {\n await this._handleCommOpen(msg);\n }\n break;\n case 'comm_msg':\n if (this.handleComms) {\n await this._handleCommMsg(msg);\n }\n break;\n case 'comm_close':\n if (this.handleComms) {\n await this._handleCommClose(msg);\n }\n break;\n default:\n break;\n }\n // If the message was a status dead message, we might have disposed ourselves.\n if (!this.isDisposed) {\n this._assertCurrentMessage(msg);\n // the message wouldn't be emitted if we were disposed anyway.\n this._iopubMessage.emit(msg);\n }\n }\n }\n /**\n * Attempt a connection if we have not exhausted connection attempts.\n */\n _reconnect() {\n this._errorIfDisposed();\n // Clear any existing reconnection attempt\n clearTimeout(this._reconnectTimeout);\n // Update the connection status and schedule a possible reconnection.\n if (this._reconnectAttempt < this._reconnectLimit) {\n this._updateConnectionStatus('connecting');\n // The first reconnect attempt should happen immediately, and subsequent\n // attempts should pick a random number in a growing range so that we\n // don't overload the server with synchronized reconnection attempts\n // across multiple kernels.\n const timeout = Private.getRandomIntInclusive(0, 1e3 * (Math.pow(2, this._reconnectAttempt) - 1));\n console.warn(`Connection lost, reconnecting in ${Math.floor(timeout / 1000)} seconds.`);\n // Try reconnection with subprotocols if the server had supported them.\n // Otherwise, try reconnection without subprotocols.\n const useProtocols = this._selectedProtocol !== '' ? true : false;\n this._reconnectTimeout = setTimeout(this._createSocket, timeout, useProtocols);\n this._reconnectAttempt += 1;\n }\n else {\n this._updateConnectionStatus('disconnected');\n }\n // Clear the websocket event handlers and the socket itself.\n this._clearSocket();\n }\n /**\n * Utility function to throw an error if this instance is disposed.\n */\n _errorIfDisposed() {\n if (this.isDisposed) {\n throw new Error('Kernel connection is disposed');\n }\n }\n get hasPendingInput() {\n return this._hasPendingInput;\n }\n set hasPendingInput(value) {\n this._hasPendingInput = value;\n this._pendingInput.emit(value);\n }\n}\nexports.KernelConnection = KernelConnection;\n/**\n * A private namespace for the Kernel.\n */\nvar Private;\n(function (Private) {\n /**\n * Log the current kernel status.\n */\n function logKernelStatus(kernel) {\n switch (kernel.status) {\n case 'idle':\n case 'busy':\n case 'unknown':\n return;\n default:\n console.debug(`Kernel: ${kernel.status} (${kernel.id})`);\n break;\n }\n }\n Private.logKernelStatus = logKernelStatus;\n /**\n * Send a kernel message to the kernel and resolve the reply message.\n */\n async function handleShellMessage(kernel, msg) {\n const future = kernel.sendShellMessage(msg, true);\n return future.done;\n }\n Private.handleShellMessage = handleShellMessage;\n /**\n * Try to load an object from a module or a registry.\n *\n * Try to load an object from a module asynchronously if a module\n * is specified, otherwise tries to load an object from the global\n * registry, if the global registry is provided.\n *\n * #### Notes\n * Loading a module uses requirejs.\n */\n function loadObject(name, moduleName, registry) {\n return new Promise((resolve, reject) => {\n // Try loading the module using require.js\n if (moduleName) {\n if (typeof requirejs === 'undefined') {\n throw new Error('requirejs not found');\n }\n requirejs([moduleName], (mod) => {\n if (mod[name] === void 0) {\n const msg = `Object '${name}' not found in module '${moduleName}'`;\n reject(new Error(msg));\n }\n else {\n resolve(mod[name]);\n }\n }, reject);\n }\n else {\n if (registry === null || registry === void 0 ? void 0 : registry[name]) {\n resolve(registry[name]);\n }\n else {\n reject(new Error(`Object '${name}' not found in registry`));\n }\n }\n });\n }\n Private.loadObject = loadObject;\n /**\n * Get a random integer between min and max, inclusive of both.\n *\n * #### Notes\n * From\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#Getting_a_random_integer_between_two_values_inclusive\n *\n * From the MDN page: It might be tempting to use Math.round() to accomplish\n * that, but doing so would cause your random numbers to follow a non-uniform\n * distribution, which may not be acceptable for your needs.\n */\n function getRandomIntInclusive(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n Private.getRandomIntInclusive = getRandomIntInclusive;\n})(Private || (Private = {}));\n//# sourceMappingURL=default.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelShellFutureHandler = exports.KernelControlFutureHandler = exports.KernelFutureHandler = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nconst disposable_1 = require(\"@lumino/disposable\");\nconst KernelMessage = __importStar(require(\"./messages\"));\n/**\n * Implementation of a kernel future.\n *\n * If a reply is expected, the Future is considered done when both a `reply`\n * message and an `idle` iopub status message have been received. Otherwise, it\n * is considered done when the `idle` status is received.\n *\n */\nclass KernelFutureHandler extends disposable_1.DisposableDelegate {\n /**\n * Construct a new KernelFutureHandler.\n */\n constructor(cb, msg, expectReply, disposeOnDone, kernel) {\n super(cb);\n this._status = 0;\n this._stdin = Private.noOp;\n this._iopub = Private.noOp;\n this._reply = Private.noOp;\n this._done = new coreutils_1.PromiseDelegate();\n this._hooks = new Private.HookList();\n this._disposeOnDone = true;\n this._msg = msg;\n if (!expectReply) {\n this._setFlag(Private.KernelFutureFlag.GotReply);\n }\n this._disposeOnDone = disposeOnDone;\n this._kernel = kernel;\n }\n /**\n * Get the original outgoing message.\n */\n get msg() {\n return this._msg;\n }\n /**\n * A promise that resolves when the future is done.\n */\n get done() {\n return this._done.promise;\n }\n /**\n * Get the reply handler.\n */\n get onReply() {\n return this._reply;\n }\n /**\n * Set the reply handler.\n */\n set onReply(cb) {\n this._reply = cb;\n }\n /**\n * Get the iopub handler.\n */\n get onIOPub() {\n return this._iopub;\n }\n /**\n * Set the iopub handler.\n */\n set onIOPub(cb) {\n this._iopub = cb;\n }\n /**\n * Get the stdin handler.\n */\n get onStdin() {\n return this._stdin;\n }\n /**\n * Set the stdin handler.\n */\n set onStdin(cb) {\n this._stdin = cb;\n }\n /**\n * Register hook for IOPub messages.\n *\n * @param hook - The callback invoked for an IOPub message.\n *\n * #### Notes\n * The IOPub hook system allows you to preempt the handlers for IOPub\n * messages handled by the future.\n *\n * The most recently registered hook is run first. A hook can return a\n * boolean or a promise to a boolean, in which case all kernel message\n * processing pauses until the promise is fulfilled. If a hook return value\n * resolves to false, any later hooks will not run and the function will\n * return a promise resolving to false. If a hook throws an error, the error\n * is logged to the console and the next hook is run. If a hook is\n * registered during the hook processing, it will not run until the next\n * message. If a hook is removed during the hook processing, it will be\n * deactivated immediately.\n */\n registerMessageHook(hook) {\n if (this.isDisposed) {\n throw new Error('Kernel future is disposed');\n }\n this._hooks.add(hook);\n }\n /**\n * Remove a hook for IOPub messages.\n *\n * @param hook - The hook to remove.\n *\n * #### Notes\n * If a hook is removed during the hook processing, it will be deactivated immediately.\n */\n removeMessageHook(hook) {\n if (this.isDisposed) {\n return;\n }\n this._hooks.remove(hook);\n }\n /**\n * Send an `input_reply` message.\n */\n sendInputReply(content, parent_header) {\n this._kernel.sendInputReply(content, parent_header);\n }\n /**\n * Dispose and unregister the future.\n */\n dispose() {\n this._stdin = Private.noOp;\n this._iopub = Private.noOp;\n this._reply = Private.noOp;\n this._hooks = null;\n if (!this._testFlag(Private.KernelFutureFlag.IsDone)) {\n // TODO: Uncomment the following logging code, and check for any tests that trigger it.\n // let status = [];\n // if (!this._testFlag(Private.KernelFutureFlag.GotIdle)) {\n // status.push('idle');\n // }\n // if (!this._testFlag(Private.KernelFutureFlag.GotReply)) {\n // status.push('reply');\n // }\n // console.warn(\n // `*************** DISPOSED BEFORE DONE: K${this._kernel.id.slice(\n // 0,\n // 6\n // )} M${this._msg.header.msg_id.slice(0, 6)} missing ${status.join(' ')}`\n // );\n // Reject the `done` promise, but catch its error here in case no one else\n // is waiting for the promise to resolve. This prevents the error from\n // being displayed in the console, but does not prevent it from being\n // caught by a client who is waiting for it.\n this._done.promise.catch(() => {\n /* no-op */\n });\n this._done.reject(new Error(`Canceled future for ${this.msg.header.msg_type} message before replies were done`));\n }\n super.dispose();\n }\n /**\n * Handle an incoming kernel message.\n */\n async handleMsg(msg) {\n switch (msg.channel) {\n case 'control':\n case 'shell':\n if (msg.channel === this.msg.channel &&\n msg.parent_header.msg_id === this.msg.header.msg_id) {\n await this._handleReply(msg);\n }\n break;\n case 'stdin':\n await this._handleStdin(msg);\n break;\n case 'iopub':\n await this._handleIOPub(msg);\n break;\n default:\n break;\n }\n }\n async _handleReply(msg) {\n const reply = this._reply;\n if (reply) {\n // tslint:disable-next-line:await-promise\n await reply(msg);\n }\n this._replyMsg = msg;\n this._setFlag(Private.KernelFutureFlag.GotReply);\n if (this._testFlag(Private.KernelFutureFlag.GotIdle)) {\n this._handleDone();\n }\n }\n async _handleStdin(msg) {\n this._kernel.hasPendingInput = true;\n const stdin = this._stdin;\n if (stdin) {\n // tslint:disable-next-line:await-promise\n await stdin(msg);\n }\n }\n async _handleIOPub(msg) {\n const process = await this._hooks.process(msg);\n const iopub = this._iopub;\n if (process && iopub) {\n // tslint:disable-next-line:await-promise\n await iopub(msg);\n }\n if (KernelMessage.isStatusMsg(msg) &&\n msg.content.execution_state === 'idle') {\n this._setFlag(Private.KernelFutureFlag.GotIdle);\n if (this._testFlag(Private.KernelFutureFlag.GotReply)) {\n this._handleDone();\n }\n }\n }\n _handleDone() {\n if (this._testFlag(Private.KernelFutureFlag.IsDone)) {\n return;\n }\n this._setFlag(Private.KernelFutureFlag.IsDone);\n this._done.resolve(this._replyMsg);\n if (this._disposeOnDone) {\n this.dispose();\n }\n }\n /**\n * Test whether the given future flag is set.\n */\n _testFlag(flag) {\n // tslint:disable-next-line\n return (this._status & flag) !== 0;\n }\n /**\n * Set the given future flag.\n */\n _setFlag(flag) {\n // tslint:disable-next-line\n this._status |= flag;\n }\n}\nexports.KernelFutureHandler = KernelFutureHandler;\nclass KernelControlFutureHandler extends KernelFutureHandler {\n}\nexports.KernelControlFutureHandler = KernelControlFutureHandler;\nclass KernelShellFutureHandler extends KernelFutureHandler {\n}\nexports.KernelShellFutureHandler = KernelShellFutureHandler;\nvar Private;\n(function (Private) {\n /**\n * A no-op function.\n */\n Private.noOp = () => {\n /* no-op */\n };\n /**\n * Defer a computation.\n *\n * #### NOTES\n * We can't just use requestAnimationFrame since it is not available in node.\n * This implementation is from Phosphor:\n * https://github.com/phosphorjs/phosphor/blob/e88e4321289bb1198f3098e7bda40736501f2ed8/tests/test-messaging/src/index.spec.ts#L63\n */\n const defer = (() => {\n const ok = typeof requestAnimationFrame === 'function';\n return ok ? requestAnimationFrame : setImmediate;\n })();\n class HookList {\n constructor() {\n this._hooks = [];\n }\n /**\n * Register a hook.\n *\n * @param hook - The callback to register.\n */\n add(hook) {\n this.remove(hook);\n this._hooks.push(hook);\n }\n /**\n * Remove a hook, if it exists in the hook list.\n *\n * @param hook - The callback to remove.\n */\n remove(hook) {\n const index = this._hooks.indexOf(hook);\n if (index >= 0) {\n this._hooks[index] = null;\n this._scheduleCompact();\n }\n }\n /**\n * Process a message through the hooks.\n *\n * @returns a promise resolving to false if any hook resolved as false,\n * otherwise true\n *\n * #### Notes\n * The most recently registered hook is run first. A hook can return a\n * boolean or a promise to a boolean, in which case processing pauses until\n * the promise is fulfilled. If a hook return value resolves to false, any\n * later hooks will not run and the function will return a promise resolving\n * to false. If a hook throws an error, the error is logged to the console\n * and the next hook is run. If a hook is registered during the hook\n * processing, it will not run until the next message. If a hook is removed\n * during the hook processing, it will be deactivated immediately.\n */\n async process(msg) {\n // Wait until we can start a new process run.\n await this._processing;\n // Start the next process run.\n const processing = new coreutils_1.PromiseDelegate();\n this._processing = processing.promise;\n let continueHandling;\n // Call the end hook (most recently-added) first. Starting at the end also\n // guarantees that hooks added during the processing will not be run in\n // this process run.\n for (let i = this._hooks.length - 1; i >= 0; i--) {\n const hook = this._hooks[i];\n // If the hook has been removed, continue to the next one.\n if (hook === null) {\n continue;\n }\n // Execute the hook and log any errors.\n try {\n // tslint:disable-next-line:await-promise\n continueHandling = await hook(msg);\n }\n catch (err) {\n continueHandling = true;\n console.error(err);\n }\n // If the hook resolved to false, stop processing and return.\n if (continueHandling === false) {\n processing.resolve(undefined);\n return false;\n }\n }\n // All hooks returned true (or errored out), so return true.\n processing.resolve(undefined);\n return true;\n }\n /**\n * Schedule a cleanup of the list, removing any hooks that have been nulled out.\n */\n _scheduleCompact() {\n if (!this._compactScheduled) {\n this._compactScheduled = true;\n // Schedule a compaction in between processing runs. We do the\n // scheduling in an animation frame to rate-limit our compactions. If we\n // need to compact more frequently, we can change this to directly\n // schedule the compaction.\n defer(() => {\n this._processing = this._processing.then(() => {\n this._compactScheduled = false;\n this._compact();\n });\n });\n }\n }\n /**\n * Compact the list, removing any nulls.\n */\n _compact() {\n let numNulls = 0;\n for (let i = 0, len = this._hooks.length; i < len; i++) {\n const hook = this._hooks[i];\n if (this._hooks[i] === null) {\n numNulls++;\n }\n else {\n this._hooks[i - numNulls] = hook;\n }\n }\n this._hooks.length -= numNulls;\n }\n }\n Private.HookList = HookList;\n /**\n * Bit flags for the kernel future state.\n */\n let KernelFutureFlag;\n (function (KernelFutureFlag) {\n KernelFutureFlag[KernelFutureFlag[\"GotReply\"] = 1] = \"GotReply\";\n KernelFutureFlag[KernelFutureFlag[\"GotIdle\"] = 2] = \"GotIdle\";\n KernelFutureFlag[KernelFutureFlag[\"IsDone\"] = 4] = \"IsDone\";\n KernelFutureFlag[KernelFutureFlag[\"DisposeOnDone\"] = 8] = \"DisposeOnDone\";\n })(KernelFutureFlag = Private.KernelFutureFlag || (Private.KernelFutureFlag = {}));\n})(Private || (Private = {}));\n//# sourceMappingURL=future.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelConnection = exports.KernelAPI = exports.KernelMessage = exports.Kernel = void 0;\n// Namespace some of our modules for convenience and backwards compatibility.\nconst Kernel = __importStar(require(\"./kernel\"));\nexports.Kernel = Kernel;\nconst KernelMessage = __importStar(require(\"./messages\"));\nexports.KernelMessage = KernelMessage;\nconst KernelAPI = __importStar(require(\"./restapi\"));\nexports.KernelAPI = KernelAPI;\nconst default_1 = require(\"./default\");\nObject.defineProperty(exports, \"KernelConnection\", { enumerable: true, get: function () { return default_1.KernelConnection; } });\n__exportStar(require(\"./manager\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=kernel.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelManager = void 0;\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst basemanager_1 = require(\"../basemanager\");\nconst restapi_1 = require(\"./restapi\");\nconst default_1 = require(\"./default\");\n/**\n * An implementation of a kernel manager.\n */\nclass KernelManager extends basemanager_1.BaseManager {\n /**\n * Construct a new kernel manager.\n *\n * @param options - The default options for kernel.\n */\n constructor(options = {}) {\n var _a;\n super(options);\n this._isReady = false;\n this._kernelConnections = new Set();\n this._models = new Map();\n this._runningChanged = new signaling_1.Signal(this);\n this._connectionFailure = new signaling_1.Signal(this);\n // Start model and specs polling with exponential backoff.\n this._pollModels = new polling_1.Poll({\n auto: false,\n factory: () => this.requestRunning(),\n frequency: {\n interval: 10 * 1000,\n backoff: true,\n max: 300 * 1000\n },\n name: `@jupyterlab/services:KernelManager#models`,\n standby: (_a = options.standby) !== null && _a !== void 0 ? _a : 'when-hidden'\n });\n // Initialize internal data.\n this._ready = (async () => {\n await this._pollModels.start();\n await this._pollModels.tick;\n this._isReady = true;\n })();\n }\n /**\n * Test whether the manager is ready.\n */\n get isReady() {\n return this._isReady;\n }\n /**\n * A promise that fulfills when the manager is ready.\n */\n get ready() {\n return this._ready;\n }\n /**\n * A signal emitted when the running kernels change.\n */\n get runningChanged() {\n return this._runningChanged;\n }\n /**\n * A signal emitted when there is a connection failure.\n */\n get connectionFailure() {\n return this._connectionFailure;\n }\n /**\n * Dispose of the resources used by the manager.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._models.clear();\n this._kernelConnections.forEach(x => x.dispose());\n this._pollModels.dispose();\n super.dispose();\n }\n /**\n * Connect to an existing kernel.\n *\n * @returns The new kernel connection.\n *\n * #### Notes\n * This will use the manager's server settings and ignore any server\n * settings passed in the options.\n */\n connectTo(options) {\n var _a;\n const { id } = options.model;\n let handleComms = (_a = options.handleComms) !== null && _a !== void 0 ? _a : true;\n // By default, handle comms only if no other kernel connection is.\n if (options.handleComms === undefined) {\n for (const kc of this._kernelConnections) {\n if (kc.id === id && kc.handleComms) {\n handleComms = false;\n break;\n }\n }\n }\n const kernelConnection = new default_1.KernelConnection({\n handleComms,\n ...options,\n serverSettings: this.serverSettings\n });\n this._onStarted(kernelConnection);\n if (!this._models.has(id)) {\n // We trust the user to connect to an existing kernel, but we verify\n // asynchronously.\n void this.refreshRunning().catch(() => {\n /* no-op */\n });\n }\n return kernelConnection;\n }\n /**\n * Create an iterator over the most recent running kernels.\n *\n * @returns A new iterator over the running kernels.\n */\n running() {\n return this._models.values();\n }\n /**\n * Force a refresh of the running kernels.\n *\n * @returns A promise that resolves when the running list has been refreshed.\n *\n * #### Notes\n * This is not typically meant to be called by the user, since the\n * manager maintains its own internal state.\n */\n async refreshRunning() {\n await this._pollModels.refresh();\n await this._pollModels.tick;\n }\n /**\n * Start a new kernel.\n *\n * @param createOptions - The kernel creation options\n *\n * @param connectOptions - The kernel connection options\n *\n * @returns A promise that resolves with the kernel connection.\n *\n * #### Notes\n * The manager `serverSettings` will be always be used.\n */\n async startNew(createOptions = {}, connectOptions = {}) {\n const model = await (0, restapi_1.startNew)(createOptions, this.serverSettings);\n return this.connectTo({\n ...connectOptions,\n model\n });\n }\n /**\n * Shut down a kernel by id.\n *\n * @param id - The id of the target kernel.\n *\n * @returns A promise that resolves when the operation is complete.\n */\n async shutdown(id) {\n await (0, restapi_1.shutdownKernel)(id, this.serverSettings);\n await this.refreshRunning();\n }\n /**\n * Shut down all kernels.\n *\n * @returns A promise that resolves when all of the kernels are shut down.\n */\n async shutdownAll() {\n // Update the list of models to make sure our list is current.\n await this.refreshRunning();\n // Shut down all models.\n await Promise.all([...this._models.keys()].map(id => (0, restapi_1.shutdownKernel)(id, this.serverSettings)));\n // Update the list of models to clear out our state.\n await this.refreshRunning();\n }\n /**\n * Find a kernel by id.\n *\n * @param id - The id of the target kernel.\n *\n * @returns A promise that resolves with the kernel's model.\n */\n async findById(id) {\n if (this._models.has(id)) {\n return this._models.get(id);\n }\n await this.refreshRunning();\n return this._models.get(id);\n }\n /**\n * Execute a request to the server to poll running kernels and update state.\n */\n async requestRunning() {\n var _a, _b;\n let models;\n try {\n models = await (0, restapi_1.listRunning)(this.serverSettings);\n }\n catch (err) {\n // Handle network errors, as well as cases where we are on a\n // JupyterHub and the server is not running. JupyterHub returns a\n // 503 (<2.0) or 424 (>2.0) in that case.\n if (err instanceof __1.ServerConnection.NetworkError ||\n ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 503 ||\n ((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 424) {\n this._connectionFailure.emit(err);\n }\n throw err;\n }\n if (this.isDisposed) {\n return;\n }\n if (this._models.size === models.length &&\n models.every(model => {\n const existing = this._models.get(model.id);\n if (!existing) {\n return false;\n }\n return (existing.connections === model.connections &&\n existing.execution_state === model.execution_state &&\n existing.last_activity === model.last_activity &&\n existing.name === model.name &&\n existing.reason === model.reason &&\n existing.traceback === model.traceback);\n })) {\n // Identical models list (presuming models does not contain duplicate\n // ids), so just return\n return;\n }\n this._models = new Map(models.map(x => [x.id, x]));\n // For any kernel connection to a kernel that doesn't exist, notify it of\n // the shutdown.\n this._kernelConnections.forEach(kc => {\n if (!this._models.has(kc.id)) {\n kc.handleShutdown();\n }\n });\n this._runningChanged.emit(models);\n }\n /**\n * Handle a kernel starting.\n */\n _onStarted(kernelConnection) {\n this._kernelConnections.add(kernelConnection);\n kernelConnection.statusChanged.connect(this._onStatusChanged, this);\n kernelConnection.disposed.connect(this._onDisposed, this);\n }\n _onDisposed(kernelConnection) {\n this._kernelConnections.delete(kernelConnection);\n // A dispose emission could mean the server session is deleted, or that\n // the kernel JS object is disposed and the kernel still exists on the\n // server, so we refresh from the server to make sure we reflect the\n // server state.\n void this.refreshRunning().catch(() => {\n /* no-op */\n });\n }\n _onStatusChanged(kernelConnection, status) {\n if (status === 'dead') {\n // We asynchronously update our list of kernels, which asynchronously\n // will dispose them. We do not want to immediately dispose them because\n // there may be other signal handlers that want to be called.\n void this.refreshRunning().catch(() => {\n /* no-op */\n });\n }\n }\n}\nexports.KernelManager = KernelManager;\n/**\n * The namespace for `KernelManager` class statics.\n */\n(function (KernelManager) {\n /**\n * A no-op kernel manager to be used when starting kernels.\n */\n class NoopManager extends KernelManager {\n constructor() {\n super(...arguments);\n this._readyPromise = new Promise(() => {\n /* no-op */\n });\n }\n /**\n * Whether the manager is active.\n */\n get isActive() {\n return false;\n }\n /**\n * Used for testing.\n */\n get parentReady() {\n return super.ready;\n }\n /**\n * Start a new kernel - throws an error since it is not supported.\n */\n async startNew(createOptions = {}, connectOptions = {}) {\n return Promise.reject(new Error('Not implemented in no-op Kernel Manager'));\n }\n /**\n * Connect to an existing kernel - throws an error since it is not supported.\n */\n connectTo(options) {\n throw new Error('Not implemented in no-op Kernel Manager');\n }\n /**\n * Shut down a kernel by id - throws an error since it is not supported.\n */\n async shutdown(id) {\n return Promise.reject(new Error('Not implemented in no-op Kernel Manager'));\n }\n /**\n * A promise that fulfills when the manager is ready (never).\n */\n get ready() {\n return this.parentReady.then(() => this._readyPromise);\n }\n /**\n * Execute a request to the server to poll running kernels and update state.\n */\n async requestRunning() {\n return Promise.resolve();\n }\n }\n KernelManager.NoopManager = NoopManager;\n})(KernelManager = exports.KernelManager || (exports.KernelManager = {}));\n//# sourceMappingURL=manager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.supportedKernelWebSocketProtocols = exports.isInputReplyMsg = exports.isInputRequestMsg = exports.isDebugReplyMsg = exports.isDebugRequestMsg = exports.isExecuteReplyMsg = exports.isInfoRequestMsg = exports.isCommMsgMsg = exports.isCommCloseMsg = exports.isCommOpenMsg = exports.isDebugEventMsg = exports.isClearOutputMsg = exports.isStatusMsg = exports.isErrorMsg = exports.isExecuteResultMsg = exports.isExecuteInputMsg = exports.isUpdateDisplayDataMsg = exports.isDisplayDataMsg = exports.isStreamMsg = exports.createMessage = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nfunction createMessage(options) {\n var _a, _b, _c, _d, _e;\n return {\n buffers: (_a = options.buffers) !== null && _a !== void 0 ? _a : [],\n channel: options.channel,\n content: options.content,\n header: {\n date: new Date().toISOString(),\n msg_id: (_b = options.msgId) !== null && _b !== void 0 ? _b : coreutils_1.UUID.uuid4(),\n msg_type: options.msgType,\n session: options.session,\n username: (_c = options.username) !== null && _c !== void 0 ? _c : '',\n version: '5.2'\n },\n metadata: (_d = options.metadata) !== null && _d !== void 0 ? _d : {},\n parent_header: (_e = options.parentHeader) !== null && _e !== void 0 ? _e : {}\n };\n}\nexports.createMessage = createMessage;\n/**\n * Test whether a kernel message is a `'stream'` message.\n */\nfunction isStreamMsg(msg) {\n return msg.header.msg_type === 'stream';\n}\nexports.isStreamMsg = isStreamMsg;\n/**\n * Test whether a kernel message is an `'display_data'` message.\n */\nfunction isDisplayDataMsg(msg) {\n return msg.header.msg_type === 'display_data';\n}\nexports.isDisplayDataMsg = isDisplayDataMsg;\n/**\n * Test whether a kernel message is an `'update_display_data'` message.\n */\nfunction isUpdateDisplayDataMsg(msg) {\n return msg.header.msg_type === 'update_display_data';\n}\nexports.isUpdateDisplayDataMsg = isUpdateDisplayDataMsg;\n/**\n * Test whether a kernel message is an `'execute_input'` message.\n */\nfunction isExecuteInputMsg(msg) {\n return msg.header.msg_type === 'execute_input';\n}\nexports.isExecuteInputMsg = isExecuteInputMsg;\n/**\n * Test whether a kernel message is an `'execute_result'` message.\n */\nfunction isExecuteResultMsg(msg) {\n return msg.header.msg_type === 'execute_result';\n}\nexports.isExecuteResultMsg = isExecuteResultMsg;\n/**\n * Test whether a kernel message is an `'error'` message.\n */\nfunction isErrorMsg(msg) {\n return msg.header.msg_type === 'error';\n}\nexports.isErrorMsg = isErrorMsg;\n/**\n * Test whether a kernel message is a `'status'` message.\n */\nfunction isStatusMsg(msg) {\n return msg.header.msg_type === 'status';\n}\nexports.isStatusMsg = isStatusMsg;\n/**\n * Test whether a kernel message is a `'clear_output'` message.\n */\nfunction isClearOutputMsg(msg) {\n return msg.header.msg_type === 'clear_output';\n}\nexports.isClearOutputMsg = isClearOutputMsg;\n/**\n * Test whether a kernel message is an experimental `'debug_event'` message.\n *\n * @hidden\n *\n * #### Notes\n * Debug messages are experimental messages that are not in the official\n * kernel message specification. As such, this is *NOT* considered\n * part of the public API, and may change without notice.\n */\nfunction isDebugEventMsg(msg) {\n return msg.header.msg_type === 'debug_event';\n}\nexports.isDebugEventMsg = isDebugEventMsg;\n/**\n * Test whether a kernel message is a `'comm_open'` message.\n */\nfunction isCommOpenMsg(msg) {\n return msg.header.msg_type === 'comm_open';\n}\nexports.isCommOpenMsg = isCommOpenMsg;\n/**\n * Test whether a kernel message is a `'comm_close'` message.\n */\nfunction isCommCloseMsg(msg) {\n return msg.header.msg_type === 'comm_close';\n}\nexports.isCommCloseMsg = isCommCloseMsg;\n/**\n * Test whether a kernel message is a `'comm_msg'` message.\n */\nfunction isCommMsgMsg(msg) {\n return msg.header.msg_type === 'comm_msg';\n}\nexports.isCommMsgMsg = isCommMsgMsg;\n/**\n * Test whether a kernel message is a `'kernel_info_request'` message.\n */\nfunction isInfoRequestMsg(msg) {\n return msg.header.msg_type === 'kernel_info_request';\n}\nexports.isInfoRequestMsg = isInfoRequestMsg;\n/**\n * Test whether a kernel message is an `'execute_reply'` message.\n */\nfunction isExecuteReplyMsg(msg) {\n return msg.header.msg_type === 'execute_reply';\n}\nexports.isExecuteReplyMsg = isExecuteReplyMsg;\n/**\n * Test whether a kernel message is an experimental `'debug_request'` message.\n *\n * @hidden\n *\n * #### Notes\n * Debug messages are experimental messages that are not in the official\n * kernel message specification. As such, this is *NOT* considered\n * part of the public API, and may change without notice.\n */\nfunction isDebugRequestMsg(msg) {\n return msg.header.msg_type === 'debug_request';\n}\nexports.isDebugRequestMsg = isDebugRequestMsg;\n/**\n * Test whether a kernel message is an experimental `'debug_reply'` message.\n *\n * @hidden\n *\n * #### Notes\n * Debug messages are experimental messages that are not in the official\n * kernel message specification. As such, this is *NOT* considered\n * part of the public API, and may change without notice.\n */\nfunction isDebugReplyMsg(msg) {\n return msg.header.msg_type === 'debug_reply';\n}\nexports.isDebugReplyMsg = isDebugReplyMsg;\n/**\n * Test whether a kernel message is an `'input_request'` message.\n */\nfunction isInputRequestMsg(msg) {\n return msg.header.msg_type === 'input_request';\n}\nexports.isInputRequestMsg = isInputRequestMsg;\n/**\n * Test whether a kernel message is an `'input_reply'` message.\n */\nfunction isInputReplyMsg(msg) {\n return msg.header.msg_type === 'input_reply';\n}\nexports.isInputReplyMsg = isInputReplyMsg;\n// ///////////////////////////////////////////////\n// Message (de)serialization\n// ///////////////////////////////////////////////\n/**\n * The list of supported kernel wire protocols over websocket.\n */\nvar supportedKernelWebSocketProtocols;\n(function (supportedKernelWebSocketProtocols) {\n supportedKernelWebSocketProtocols[\"v1KernelWebsocketJupyterOrg\"] = \"v1.kernel.websocket.jupyter.org\";\n})(supportedKernelWebSocketProtocols = exports.supportedKernelWebSocketProtocols || (exports.supportedKernelWebSocketProtocols = {}));\n//# sourceMappingURL=messages.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getKernelModel = exports.shutdownKernel = exports.interruptKernel = exports.restartKernel = exports.startNew = exports.listRunning = exports.KERNEL_SERVICE_URL = void 0;\nconst serverconnection_1 = require(\"../serverconnection\");\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst validate_1 = require(\"./validate\");\n/**\n * The url for the kernel service.\n */\nexports.KERNEL_SERVICE_URL = 'api/kernels';\n/**\n * Fetch the running kernels.\n *\n * @param settings - The optional server settings.\n *\n * @returns A promise that resolves with the list of running kernels.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\nasync function listRunning(settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL);\n const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n if (response.status !== 200) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n (0, validate_1.validateModels)(data);\n return data;\n}\nexports.listRunning = listRunning;\n/**\n * Start a new kernel.\n *\n * @param options - The options used to create the kernel.\n *\n * @returns A promise that resolves with a kernel connection object.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\nasync function startNew(options = {}, settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL);\n const init = {\n method: 'POST',\n body: JSON.stringify(options)\n };\n const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n if (response.status !== 201) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n (0, validate_1.validateModel)(data);\n return data;\n}\nexports.startNew = startNew;\n/**\n * Restart a kernel.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response (and thus after a restart) and rejected otherwise.\n */\nasync function restartKernel(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL, encodeURIComponent(id), 'restart');\n const init = { method: 'POST' };\n const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n if (response.status !== 200) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n (0, validate_1.validateModel)(data);\n}\nexports.restartKernel = restartKernel;\n/**\n * Interrupt a kernel.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\nasync function interruptKernel(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL, encodeURIComponent(id), 'interrupt');\n const init = { method: 'POST' };\n const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n if (response.status !== 204) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n}\nexports.interruptKernel = interruptKernel;\n/**\n * Shut down a kernel.\n *\n * @param id - The id of the running kernel.\n *\n * @param settings - The server settings for the request.\n *\n * @returns A promise that resolves when the kernel is shut down.\n *\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\nasync function shutdownKernel(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL, encodeURIComponent(id));\n const init = { method: 'DELETE' };\n const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n if (response.status === 404) {\n const msg = `The kernel \"${id}\" does not exist on the server`;\n console.warn(msg);\n }\n else if (response.status !== 204) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n}\nexports.shutdownKernel = shutdownKernel;\n/**\n * Get a full kernel model from the server by kernel id string.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\nasync function getKernelModel(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL, encodeURIComponent(id));\n const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n if (response.status === 404) {\n return undefined;\n }\n else if (response.status !== 200) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n (0, validate_1.validateModel)(data);\n return data;\n}\nexports.getKernelModel = getKernelModel;\n//# sourceMappingURL=restapi.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deserialize = exports.serialize = void 0;\nconst KernelMessage = __importStar(require(\"./messages\"));\n/**\n * Serialize a kernel message for transport.\n */\nfunction serialize(msg, protocol = '') {\n switch (protocol) {\n case KernelMessage.supportedKernelWebSocketProtocols\n .v1KernelWebsocketJupyterOrg:\n return Private.serializeV1KernelWebsocketJupyterOrg(msg);\n default:\n return Private.serializeDefault(msg);\n }\n}\nexports.serialize = serialize;\n/**\n * Deserialize and return the unpacked message.\n */\nfunction deserialize(data, protocol = '') {\n switch (protocol) {\n case KernelMessage.supportedKernelWebSocketProtocols\n .v1KernelWebsocketJupyterOrg:\n return Private.deserializeV1KernelWebsocketJupyterOrg(data);\n default:\n return Private.deserializeDefault(data);\n }\n}\nexports.deserialize = deserialize;\nvar Private;\n(function (Private) {\n /**\n * Deserialize and return the unpacked message.\n * Protocol `v1.kernel.websocket.jupyter.org`\n */\n function deserializeV1KernelWebsocketJupyterOrg(binMsg) {\n let msg;\n const data = new DataView(binMsg);\n const offsetNumber = Number(data.getBigUint64(0, true /* littleEndian */));\n let offsets = [];\n for (let i = 0; i < offsetNumber; i++) {\n // WARNING: we cast our 64-bit unsigned int to a number!\n // so offsets cannot index up to 2**64 bytes\n offsets.push(Number(data.getBigUint64(8 * (i + 1), true /* littleEndian */)));\n }\n const decoder = new TextDecoder('utf8');\n const channel = decoder.decode(binMsg.slice(offsets[0], offsets[1]));\n const header = JSON.parse(decoder.decode(binMsg.slice(offsets[1], offsets[2])));\n const parent_header = JSON.parse(decoder.decode(binMsg.slice(offsets[2], offsets[3])));\n const metadata = JSON.parse(decoder.decode(binMsg.slice(offsets[3], offsets[4])));\n const content = JSON.parse(decoder.decode(binMsg.slice(offsets[4], offsets[5])));\n let buffers = [];\n for (let i = 5; i < offsets.length - 1; i++) {\n buffers.push(new DataView(binMsg.slice(offsets[i], offsets[i + 1])));\n }\n msg = {\n channel,\n header,\n parent_header,\n metadata,\n content,\n buffers\n };\n return msg;\n }\n Private.deserializeV1KernelWebsocketJupyterOrg = deserializeV1KernelWebsocketJupyterOrg;\n /**\n * Serialize a kernel message for transport.\n * Protocol `v1.kernel.websocket.jupyter.org`\n */\n function serializeV1KernelWebsocketJupyterOrg(msg) {\n const header = JSON.stringify(msg.header);\n const parentHeader = msg.parent_header == null ? '{}' : JSON.stringify(msg.parent_header);\n const metadata = JSON.stringify(msg.metadata);\n const content = JSON.stringify(msg.content);\n const buffers = msg.buffers !== undefined ? msg.buffers : [];\n const offsetNumber = 1 + 4 + buffers.length + 1;\n let offsets = [];\n offsets.push(8 * (1 + offsetNumber));\n offsets.push(msg.channel.length + offsets[offsets.length - 1]);\n const encoder = new TextEncoder();\n const channelEncoded = encoder.encode(msg.channel);\n const headerEncoded = encoder.encode(header);\n const parentHeaderEncoded = encoder.encode(parentHeader);\n const metadataEncoded = encoder.encode(metadata);\n const contentEncoded = encoder.encode(content);\n const binMsgNoBuff = new Uint8Array(channelEncoded.length +\n headerEncoded.length +\n parentHeaderEncoded.length +\n metadataEncoded.length +\n contentEncoded.length);\n binMsgNoBuff.set(channelEncoded);\n binMsgNoBuff.set(headerEncoded, channelEncoded.length);\n binMsgNoBuff.set(parentHeaderEncoded, channelEncoded.length + headerEncoded.length);\n binMsgNoBuff.set(metadataEncoded, channelEncoded.length + headerEncoded.length + parentHeaderEncoded.length);\n binMsgNoBuff.set(contentEncoded, channelEncoded.length +\n headerEncoded.length +\n parentHeaderEncoded.length +\n metadataEncoded.length);\n for (let length of [\n headerEncoded.length,\n parentHeaderEncoded.length,\n metadataEncoded.length,\n contentEncoded.length\n ]) {\n offsets.push(length + offsets[offsets.length - 1]);\n }\n let buffersByteLength = 0;\n for (let buffer of buffers) {\n let length = buffer.byteLength;\n offsets.push(length + offsets[offsets.length - 1]);\n buffersByteLength += length;\n }\n const binMsg = new Uint8Array(8 * (1 + offsetNumber) + binMsgNoBuff.byteLength + buffersByteLength);\n const word = new ArrayBuffer(8);\n const data = new DataView(word);\n data.setBigUint64(0, BigInt(offsetNumber), true /* littleEndian */);\n binMsg.set(new Uint8Array(word), 0);\n for (let i = 0; i < offsets.length; i++) {\n data.setBigUint64(0, BigInt(offsets[i]), true /* littleEndian */);\n binMsg.set(new Uint8Array(word), 8 * (i + 1));\n }\n binMsg.set(binMsgNoBuff, offsets[0]);\n for (let i = 0; i < buffers.length; i++) {\n const buffer = buffers[i];\n binMsg.set(new Uint8Array(ArrayBuffer.isView(buffer) ? buffer.buffer : buffer), offsets[5 + i]);\n }\n return binMsg.buffer;\n }\n Private.serializeV1KernelWebsocketJupyterOrg = serializeV1KernelWebsocketJupyterOrg;\n /**\n * Deserialize and return the unpacked message.\n * Default protocol\n *\n * #### Notes\n * Handles JSON blob strings and binary messages.\n */\n function deserializeDefault(data) {\n let value;\n if (typeof data === 'string') {\n value = JSON.parse(data);\n }\n else {\n value = deserializeBinary(data);\n }\n return value;\n }\n Private.deserializeDefault = deserializeDefault;\n /**\n * Serialize a kernel message for transport.\n * Default protocol\n *\n * #### Notes\n * If there is binary content, an `ArrayBuffer` is returned,\n * otherwise the message is converted to a JSON string.\n */\n function serializeDefault(msg) {\n var _a;\n let value;\n if ((_a = msg.buffers) === null || _a === void 0 ? void 0 : _a.length) {\n value = serializeBinary(msg);\n }\n else {\n value = JSON.stringify(msg);\n }\n return value;\n }\n Private.serializeDefault = serializeDefault;\n /**\n * Deserialize a binary message to a Kernel Message.\n */\n function deserializeBinary(buf) {\n const data = new DataView(buf);\n // read the header: 1 + nbufs 32b integers\n const nbufs = data.getUint32(0);\n const offsets = [];\n if (nbufs < 2) {\n throw new Error('Invalid incoming Kernel Message');\n }\n for (let i = 1; i <= nbufs; i++) {\n offsets.push(data.getUint32(i * 4));\n }\n const jsonBytes = new Uint8Array(buf.slice(offsets[0], offsets[1]));\n const msg = JSON.parse(new TextDecoder('utf8').decode(jsonBytes));\n // the remaining chunks are stored as DataViews in msg.buffers\n msg.buffers = [];\n for (let i = 1; i < nbufs; i++) {\n const start = offsets[i];\n const stop = offsets[i + 1] || buf.byteLength;\n msg.buffers.push(new DataView(buf.slice(start, stop)));\n }\n return msg;\n }\n /**\n * Implement the binary serialization protocol.\n *\n * Serialize Kernel message to ArrayBuffer.\n */\n function serializeBinary(msg) {\n const offsets = [];\n const buffers = [];\n const encoder = new TextEncoder();\n let origBuffers = [];\n if (msg.buffers !== undefined) {\n origBuffers = msg.buffers;\n delete msg['buffers'];\n }\n const jsonUtf8 = encoder.encode(JSON.stringify(msg));\n buffers.push(jsonUtf8.buffer);\n for (let i = 0; i < origBuffers.length; i++) {\n // msg.buffers elements could be either views or ArrayBuffers\n // buffers elements are ArrayBuffers\n const b = origBuffers[i];\n buffers.push(ArrayBuffer.isView(b) ? b.buffer : b);\n }\n const nbufs = buffers.length;\n offsets.push(4 * (nbufs + 1));\n for (let i = 0; i + 1 < buffers.length; i++) {\n offsets.push(offsets[offsets.length - 1] + buffers[i].byteLength);\n }\n const msgBuf = new Uint8Array(offsets[offsets.length - 1] + buffers[buffers.length - 1].byteLength);\n // use DataView.setUint32 for network byte-order\n const view = new DataView(msgBuf.buffer);\n // write nbufs to first 4 bytes\n view.setUint32(0, nbufs);\n // write offsets to next 4 * nbufs bytes\n for (let i = 0; i < offsets.length; i++) {\n view.setUint32(4 * (i + 1), offsets[i]);\n }\n // write all the buffers at their respective offsets\n for (let i = 0; i < buffers.length; i++) {\n msgBuf.set(new Uint8Array(buffers[i]), offsets[i]);\n }\n return msgBuf.buffer;\n }\n})(Private || (Private = {}));\n//# sourceMappingURL=serialize.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateModels = exports.validateModel = exports.validateMessage = void 0;\nconst validate_1 = require(\"../validate\");\n/**\n * Required fields for `IKernelHeader`.\n */\nconst HEADER_FIELDS = ['username', 'version', 'session', 'msg_id', 'msg_type'];\n/**\n * Required fields and types for contents of various types of `kernel.IMessage`\n * messages on the iopub channel.\n */\nconst IOPUB_CONTENT_FIELDS = {\n stream: { name: 'string', text: 'string' },\n display_data: { data: 'object', metadata: 'object' },\n execute_input: { code: 'string', execution_count: 'number' },\n execute_result: {\n execution_count: 'number',\n data: 'object',\n metadata: 'object'\n },\n error: { ename: 'string', evalue: 'string', traceback: 'object' },\n status: {\n execution_state: [\n 'string',\n ['starting', 'idle', 'busy', 'restarting', 'dead']\n ]\n },\n clear_output: { wait: 'boolean' },\n comm_open: { comm_id: 'string', target_name: 'string', data: 'object' },\n comm_msg: { comm_id: 'string', data: 'object' },\n comm_close: { comm_id: 'string' },\n shutdown_reply: { restart: 'boolean' } // Emitted by the IPython kernel.\n};\n/**\n * Validate the header of a kernel message.\n */\nfunction validateHeader(header) {\n for (let i = 0; i < HEADER_FIELDS.length; i++) {\n (0, validate_1.validateProperty)(header, HEADER_FIELDS[i], 'string');\n }\n}\n/**\n * Validate a kernel message object.\n */\nfunction validateMessage(msg) {\n (0, validate_1.validateProperty)(msg, 'metadata', 'object');\n (0, validate_1.validateProperty)(msg, 'content', 'object');\n (0, validate_1.validateProperty)(msg, 'channel', 'string');\n validateHeader(msg.header);\n if (msg.channel === 'iopub') {\n validateIOPubContent(msg);\n }\n}\nexports.validateMessage = validateMessage;\n/**\n * Validate content an kernel message on the iopub channel.\n */\nfunction validateIOPubContent(msg) {\n if (msg.channel === 'iopub') {\n const fields = IOPUB_CONTENT_FIELDS[msg.header.msg_type];\n // Check for unknown message type.\n if (fields === undefined) {\n return;\n }\n const names = Object.keys(fields);\n const content = msg.content;\n for (let i = 0; i < names.length; i++) {\n let args = fields[names[i]];\n if (!Array.isArray(args)) {\n args = [args];\n }\n (0, validate_1.validateProperty)(content, names[i], ...args);\n }\n }\n}\n/**\n * Validate a `Kernel.IModel` object.\n */\nfunction validateModel(model) {\n (0, validate_1.validateProperty)(model, 'name', 'string');\n (0, validate_1.validateProperty)(model, 'id', 'string');\n}\nexports.validateModel = validateModel;\n/**\n * Validate an array of `IModel` objects.\n */\nfunction validateModels(models) {\n if (!Array.isArray(models)) {\n throw new Error('Invalid kernel list');\n }\n models.forEach(d => validateModel(d));\n}\nexports.validateModels = validateModels;\n//# sourceMappingURL=validate.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelSpecAPI = exports.KernelSpec = void 0;\nconst KernelSpec = __importStar(require(\"./kernelspec\"));\nexports.KernelSpec = KernelSpec;\nconst KernelSpecAPI = __importStar(require(\"./restapi\"));\nexports.KernelSpecAPI = KernelSpecAPI;\n__exportStar(require(\"./manager\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=kernelspec.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelSpecManager = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst restapi = __importStar(require(\"./restapi\"));\nconst basemanager_1 = require(\"../basemanager\");\n/**\n * An implementation of a kernel spec manager.\n */\nclass KernelSpecManager extends basemanager_1.BaseManager {\n /**\n * Construct a new kernel spec manager.\n *\n * @param options - The default options for kernel.\n */\n constructor(options = {}) {\n var _a;\n super(options);\n this._isReady = false;\n this._connectionFailure = new signaling_1.Signal(this);\n this._specs = null;\n this._specsChanged = new signaling_1.Signal(this);\n // Initialize internal data.\n this._ready = Promise.all([this.requestSpecs()])\n .then(_ => undefined)\n .catch(_ => undefined)\n .then(() => {\n if (this.isDisposed) {\n return;\n }\n this._isReady = true;\n });\n this._pollSpecs = new polling_1.Poll({\n auto: false,\n factory: () => this.requestSpecs(),\n frequency: {\n interval: 61 * 1000,\n backoff: true,\n max: 300 * 1000\n },\n name: `@jupyterlab/services:KernelSpecManager#specs`,\n standby: (_a = options.standby) !== null && _a !== void 0 ? _a : 'when-hidden'\n });\n void this.ready.then(() => {\n void this._pollSpecs.start();\n });\n }\n /**\n * Test whether the manager is ready.\n */\n get isReady() {\n return this._isReady;\n }\n /**\n * A promise that fulfills when the manager is ready.\n */\n get ready() {\n return this._ready;\n }\n /**\n * Get the most recently fetched kernel specs.\n */\n get specs() {\n return this._specs;\n }\n /**\n * A signal emitted when the specs change.\n */\n get specsChanged() {\n return this._specsChanged;\n }\n /**\n * A signal emitted when there is a connection failure.\n */\n get connectionFailure() {\n return this._connectionFailure;\n }\n /**\n * Dispose of the resources used by the manager.\n */\n dispose() {\n this._pollSpecs.dispose();\n super.dispose();\n }\n /**\n * Force a refresh of the specs from the server.\n *\n * @returns A promise that resolves when the specs are fetched.\n *\n * #### Notes\n * This is intended to be called only in response to a user action,\n * since the manager maintains its internal state.\n */\n async refreshSpecs() {\n await this._pollSpecs.refresh();\n await this._pollSpecs.tick;\n }\n /**\n * Execute a request to the server to poll specs and update state.\n */\n async requestSpecs() {\n const specs = await restapi.getSpecs(this.serverSettings);\n if (this.isDisposed) {\n return;\n }\n if (!coreutils_1.JSONExt.deepEqual(specs, this._specs)) {\n this._specs = specs;\n this._specsChanged.emit(specs);\n }\n }\n}\nexports.KernelSpecManager = KernelSpecManager;\n//# sourceMappingURL=manager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSpecs = void 0;\nconst serverconnection_1 = require(\"../serverconnection\");\nconst validate_1 = require(\"./validate\");\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\n/**\n * The url for the kernelspec service.\n */\nconst KERNELSPEC_SERVICE_URL = 'api/kernelspecs';\n/**\n * Fetch all of the kernel specs.\n *\n * @param settings - The optional server settings.\n * @param useCache - Whether to use the cache. If false, always request.\n *\n * @returns A promise that resolves with the kernel specs.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernelspecs).\n */\nasync function getSpecs(settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = coreutils_1.URLExt.join(settings.baseUrl, KERNELSPEC_SERVICE_URL);\n const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n if (response.status !== 200) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n return (0, validate_1.validateSpecModels)(data);\n}\nexports.getSpecs = getSpecs;\n//# sourceMappingURL=restapi.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateSpecModels = exports.validateSpecModel = void 0;\nconst validate_1 = require(\"../validate\");\n/**\n * Validate a server kernelspec model to a client side model.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction validateSpecModel(data) {\n const spec = data.spec;\n if (!spec) {\n throw new Error('Invalid kernel spec');\n }\n (0, validate_1.validateProperty)(data, 'name', 'string');\n (0, validate_1.validateProperty)(data, 'resources', 'object');\n (0, validate_1.validateProperty)(spec, 'language', 'string');\n (0, validate_1.validateProperty)(spec, 'display_name', 'string');\n (0, validate_1.validateProperty)(spec, 'argv', 'array');\n let metadata = null;\n if (spec.hasOwnProperty('metadata')) {\n (0, validate_1.validateProperty)(spec, 'metadata', 'object');\n metadata = spec.metadata;\n }\n let env = null;\n if (spec.hasOwnProperty('env')) {\n (0, validate_1.validateProperty)(spec, 'env', 'object');\n env = spec.env;\n }\n return {\n name: data.name,\n resources: data.resources,\n language: spec.language,\n display_name: spec.display_name,\n argv: spec.argv,\n metadata,\n env\n };\n}\nexports.validateSpecModel = validateSpecModel;\n/**\n * Validate a `Kernel.ISpecModels` object.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction validateSpecModels(data) {\n if (!data.hasOwnProperty('kernelspecs')) {\n throw new Error('No kernelspecs found');\n }\n let keys = Object.keys(data.kernelspecs);\n const kernelspecs = Object.create(null);\n let defaultSpec = data.default;\n for (let i = 0; i < keys.length; i++) {\n const ks = data.kernelspecs[keys[i]];\n try {\n kernelspecs[keys[i]] = validateSpecModel(ks);\n }\n catch (err) {\n // Remove the errant kernel spec.\n console.warn(`Removing errant kernel spec: ${keys[i]}`);\n }\n }\n keys = Object.keys(kernelspecs);\n if (!keys.length) {\n throw new Error('No valid kernelspecs found');\n }\n if (!defaultSpec ||\n typeof defaultSpec !== 'string' ||\n !(defaultSpec in kernelspecs)) {\n defaultSpec = keys[0];\n console.warn(`Default kernel not found, using '${keys[0]}'`);\n }\n return {\n default: defaultSpec,\n kernelspecs\n };\n}\nexports.validateSpecModels = validateSpecModels;\n//# sourceMappingURL=validate.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ServiceManager = void 0;\nconst signaling_1 = require(\"@lumino/signaling\");\nconst builder_1 = require(\"./builder\");\nconst contents_1 = require(\"./contents\");\nconst event_1 = require(\"./event\");\nconst kernel_1 = require(\"./kernel\");\nconst kernelspec_1 = require(\"./kernelspec\");\nconst nbconvert_1 = require(\"./nbconvert\");\nconst serverconnection_1 = require(\"./serverconnection\");\nconst session_1 = require(\"./session\");\nconst setting_1 = require(\"./setting\");\nconst terminal_1 = require(\"./terminal\");\nconst user_1 = require(\"./user\");\nconst workspace_1 = require(\"./workspace\");\n/**\n * A Jupyter services manager.\n */\nclass ServiceManager {\n /**\n * Construct a new services provider.\n */\n constructor(options = {}) {\n var _a, _b;\n this._isDisposed = false;\n this._connectionFailure = new signaling_1.Signal(this);\n this._isReady = false;\n const defaultDrive = options.defaultDrive;\n const serverSettings = (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n const standby = (_b = options.standby) !== null && _b !== void 0 ? _b : 'when-hidden';\n const normalized = { defaultDrive, serverSettings, standby };\n this.serverSettings = serverSettings;\n this.contents = options.contents || new contents_1.ContentsManager(normalized);\n this.events = options.events || new event_1.EventManager(normalized);\n this.kernels = options.kernels || new kernel_1.KernelManager(normalized);\n this.sessions =\n options.sessions ||\n new session_1.SessionManager({\n ...normalized,\n kernelManager: this.kernels\n });\n this.settings = options.settings || new setting_1.SettingManager(normalized);\n this.terminals = options.terminals || new terminal_1.TerminalManager(normalized);\n this.builder = options.builder || new builder_1.BuildManager(normalized);\n this.workspaces = options.workspaces || new workspace_1.WorkspaceManager(normalized);\n this.nbconvert = options.nbconvert || new nbconvert_1.NbConvertManager(normalized);\n this.kernelspecs = options.kernelspecs || new kernelspec_1.KernelSpecManager(normalized);\n this.user = options.user || new user_1.UserManager(normalized);\n // Proxy all connection failures from the individual service managers.\n this.kernelspecs.connectionFailure.connect(this._onConnectionFailure, this);\n this.sessions.connectionFailure.connect(this._onConnectionFailure, this);\n this.terminals.connectionFailure.connect(this._onConnectionFailure, this);\n // Define promises that need to be resolved before service manager is ready.\n const readyList = [this.sessions.ready, this.kernelspecs.ready];\n if (this.terminals.isAvailable()) {\n readyList.push(this.terminals.ready);\n }\n this._readyPromise = Promise.all(readyList).then(() => {\n this._isReady = true;\n });\n }\n /**\n * A signal emitted when there is a connection failure with the kernel.\n */\n get connectionFailure() {\n return this._connectionFailure;\n }\n /**\n * Test whether the service manager is disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the resources used by the manager.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n signaling_1.Signal.clearData(this);\n this.contents.dispose();\n this.events.dispose();\n this.sessions.dispose();\n this.terminals.dispose();\n }\n /**\n * Test whether the manager is ready.\n */\n get isReady() {\n return this._isReady;\n }\n /**\n * A promise that fulfills when the manager is ready.\n */\n get ready() {\n return this._readyPromise;\n }\n _onConnectionFailure(sender, err) {\n this._connectionFailure.emit(err);\n }\n}\nexports.ServiceManager = ServiceManager;\n//# sourceMappingURL=manager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NbConvertManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst serverconnection_1 = require(\"../serverconnection\");\nconst coreutils_2 = require(\"@lumino/coreutils\");\n/**\n * The url for the lab nbconvert service.\n */\nconst NBCONVERT_SETTINGS_URL = 'api/nbconvert';\n/**\n * The nbconvert API service manager.\n */\nclass NbConvertManager {\n /**\n * Create a new nbconvert manager.\n */\n constructor(options = {}) {\n var _a;\n this._exportFormats = null;\n this.serverSettings =\n (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n }\n /**\n * Fetch and cache the export formats from the expensive nbconvert handler.\n */\n async fetchExportFormats() {\n this._requestingFormats = new coreutils_2.PromiseDelegate();\n this._exportFormats = null;\n const base = this.serverSettings.baseUrl;\n const url = coreutils_1.URLExt.join(base, NBCONVERT_SETTINGS_URL);\n const { serverSettings } = this;\n const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, serverSettings);\n if (response.status !== 200) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n const exportList = {};\n const keys = Object.keys(data);\n keys.forEach(function (key) {\n const mimeType = data[key].output_mimetype;\n exportList[key] = { output_mimetype: mimeType };\n });\n this._exportFormats = exportList;\n this._requestingFormats.resolve(exportList);\n return exportList;\n }\n /**\n * Get the list of export formats, preferring pre-cached ones.\n */\n async getExportFormats(force = true) {\n if (this._requestingFormats) {\n return this._requestingFormats.promise;\n }\n if (force || !this._exportFormats) {\n return await this.fetchExportFormats();\n }\n return this._exportFormats;\n }\n}\nexports.NbConvertManager = NbConvertManager;\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ServerConnection = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nlet WEBSOCKET;\nif (typeof window === 'undefined') {\n // Mangle the require statements so it does not get picked up in the\n // browser assets.\n WEBSOCKET = require('ws');\n}\nelse {\n WEBSOCKET = WebSocket;\n}\n/**\n * The namespace for ServerConnection functions.\n *\n * #### Notes\n * This is only intended to manage communication with the Jupyter server.\n *\n * The default values can be used in a JupyterLab or Jupyter Notebook context.\n *\n * We use `token` authentication if available, falling back on an XSRF\n * cookie if one has been provided on the `document`.\n *\n * A content type of `'application/json'` is added when using authentication\n * and there is no body data to allow the server to prevent malicious forms.\n */\nvar ServerConnection;\n(function (ServerConnection) {\n /**\n * Create a settings object given a subset of options.\n *\n * @param options - An optional partial set of options.\n *\n * @returns The full settings object.\n */\n function makeSettings(options) {\n return Private.makeSettings(options);\n }\n ServerConnection.makeSettings = makeSettings;\n /**\n * Make an request to the notebook server.\n *\n * @param url - The url for the request.\n *\n * @param init - The initialization options for the request.\n *\n * @param settings - The server settings to apply to the request.\n *\n * @returns a Promise that resolves with the response.\n *\n * @throws If the url of the request is not a notebook server url.\n *\n * #### Notes\n * The `url` must start with `settings.baseUrl`. The `init` settings are\n * merged with `settings.init`, with `init` taking precedence.\n * The headers in the two objects are not merged.\n * If there is no body data, we set the content type to `application/json`\n * because it is required by the Notebook server.\n */\n function makeRequest(url, init, settings) {\n return Private.handleRequest(url, init, settings);\n }\n ServerConnection.makeRequest = makeRequest;\n /**\n * A wrapped error for a fetch response.\n */\n class ResponseError extends Error {\n /**\n * Create a ResponseError from a response, handling the traceback and message\n * as appropriate.\n *\n * @param response The response object.\n *\n * @returns A promise that resolves with a `ResponseError` object.\n */\n static async create(response) {\n try {\n const data = await response.json();\n const { message, traceback } = data;\n if (traceback) {\n console.error(traceback);\n }\n return new ResponseError(response, message !== null && message !== void 0 ? message : ResponseError._defaultMessage(response), traceback !== null && traceback !== void 0 ? traceback : '');\n }\n catch (e) {\n console.debug(e);\n return new ResponseError(response);\n }\n }\n /**\n * Create a new response error.\n */\n constructor(response, message = ResponseError._defaultMessage(response), traceback = '') {\n super(message);\n this.response = response;\n this.traceback = traceback;\n }\n static _defaultMessage(response) {\n return `Invalid response: ${response.status} ${response.statusText}`;\n }\n }\n ServerConnection.ResponseError = ResponseError;\n /**\n * A wrapped error for a network error.\n */\n class NetworkError extends TypeError {\n /**\n * Create a new network error.\n */\n constructor(original) {\n super(original.message);\n this.stack = original.stack;\n }\n }\n ServerConnection.NetworkError = NetworkError;\n})(ServerConnection = exports.ServerConnection || (exports.ServerConnection = {}));\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n /**\n * Handle the server connection settings, returning a new value.\n */\n function makeSettings(options = {}) {\n var _a;\n const pageBaseUrl = coreutils_1.PageConfig.getBaseUrl();\n const pageWsUrl = coreutils_1.PageConfig.getWsUrl();\n const baseUrl = coreutils_1.URLExt.normalize(options.baseUrl) || pageBaseUrl;\n let wsUrl = options.wsUrl;\n // Prefer the default wsUrl if we are using the default baseUrl.\n if (!wsUrl && baseUrl === pageBaseUrl) {\n wsUrl = pageWsUrl;\n }\n // Otherwise convert the baseUrl to a wsUrl if possible.\n if (!wsUrl && baseUrl.indexOf('http') === 0) {\n wsUrl = 'ws' + baseUrl.slice(4);\n }\n // Otherwise fall back on the default wsUrl.\n wsUrl = wsUrl !== null && wsUrl !== void 0 ? wsUrl : pageWsUrl;\n return {\n init: { cache: 'no-store', credentials: 'same-origin' },\n fetch,\n Headers,\n Request,\n WebSocket: WEBSOCKET,\n token: coreutils_1.PageConfig.getToken(),\n appUrl: coreutils_1.PageConfig.getOption('appUrl'),\n appendToken: typeof window === 'undefined' ||\n (typeof process !== 'undefined' &&\n ((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a.JEST_WORKER_ID) !== undefined) ||\n coreutils_1.URLExt.getHostName(pageBaseUrl) !== coreutils_1.URLExt.getHostName(wsUrl),\n ...options,\n baseUrl,\n wsUrl\n };\n }\n Private.makeSettings = makeSettings;\n /**\n * Handle a request.\n *\n * @param url - The url for the request.\n *\n * @param init - The overrides for the request init.\n *\n * @param settings - The settings object for the request.\n *\n * #### Notes\n * The `url` must start with `settings.baseUrl`. The `init` settings\n * take precedence over `settings.init`.\n */\n function handleRequest(url, init, settings) {\n var _a;\n // Handle notebook server requests.\n if (url.indexOf(settings.baseUrl) !== 0) {\n throw new Error('Can only be used for notebook server requests');\n }\n // Use explicit cache buster when `no-store` is set since\n // not all browsers use it properly.\n const cache = (_a = init.cache) !== null && _a !== void 0 ? _a : settings.init.cache;\n if (cache === 'no-store') {\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache\n url += (/\\?/.test(url) ? '&' : '?') + new Date().getTime();\n }\n const request = new settings.Request(url, { ...settings.init, ...init });\n // Handle authentication. Authentication can be overdetermined by\n // settings token and XSRF token.\n let authenticated = false;\n if (settings.token) {\n authenticated = true;\n request.headers.append('Authorization', `token ${settings.token}`);\n }\n if (typeof document !== 'undefined' && (document === null || document === void 0 ? void 0 : document.cookie)) {\n const xsrfToken = getCookie('_xsrf');\n if (xsrfToken !== undefined) {\n authenticated = true;\n request.headers.append('X-XSRFToken', xsrfToken);\n }\n }\n // Set the content type if there is no given data and we are\n // using an authenticated connection.\n if (!request.headers.has('Content-Type') && authenticated) {\n request.headers.set('Content-Type', 'application/json');\n }\n // Use `call` to avoid a `TypeError` in the browser.\n return settings.fetch.call(null, request).catch((e) => {\n // Convert the TypeError into a more specific error.\n throw new ServerConnection.NetworkError(e);\n });\n // TODO: *this* is probably where we need a system-wide connectionFailure\n // signal we can hook into.\n }\n Private.handleRequest = handleRequest;\n /**\n * Get a cookie from the document.\n */\n function getCookie(name) {\n // From http://www.tornadoweb.org/en/stable/guide/security.html\n const matches = document.cookie.match('\\\\b' + name + '=([^;]*)\\\\b');\n return matches === null || matches === void 0 ? void 0 : matches[1];\n }\n})(Private || (Private = {}));\n//# sourceMappingURL=serverconnection.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionConnection = void 0;\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst restapi_1 = require(\"./restapi\");\nconst coreutils_1 = require(\"@lumino/coreutils\");\n/**\n * Session object for accessing the session REST api. The session\n * should be used to start kernels and then shut them down -- for\n * all other kernel operations, the kernel object should be used.\n */\nclass SessionConnection {\n /**\n * Construct a new session.\n */\n constructor(options) {\n var _a, _b, _c, _d;\n this._id = '';\n this._path = '';\n this._name = '';\n this._type = '';\n this._kernel = null;\n this._isDisposed = false;\n this._disposed = new signaling_1.Signal(this);\n this._kernelChanged = new signaling_1.Signal(this);\n this._statusChanged = new signaling_1.Signal(this);\n this._connectionStatusChanged = new signaling_1.Signal(this);\n this._pendingInput = new signaling_1.Signal(this);\n this._iopubMessage = new signaling_1.Signal(this);\n this._unhandledMessage = new signaling_1.Signal(this);\n this._anyMessage = new signaling_1.Signal(this);\n this._propertyChanged = new signaling_1.Signal(this);\n this._id = options.model.id;\n this._name = options.model.name;\n this._path = options.model.path;\n this._type = options.model.type;\n this._username = (_a = options.username) !== null && _a !== void 0 ? _a : '';\n this._clientId = (_b = options.clientId) !== null && _b !== void 0 ? _b : coreutils_1.UUID.uuid4();\n this._connectToKernel = options.connectToKernel;\n this._kernelConnectionOptions = (_c = options.kernelConnectionOptions) !== null && _c !== void 0 ? _c : {};\n this.serverSettings =\n (_d = options.serverSettings) !== null && _d !== void 0 ? _d : __1.ServerConnection.makeSettings();\n this.setupKernel(options.model.kernel);\n }\n /**\n * A signal emitted when the session is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * A signal emitted when the kernel changes.\n */\n get kernelChanged() {\n return this._kernelChanged;\n }\n /**\n * A signal proxied from the connection about the kernel status.\n */\n get statusChanged() {\n return this._statusChanged;\n }\n /**\n * A signal proxied from the kernel about the connection status.\n */\n get connectionStatusChanged() {\n return this._connectionStatusChanged;\n }\n /**\n * A signal proxied from the kernel pending input.\n */\n get pendingInput() {\n return this._pendingInput;\n }\n /**\n * A signal proxied from the kernel about iopub kernel messages.\n */\n get iopubMessage() {\n return this._iopubMessage;\n }\n /**\n * A signal proxied from the kernel for an unhandled kernel message.\n */\n get unhandledMessage() {\n return this._unhandledMessage;\n }\n /**\n * A signal proxied from the kernel emitted for any kernel message.\n *\n * #### Notes\n * The behavior is undefined if the message is modified during message\n * handling. As such, it should be treated as read-only.\n */\n get anyMessage() {\n return this._anyMessage;\n }\n /**\n * A signal emitted when a session property changes.\n */\n get propertyChanged() {\n return this._propertyChanged;\n }\n /**\n * Get the session id.\n */\n get id() {\n return this._id;\n }\n /**\n * Get the session kernel connection object.\n *\n * #### Notes\n * This is a read-only property, and can be altered by [changeKernel].\n */\n get kernel() {\n return this._kernel;\n }\n /**\n * Get the session path.\n */\n get path() {\n return this._path;\n }\n /**\n * Get the session type.\n */\n get type() {\n return this._type;\n }\n /**\n * Get the session name.\n */\n get name() {\n return this._name;\n }\n /**\n * Get the model associated with the session.\n */\n get model() {\n return {\n id: this.id,\n kernel: this.kernel && { id: this.kernel.id, name: this.kernel.name },\n path: this._path,\n type: this._type,\n name: this._name\n };\n }\n /**\n * Test whether the session has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Update the session based on a session model from the server.\n *\n * #### Notes\n * This only updates this session connection instance. Use `setPath`,\n * `setName`, `setType`, and `changeKernel` to change the session values on\n * the server.\n */\n update(model) {\n const oldModel = this.model;\n this._path = model.path;\n this._name = model.name;\n this._type = model.type;\n if ((this._kernel === null && model.kernel !== null) ||\n (this._kernel !== null && model.kernel === null) ||\n (this._kernel !== null &&\n model.kernel !== null &&\n this._kernel.id !== model.kernel.id)) {\n if (this._kernel !== null) {\n this._kernel.dispose();\n }\n const oldValue = this._kernel || null;\n this.setupKernel(model.kernel);\n const newValue = this._kernel || null;\n this._kernelChanged.emit({ name: 'kernel', oldValue, newValue });\n }\n this._handleModelChange(oldModel);\n }\n /**\n * Dispose of the resources held by the session.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n this._disposed.emit();\n if (this._kernel) {\n this._kernel.dispose();\n const oldValue = this._kernel;\n this._kernel = null;\n const newValue = this._kernel;\n this._kernelChanged.emit({ name: 'kernel', oldValue, newValue });\n }\n signaling_1.Signal.clearData(this);\n }\n /**\n * Change the session path.\n *\n * @param path - The new session path.\n *\n * @returns A promise that resolves when the session has renamed.\n *\n * #### Notes\n * This uses the Jupyter REST API, and the response is validated.\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\n async setPath(path) {\n if (this.isDisposed) {\n throw new Error('Session is disposed');\n }\n await this._patch({ path });\n }\n /**\n * Change the session name.\n */\n async setName(name) {\n if (this.isDisposed) {\n throw new Error('Session is disposed');\n }\n await this._patch({ name });\n }\n /**\n * Change the session type.\n */\n async setType(type) {\n if (this.isDisposed) {\n throw new Error('Session is disposed');\n }\n await this._patch({ type });\n }\n /**\n * Change the kernel.\n *\n * @param options - The name or id of the new kernel.\n *\n * #### Notes\n * This shuts down the existing kernel and creates a new kernel,\n * keeping the existing session ID and session path.\n */\n async changeKernel(options) {\n if (this.isDisposed) {\n throw new Error('Session is disposed');\n }\n await this._patch({ kernel: options });\n return this.kernel;\n }\n /**\n * Kill the kernel and shutdown the session.\n *\n * @returns - The promise fulfilled on a valid response from the server.\n *\n * #### Notes\n * Uses the [Jupyter Notebook API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/sessions), and validates the response.\n * Disposes of the session and emits a [sessionDied] signal on success.\n */\n async shutdown() {\n if (this.isDisposed) {\n throw new Error('Session is disposed');\n }\n await (0, restapi_1.shutdownSession)(this.id, this.serverSettings);\n this.dispose();\n }\n /**\n * Create a new kernel connection and connect to its signals.\n *\n * #### Notes\n * This method is not meant to be subclassed.\n */\n setupKernel(model) {\n if (model === null) {\n this._kernel = null;\n return;\n }\n const kc = this._connectToKernel({\n ...this._kernelConnectionOptions,\n model,\n username: this._username,\n clientId: this._clientId,\n serverSettings: this.serverSettings\n });\n this._kernel = kc;\n kc.statusChanged.connect(this.onKernelStatus, this);\n kc.connectionStatusChanged.connect(this.onKernelConnectionStatus, this);\n kc.pendingInput.connect(this.onPendingInput, this);\n kc.unhandledMessage.connect(this.onUnhandledMessage, this);\n kc.iopubMessage.connect(this.onIOPubMessage, this);\n kc.anyMessage.connect(this.onAnyMessage, this);\n }\n /**\n * Handle to changes in the Kernel status.\n */\n onKernelStatus(sender, state) {\n this._statusChanged.emit(state);\n }\n /**\n * Handle to changes in the Kernel status.\n */\n onKernelConnectionStatus(sender, state) {\n this._connectionStatusChanged.emit(state);\n }\n /**\n * Handle a change in the pendingInput.\n */\n onPendingInput(sender, state) {\n this._pendingInput.emit(state);\n }\n /**\n * Handle iopub kernel messages.\n */\n onIOPubMessage(sender, msg) {\n this._iopubMessage.emit(msg);\n }\n /**\n * Handle unhandled kernel messages.\n */\n onUnhandledMessage(sender, msg) {\n this._unhandledMessage.emit(msg);\n }\n /**\n * Handle any kernel messages.\n */\n onAnyMessage(sender, args) {\n this._anyMessage.emit(args);\n }\n /**\n * Send a PATCH to the server, updating the session path or the kernel.\n */\n async _patch(body) {\n const model = await (0, restapi_1.updateSession)({ ...body, id: this._id }, this.serverSettings);\n this.update(model);\n return model;\n }\n /**\n * Handle a change to the model.\n */\n _handleModelChange(oldModel) {\n if (oldModel.name !== this._name) {\n this._propertyChanged.emit('name');\n }\n if (oldModel.type !== this._type) {\n this._propertyChanged.emit('type');\n }\n if (oldModel.path !== this._path) {\n this._propertyChanged.emit('path');\n }\n }\n}\nexports.SessionConnection = SessionConnection;\n//# sourceMappingURL=default.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionAPI = exports.Session = void 0;\nconst Session = __importStar(require(\"./session\"));\nexports.Session = Session;\nconst SessionAPI = __importStar(require(\"./restapi\"));\nexports.SessionAPI = SessionAPI;\n__exportStar(require(\"./manager\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionManager = void 0;\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst serverconnection_1 = require(\"../serverconnection\");\nconst basemanager_1 = require(\"../basemanager\");\nconst default_1 = require(\"./default\");\nconst restapi_1 = require(\"./restapi\");\n/**\n * An implementation of a session manager.\n */\nclass SessionManager extends basemanager_1.BaseManager {\n /**\n * Construct a new session manager.\n *\n * @param options - The default options for each session.\n */\n constructor(options) {\n var _a;\n super(options);\n this._isReady = false;\n this._sessionConnections = new Set();\n this._models = new Map();\n this._runningChanged = new signaling_1.Signal(this);\n this._connectionFailure = new signaling_1.Signal(this);\n // We define these here so they bind `this` correctly\n this._connectToKernel = (options) => {\n return this._kernelManager.connectTo(options);\n };\n this._kernelManager = options.kernelManager;\n // Start model polling with exponential backoff.\n this._pollModels = new polling_1.Poll({\n auto: false,\n factory: () => this.requestRunning(),\n frequency: {\n interval: 10 * 1000,\n backoff: true,\n max: 300 * 1000\n },\n name: `@jupyterlab/services:SessionManager#models`,\n standby: (_a = options.standby) !== null && _a !== void 0 ? _a : 'when-hidden'\n });\n // Initialize internal data.\n this._ready = (async () => {\n await this._pollModels.start();\n await this._pollModels.tick;\n if (this._kernelManager.isActive) {\n await this._kernelManager.ready;\n }\n this._isReady = true;\n })();\n }\n /**\n * Test whether the manager is ready.\n */\n get isReady() {\n return this._isReady;\n }\n /**\n * A promise that fulfills when the manager is ready.\n */\n get ready() {\n return this._ready;\n }\n /**\n * A signal emitted when the running sessions change.\n */\n get runningChanged() {\n return this._runningChanged;\n }\n /**\n * A signal emitted when there is a connection failure.\n */\n get connectionFailure() {\n return this._connectionFailure;\n }\n /**\n * Dispose of the resources used by the manager.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._models.clear();\n this._sessionConnections.forEach(x => x.dispose());\n this._pollModels.dispose();\n super.dispose();\n }\n /*\n * Connect to a running session. See also [[connectToSession]].\n */\n connectTo(options) {\n const sessionConnection = new default_1.SessionConnection({\n ...options,\n connectToKernel: this._connectToKernel,\n serverSettings: this.serverSettings\n });\n this._onStarted(sessionConnection);\n if (!this._models.has(options.model.id)) {\n // We trust the user to connect to an existing session, but we verify\n // asynchronously.\n void this.refreshRunning().catch(() => {\n /* no-op */\n });\n }\n return sessionConnection;\n }\n /**\n * Create an iterator over the most recent running sessions.\n *\n * @returns A new iterator over the running sessions.\n */\n running() {\n return this._models.values();\n }\n /**\n * Force a refresh of the running sessions.\n *\n * @returns A promise that with the list of running sessions.\n *\n * #### Notes\n * This is not typically meant to be called by the user, since the\n * manager maintains its own internal state.\n */\n async refreshRunning() {\n await this._pollModels.refresh();\n await this._pollModels.tick;\n }\n /**\n * Start a new session. See also [[startNewSession]].\n *\n * @param createOptions - Options for creating the session\n *\n * @param connectOptions - Options for connecting to the session\n */\n async startNew(createOptions, connectOptions = {}) {\n const model = await (0, restapi_1.startSession)(createOptions, this.serverSettings);\n await this.refreshRunning();\n return this.connectTo({ ...connectOptions, model });\n }\n /**\n * Shut down a session by id.\n */\n async shutdown(id) {\n await (0, restapi_1.shutdownSession)(id, this.serverSettings);\n await this.refreshRunning();\n }\n /**\n * Shut down all sessions.\n *\n * @returns A promise that resolves when all of the kernels are shut down.\n */\n async shutdownAll() {\n // Update the list of models to make sure our list is current.\n await this.refreshRunning();\n // Shut down all models.\n await Promise.all([...this._models.keys()].map(id => (0, restapi_1.shutdownSession)(id, this.serverSettings)));\n // Update the list of models to clear out our state.\n await this.refreshRunning();\n }\n /**\n * Find a session associated with a path and stop it if it is the only session\n * using that kernel.\n *\n * @param path - The path in question.\n *\n * @returns A promise that resolves when the relevant sessions are stopped.\n */\n async stopIfNeeded(path) {\n try {\n const sessions = await (0, restapi_1.listRunning)(this.serverSettings);\n const matches = sessions.filter(value => value.path === path);\n if (matches.length === 1) {\n const id = matches[0].id;\n await this.shutdown(id);\n }\n }\n catch (error) {\n /* Always succeed. */\n }\n }\n /**\n * Find a session by id.\n */\n async findById(id) {\n if (this._models.has(id)) {\n return this._models.get(id);\n }\n await this.refreshRunning();\n return this._models.get(id);\n }\n /**\n * Find a session by path.\n */\n async findByPath(path) {\n for (const m of this._models.values()) {\n if (m.path === path) {\n return m;\n }\n }\n await this.refreshRunning();\n for (const m of this._models.values()) {\n if (m.path === path) {\n return m;\n }\n }\n return undefined;\n }\n /**\n * Execute a request to the server to poll running kernels and update state.\n */\n async requestRunning() {\n var _a, _b;\n let models;\n try {\n models = await (0, restapi_1.listRunning)(this.serverSettings);\n }\n catch (err) {\n // Handle network errors, as well as cases where we are on a\n // JupyterHub and the server is not running. JupyterHub returns a\n // 503 (<2.0) or 424 (>2.0) in that case.\n if (err instanceof serverconnection_1.ServerConnection.NetworkError ||\n ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 503 ||\n ((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 424) {\n this._connectionFailure.emit(err);\n }\n throw err;\n }\n if (this.isDisposed) {\n return;\n }\n if (this._models.size === models.length &&\n models.every(model => {\n var _a, _b, _c, _d;\n const existing = this._models.get(model.id);\n if (!existing) {\n return false;\n }\n return (((_a = existing.kernel) === null || _a === void 0 ? void 0 : _a.id) === ((_b = model.kernel) === null || _b === void 0 ? void 0 : _b.id) &&\n ((_c = existing.kernel) === null || _c === void 0 ? void 0 : _c.name) === ((_d = model.kernel) === null || _d === void 0 ? void 0 : _d.name) &&\n existing.name === model.name &&\n existing.path === model.path &&\n existing.type === model.type);\n })) {\n // Identical models list (presuming models does not contain duplicate\n // ids), so just return\n return;\n }\n this._models = new Map(models.map(x => [x.id, x]));\n this._sessionConnections.forEach(sc => {\n if (this._models.has(sc.id)) {\n sc.update(this._models.get(sc.id));\n }\n else {\n sc.dispose();\n }\n });\n this._runningChanged.emit(models);\n }\n /**\n * Handle a session starting.\n */\n _onStarted(sessionConnection) {\n this._sessionConnections.add(sessionConnection);\n sessionConnection.disposed.connect(this._onDisposed, this);\n sessionConnection.propertyChanged.connect(this._onChanged, this);\n sessionConnection.kernelChanged.connect(this._onChanged, this);\n }\n _onDisposed(sessionConnection) {\n this._sessionConnections.delete(sessionConnection);\n // A session termination emission could mean the server session is deleted,\n // or that the session JS object is disposed and the session still exists on\n // the server, so we refresh from the server to make sure we reflect the\n // server state.\n void this.refreshRunning().catch(() => {\n /* no-op */\n });\n }\n _onChanged() {\n void this.refreshRunning().catch(() => {\n /* no-op */\n });\n }\n}\nexports.SessionManager = SessionManager;\n/**\n * The namespace for `SessionManager` class statics.\n */\n(function (SessionManager) {\n /**\n * A no-op session manager to be used when starting sessions is not supported.\n */\n class NoopManager extends SessionManager {\n constructor() {\n super(...arguments);\n this._readyPromise = new Promise(() => {\n /* no-op */\n });\n }\n /**\n * Whether the manager is active.\n */\n get isActive() {\n return false;\n }\n /**\n * Used for testing.\n */\n get parentReady() {\n return super.ready;\n }\n /**\n * Start a new session - throw an error since it is not supported.\n */\n async startNew(createOptions, connectOptions = {}) {\n return Promise.reject(new Error('Not implemented in no-op Session Manager'));\n }\n /*\n * Connect to a running session - throw an error since it is not supported.\n */\n connectTo(options) {\n throw Error('Not implemented in no-op Session Manager');\n }\n /**\n * A promise that fulfills when the manager is ready (never).\n */\n get ready() {\n return this.parentReady.then(() => this._readyPromise);\n }\n /**\n * Shut down a session by id - throw an error since it is not supported.\n */\n async shutdown(id) {\n return Promise.reject(new Error('Not implemented in no-op Session Manager'));\n }\n /**\n * Execute a request to the server to poll running sessions and update state.\n */\n async requestRunning() {\n return Promise.resolve();\n }\n }\n SessionManager.NoopManager = NoopManager;\n})(SessionManager = exports.SessionManager || (exports.SessionManager = {}));\n//# sourceMappingURL=manager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.updateSession = exports.startSession = exports.getSessionModel = exports.shutdownSession = exports.getSessionUrl = exports.listRunning = exports.SESSION_SERVICE_URL = void 0;\nconst serverconnection_1 = require(\"../serverconnection\");\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst validate_1 = require(\"./validate\");\n/**\n * The url for the session service.\n */\nexports.SESSION_SERVICE_URL = 'api/sessions';\n/**\n * List the running sessions.\n */\nasync function listRunning(settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.SESSION_SERVICE_URL);\n const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n if (response.status !== 200) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n if (!Array.isArray(data)) {\n throw new Error('Invalid Session list');\n }\n data.forEach(m => {\n (0, validate_1.updateLegacySessionModel)(m);\n (0, validate_1.validateModel)(m);\n });\n return data;\n}\nexports.listRunning = listRunning;\n/**\n * Get a session url.\n */\nfunction getSessionUrl(baseUrl, id) {\n return coreutils_1.URLExt.join(baseUrl, exports.SESSION_SERVICE_URL, id);\n}\nexports.getSessionUrl = getSessionUrl;\n/**\n * Shut down a session by id.\n */\nasync function shutdownSession(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n var _a;\n const url = getSessionUrl(settings.baseUrl, id);\n const init = { method: 'DELETE' };\n const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n if (response.status === 404) {\n const data = await response.json();\n const msg = (_a = data.message) !== null && _a !== void 0 ? _a : `The session \"${id}\"\" does not exist on the server`;\n console.warn(msg);\n }\n else if (response.status === 410) {\n throw new serverconnection_1.ServerConnection.ResponseError(response, 'The kernel was deleted but the session was not');\n }\n else if (response.status !== 204) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n}\nexports.shutdownSession = shutdownSession;\n/**\n * Get a full session model from the server by session id string.\n */\nasync function getSessionModel(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = getSessionUrl(settings.baseUrl, id);\n const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n if (response.status !== 200) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n (0, validate_1.updateLegacySessionModel)(data);\n (0, validate_1.validateModel)(data);\n return data;\n}\nexports.getSessionModel = getSessionModel;\n/**\n * Create a new session, or return an existing session if the session path\n * already exists.\n */\nasync function startSession(options, settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.SESSION_SERVICE_URL);\n const init = {\n method: 'POST',\n body: JSON.stringify(options)\n };\n const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n if (response.status !== 201) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n (0, validate_1.updateLegacySessionModel)(data);\n (0, validate_1.validateModel)(data);\n return data;\n}\nexports.startSession = startSession;\n/**\n * Send a PATCH to the server, updating the session path or the kernel.\n */\nasync function updateSession(model, settings = serverconnection_1.ServerConnection.makeSettings()) {\n const url = getSessionUrl(settings.baseUrl, model.id);\n const init = {\n method: 'PATCH',\n body: JSON.stringify(model)\n };\n const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n if (response.status !== 200) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n (0, validate_1.updateLegacySessionModel)(data);\n (0, validate_1.validateModel)(data);\n return data;\n}\nexports.updateSession = updateSession;\n//# sourceMappingURL=restapi.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=session.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateModels = exports.updateLegacySessionModel = exports.validateModel = void 0;\nconst validate_1 = require(\"../kernel/validate\");\nconst validate_2 = require(\"../validate\");\n/**\n * Validate an `Session.IModel` object.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction validateModel(data) {\n (0, validate_2.validateProperty)(data, 'id', 'string');\n (0, validate_2.validateProperty)(data, 'type', 'string');\n (0, validate_2.validateProperty)(data, 'name', 'string');\n (0, validate_2.validateProperty)(data, 'path', 'string');\n (0, validate_2.validateProperty)(data, 'kernel', 'object');\n (0, validate_1.validateModel)(data.kernel);\n}\nexports.validateModel = validateModel;\n/**\n * Update model from legacy session data.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction updateLegacySessionModel(data) {\n if (data.path === undefined && data.notebook !== undefined) {\n data.path = data.notebook.path;\n data.type = 'notebook';\n data.name = '';\n }\n}\nexports.updateLegacySessionModel = updateLegacySessionModel;\n/**\n * Validate an array of `Session.IModel` objects.\n */\nfunction validateModels(models) {\n if (!Array.isArray(models)) {\n throw new Error('Invalid session list');\n }\n models.forEach(d => validateModel(d));\n}\nexports.validateModels = validateModels;\n//# sourceMappingURL=validate.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SettingManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst statedb_1 = require(\"@jupyterlab/statedb\");\nconst serverconnection_1 = require(\"../serverconnection\");\n/**\n * The url for the lab settings service.\n */\nconst SERVICE_SETTINGS_URL = 'api/settings';\n/**\n * The settings API service manager.\n */\nclass SettingManager extends statedb_1.DataConnector {\n /**\n * Create a new setting manager.\n */\n constructor(options = {}) {\n var _a;\n super();\n this.serverSettings =\n (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n }\n /**\n * Fetch a plugin's settings.\n *\n * @param id - The plugin's ID.\n *\n * @returns A promise that resolves if successful.\n */\n async fetch(id) {\n if (!id) {\n throw new Error('Plugin `id` parameter is required for settings fetch.');\n }\n const { serverSettings } = this;\n const { baseUrl, appUrl } = serverSettings;\n const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n const base = baseUrl + appUrl;\n const url = Private.url(base, id);\n const response = await makeRequest(url, {}, serverSettings);\n if (response.status !== 200) {\n const err = await ResponseError.create(response);\n throw err;\n }\n // Assert what type the server response is returning.\n return response.json();\n }\n /**\n * Fetch the list of all plugin setting bundles.\n *\n * @returns A promise that resolves if successful.\n */\n async list(query) {\n var _a, _b, _c, _d;\n const { serverSettings } = this;\n const { baseUrl, appUrl } = serverSettings;\n const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n const base = baseUrl + appUrl;\n const url = Private.url(base, '', query === 'ids');\n const response = await makeRequest(url, {}, serverSettings);\n if (response.status !== 200) {\n throw new ResponseError(response);\n }\n const json = await response.json();\n const ids = (_b = (_a = json === null || json === void 0 ? void 0 : json['settings']) === null || _a === void 0 ? void 0 : _a.map((plugin) => plugin.id)) !== null && _b !== void 0 ? _b : [];\n let values = [];\n if (!query) {\n values =\n (_d = (_c = json === null || json === void 0 ? void 0 : json['settings']) === null || _c === void 0 ? void 0 : _c.map((plugin) => {\n plugin.data = { composite: {}, user: {} };\n return plugin;\n })) !== null && _d !== void 0 ? _d : [];\n }\n return { ids, values };\n }\n /**\n * Save a plugin's settings.\n *\n * @param id - The plugin's ID.\n *\n * @param raw - The user setting values as a raw string of JSON with comments.\n *\n * @returns A promise that resolves if successful.\n */\n async save(id, raw) {\n const { serverSettings } = this;\n const { baseUrl, appUrl } = serverSettings;\n const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n const base = baseUrl + appUrl;\n const url = Private.url(base, id);\n // NOTE: 'raw' is JSON5 (not valid JSON), so we encode it as a string in a valid JSON body\n const init = { body: JSON.stringify({ raw }), method: 'PUT' };\n const response = await makeRequest(url, init, serverSettings);\n if (response.status !== 204) {\n throw new ResponseError(response);\n }\n }\n}\nexports.SettingManager = SettingManager;\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n /**\n * Get the url for a plugin's settings.\n */\n function url(base, id, idsOnly) {\n const idsOnlyParam = idsOnly\n ? coreutils_1.URLExt.objectToQueryString({ ids_only: true })\n : '';\n return `${coreutils_1.URLExt.join(base, SERVICE_SETTINGS_URL, id)}${idsOnlyParam}`;\n }\n Private.url = url;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\"use strict\";\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = WebSocket;\n//# sourceMappingURL=ws.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TerminalConnection = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst coreutils_2 = require(\"@lumino/coreutils\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst restapi_1 = require(\"./restapi\");\n/**\n * An implementation of a terminal interface.\n */\nclass TerminalConnection {\n /**\n * Construct a new terminal session.\n */\n constructor(options) {\n var _a;\n /**\n * Create the terminal websocket connection and add socket status handlers.\n *\n * #### Notes\n * You are responsible for updating the connection status as appropriate.\n */\n this._createSocket = () => {\n this._errorIfDisposed();\n // Make sure the socket is clear\n this._clearSocket();\n // Update the connection status to reflect opening a new connection.\n this._updateConnectionStatus('connecting');\n const name = this._name;\n const settings = this.serverSettings;\n let url = coreutils_1.URLExt.join(settings.wsUrl, 'terminals', 'websocket', encodeURIComponent(name));\n // If token authentication is in use.\n const token = settings.token;\n if (settings.appendToken && token !== '') {\n url = url + `?token=${encodeURIComponent(token)}`;\n }\n this._ws = new settings.WebSocket(url);\n this._ws.onmessage = this._onWSMessage;\n this._ws.onclose = this._onWSClose;\n this._ws.onerror = this._onWSClose;\n };\n // Websocket messages events are defined as variables to bind `this`\n this._onWSMessage = (event) => {\n if (this._isDisposed) {\n return;\n }\n const data = JSON.parse(event.data);\n // Handle a disconnect message.\n if (data[0] === 'disconnect') {\n this.dispose();\n }\n if (this._connectionStatus === 'connecting') {\n // After reconnection, ignore all messages until a 'setup' message\n // before we are truly connected. Setting the connection status to\n // connected only then means that if we do not get a setup message\n // before our retry timeout, we will delete the websocket and try again.\n if (data[0] === 'setup') {\n this._updateConnectionStatus('connected');\n }\n return;\n }\n this._messageReceived.emit({\n type: data[0],\n content: data.slice(1)\n });\n };\n this._onWSClose = (event) => {\n console.warn(`Terminal websocket closed: ${event.code}`);\n if (!this.isDisposed) {\n this._reconnect();\n }\n };\n this._connectionStatus = 'connecting';\n this._connectionStatusChanged = new signaling_1.Signal(this);\n this._isDisposed = false;\n this._disposed = new signaling_1.Signal(this);\n this._messageReceived = new signaling_1.Signal(this);\n this._reconnectTimeout = null;\n this._ws = null;\n this._noOp = () => {\n /* no-op */\n };\n this._reconnectLimit = 7;\n this._reconnectAttempt = 0;\n this._pendingMessages = [];\n this._name = options.model.name;\n this.serverSettings =\n (_a = options.serverSettings) !== null && _a !== void 0 ? _a : __1.ServerConnection.makeSettings();\n this._createSocket();\n }\n /**\n * A signal emitted when the session is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * A signal emitted when a message is received from the server.\n */\n get messageReceived() {\n return this._messageReceived;\n }\n /**\n * Get the name of the terminal session.\n */\n get name() {\n return this._name;\n }\n /**\n * Get the model for the terminal session.\n */\n get model() {\n return { name: this._name };\n }\n /**\n * Test whether the session is disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the resources held by the session.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n this._disposed.emit();\n this._updateConnectionStatus('disconnected');\n this._clearSocket();\n signaling_1.Signal.clearData(this);\n }\n /**\n * Send a message to the terminal session.\n *\n * #### Notes\n * If the connection is down, the message will be queued for sending when\n * the connection comes back up.\n */\n send(message) {\n this._sendMessage(message);\n }\n /**\n * Send a message on the websocket, or possibly queue for later sending.\n *\n * @param queue - whether to queue the message if it cannot be sent\n */\n _sendMessage(message, queue = true) {\n if (this._isDisposed || !message.content) {\n return;\n }\n if (this.connectionStatus === 'connected' && this._ws) {\n const msg = [message.type, ...message.content];\n this._ws.send(JSON.stringify(msg));\n }\n else if (queue) {\n this._pendingMessages.push(message);\n }\n else {\n throw new Error(`Could not send message: ${JSON.stringify(message)}`);\n }\n }\n /**\n * Send pending messages to the kernel.\n */\n _sendPending() {\n // We check to make sure we are still connected each time. For\n // example, if a websocket buffer overflows, it may close, so we should\n // stop sending messages.\n while (this.connectionStatus === 'connected' &&\n this._pendingMessages.length > 0) {\n this._sendMessage(this._pendingMessages[0], false);\n // We shift the message off the queue after the message is sent so that\n // if there is an exception, the message is still pending.\n this._pendingMessages.shift();\n }\n }\n /**\n * Reconnect to a terminal.\n *\n * #### Notes\n * This may try multiple times to reconnect to a terminal, and will sever\n * any existing connection.\n */\n reconnect() {\n this._errorIfDisposed();\n const result = new coreutils_2.PromiseDelegate();\n // Set up a listener for the connection status changing, which accepts or\n // rejects after the retries are done.\n const fulfill = (sender, status) => {\n if (status === 'connected') {\n result.resolve();\n this.connectionStatusChanged.disconnect(fulfill, this);\n }\n else if (status === 'disconnected') {\n result.reject(new Error('Terminal connection disconnected'));\n this.connectionStatusChanged.disconnect(fulfill, this);\n }\n };\n this.connectionStatusChanged.connect(fulfill, this);\n // Reset the reconnect limit so we start the connection attempts fresh\n this._reconnectAttempt = 0;\n // Start the reconnection process, which will also clear any existing\n // connection.\n this._reconnect();\n // Return the promise that should resolve on connection or reject if the\n // retries don't work.\n return result.promise;\n }\n /**\n * Attempt a connection if we have not exhausted connection attempts.\n */\n _reconnect() {\n this._errorIfDisposed();\n // Clear any existing reconnection attempt\n clearTimeout(this._reconnectTimeout);\n // Update the connection status and schedule a possible reconnection.\n if (this._reconnectAttempt < this._reconnectLimit) {\n this._updateConnectionStatus('connecting');\n // The first reconnect attempt should happen immediately, and subsequent\n // attempts should pick a random number in a growing range so that we\n // don't overload the server with synchronized reconnection attempts\n // across multiple kernels.\n const timeout = Private.getRandomIntInclusive(0, 1e3 * (Math.pow(2, this._reconnectAttempt) - 1));\n console.error(`Connection lost, reconnecting in ${Math.floor(timeout / 1000)} seconds.`);\n this._reconnectTimeout = setTimeout(this._createSocket, timeout);\n this._reconnectAttempt += 1;\n }\n else {\n this._updateConnectionStatus('disconnected');\n }\n // Clear the websocket event handlers and the socket itself.\n this._clearSocket();\n }\n /**\n * Forcefully clear the socket state.\n *\n * #### Notes\n * This will clear all socket state without calling any handlers and will\n * not update the connection status. If you call this method, you are\n * responsible for updating the connection status as needed and recreating\n * the socket if you plan to reconnect.\n */\n _clearSocket() {\n if (this._ws !== null) {\n // Clear the websocket event handlers and the socket itself.\n this._ws.onopen = this._noOp;\n this._ws.onclose = this._noOp;\n this._ws.onerror = this._noOp;\n this._ws.onmessage = this._noOp;\n this._ws.close();\n this._ws = null;\n }\n }\n /**\n * Shut down the terminal session.\n */\n async shutdown() {\n await (0, restapi_1.shutdownTerminal)(this.name, this.serverSettings);\n this.dispose();\n }\n /**\n * Clone the current terminal connection.\n */\n clone() {\n return new TerminalConnection(this);\n }\n /**\n * Handle connection status changes.\n */\n _updateConnectionStatus(connectionStatus) {\n if (this._connectionStatus === connectionStatus) {\n return;\n }\n this._connectionStatus = connectionStatus;\n // If we are not 'connecting', stop any reconnection attempts.\n if (connectionStatus !== 'connecting') {\n this._reconnectAttempt = 0;\n clearTimeout(this._reconnectTimeout);\n }\n // Send the pending messages if we just connected.\n if (connectionStatus === 'connected') {\n this._sendPending();\n }\n // Notify others that the connection status changed.\n this._connectionStatusChanged.emit(connectionStatus);\n }\n /**\n * Utility function to throw an error if this instance is disposed.\n */\n _errorIfDisposed() {\n if (this.isDisposed) {\n throw new Error('Terminal connection is disposed');\n }\n }\n /**\n * A signal emitted when the terminal connection status changes.\n */\n get connectionStatusChanged() {\n return this._connectionStatusChanged;\n }\n /**\n * The current connection status of the terminal connection.\n */\n get connectionStatus() {\n return this._connectionStatus;\n }\n}\nexports.TerminalConnection = TerminalConnection;\nvar Private;\n(function (Private) {\n /**\n * Get the url for a terminal.\n */\n function getTermUrl(baseUrl, name) {\n return coreutils_1.URLExt.join(baseUrl, restapi_1.TERMINAL_SERVICE_URL, encodeURIComponent(name));\n }\n Private.getTermUrl = getTermUrl;\n /**\n * Get a random integer between min and max, inclusive of both.\n *\n * #### Notes\n * From\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#Getting_a_random_integer_between_two_values_inclusive\n *\n * From the MDN page: It might be tempting to use Math.round() to accomplish\n * that, but doing so would cause your random numbers to follow a non-uniform\n * distribution, which may not be acceptable for your needs.\n */\n function getRandomIntInclusive(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n Private.getRandomIntInclusive = getRandomIntInclusive;\n})(Private || (Private = {}));\n//# sourceMappingURL=default.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TerminalAPI = exports.Terminal = void 0;\nconst Terminal = __importStar(require(\"./terminal\"));\nexports.Terminal = Terminal;\nconst TerminalAPI = __importStar(require(\"./restapi\"));\nexports.TerminalAPI = TerminalAPI;\n__exportStar(require(\"./manager\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TerminalManager = void 0;\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst basemanager_1 = require(\"../basemanager\");\nconst restapi_1 = require(\"./restapi\");\nconst default_1 = require(\"./default\");\n/**\n * A terminal session manager.\n */\nclass TerminalManager extends basemanager_1.BaseManager {\n /**\n * Construct a new terminal manager.\n */\n constructor(options = {}) {\n var _a;\n super(options);\n this._isReady = false;\n // As an optimization, we unwrap the models to just store the names.\n this._names = [];\n this._terminalConnections = new Set();\n this._runningChanged = new signaling_1.Signal(this);\n this._connectionFailure = new signaling_1.Signal(this);\n // Check if terminals are available\n if (!this.isAvailable()) {\n this._ready = Promise.reject('Terminals unavailable');\n this._ready.catch(_ => undefined);\n return;\n }\n // Start polling with exponential backoff.\n this._pollModels = new polling_1.Poll({\n auto: false,\n factory: () => this.requestRunning(),\n frequency: {\n interval: 10 * 1000,\n backoff: true,\n max: 300 * 1000\n },\n name: `@jupyterlab/services:TerminalManager#models`,\n standby: (_a = options.standby) !== null && _a !== void 0 ? _a : 'when-hidden'\n });\n // Initialize internal data.\n this._ready = (async () => {\n await this._pollModels.start();\n await this._pollModels.tick;\n this._isReady = true;\n })();\n }\n /**\n * Test whether the manager is ready.\n */\n get isReady() {\n return this._isReady;\n }\n /**\n * A promise that fulfills when the manager is ready.\n */\n get ready() {\n return this._ready;\n }\n /**\n * A signal emitted when the running terminals change.\n */\n get runningChanged() {\n return this._runningChanged;\n }\n /**\n * A signal emitted when there is a connection failure.\n */\n get connectionFailure() {\n return this._connectionFailure;\n }\n /**\n * Dispose of the resources used by the manager.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._names.length = 0;\n this._terminalConnections.forEach(x => x.dispose());\n this._pollModels.dispose();\n super.dispose();\n }\n /**\n * Whether the terminal service is available.\n */\n isAvailable() {\n return (0, restapi_1.isAvailable)();\n }\n /*\n * Connect to a running terminal.\n *\n * @param options - The options used to connect to the terminal.\n *\n * @returns The new terminal connection instance.\n *\n * #### Notes\n * The manager `serverSettings` will be used.\n */\n connectTo(options) {\n const terminalConnection = new default_1.TerminalConnection({\n ...options,\n serverSettings: this.serverSettings\n });\n this._onStarted(terminalConnection);\n if (!this._names.includes(options.model.name)) {\n // We trust the user to connect to an existing session, but we verify\n // asynchronously.\n void this.refreshRunning().catch(() => {\n /* no-op */\n });\n }\n return terminalConnection;\n }\n /**\n * Create an iterator over the most recent running terminals.\n *\n * @returns A new iterator over the running terminals.\n */\n running() {\n return this._models[Symbol.iterator]();\n }\n /**\n * Force a refresh of the running terminals.\n *\n * @returns A promise that with the list of running terminals.\n *\n * #### Notes\n * This is intended to be called only in response to a user action,\n * since the manager maintains its internal state.\n */\n async refreshRunning() {\n await this._pollModels.refresh();\n await this._pollModels.tick;\n }\n /**\n * Create a new terminal session.\n *\n * @param options - The options used to create the terminal.\n *\n * @returns A promise that resolves with the terminal connection instance.\n *\n * #### Notes\n * The manager `serverSettings` will be used unless overridden in the\n * options.\n */\n async startNew(options) {\n const model = await (0, restapi_1.startNew)(this.serverSettings, options === null || options === void 0 ? void 0 : options.name, options === null || options === void 0 ? void 0 : options.cwd);\n await this.refreshRunning();\n return this.connectTo({ model });\n }\n /**\n * Shut down a terminal session by name.\n */\n async shutdown(name) {\n await (0, restapi_1.shutdownTerminal)(name, this.serverSettings);\n await this.refreshRunning();\n }\n /**\n * Shut down all terminal sessions.\n *\n * @returns A promise that resolves when all of the sessions are shut down.\n */\n async shutdownAll() {\n // Update the list of models to make sure our list is current.\n await this.refreshRunning();\n // Shut down all models.\n await Promise.all(this._names.map(name => (0, restapi_1.shutdownTerminal)(name, this.serverSettings)));\n // Update the list of models to clear out our state.\n await this.refreshRunning();\n }\n /**\n * Execute a request to the server to poll running terminals and update state.\n */\n async requestRunning() {\n var _a, _b;\n let models;\n try {\n models = await (0, restapi_1.listRunning)(this.serverSettings);\n }\n catch (err) {\n // Handle network errors, as well as cases where we are on a\n // JupyterHub and the server is not running. JupyterHub returns a\n // 503 (<2.0) or 424 (>2.0) in that case.\n if (err instanceof __1.ServerConnection.NetworkError ||\n ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 503 ||\n ((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 424) {\n this._connectionFailure.emit(err);\n }\n throw err;\n }\n if (this.isDisposed) {\n return;\n }\n const names = models.map(({ name }) => name).sort();\n if (names === this._names) {\n // Identical models list, so just return\n return;\n }\n this._names = names;\n this._terminalConnections.forEach(tc => {\n if (!names.includes(tc.name)) {\n tc.dispose();\n }\n });\n this._runningChanged.emit(this._models);\n }\n /**\n * Handle a session starting.\n */\n _onStarted(terminalConnection) {\n this._terminalConnections.add(terminalConnection);\n terminalConnection.disposed.connect(this._onDisposed, this);\n }\n /**\n * Handle a session terminating.\n */\n _onDisposed(terminalConnection) {\n this._terminalConnections.delete(terminalConnection);\n // Update the running models to make sure we reflect the server state\n void this.refreshRunning().catch(() => {\n /* no-op */\n });\n }\n get _models() {\n return this._names.map(name => {\n return { name };\n });\n }\n}\nexports.TerminalManager = TerminalManager;\n/**\n * The namespace for TerminalManager statics.\n */\n(function (TerminalManager) {\n /**\n * A no-op terminal manager to be used when starting terminals is not supported.\n */\n class NoopManager extends TerminalManager {\n constructor() {\n super(...arguments);\n this._readyPromise = new Promise(() => {\n /* no-op */\n });\n }\n /**\n * Whether the manager is active.\n */\n get isActive() {\n return false;\n }\n /**\n * Used for testing.\n */\n get parentReady() {\n return super.ready;\n }\n /**\n * A promise that fulfills when the manager is ready (never).\n */\n get ready() {\n return this.parentReady.then(() => this._readyPromise);\n }\n /**\n * Create a new terminal session - throw an error since it is not supported.\n *\n */\n async startNew(options) {\n return Promise.reject(new Error('Not implemented in no-op Terminal Manager'));\n }\n /*\n * Connect to a running terminal - throw an error since it is not supported.\n */\n connectTo(options) {\n throw Error('Not implemented in no-op Terminal Manager');\n }\n /**\n * Shut down a session by id - throw an error since it is not supported.\n */\n async shutdown(id) {\n return Promise.reject(new Error('Not implemented in no-op Terminal Manager'));\n }\n /**\n * Execute a request to the server to poll running sessions and update state.\n */\n async requestRunning() {\n return Promise.resolve();\n }\n }\n TerminalManager.NoopManager = NoopManager;\n})(TerminalManager = exports.TerminalManager || (exports.TerminalManager = {}));\n//# sourceMappingURL=manager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shutdownTerminal = exports.listRunning = exports.startNew = exports.isAvailable = exports.TERMINAL_SERVICE_URL = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst serverconnection_1 = require(\"../serverconnection\");\n/**\n * The url for the terminal service.\n */\nexports.TERMINAL_SERVICE_URL = 'api/terminals';\n/**\n * Whether the terminal service is available.\n */\nfunction isAvailable() {\n const available = String(coreutils_1.PageConfig.getOption('terminalsAvailable'));\n return available.toLowerCase() === 'true';\n}\nexports.isAvailable = isAvailable;\n/**\n * Start a new terminal session.\n *\n * @param settings - The server settings to use.\n *\n * @param name - The name of the target terminal.\n *\n * @param cwd - The path in which the terminal will start.\n *\n * @returns A promise that resolves with the session model.\n */\nasync function startNew(settings = serverconnection_1.ServerConnection.makeSettings(), name, cwd) {\n Private.errorIfNotAvailable();\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.TERMINAL_SERVICE_URL);\n const init = {\n method: 'POST',\n body: JSON.stringify({ name, cwd })\n };\n const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n if (response.status !== 200) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n // TODO: Validate model\n return data;\n}\nexports.startNew = startNew;\n/**\n * List the running terminal sessions.\n *\n * @param settings - The server settings to use.\n *\n * @returns A promise that resolves with the list of running session models.\n */\nasync function listRunning(settings = serverconnection_1.ServerConnection.makeSettings()) {\n Private.errorIfNotAvailable();\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.TERMINAL_SERVICE_URL);\n const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n if (response.status !== 200) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n const data = await response.json();\n if (!Array.isArray(data)) {\n throw new Error('Invalid terminal list');\n }\n // TODO: validate each model\n return data;\n}\nexports.listRunning = listRunning;\n/**\n * Shut down a terminal session by name.\n *\n * @param name - The name of the target session.\n *\n * @param settings - The server settings to use.\n *\n * @returns A promise that resolves when the session is shut down.\n */\nasync function shutdownTerminal(name, settings = serverconnection_1.ServerConnection.makeSettings()) {\n var _a;\n Private.errorIfNotAvailable();\n const url = coreutils_1.URLExt.join(settings.baseUrl, exports.TERMINAL_SERVICE_URL, name);\n const init = { method: 'DELETE' };\n const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n if (response.status === 404) {\n const data = await response.json();\n const msg = (_a = data.message) !== null && _a !== void 0 ? _a : `The terminal session \"${name}\"\" does not exist on the server`;\n console.warn(msg);\n }\n else if (response.status !== 204) {\n const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n throw err;\n }\n}\nexports.shutdownTerminal = shutdownTerminal;\nvar Private;\n(function (Private) {\n /**\n * Throw an error if terminals are not available.\n */\n function errorIfNotAvailable() {\n if (!isAvailable()) {\n throw new Error('Terminals Unavailable');\n }\n }\n Private.errorIfNotAvailable = errorIfNotAvailable;\n})(Private || (Private = {}));\n//# sourceMappingURL=restapi.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAvailable = void 0;\nconst restapi_1 = require(\"./restapi\");\nObject.defineProperty(exports, \"isAvailable\", { enumerable: true, get: function () { return restapi_1.isAvailable; } });\n//# sourceMappingURL=terminal.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst coreutils_2 = require(\"@lumino/coreutils\");\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst serverconnection_1 = require(\"../serverconnection\");\nconst basemanager_1 = require(\"../basemanager\");\n/**\n * The url for the lab workspaces service.\n */\nconst SERVICE_USER_URL = 'api/me';\n/**\n * The service's ID.\n * Used to uniquely identify the poll, and\n * the item in local storage.\n */\nconst SERVICE_ID = '@jupyterlab/services:UserManager#user';\n/**\n * The user API service manager.\n */\nclass UserManager extends basemanager_1.BaseManager {\n /**\n * Create a new user manager.\n */\n constructor(options = {}) {\n var _a;\n super(options);\n this._isReady = false;\n this._userChanged = new signaling_1.Signal(this);\n this._connectionFailure = new signaling_1.Signal(this);\n // Initialize internal data.\n this._ready = this.requestUser()\n .then(() => {\n if (this.isDisposed) {\n return;\n }\n this._isReady = true;\n })\n .catch(_ => \n // Return a promise that will never resolve, so user service is never ready\n // This typically occurs when the backend has no user service\n new Promise(() => {\n // no-op\n }));\n this._pollSpecs = new polling_1.Poll({\n auto: false,\n factory: () => this.requestUser(),\n frequency: {\n interval: 61 * 1000,\n backoff: true,\n max: 300 * 1000\n },\n name: SERVICE_ID,\n standby: (_a = options.standby) !== null && _a !== void 0 ? _a : 'when-hidden'\n });\n void this.ready.then(() => {\n void this._pollSpecs.start();\n });\n }\n /**\n * Test whether the manager is ready.\n */\n get isReady() {\n return this._isReady;\n }\n /**\n * A promise that fulfills when the manager is ready.\n */\n get ready() {\n return this._ready;\n }\n /**\n * Get the most recently fetched identity.\n */\n get identity() {\n return this._identity;\n }\n /**\n * Get the most recently fetched permissions.\n */\n get permissions() {\n return this._permissions;\n }\n /**\n * A signal emitted when the user changes.\n */\n get userChanged() {\n return this._userChanged;\n }\n /**\n * A signal emitted when there is a connection failure.\n */\n get connectionFailure() {\n return this._connectionFailure;\n }\n /**\n * Dispose of the resources used by the manager.\n */\n dispose() {\n this._pollSpecs.dispose();\n super.dispose();\n }\n /**\n * Force a refresh of the specs from the server.\n *\n * @returns A promise that resolves when the specs are fetched.\n *\n * #### Notes\n * This is intended to be called only in response to a user action,\n * since the manager maintains its internal state.\n */\n async refreshUser() {\n await this._pollSpecs.refresh();\n await this._pollSpecs.tick;\n }\n /**\n * Execute a request to the server to poll the user and update state.\n */\n async requestUser() {\n if (this.isDisposed) {\n return;\n }\n const { baseUrl } = this.serverSettings;\n const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n const url = coreutils_1.URLExt.join(baseUrl, SERVICE_USER_URL);\n const response = await makeRequest(url, {}, this.serverSettings);\n if (response.status !== 200) {\n const err = await ResponseError.create(response);\n throw err;\n }\n const oldUser = {\n identity: this._identity,\n permissions: this._permissions\n };\n const newUser = await response.json();\n const identity = newUser.identity;\n // store the color and initials for the user\n // this info is not provided by the server\n const { localStorage } = window;\n const data = localStorage.getItem(SERVICE_ID);\n if (data && (!identity.initials || !identity.color)) {\n const localUser = JSON.parse(data);\n identity.initials =\n identity.initials ||\n localUser.initials ||\n identity.name.substring(0, 1);\n identity.color =\n identity.color || localUser.color || Private.getRandomColor();\n }\n if (!coreutils_2.JSONExt.deepEqual(newUser, oldUser)) {\n this._identity = identity;\n this._permissions = newUser.permissions;\n localStorage.setItem(SERVICE_ID, JSON.stringify(identity));\n this._userChanged.emit(newUser);\n }\n }\n}\nexports.UserManager = UserManager;\n/**\n * A namespace for module-private functionality.\n *\n * Note: We do not want to export this function\n * to move it to css variables in the Theme.\n */\nvar Private;\n(function (Private) {\n /**\n * Predefined colors for users\n */\n const userColors = [\n 'var(--jp-collaborator-color1)',\n 'var(--jp-collaborator-color2)',\n 'var(--jp-collaborator-color3)',\n 'var(--jp-collaborator-color4)',\n 'var(--jp-collaborator-color5)',\n 'var(--jp-collaborator-color6)',\n 'var(--jp-collaborator-color7)'\n ];\n /**\n * Get a random color from the list of colors.\n */\n Private.getRandomColor = () => userColors[Math.floor(Math.random() * userColors.length)];\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateProperty = void 0;\n/**\n * Validate a property as being on an object, and optionally\n * of a given type and among a given set of values.\n */\nfunction validateProperty(\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nobject, name, typeName, values = []) {\n if (!object.hasOwnProperty(name)) {\n throw Error(`Missing property '${name}'`);\n }\n const value = object[name];\n if (typeName !== void 0) {\n let valid = true;\n switch (typeName) {\n case 'array':\n valid = Array.isArray(value);\n break;\n case 'object':\n valid = typeof value !== 'undefined';\n break;\n default:\n valid = typeof value === typeName;\n }\n if (!valid) {\n throw new Error(`Property '${name}' is not of type '${typeName}'`);\n }\n if (values.length > 0) {\n let valid = true;\n switch (typeName) {\n case 'string':\n case 'number':\n case 'boolean':\n valid = values.includes(value);\n break;\n default:\n valid = values.findIndex(v => v === value) >= 0;\n break;\n }\n if (!valid) {\n throw new Error(`Property '${name}' is not one of the valid values ${JSON.stringify(values)}`);\n }\n }\n }\n}\nexports.validateProperty = validateProperty;\n//# sourceMappingURL=validate.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WorkspaceManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst statedb_1 = require(\"@jupyterlab/statedb\");\nconst serverconnection_1 = require(\"../serverconnection\");\n/**\n * The url for the lab workspaces service.\n */\nconst SERVICE_WORKSPACES_URL = 'api/workspaces';\n/**\n * The workspaces API service manager.\n */\nclass WorkspaceManager extends statedb_1.DataConnector {\n /**\n * Create a new workspace manager.\n */\n constructor(options = {}) {\n var _a;\n super();\n this.serverSettings =\n (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n }\n /**\n * Fetch a workspace.\n *\n * @param id - The workspace's ID.\n *\n * @returns A promise that resolves if successful.\n */\n async fetch(id) {\n const { serverSettings } = this;\n const { baseUrl, appUrl } = serverSettings;\n const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n const base = baseUrl + appUrl;\n const url = Private.url(base, id);\n const response = await makeRequest(url, {}, serverSettings);\n if (response.status !== 200) {\n const err = await ResponseError.create(response);\n throw err;\n }\n return response.json();\n }\n /**\n * Fetch the list of workspace IDs that exist on the server.\n *\n * @returns A promise that resolves if successful.\n */\n async list() {\n const { serverSettings } = this;\n const { baseUrl, appUrl } = serverSettings;\n const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n const base = baseUrl + appUrl;\n const url = Private.url(base, '');\n const response = await makeRequest(url, {}, serverSettings);\n if (response.status !== 200) {\n const err = await ResponseError.create(response);\n throw err;\n }\n const result = await response.json();\n return result.workspaces;\n }\n /**\n * Remove a workspace from the server.\n *\n * @param id - The workspaces's ID.\n *\n * @returns A promise that resolves if successful.\n */\n async remove(id) {\n const { serverSettings } = this;\n const { baseUrl, appUrl } = serverSettings;\n const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n const base = baseUrl + appUrl;\n const url = Private.url(base, id);\n const init = { method: 'DELETE' };\n const response = await makeRequest(url, init, serverSettings);\n if (response.status !== 204) {\n const err = await ResponseError.create(response);\n throw err;\n }\n }\n /**\n * Save a workspace.\n *\n * @param id - The workspace's ID.\n *\n * @param workspace - The workspace being saved.\n *\n * @returns A promise that resolves if successful.\n */\n async save(id, workspace) {\n const { serverSettings } = this;\n const { baseUrl, appUrl } = serverSettings;\n const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n const base = baseUrl + appUrl;\n const url = Private.url(base, id);\n const init = { body: JSON.stringify(workspace), method: 'PUT' };\n const response = await makeRequest(url, init, serverSettings);\n if (response.status !== 204) {\n const err = await ResponseError.create(response);\n throw err;\n }\n }\n}\nexports.WorkspaceManager = WorkspaceManager;\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n /**\n * Get the url for a workspace.\n */\n function url(base, id) {\n return coreutils_1.URLExt.join(base, SERVICE_WORKSPACES_URL, id);\n }\n Private.url = url;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataConnector = void 0;\n/**\n * An abstract class that adheres to the data connector interface.\n *\n * @typeparam T - The basic entity response type a service's connector.\n *\n * @typeparam U - The basic entity request type, which is conventionally the\n * same as the response type but may be different if a service's implementation\n * requires input data to be different from output responses. Defaults to `T`.\n *\n * @typeparam V - The basic token applied to a request, conventionally a string\n * ID or filter, but may be set to a different type when an implementation\n * requires it. Defaults to `string`.\n *\n * @typeparam W - The type of the optional `query` parameter of the `list`\n * method. Defaults to `string`.\n *\n * #### Notes\n * The only abstract method in this class is the `fetch` method, which must be\n * reimplemented by all subclasses. The `remove` and `save` methods have a\n * default implementation that returns a promise that will always reject. This\n * class is a convenience superclass for connectors that only need to `fetch`.\n */\nclass DataConnector {\n /**\n * Retrieve the list of items available from the data connector.\n *\n * @param query - The optional query filter to apply to the connector request.\n *\n * @returns A promise that always rejects with an error.\n *\n * #### Notes\n * Subclasses should reimplement if they support a back-end that can list.\n */\n async list(query) {\n throw new Error('DataConnector#list method has not been implemented.');\n }\n /**\n * Remove a value using the data connector.\n *\n * @param id - The identifier for the data being removed.\n *\n * @returns A promise that always rejects with an error.\n *\n * #### Notes\n * Subclasses should reimplement if they support a back-end that can remove.\n */\n async remove(id) {\n throw new Error('DataConnector#remove method has not been implemented.');\n }\n /**\n * Save a value using the data connector.\n *\n * @param id - The identifier for the data being saved.\n *\n * @param value - The data being saved.\n *\n * @returns A promise that always rejects with an error.\n *\n * #### Notes\n * Subclasses should reimplement if they support a back-end that can save.\n */\n async save(id, value) {\n throw new Error('DataConnector#save method has not been implemented.');\n }\n}\nexports.DataConnector = DataConnector;\n//# sourceMappingURL=dataconnector.js.map","\"use strict\";\n/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module statedb\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./dataconnector\"), exports);\n__exportStar(require(\"./interfaces\"), exports);\n__exportStar(require(\"./restorablepool\"), exports);\n__exportStar(require(\"./statedb\"), exports);\n__exportStar(require(\"./tokens\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=interfaces.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RestorablePool = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nconst properties_1 = require(\"@lumino/properties\");\nconst signaling_1 = require(\"@lumino/signaling\");\n/**\n * An object pool that supports restoration.\n *\n * @typeparam T - The type of object being tracked.\n */\nclass RestorablePool {\n /**\n * Create a new restorable pool.\n *\n * @param options - The instantiation options for a restorable pool.\n */\n constructor(options) {\n this._added = new signaling_1.Signal(this);\n this._current = null;\n this._currentChanged = new signaling_1.Signal(this);\n this._hasRestored = false;\n this._isDisposed = false;\n this._objects = new Set();\n this._restore = null;\n this._restored = new coreutils_1.PromiseDelegate();\n this._updated = new signaling_1.Signal(this);\n this.namespace = options.namespace;\n }\n /**\n * A signal emitted when an object object is added.\n *\n * #### Notes\n * This signal will only fire when an object is added to the pool.\n * It will not fire if an object injected into the pool.\n */\n get added() {\n return this._added;\n }\n /**\n * The current object.\n *\n * #### Notes\n * The restorable pool does not set `current`. It is intended for client use.\n *\n * If `current` is set to an object that does not exist in the pool, it is a\n * no-op.\n */\n get current() {\n return this._current;\n }\n set current(obj) {\n if (this._current === obj) {\n return;\n }\n if (obj !== null && this._objects.has(obj)) {\n this._current = obj;\n this._currentChanged.emit(this._current);\n }\n }\n /**\n * A signal emitted when the current widget changes.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * Test whether the pool is disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * A promise resolved when the restorable pool has been restored.\n */\n get restored() {\n return this._restored.promise;\n }\n /**\n * The number of objects held by the pool.\n */\n get size() {\n return this._objects.size;\n }\n /**\n * A signal emitted when an object is updated.\n */\n get updated() {\n return this._updated;\n }\n /**\n * Add a new object to the pool.\n *\n * @param obj - The object object being added.\n *\n * #### Notes\n * The object passed into the pool is added synchronously; its existence in\n * the pool can be checked with the `has()` method. The promise this method\n * returns resolves after the object has been added and saved to an underlying\n * restoration connector, if one is available.\n */\n async add(obj) {\n var _a, _b;\n if (obj.isDisposed) {\n const warning = 'A disposed object cannot be added.';\n console.warn(warning, obj);\n throw new Error(warning);\n }\n if (this._objects.has(obj)) {\n const warning = 'This object already exists in the pool.';\n console.warn(warning, obj);\n throw new Error(warning);\n }\n this._objects.add(obj);\n obj.disposed.connect(this._onInstanceDisposed, this);\n if (Private.injectedProperty.get(obj)) {\n return;\n }\n if (this._restore) {\n const { connector } = this._restore;\n const objName = this._restore.name(obj);\n if (objName) {\n const name = `${this.namespace}:${objName}`;\n const data = (_b = (_a = this._restore).args) === null || _b === void 0 ? void 0 : _b.call(_a, obj);\n Private.nameProperty.set(obj, name);\n await connector.save(name, { data });\n }\n }\n // Emit the added signal.\n this._added.emit(obj);\n }\n /**\n * Dispose of the resources held by the pool.\n *\n * #### Notes\n * Disposing a pool does not affect the underlying data in the data connector,\n * it simply disposes the client-side pool without making any connector calls.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._current = null;\n this._isDisposed = true;\n this._objects.clear();\n signaling_1.Signal.clearData(this);\n }\n /**\n * Find the first object in the pool that satisfies a filter function.\n *\n * @param - fn The filter function to call on each object.\n */\n find(fn) {\n const values = this._objects.values();\n for (const value of values) {\n if (fn(value)) {\n return value;\n }\n }\n return undefined;\n }\n /**\n * Iterate through each object in the pool.\n *\n * @param fn - The function to call on each object.\n */\n forEach(fn) {\n this._objects.forEach(fn);\n }\n /**\n * Filter the objects in the pool based on a predicate.\n *\n * @param fn - The function by which to filter.\n */\n filter(fn) {\n const filtered = [];\n this.forEach(obj => {\n if (fn(obj)) {\n filtered.push(obj);\n }\n });\n return filtered;\n }\n /**\n * Inject an object into the restorable pool without the pool handling its\n * restoration lifecycle.\n *\n * @param obj - The object to inject into the pool.\n */\n inject(obj) {\n Private.injectedProperty.set(obj, true);\n return this.add(obj);\n }\n /**\n * Check if this pool has the specified object.\n *\n * @param obj - The object whose existence is being checked.\n */\n has(obj) {\n return this._objects.has(obj);\n }\n /**\n * Restore the objects in this pool's namespace.\n *\n * @param options - The configuration options that describe restoration.\n *\n * @returns A promise that resolves when restoration has completed.\n *\n * #### Notes\n * This function should almost never be invoked by client code. Its primary\n * use case is to be invoked by a layout restorer plugin that handles\n * multiple restorable pools and, when ready, asks them each to restore their\n * respective objects.\n */\n async restore(options) {\n if (this._hasRestored) {\n throw new Error('This pool has already been restored.');\n }\n this._hasRestored = true;\n const { command, connector, registry, when } = options;\n const namespace = this.namespace;\n const promises = when\n ? [connector.list(namespace)].concat(when)\n : [connector.list(namespace)];\n this._restore = options;\n const [saved] = await Promise.all(promises);\n const values = await Promise.all(saved.ids.map(async (id, index) => {\n const value = saved.values[index];\n const args = value && value.data;\n if (args === undefined) {\n return connector.remove(id);\n }\n // Execute the command and if it fails, delete the state restore data.\n return registry\n .execute(command, args)\n .catch(() => connector.remove(id));\n }));\n this._restored.resolve();\n return values;\n }\n /**\n * Save the restore data for a given object.\n *\n * @param obj - The object being saved.\n */\n async save(obj) {\n var _a, _b;\n const injected = Private.injectedProperty.get(obj);\n if (!this._restore || !this.has(obj) || injected) {\n return;\n }\n const { connector } = this._restore;\n const objName = this._restore.name(obj);\n const oldName = Private.nameProperty.get(obj);\n const newName = objName ? `${this.namespace}:${objName}` : '';\n if (oldName && oldName !== newName) {\n await connector.remove(oldName);\n }\n // Set the name property irrespective of whether the new name is null.\n Private.nameProperty.set(obj, newName);\n if (newName) {\n const data = (_b = (_a = this._restore).args) === null || _b === void 0 ? void 0 : _b.call(_a, obj);\n await connector.save(newName, { data });\n }\n if (oldName !== newName) {\n this._updated.emit(obj);\n }\n }\n /**\n * Clean up after disposed objects.\n */\n _onInstanceDisposed(obj) {\n this._objects.delete(obj);\n if (obj === this._current) {\n this._current = null;\n this._currentChanged.emit(this._current);\n }\n if (Private.injectedProperty.get(obj)) {\n return;\n }\n if (!this._restore) {\n return;\n }\n const { connector } = this._restore;\n const name = Private.nameProperty.get(obj);\n if (name) {\n void connector.remove(name);\n }\n }\n}\nexports.RestorablePool = RestorablePool;\n/*\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n /**\n * An attached property to indicate whether an object has been injected.\n */\n Private.injectedProperty = new properties_1.AttachedProperty({\n name: 'injected',\n create: () => false\n });\n /**\n * An attached property for an object's ID.\n */\n Private.nameProperty = new properties_1.AttachedProperty({\n name: 'name',\n create: () => ''\n });\n})(Private || (Private = {}));\n//# sourceMappingURL=restorablepool.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StateDB = void 0;\nconst signaling_1 = require(\"@lumino/signaling\");\n/**\n * The default concrete implementation of a state database.\n */\nclass StateDB {\n /**\n * Create a new state database.\n *\n * @param options - The instantiation options for a state database.\n */\n constructor(options = {}) {\n this._changed = new signaling_1.Signal(this);\n const { connector, transform } = options;\n this._connector = connector || new StateDB.Connector();\n if (!transform) {\n this._ready = Promise.resolve(undefined);\n }\n else {\n this._ready = transform.then(transformation => {\n const { contents, type } = transformation;\n switch (type) {\n case 'cancel':\n return;\n case 'clear':\n return this._clear();\n case 'merge':\n return this._merge(contents || {});\n case 'overwrite':\n return this._overwrite(contents || {});\n default:\n return;\n }\n });\n }\n }\n /**\n * A signal that emits the change type any time a value changes.\n */\n get changed() {\n return this._changed;\n }\n /**\n * Clear the entire database.\n */\n async clear() {\n await this._ready;\n await this._clear();\n }\n /**\n * Retrieve a saved bundle from the database.\n *\n * @param id - The identifier used to retrieve a data bundle.\n *\n * @returns A promise that bears a data payload if available.\n *\n * #### Notes\n * The `id` values of stored items in the state database are formatted:\n * `'namespace:identifier'`, which is the same convention that command\n * identifiers in JupyterLab use as well. While this is not a technical\n * requirement for `fetch()`, `remove()`, and `save()`, it *is* necessary for\n * using the `list(namespace: string)` method.\n *\n * The promise returned by this method may be rejected if an error occurs in\n * retrieving the data. Non-existence of an `id` will succeed with the `value`\n * `undefined`.\n */\n async fetch(id) {\n await this._ready;\n return this._fetch(id);\n }\n /**\n * Retrieve all the saved bundles for a namespace.\n *\n * @param filter - The namespace prefix to retrieve.\n *\n * @returns A promise that bears a collection of payloads for a namespace.\n *\n * #### Notes\n * Namespaces are entirely conventional entities. The `id` values of stored\n * items in the state database are formatted: `'namespace:identifier'`, which\n * is the same convention that command identifiers in JupyterLab use as well.\n *\n * If there are any errors in retrieving the data, they will be logged to the\n * console in order to optimistically return any extant data without failing.\n * This promise will always succeed.\n */\n async list(namespace) {\n await this._ready;\n return this._list(namespace);\n }\n /**\n * Remove a value from the database.\n *\n * @param id - The identifier for the data being removed.\n *\n * @returns A promise that is rejected if remove fails and succeeds otherwise.\n */\n async remove(id) {\n await this._ready;\n await this._remove(id);\n this._changed.emit({ id, type: 'remove' });\n }\n /**\n * Save a value in the database.\n *\n * @param id - The identifier for the data being saved.\n *\n * @param value - The data being saved.\n *\n * @returns A promise that is rejected if saving fails and succeeds otherwise.\n *\n * #### Notes\n * The `id` values of stored items in the state database are formatted:\n * `'namespace:identifier'`, which is the same convention that command\n * identifiers in JupyterLab use as well. While this is not a technical\n * requirement for `fetch()`, `remove()`, and `save()`, it *is* necessary for\n * using the `list(namespace: string)` method.\n */\n async save(id, value) {\n await this._ready;\n await this._save(id, value);\n this._changed.emit({ id, type: 'save' });\n }\n /**\n * Return a serialized copy of the state database's entire contents.\n *\n * @returns A promise that resolves with the database contents as JSON.\n */\n async toJSON() {\n await this._ready;\n const { ids, values } = await this._list();\n return values.reduce((acc, val, idx) => {\n acc[ids[idx]] = val;\n return acc;\n }, {});\n }\n /**\n * Clear the entire database.\n */\n async _clear() {\n await Promise.all((await this._list()).ids.map(id => this._remove(id)));\n }\n /**\n * Fetch a value from the database.\n */\n async _fetch(id) {\n const value = await this._connector.fetch(id);\n if (value) {\n return JSON.parse(value).v;\n }\n }\n /**\n * Fetch a list from the database.\n */\n async _list(namespace = '') {\n const { ids, values } = await this._connector.list(namespace);\n return {\n ids,\n values: values.map(val => JSON.parse(val).v)\n };\n }\n /**\n * Merge data into the state database.\n */\n async _merge(contents) {\n await Promise.all(Object.keys(contents).map(key => contents[key] && this._save(key, contents[key])));\n }\n /**\n * Overwrite the entire database with new contents.\n */\n async _overwrite(contents) {\n await this._clear();\n await this._merge(contents);\n }\n /**\n * Remove a key in the database.\n */\n async _remove(id) {\n return this._connector.remove(id);\n }\n /**\n * Save a key and its value in the database.\n */\n async _save(id, value) {\n return this._connector.save(id, JSON.stringify({ v: value }));\n }\n}\nexports.StateDB = StateDB;\n/**\n * A namespace for StateDB statics.\n */\n(function (StateDB) {\n /**\n * An in-memory string key/value data connector.\n */\n class Connector {\n constructor() {\n this._storage = {};\n }\n /**\n * Retrieve an item from the data connector.\n */\n async fetch(id) {\n return this._storage[id];\n }\n /**\n * Retrieve the list of items available from the data connector.\n *\n * @param namespace - If not empty, only keys whose first token before `:`\n * exactly match `namespace` will be returned, e.g. `foo` in `foo:bar`.\n */\n async list(namespace = '') {\n return Object.keys(this._storage).reduce((acc, val) => {\n if (namespace === '' ? true : namespace === val.split(':')[0]) {\n acc.ids.push(val);\n acc.values.push(this._storage[val]);\n }\n return acc;\n }, { ids: [], values: [] });\n }\n /**\n * Remove a value using the data connector.\n */\n async remove(id) {\n delete this._storage[id];\n }\n /**\n * Save a value using the data connector.\n */\n async save(id, value) {\n this._storage[id] = value;\n }\n }\n StateDB.Connector = Connector;\n})(StateDB = exports.StateDB || (exports.StateDB = {}));\n//# sourceMappingURL=statedb.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IStateDB = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\n/**\n * The default state database token.\n */\nexports.IStateDB = new coreutils_1.Token('@jupyterlab/coreutils:IStateDB', `A service for the JupyterLab state database.\n Use this if you want to store data that will persist across page loads.\n See \"state database\" for more information.`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for array-specific algorithms.\n */\nvar ArrayExt;\n(function (ArrayExt) {\n /**\n * Find the index of the first occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.firstIndexOf(data, 'red'); // -1\n * ArrayExt.firstIndexOf(data, 'one'); // 0\n * ArrayExt.firstIndexOf(data, 'one', 1); // 4\n * ArrayExt.firstIndexOf(data, 'two', 2); // -1\n * ArrayExt.firstIndexOf(data, 'two', 2, 1); // 1\n * ```\n */\n function firstIndexOf(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start + i) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.firstIndexOf = firstIndexOf;\n /**\n * Find the index of the last occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.lastIndexOf(data, 'red'); // -1\n * ArrayExt.lastIndexOf(data, 'one'); // 4\n * ArrayExt.lastIndexOf(data, 'one', 1); // 0\n * ArrayExt.lastIndexOf(data, 'two', 0); // -1\n * ArrayExt.lastIndexOf(data, 'two', 0, 1); // 1\n * ```\n */\n function lastIndexOf(array, value, start = -1, stop = 0) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (start < stop) {\n span = start + 1 + (n - stop);\n }\n else {\n span = start - stop + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start - i + n) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.lastIndexOf = lastIndexOf;\n /**\n * Find the index of the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstIndex(data, isEven); // 1\n * ArrayExt.findFirstIndex(data, isEven, 4); // 5\n * ArrayExt.findFirstIndex(data, isEven, 6); // -1\n * ArrayExt.findFirstIndex(data, isEven, 6, 5); // 1\n * ```\n */\n function findFirstIndex(array, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start + i) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findFirstIndex = findFirstIndex;\n /**\n * Find the index of the last value which matches a predicate.\n *\n * @param object - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastIndex(data, isEven); // 5\n * ArrayExt.findLastIndex(data, isEven, 4); // 3\n * ArrayExt.findLastIndex(data, isEven, 0); // -1\n * ArrayExt.findLastIndex(data, isEven, 0, 1); // 5\n * ```\n */\n function findLastIndex(array, fn, start = -1, stop = 0) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let d;\n if (start < stop) {\n d = start + 1 + (n - stop);\n }\n else {\n d = start - stop + 1;\n }\n for (let i = 0; i < d; ++i) {\n let j = (start - i + n) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findLastIndex = findLastIndex;\n /**\n * Find the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstValue(data, isEven); // 2\n * ArrayExt.findFirstValue(data, isEven, 2); // 4\n * ArrayExt.findFirstValue(data, isEven, 6); // undefined\n * ArrayExt.findFirstValue(data, isEven, 6, 5); // 2\n * ```\n */\n function findFirstValue(array, fn, start = 0, stop = -1) {\n let index = findFirstIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findFirstValue = findFirstValue;\n /**\n * Find the last value which matches a predicate.\n *\n * @param object - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The last matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastValue(data, isEven); // 2\n * ArrayExt.findLastValue(data, isEven, 4); // 4\n * ArrayExt.findLastValue(data, isEven, 0); // undefined\n * ArrayExt.findLastValue(data, isEven, 0, 1); // 2\n * ```\n */\n function findLastValue(array, fn, start = -1, stop = 0) {\n let index = findLastIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findLastValue = findLastValue;\n /**\n * Find the index of the first element which compares `>=` to a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>=` to the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.lowerBound(data, 0, numberCmp); // 0\n * ArrayExt.lowerBound(data, 6, numberCmp); // 3\n * ArrayExt.lowerBound(data, 7, numberCmp); // 3\n * ArrayExt.lowerBound(data, -1, numberCmp); // 0\n * ArrayExt.lowerBound(data, 10, numberCmp); // 6\n * ```\n */\n function lowerBound(array, value, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let begin = start;\n let span = stop - start + 1;\n while (span > 0) {\n let half = span >> 1;\n let middle = begin + half;\n if (fn(array[middle], value) < 0) {\n begin = middle + 1;\n span -= half + 1;\n }\n else {\n span = half;\n }\n }\n return begin;\n }\n ArrayExt.lowerBound = lowerBound;\n /**\n * Find the index of the first element which compares `>` than a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>` than the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.upperBound(data, 0, numberCmp); // 1\n * ArrayExt.upperBound(data, 6, numberCmp); // 3\n * ArrayExt.upperBound(data, 7, numberCmp); // 5\n * ArrayExt.upperBound(data, -1, numberCmp); // 0\n * ArrayExt.upperBound(data, 10, numberCmp); // 6\n * ```\n */\n function upperBound(array, value, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let begin = start;\n let span = stop - start + 1;\n while (span > 0) {\n let half = span >> 1;\n let middle = begin + half;\n if (fn(array[middle], value) > 0) {\n span = half;\n }\n else {\n begin = middle + 1;\n span -= half + 1;\n }\n }\n return begin;\n }\n ArrayExt.upperBound = upperBound;\n /**\n * Test whether two arrays are shallowly equal.\n *\n * @param a - The first array-like object to compare.\n *\n * @param b - The second array-like object to compare.\n *\n * @param fn - The comparison function to apply to the elements. It\n * should return `true` if the elements are \"equal\". The default\n * compares elements using strict `===` equality.\n *\n * @returns Whether the two arrays are shallowly equal.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * Modifying the length of the arrays while comparing.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let d1 = [0, 3, 4, 7, 7, 9];\n * let d2 = [0, 3, 4, 7, 7, 9];\n * let d3 = [42];\n * ArrayExt.shallowEqual(d1, d2); // true\n * ArrayExt.shallowEqual(d2, d3); // false\n * ```\n */\n function shallowEqual(a, b, fn) {\n // Check for object identity first.\n if (a === b) {\n return true;\n }\n // Bail early if the lengths are different.\n if (a.length !== b.length) {\n return false;\n }\n // Compare each element for equality.\n for (let i = 0, n = a.length; i < n; ++i) {\n if (fn ? !fn(a[i], b[i]) : a[i] !== b[i]) {\n return false;\n }\n }\n // The array are shallowly equal.\n return true;\n }\n ArrayExt.shallowEqual = shallowEqual;\n /**\n * Create a slice of an array subject to an optional step.\n *\n * @param array - The array-like object of interest.\n *\n * @param options - The options for configuring the slice.\n *\n * @returns A new array with the specified values.\n *\n * @throws An exception if the slice `step` is `0`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start`, `stop`, or `step` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.slice(data); // [0, 3, 4, 7, 7, 9]\n * ArrayExt.slice(data, { start: 2 }); // [4, 7, 7, 9]\n * ArrayExt.slice(data, { start: 0, stop: 4 }); // [0, 3, 4, 7]\n * ArrayExt.slice(data, { step: 2 }); // [0, 4, 7]\n * ArrayExt.slice(data, { step: -1 }); // [9, 7, 7, 4, 3, 0]\n * ```\n */\n function slice(array, options = {}) {\n // Extract the options.\n let { start, stop, step } = options;\n // Set up the `step` value.\n if (step === undefined) {\n step = 1;\n }\n // Validate the step size.\n if (step === 0) {\n throw new Error('Slice `step` cannot be zero.');\n }\n // Look up the length of the array.\n let n = array.length;\n // Set up the `start` value.\n if (start === undefined) {\n start = step < 0 ? n - 1 : 0;\n }\n else if (start < 0) {\n start = Math.max(start + n, step < 0 ? -1 : 0);\n }\n else if (start >= n) {\n start = step < 0 ? n - 1 : n;\n }\n // Set up the `stop` value.\n if (stop === undefined) {\n stop = step < 0 ? -1 : n;\n }\n else if (stop < 0) {\n stop = Math.max(stop + n, step < 0 ? -1 : 0);\n }\n else if (stop >= n) {\n stop = step < 0 ? n - 1 : n;\n }\n // Compute the slice length.\n let length;\n if ((step < 0 && stop >= start) || (step > 0 && start >= stop)) {\n length = 0;\n }\n else if (step < 0) {\n length = Math.floor((stop - start + 1) / step + 1);\n }\n else {\n length = Math.floor((stop - start - 1) / step + 1);\n }\n // Compute the sliced result.\n let result = [];\n for (let i = 0; i < length; ++i) {\n result[i] = array[start + i * step];\n }\n // Return the result.\n return result;\n }\n ArrayExt.slice = slice;\n /**\n * Move an element in an array from one index to another.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param fromIndex - The index of the element to move. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param toIndex - The target index of the element. Negative\n * values are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `fromIndex` or `toIndex` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.move(data, 1, 2); // [0, 2, 1, 3, 4]\n * ArrayExt.move(data, 4, 2); // [0, 2, 4, 1, 3]\n * ```\n */\n function move(array, fromIndex, toIndex) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (fromIndex < 0) {\n fromIndex = Math.max(0, fromIndex + n);\n }\n else {\n fromIndex = Math.min(fromIndex, n - 1);\n }\n if (toIndex < 0) {\n toIndex = Math.max(0, toIndex + n);\n }\n else {\n toIndex = Math.min(toIndex, n - 1);\n }\n if (fromIndex === toIndex) {\n return;\n }\n let value = array[fromIndex];\n let d = fromIndex < toIndex ? 1 : -1;\n for (let i = fromIndex; i !== toIndex; i += d) {\n array[i] = array[i + d];\n }\n array[toIndex] = value;\n }\n ArrayExt.move = move;\n /**\n * Reverse an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param start - The index of the first element in the range to be\n * reversed, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * reversed, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` index which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.reverse(data, 1, 3); // [0, 3, 2, 1, 4]\n * ArrayExt.reverse(data, 3); // [0, 3, 2, 4, 1]\n * ArrayExt.reverse(data); // [1, 4, 2, 3, 0]\n * ```\n */\n function reverse(array, start = 0, stop = -1) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n while (start < stop) {\n let a = array[start];\n let b = array[stop];\n array[start++] = b;\n array[stop--] = a;\n }\n }\n ArrayExt.reverse = reverse;\n /**\n * Rotate the elements of an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param delta - The amount of rotation to apply to the elements. A\n * positive value will rotate the elements to the left. A negative\n * value will rotate the elements to the right.\n *\n * @param start - The index of the first element in the range to be\n * rotated, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * rotated, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `delta`, `start`, or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.rotate(data, 2); // [2, 3, 4, 0, 1]\n * ArrayExt.rotate(data, -2); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 10); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 9); // [4, 0, 1, 2, 3]\n * ArrayExt.rotate(data, 2, 1, 3); // [4, 2, 0, 1, 3]\n * ```\n */\n function rotate(array, delta, start = 0, stop = -1) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n if (start >= stop) {\n return;\n }\n let length = stop - start + 1;\n if (delta > 0) {\n delta = delta % length;\n }\n else if (delta < 0) {\n delta = ((delta % length) + length) % length;\n }\n if (delta === 0) {\n return;\n }\n let pivot = start + delta;\n reverse(array, start, pivot - 1);\n reverse(array, pivot, stop);\n reverse(array, start, stop);\n }\n ArrayExt.rotate = rotate;\n /**\n * Fill an array with a static value.\n *\n * @param array - The mutable array-like object to fill.\n *\n * @param value - The static value to use to fill the array.\n *\n * @param start - The index of the first element in the range to be\n * filled, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * filled, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Notes\n * If `stop < start` the fill will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four'];\n * ArrayExt.fill(data, 'r'); // ['r', 'r', 'r', 'r']\n * ArrayExt.fill(data, 'g', 1); // ['r', 'g', 'g', 'g']\n * ArrayExt.fill(data, 'b', 2, 3); // ['r', 'g', 'b', 'b']\n * ArrayExt.fill(data, 'z', 3, 1); // ['z', 'z', 'b', 'z']\n * ```\n */\n function fill(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n array[(start + i) % n] = value;\n }\n }\n ArrayExt.fill = fill;\n /**\n * Insert a value into an array at a specific index.\n *\n * @param array - The array of interest.\n *\n * @param index - The index at which to insert the value. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param value - The value to set at the specified index.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2];\n * ArrayExt.insert(data, 0, -1); // [-1, 0, 1, 2]\n * ArrayExt.insert(data, 2, 12); // [-1, 0, 12, 1, 2]\n * ArrayExt.insert(data, -1, 7); // [-1, 0, 12, 1, 7, 2]\n * ArrayExt.insert(data, 6, 19); // [-1, 0, 12, 1, 7, 2, 19]\n * ```\n */\n function insert(array, index, value) {\n let n = array.length;\n if (index < 0) {\n index = Math.max(0, index + n);\n }\n else {\n index = Math.min(index, n);\n }\n for (let i = n; i > index; --i) {\n array[i] = array[i - 1];\n }\n array[index] = value;\n }\n ArrayExt.insert = insert;\n /**\n * Remove and return a value at a specific index in an array.\n *\n * @param array - The array of interest.\n *\n * @param index - The index of the value to remove. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The value at the specified index, or `undefined` if the\n * index is out of range.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeAt(data, 2); // 23\n * ArrayExt.removeAt(data, -2); // 12\n * ArrayExt.removeAt(data, 10); // undefined;\n * ```\n */\n function removeAt(array, index) {\n let n = array.length;\n if (index < 0) {\n index += n;\n }\n if (index < 0 || index >= n) {\n return undefined;\n }\n let value = array[index];\n for (let i = index + 1; i < n; ++i) {\n array[i - 1] = array[i];\n }\n array.length = n - 1;\n return value;\n }\n ArrayExt.removeAt = removeAt;\n /**\n * Remove the first occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstOf(data, 12); // 1\n * ArrayExt.removeFirstOf(data, 17); // -1\n * ArrayExt.removeFirstOf(data, 39, 3); // -1\n * ArrayExt.removeFirstOf(data, 39, 3, 2); // 2\n * ```\n */\n function removeFirstOf(array, value, start = 0, stop = -1) {\n let index = firstIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeFirstOf = removeFirstOf;\n /**\n * Remove the last occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastOf(data, 12); // 5\n * ArrayExt.removeLastOf(data, 17); // -1\n * ArrayExt.removeLastOf(data, 39, 2); // -1\n * ArrayExt.removeLastOf(data, 39, 2, 3); // 3\n * ```\n */\n function removeLastOf(array, value, start = -1, stop = 0) {\n let index = lastIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeLastOf = removeLastOf;\n /**\n * Remove all occurrences of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [14, 12, 23, 39, 14, 12, 19, 14];\n * ArrayExt.removeAllOf(data, 12); // 2\n * ArrayExt.removeAllOf(data, 17); // 0\n * ArrayExt.removeAllOf(data, 14, 1, 4); // 1\n * ```\n */\n function removeAllOf(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let count = 0;\n for (let i = 0; i < n; ++i) {\n if (start <= stop && i >= start && i <= stop && array[i] === value) {\n count++;\n }\n else if (stop < start &&\n (i <= stop || i >= start) &&\n array[i] === value) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllOf = removeAllOf;\n /**\n * Remove the first occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstWhere(data, isEven); // { index: 0, value: 0 }\n * ArrayExt.removeFirstWhere(data, isEven, 2); // { index: 3, value: 14 }\n * ArrayExt.removeFirstWhere(data, isEven, 4); // { index: -1, value: undefined }\n * ```\n */\n function removeFirstWhere(array, fn, start = 0, stop = -1) {\n let value;\n let index = findFirstIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index, value };\n }\n ArrayExt.removeFirstWhere = removeFirstWhere;\n /**\n * Remove the last occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastWhere(data, isEven); // { index: 5, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2); // { index: 1, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2, 1); // { index: -1, value: undefined }\n * ```\n */\n function removeLastWhere(array, fn, start = -1, stop = 0) {\n let value;\n let index = findLastIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index, value };\n }\n ArrayExt.removeLastWhere = removeLastWhere;\n /**\n * Remove all occurrences of values which match a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * function isNegative(value: number): boolean {\n * return value < 0;\n * }\n *\n * let data = [0, 12, -13, -9, 23, 39, 14, -15, 12, 75];\n * ArrayExt.removeAllWhere(data, isEven); // 4\n * ArrayExt.removeAllWhere(data, isNegative, 0, 3); // 2\n * ```\n */\n function removeAllWhere(array, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let count = 0;\n for (let i = 0; i < n; ++i) {\n if (start <= stop && i >= start && i <= stop && fn(array[i], i)) {\n count++;\n }\n else if (stop < start && (i <= stop || i >= start) && fn(array[i], i)) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllWhere = removeAllWhere;\n})(ArrayExt || (ArrayExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Chain together several iterables.\n *\n * @deprecated\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields the values of the iterables\n * in the order in which they are supplied.\n *\n * #### Example\n * ```typescript\n * import { chain } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = chain(data1, data2);\n *\n * Array.from(stream); // [1, 2, 3, 4, 5, 6]\n * ```\n */\nfunction* chain(...objects) {\n for (const object of objects) {\n yield* object;\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an empty iterator.\n *\n * @returns A new iterator which yields nothing.\n *\n * #### Example\n * ```typescript\n * import { empty } from '@lumino/algorithm';\n *\n * let stream = empty();\n *\n * Array.from(stream); // []\n * ```\n */\n// eslint-disable-next-line require-yield\nfunction* empty() {\n return;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Enumerate an iterable object.\n *\n * @param object - The iterable object of interest.\n *\n * @param start - The starting enum value. The default is `0`.\n *\n * @returns An iterator which yields the enumerated values.\n *\n * #### Example\n * ```typescript\n * import { enumerate } from '@lumino/algorithm';\n *\n * let data = ['foo', 'bar', 'baz'];\n *\n * let stream = enumerate(data, 1);\n *\n * Array.from(stream); // [[1, 'foo'], [2, 'bar'], [3, 'baz']]\n * ```\n */\nfunction* enumerate(object, start = 0) {\n for (const value of object) {\n yield [start++, value];\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Filter an iterable for values which pass a test.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns An iterator which yields the values which pass the test.\n *\n * #### Example\n * ```typescript\n * import { filter } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = filter(data, value => value % 2 === 0);\n *\n * Array.from(stream); // [2, 4, 6]\n * ```\n */\nfunction* filter(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n yield value;\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Find the first value in an iterable which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { find } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * find(data, isCat).name; // 'fluffy'\n * ```\n */\nfunction find(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return value;\n }\n }\n return undefined;\n}\n/**\n * Find the index of the first value which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { findIndex } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * findIndex(data, isCat); // 1\n * ```\n */\nfunction findIndex(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return index - 1;\n }\n }\n return -1;\n}\n/**\n * Find the minimum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The minimum value in the iterable. If multiple values are\n * equivalent to the minimum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { min } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * min([7, 4, 0, 3, 9, 4], numberCmp); // 0\n * ```\n */\nfunction min(object, fn) {\n let result = undefined;\n for (const value of object) {\n if (result === undefined) {\n result = value;\n continue;\n }\n if (fn(value, result) < 0) {\n result = value;\n }\n }\n return result;\n}\n/**\n * Find the maximum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The maximum value in the iterable. If multiple values are\n * equivalent to the maximum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { max } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * max([7, 4, 0, 3, 9, 4], numberCmp); // 9\n * ```\n */\nfunction max(object, fn) {\n let result = undefined;\n for (const value of object) {\n if (result === undefined) {\n result = value;\n continue;\n }\n if (fn(value, result) > 0) {\n result = value;\n }\n }\n return result;\n}\n/**\n * Find the minimum and maximum values in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns A 2-tuple of the `[min, max]` values in the iterable. If\n * multiple values are equivalent, the left-most values are returned.\n * If the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { minmax } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * minmax([7, 4, 0, 3, 9, 4], numberCmp); // [0, 9]\n * ```\n */\nfunction minmax(object, fn) {\n let empty = true;\n let vmin;\n let vmax;\n for (const value of object) {\n if (empty) {\n vmin = value;\n vmax = value;\n empty = false;\n }\n else if (fn(value, vmin) < 0) {\n vmin = value;\n }\n else if (fn(value, vmax) > 0) {\n vmax = value;\n }\n }\n return empty ? undefined : [vmin, vmax];\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an array from an iterable of values.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new array of values from the given object.\n *\n * #### Example\n * ```typescript\n * import { toArray } from '@lumino/algorithm';\n *\n * let stream = [1, 2, 3, 4, 5, 6][Symbol.iterator]();\n *\n * toArray(stream); // [1, 2, 3, 4, 5, 6];\n * ```\n */\nfunction toArray(object) {\n return Array.from(object);\n}\n/**\n * Create an object from an iterable of key/value pairs.\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new object mapping keys to values.\n *\n * #### Example\n * ```typescript\n * import { toObject } from '@lumino/algorithm';\n *\n * let data: [string, number][] = [['one', 1], ['two', 2], ['three', 3]];\n *\n * toObject(data); // { one: 1, two: 2, three: 3 }\n * ```\n */\nfunction toObject(object) {\n const result = {};\n for (const [key, value] of object) {\n result[key] = value;\n }\n return result;\n}\n/**\n * Invoke a function for each value in an iterable.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The callback function to invoke for each value.\n *\n * #### Notes\n * Iteration can be terminated early by returning `false` from the\n * callback function.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { each } from '@lumino/algorithm';\n *\n * let data = [5, 7, 0, -2, 9];\n *\n * each(data, value => { console.log(value); });\n * ```\n */\nfunction each(object, fn) {\n let index = 0;\n for (const value of object) {\n if (false === fn(value, index++)) {\n return;\n }\n }\n}\n/**\n * Test whether all values in an iterable satisfy a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if all values pass the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `false` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { every } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * every(data, value => value % 2 === 0); // false\n * every(data, value => value % 2 === 1); // true\n * ```\n */\nfunction every(object, fn) {\n let index = 0;\n for (const value of object) {\n if (false === fn(value, index++)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Test whether any value in an iterable satisfies a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if any value passes the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `true` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { some } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * some(data, value => value === 7); // true\n * some(data, value => value === 3); // false\n * ```\n */\nfunction some(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return true;\n }\n }\n return false;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Transform the values of an iterable with a mapping function.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The mapping function to invoke for each value.\n *\n * @returns An iterator which yields the transformed values.\n *\n * #### Example\n * ```typescript\n * import { map } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3];\n *\n * let stream = map(data, value => value * 2);\n *\n * Array.from(stream); // [2, 4, 6]\n * ```\n */\nfunction* map(object, fn) {\n let index = 0;\n for (const value of object) {\n yield fn(value, index++);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator of evenly spaced values.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns An iterator which produces evenly spaced values.\n *\n * #### Notes\n * In the single argument form of `range(stop)`, `start` defaults to\n * `0` and `step` defaults to `1`.\n *\n * In the two argument form of `range(start, stop)`, `step` defaults\n * to `1`.\n *\n * #### Example\n * ```typescript\n * import { range } from '@lumino/algorithm';\n *\n * let stream = range(2, 4);\n *\n * Array.from(stream); // [2, 3]\n * ```\n */\nfunction* range(start, stop, step) {\n if (stop === undefined) {\n stop = start;\n start = 0;\n step = 1;\n }\n else if (step === undefined) {\n step = 1;\n }\n const length = Private.rangeLength(start, stop, step);\n for (let index = 0; index < length; index++) {\n yield start + step * index;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * Compute the effective length of a range.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns The number of steps need to traverse the range.\n */\n function rangeLength(start, stop, step) {\n if (step === 0) {\n return Infinity;\n }\n if (start > stop && step > 0) {\n return 0;\n }\n if (start < stop && step < 0) {\n return 0;\n }\n return Math.ceil((stop - start) / step);\n }\n Private.rangeLength = rangeLength;\n})(Private || (Private = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nfunction reduce(object, fn, initial) {\n // Setup the iterator and fetch the first value.\n const it = object[Symbol.iterator]();\n let index = 0;\n let first = it.next();\n // An empty iterator and no initial value is an error.\n if (first.done && initial === undefined) {\n throw new TypeError('Reduce of empty iterable with no initial value.');\n }\n // If the iterator is empty, return the initial value.\n if (first.done) {\n return initial;\n }\n // If the iterator has a single item and no initial value, the\n // reducer is not invoked and the first item is the return value.\n let second = it.next();\n if (second.done && initial === undefined) {\n return first.value;\n }\n // If iterator has a single item and an initial value is provided,\n // the reducer is invoked and that result is the return value.\n if (second.done) {\n return fn(initial, first.value, index++);\n }\n // Setup the initial accumlated value.\n let accumulator;\n if (initial === undefined) {\n accumulator = fn(first.value, second.value, index++);\n }\n else {\n accumulator = fn(fn(initial, first.value, index++), second.value, index++);\n }\n // Iterate the rest of the values, updating the accumulator.\n let next;\n while (!(next = it.next()).done) {\n accumulator = fn(accumulator, next.value, index++);\n }\n // Return the final accumulated value.\n return accumulator;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator which repeats a value a number of times.\n *\n * @deprecated\n *\n * @param value - The value to repeat.\n *\n * @param count - The number of times to repeat the value.\n *\n * @returns A new iterator which repeats the specified value.\n *\n * #### Example\n * ```typescript\n * import { repeat } from '@lumino/algorithm';\n *\n * let stream = repeat(7, 3);\n *\n * Array.from(stream); // [7, 7, 7]\n * ```\n */\nfunction* repeat(value, count) {\n while (0 < count--) {\n yield value;\n }\n}\n/**\n * Create an iterator which yields a value a single time.\n *\n * @deprecated\n *\n * @param value - The value to wrap in an iterator.\n *\n * @returns A new iterator which yields the value a single time.\n *\n * #### Example\n * ```typescript\n * import { once } from '@lumino/algorithm';\n *\n * let stream = once(7);\n *\n * Array.from(stream); // [7]\n * ```\n */\nfunction* once(value) {\n yield value;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator for a retroable object.\n *\n * @param object - The retroable or array-like object of interest.\n *\n * @returns An iterator which traverses the object's values in reverse.\n *\n * #### Example\n * ```typescript\n * import { retro } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = retro(data);\n *\n * Array.from(stream); // [6, 5, 4, 3, 2, 1]\n * ```\n */\nfunction* retro(object) {\n if (typeof object.retro === 'function') {\n yield* object.retro();\n }\n else {\n for (let index = object.length - 1; index > -1; index--) {\n yield object[index];\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Topologically sort an iterable of edges.\n *\n * @param edges - The iterable object of edges to sort.\n * An edge is represented as a 2-tuple of `[fromNode, toNode]`.\n *\n * @returns The topologically sorted array of nodes.\n *\n * #### Notes\n * If a cycle is present in the graph, the cycle will be ignored and\n * the return value will be only approximately sorted.\n *\n * #### Example\n * ```typescript\n * import { topologicSort } from '@lumino/algorithm';\n *\n * let data = [\n * ['d', 'e'],\n * ['c', 'd'],\n * ['a', 'b'],\n * ['b', 'c']\n * ];\n *\n * topologicSort(data); // ['a', 'b', 'c', 'd', 'e']\n * ```\n */\nfunction topologicSort(edges) {\n // Setup the shared sorting state.\n let sorted = [];\n let visited = new Set();\n let graph = new Map();\n // Add the edges to the graph.\n for (const edge of edges) {\n addEdge(edge);\n }\n // Visit each node in the graph.\n for (const [k] of graph) {\n visit(k);\n }\n // Return the sorted results.\n return sorted;\n // Add an edge to the graph.\n function addEdge(edge) {\n let [fromNode, toNode] = edge;\n let children = graph.get(toNode);\n if (children) {\n children.push(fromNode);\n }\n else {\n graph.set(toNode, [fromNode]);\n }\n }\n // Recursively visit the node.\n function visit(node) {\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n let children = graph.get(node);\n if (children) {\n for (const child of children) {\n visit(child);\n }\n }\n sorted.push(node);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate over an iterable using a stepped increment.\n *\n * @param object - The iterable object of interest.\n *\n * @param step - The distance to step on each iteration. A value\n * of less than `1` will behave the same as a value of `1`.\n *\n * @returns An iterator which traverses the iterable step-wise.\n *\n * #### Example\n * ```typescript\n * import { stride } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = stride(data, 2);\n *\n * Array.from(stream); // [1, 3, 5];\n * ```\n */\nfunction* stride(object, step) {\n let count = 0;\n for (const value of object) {\n if (0 === count++ % step) {\n yield value;\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for string-specific algorithms.\n */\nvar StringExt;\n(function (StringExt) {\n /**\n * Find the indices of characters in a source text.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The matched indices, or `null` if there is no match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * In order for there to be a match, all of the characters in `query`\n * **must** appear in `source` in the order given by `query`.\n *\n * Characters are matched using strict `===` equality.\n */\n function findIndices(source, query, start = 0) {\n let indices = new Array(query.length);\n for (let i = 0, j = start, n = query.length; i < n; ++i, ++j) {\n j = source.indexOf(query[i], j);\n if (j === -1) {\n return null;\n }\n indices[i] = j;\n }\n return indices;\n }\n StringExt.findIndices = findIndices;\n /**\n * A string matcher which uses a sum-of-squares algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-squares approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The index of each\n * matching character is squared and added to the score. This means\n * that early and consecutive character matches are preferred, while\n * late matches are heavily penalized.\n */\n function matchSumOfSquares(source, query, start = 0) {\n let indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n let score = 0;\n for (let i = 0, n = indices.length; i < n; ++i) {\n let j = indices[i] - start;\n score += j * j;\n }\n return { score, indices };\n }\n StringExt.matchSumOfSquares = matchSumOfSquares;\n /**\n * A string matcher which uses a sum-of-deltas algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-deltas approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The delta between\n * the indices are summed to create the score. This means that groups\n * of matched characters are preferred, while fragmented matches are\n * penalized.\n */\n function matchSumOfDeltas(source, query, start = 0) {\n let indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n let score = 0;\n let last = start - 1;\n for (let i = 0, n = indices.length; i < n; ++i) {\n let j = indices[i];\n score += j - last - 1;\n last = j;\n }\n return { score, indices };\n }\n StringExt.matchSumOfDeltas = matchSumOfDeltas;\n /**\n * Highlight the matched characters of a source text.\n *\n * @param source - The text which should be highlighted.\n *\n * @param indices - The indices of the matched characters. They must\n * appear in increasing order and must be in bounds of the source.\n *\n * @param fn - The function to apply to the matched chunks.\n *\n * @returns An array of unmatched and highlighted chunks.\n */\n function highlight(source, indices, fn) {\n // Set up the result array.\n let result = [];\n // Set up the counter variables.\n let k = 0;\n let last = 0;\n let n = indices.length;\n // Iterator over each index.\n while (k < n) {\n // Set up the chunk indices.\n let i = indices[k];\n let j = indices[k];\n // Advance the right chunk index until it's non-contiguous.\n while (++k < n && indices[k] === j + 1) {\n j++;\n }\n // Extract the unmatched text.\n if (last < i) {\n result.push(source.slice(last, i));\n }\n // Extract and highlight the matched text.\n if (i < j + 1) {\n result.push(fn(source.slice(i, j + 1)));\n }\n // Update the last visited index.\n last = j + 1;\n }\n // Extract any remaining unmatched text.\n if (last < source.length) {\n result.push(source.slice(last));\n }\n // Return the highlighted result.\n return result;\n }\n StringExt.highlight = highlight;\n /**\n * A 3-way string comparison function.\n *\n * @param a - The first string of interest.\n *\n * @param b - The second string of interest.\n *\n * @returns `-1` if `a < b`, else `1` if `a > b`, else `0`.\n */\n function cmp(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n StringExt.cmp = cmp;\n})(StringExt || (StringExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Take a fixed number of items from an iterable.\n *\n * @param object - The iterable object of interest.\n *\n * @param count - The number of items to take from the iterable.\n *\n * @returns An iterator which yields the specified number of items\n * from the source iterable.\n *\n * #### Notes\n * The returned iterator will exhaust early if the source iterable\n * contains an insufficient number of items.\n *\n * #### Example\n * ```typescript\n * import { take } from '@lumino/algorithm';\n *\n * let stream = take([5, 4, 3, 2, 1, 0, -1], 3);\n *\n * Array.from(stream); // [5, 4, 3]\n * ```\n */\nfunction* take(object, count) {\n if (count < 1) {\n return;\n }\n const it = object[Symbol.iterator]();\n let item;\n while (0 < count-- && !(item = it.next()).done) {\n yield item.value;\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate several iterables in lockstep.\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields successive tuples of values where\n * each value is taken in turn from the provided iterables. It will\n * be as long as the shortest provided iterable.\n *\n * #### Example\n * ```typescript\n * import { zip } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = zip(data1, data2);\n *\n * Array.from(stream); // [[1, 4], [2, 5], [3, 6]]\n * ```\n */\nfunction* zip(...objects) {\n const iters = objects.map(obj => obj[Symbol.iterator]());\n let tuple = iters.map(it => it.next());\n for (; every(tuple, item => !item.done); tuple = iters.map(it => it.next())) {\n yield tuple.map(item => item.value);\n }\n}\n\nexport { ArrayExt, StringExt, chain, each, empty, enumerate, every, filter, find, findIndex, map, max, min, minmax, once, range, reduce, repeat, retro, some, stride, take, toArray, toObject, topologicSort, zip };\n//# sourceMappingURL=index.es6.js.map\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.lumino_coreutils = {}));\n})(this, (function (exports) { 'use strict';\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for JSON-specific functions.\n */\n exports.JSONExt = void 0;\n (function (JSONExt) {\n /**\n * A shared frozen empty JSONObject\n */\n JSONExt.emptyObject = Object.freeze({});\n /**\n * A shared frozen empty JSONArray\n */\n JSONExt.emptyArray = Object.freeze([]);\n /**\n * Test whether a JSON value is a primitive.\n *\n * @param value - The JSON value of interest.\n *\n * @returns `true` if the value is a primitive,`false` otherwise.\n */\n function isPrimitive(value) {\n return (value === null ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string');\n }\n JSONExt.isPrimitive = isPrimitive;\n function isArray(value) {\n return Array.isArray(value);\n }\n JSONExt.isArray = isArray;\n function isObject(value) {\n return !isPrimitive(value) && !isArray(value);\n }\n JSONExt.isObject = isObject;\n /**\n * Compare two JSON values for deep equality.\n *\n * @param first - The first JSON value of interest.\n *\n * @param second - The second JSON value of interest.\n *\n * @returns `true` if the values are equivalent, `false` otherwise.\n */\n function deepEqual(first, second) {\n // Check referential and primitive equality first.\n if (first === second) {\n return true;\n }\n // If one is a primitive, the `===` check ruled out the other.\n if (isPrimitive(first) || isPrimitive(second)) {\n return false;\n }\n // Test whether they are arrays.\n let a1 = isArray(first);\n let a2 = isArray(second);\n // Bail if the types are different.\n if (a1 !== a2) {\n return false;\n }\n // If they are both arrays, compare them.\n if (a1 && a2) {\n return deepArrayEqual(first, second);\n }\n // At this point, they must both be objects.\n return deepObjectEqual(first, second);\n }\n JSONExt.deepEqual = deepEqual;\n /**\n * Create a deep copy of a JSON value.\n *\n * @param value - The JSON value to copy.\n *\n * @returns A deep copy of the given JSON value.\n */\n function deepCopy(value) {\n // Do nothing for primitive values.\n if (isPrimitive(value)) {\n return value;\n }\n // Deep copy an array.\n if (isArray(value)) {\n return deepArrayCopy(value);\n }\n // Deep copy an object.\n return deepObjectCopy(value);\n }\n JSONExt.deepCopy = deepCopy;\n /**\n * Compare two JSON arrays for deep equality.\n */\n function deepArrayEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Test the arrays for equal length.\n if (first.length !== second.length) {\n return false;\n }\n // Compare the values for equality.\n for (let i = 0, n = first.length; i < n; ++i) {\n if (!deepEqual(first[i], second[i])) {\n return false;\n }\n }\n // At this point, the arrays are equal.\n return true;\n }\n /**\n * Compare two JSON objects for deep equality.\n */\n function deepObjectEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Check for the first object's keys in the second object.\n for (let key in first) {\n if (first[key] !== undefined && !(key in second)) {\n return false;\n }\n }\n // Check for the second object's keys in the first object.\n for (let key in second) {\n if (second[key] !== undefined && !(key in first)) {\n return false;\n }\n }\n // Compare the values for equality.\n for (let key in first) {\n // Get the values.\n let firstValue = first[key];\n let secondValue = second[key];\n // If both are undefined, ignore the key.\n if (firstValue === undefined && secondValue === undefined) {\n continue;\n }\n // If only one value is undefined, the objects are not equal.\n if (firstValue === undefined || secondValue === undefined) {\n return false;\n }\n // Compare the values.\n if (!deepEqual(firstValue, secondValue)) {\n return false;\n }\n }\n // At this point, the objects are equal.\n return true;\n }\n /**\n * Create a deep copy of a JSON array.\n */\n function deepArrayCopy(value) {\n let result = new Array(value.length);\n for (let i = 0, n = value.length; i < n; ++i) {\n result[i] = deepCopy(value[i]);\n }\n return result;\n }\n /**\n * Create a deep copy of a JSON object.\n */\n function deepObjectCopy(value) {\n let result = {};\n for (let key in value) {\n // Ignore undefined values.\n let subvalue = value[key];\n if (subvalue === undefined) {\n continue;\n }\n result[key] = deepCopy(subvalue);\n }\n return result;\n }\n })(exports.JSONExt || (exports.JSONExt = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * An object which stores MIME data for general application use.\n *\n * #### Notes\n * This class does not attempt to enforce \"correctness\" of MIME types\n * and their associated data. Since this class is designed to transfer\n * arbitrary data and objects within the same application, it assumes\n * that the user provides correct and accurate data.\n */\n class MimeData {\n constructor() {\n this._types = [];\n this._values = [];\n }\n /**\n * Get an array of the MIME types contained within the dataset.\n *\n * @returns A new array of the MIME types, in order of insertion.\n */\n types() {\n return this._types.slice();\n }\n /**\n * Test whether the dataset has an entry for the given type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns `true` if the dataset contains a value for the given\n * MIME type, `false` otherwise.\n */\n hasData(mime) {\n return this._types.indexOf(mime) !== -1;\n }\n /**\n * Get the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns The value for the given MIME type, or `undefined` if\n * the dataset does not contain a value for the type.\n */\n getData(mime) {\n let i = this._types.indexOf(mime);\n return i !== -1 ? this._values[i] : undefined;\n }\n /**\n * Set the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @param data - The data value for the given MIME type.\n *\n * #### Notes\n * This will overwrite any previous entry for the MIME type.\n */\n setData(mime, data) {\n this.clearData(mime);\n this._types.push(mime);\n this._values.push(data);\n }\n /**\n * Remove the data entry for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * #### Notes\n * This is a no-op if there is no entry for the given MIME type.\n */\n clearData(mime) {\n let i = this._types.indexOf(mime);\n if (i !== -1) {\n this._types.splice(i, 1);\n this._values.splice(i, 1);\n }\n }\n /**\n * Remove all data entries from the dataset.\n */\n clear() {\n this._types.length = 0;\n this._values.length = 0;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A class which wraps a promise into a delegate object.\n *\n * #### Notes\n * This class is useful when the logic to resolve or reject a promise\n * cannot be defined at the point where the promise is created.\n */\n class PromiseDelegate {\n /**\n * Construct a new promise delegate.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n /**\n * Resolve the wrapped promise with the given value.\n *\n * @param value - The value to use for resolving the promise.\n */\n resolve(value) {\n let resolve = this._resolve;\n resolve(value);\n }\n /**\n * Reject the wrapped promise with the given value.\n *\n * @reason - The reason for rejecting the promise.\n */\n reject(reason) {\n let reject = this._reject;\n reject(reason);\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A runtime object which captures compile-time type information.\n *\n * #### Notes\n * A token captures the compile-time type of an interface or class in\n * an object which can be used at runtime in a type-safe fashion.\n */\n class Token {\n /**\n * Construct a new token.\n *\n * @param name - A human readable name for the token.\n * @param description - Token purpose description for documentation.\n */\n constructor(name, description) {\n this.name = name;\n this.description = description !== null && description !== void 0 ? description : '';\n this._tokenStructuralPropertyT = null;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n // Fallback\n function fallbackRandomValues(buffer) {\n let value = 0;\n for (let i = 0, n = buffer.length; i < n; ++i) {\n if (i % 4 === 0) {\n value = (Math.random() * 0xffffffff) >>> 0;\n }\n buffer[i] = value & 0xff;\n value >>>= 8;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for random number related functionality.\n */\n exports.Random = void 0;\n (function (Random) {\n /**\n * A function which generates random bytes.\n *\n * @param buffer - The `Uint8Array` to fill with random bytes.\n *\n * #### Notes\n * A cryptographically strong random number generator will be used if\n * available. Otherwise, `Math.random` will be used as a fallback for\n * randomness.\n *\n * The following RNGs are supported, listed in order of precedence:\n * - `window.crypto.getRandomValues`\n * - `window.msCrypto.getRandomValues`\n * - `require('crypto').randomFillSync\n * - `require('crypto').randomBytes\n * - `Math.random`\n */\n Random.getRandomValues = (() => {\n // Look up the crypto module if available.\n const crypto = (typeof window !== 'undefined' && (window.crypto || window.msCrypto)) ||\n null;\n // Modern browsers and IE 11\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return function getRandomValues(buffer) {\n return crypto.getRandomValues(buffer);\n };\n }\n // Fallback\n return fallbackRandomValues;\n })();\n })(exports.Random || (exports.Random = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A function which creates a function that generates UUID v4 identifiers.\n *\n * @returns A new function that creates a UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n function uuid4Factory(getRandomValues) {\n // Create a 16 byte array to hold the random values.\n const bytes = new Uint8Array(16);\n // Create a look up table from bytes to hex strings.\n const lut = new Array(256);\n // Pad the single character hex digits with a leading zero.\n for (let i = 0; i < 16; ++i) {\n lut[i] = '0' + i.toString(16);\n }\n // Populate the rest of the hex digits.\n for (let i = 16; i < 256; ++i) {\n lut[i] = i.toString(16);\n }\n // Return a function which generates the UUID.\n return function uuid4() {\n // Get a new batch of random values.\n getRandomValues(bytes);\n // Set the UUID version number to 4.\n bytes[6] = 0x40 | (bytes[6] & 0x0f);\n // Set the clock sequence bit to the RFC spec.\n bytes[8] = 0x80 | (bytes[8] & 0x3f);\n // Assemble the UUID string.\n return (lut[bytes[0]] +\n lut[bytes[1]] +\n lut[bytes[2]] +\n lut[bytes[3]] +\n '-' +\n lut[bytes[4]] +\n lut[bytes[5]] +\n '-' +\n lut[bytes[6]] +\n lut[bytes[7]] +\n '-' +\n lut[bytes[8]] +\n lut[bytes[9]] +\n '-' +\n lut[bytes[10]] +\n lut[bytes[11]] +\n lut[bytes[12]] +\n lut[bytes[13]] +\n lut[bytes[14]] +\n lut[bytes[15]]);\n };\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for UUID related functionality.\n */\n exports.UUID = void 0;\n (function (UUID) {\n /**\n * A function which generates UUID v4 identifiers.\n *\n * @returns A new UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n UUID.uuid4 = uuid4Factory(exports.Random.getRandomValues);\n })(exports.UUID || (exports.UUID = {}));\n\n exports.MimeData = MimeData;\n exports.PromiseDelegate = PromiseDelegate;\n exports.Token = Token;\n\n}));\n//# sourceMappingURL=index.js.map\n","import { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module disposable\n */\n/**\n * A disposable object which delegates to a callback function.\n */\nclass DisposableDelegate {\n /**\n * Construct a new disposable delegate.\n *\n * @param fn - The callback function to invoke on dispose.\n */\n constructor(fn) {\n this._fn = fn;\n }\n /**\n * Test whether the delegate has been disposed.\n */\n get isDisposed() {\n return !this._fn;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (!this._fn) {\n return;\n }\n let fn = this._fn;\n this._fn = null;\n fn();\n }\n}\n/**\n * An observable disposable object which delegates to a callback function.\n */\nclass ObservableDisposableDelegate extends DisposableDelegate {\n constructor() {\n super(...arguments);\n this._disposed = new Signal(this);\n }\n /**\n * A signal emitted when the delegate is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n super.dispose();\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n}\n/**\n * An object which manages a collection of disposable items.\n */\nclass DisposableSet {\n constructor() {\n this._isDisposed = false;\n this._items = new Set();\n }\n /**\n * Test whether the set has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n this._items.forEach(item => {\n item.dispose();\n });\n this._items.clear();\n }\n /**\n * Test whether the set contains a specific item.\n *\n * @param item - The item of interest.\n *\n * @returns `true` if the set contains the item, `false` otherwise.\n */\n contains(item) {\n return this._items.has(item);\n }\n /**\n * Add a disposable item to the set.\n *\n * @param item - The item to add to the set.\n *\n * #### Notes\n * If the item is already contained in the set, this is a no-op.\n */\n add(item) {\n this._items.add(item);\n }\n /**\n * Remove a disposable item from the set.\n *\n * @param item - The item to remove from the set.\n *\n * #### Notes\n * If the item is not contained in the set, this is a no-op.\n */\n remove(item) {\n this._items.delete(item);\n }\n /**\n * Remove all items from the set.\n */\n clear() {\n this._items.clear();\n }\n}\n/**\n * The namespace for the `DisposableSet` class statics.\n */\n(function (DisposableSet) {\n /**\n * Create a disposable set from an iterable of items.\n *\n * @param items - The iterable object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n let set = new DisposableSet();\n for (const item of items) {\n set.add(item);\n }\n return set;\n }\n DisposableSet.from = from;\n})(DisposableSet || (DisposableSet = {}));\n/**\n * An observable object which manages a collection of disposable items.\n */\nclass ObservableDisposableSet extends DisposableSet {\n constructor() {\n super(...arguments);\n this._disposed = new Signal(this);\n }\n /**\n * A signal emitted when the set is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n super.dispose();\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n}\n/**\n * The namespace for the `ObservableDisposableSet` class statics.\n */\n(function (ObservableDisposableSet) {\n /**\n * Create an observable disposable set from an iterable of items.\n *\n * @param items - The iterable object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n let set = new ObservableDisposableSet();\n for (const item of items) {\n set.add(item);\n }\n return set;\n }\n ObservableDisposableSet.from = from;\n})(ObservableDisposableSet || (ObservableDisposableSet = {}));\n\nexport { DisposableDelegate, DisposableSet, ObservableDisposableDelegate, ObservableDisposableSet };\n//# sourceMappingURL=index.es6.js.map\n","import { PromiseDelegate, JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * A class that wraps an asynchronous function to poll at a regular interval\n * with exponential increases to the interval length if the poll fails.\n *\n * @typeparam T - The resolved type of the factory's promises.\n * Defaults to `any`.\n *\n * @typeparam U - The rejected type of the factory's promises.\n * Defaults to `any`.\n *\n * @typeparam V - An optional type to extend the phases supported by a poll.\n * Defaults to `standby`, which already exists in the `Phase` type.\n */\nclass Poll {\n /**\n * Instantiate a new poll with exponential backoff in case of failure.\n *\n * @param options - The poll instantiation options.\n */\n constructor(options) {\n var _a;\n this._disposed = new Signal(this);\n this._lingered = 0;\n this._tick = new PromiseDelegate();\n this._ticked = new Signal(this);\n this._factory = options.factory;\n this._linger = (_a = options.linger) !== null && _a !== void 0 ? _a : Private.DEFAULT_LINGER;\n this._standby = options.standby || Private.DEFAULT_STANDBY;\n this._state = { ...Private.DEFAULT_STATE, timestamp: new Date().getTime() };\n // Normalize poll frequency `max` to be the greater of\n // default `max`, `options.frequency.max`, or `options.frequency.interval`.\n const frequency = options.frequency || {};\n const max = Math.max(frequency.interval || 0, frequency.max || 0, Private.DEFAULT_FREQUENCY.max);\n this.frequency = { ...Private.DEFAULT_FREQUENCY, ...frequency, ...{ max } };\n this.name = options.name || Private.DEFAULT_NAME;\n if ('auto' in options ? options.auto : true) {\n setTimeout(() => this.start());\n }\n }\n /**\n * A signal emitted when the poll is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * The polling frequency parameters.\n */\n get frequency() {\n return this._frequency;\n }\n set frequency(frequency) {\n if (this.isDisposed || JSONExt.deepEqual(frequency, this.frequency || {})) {\n return;\n }\n let { backoff, interval, max } = frequency;\n interval = Math.round(interval);\n max = Math.round(max);\n if (typeof backoff === 'number' && backoff < 1) {\n throw new Error('Poll backoff growth factor must be at least 1');\n }\n if ((interval < 0 || interval > max) && interval !== Poll.NEVER) {\n throw new Error('Poll interval must be between 0 and max');\n }\n if (max > Poll.MAX_INTERVAL && max !== Poll.NEVER) {\n throw new Error(`Max interval must be less than ${Poll.MAX_INTERVAL}`);\n }\n this._frequency = { backoff, interval, max };\n }\n /**\n * Whether the poll is disposed.\n */\n get isDisposed() {\n return this.state.phase === 'disposed';\n }\n /**\n * Indicates when the poll switches to standby.\n */\n get standby() {\n return this._standby;\n }\n set standby(standby) {\n if (this.isDisposed || this.standby === standby) {\n return;\n }\n this._standby = standby;\n }\n /**\n * The poll state, which is the content of the current poll tick.\n */\n get state() {\n return this._state;\n }\n /**\n * A promise that resolves when the poll next ticks.\n */\n get tick() {\n return this._tick.promise;\n }\n /**\n * A signal emitted when the poll ticks and fires off a new request.\n */\n get ticked() {\n return this._ticked;\n }\n /**\n * Return an async iterator that yields every tick.\n */\n async *[Symbol.asyncIterator]() {\n while (!this.isDisposed) {\n yield this.state;\n await this.tick.catch(() => undefined);\n }\n }\n /**\n * Dispose the poll.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._state = {\n ...Private.DISPOSED_STATE,\n timestamp: new Date().getTime()\n };\n this._tick.promise.catch(_ => undefined);\n this._tick.reject(new Error(`Poll (${this.name}) is disposed.`));\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n /**\n * Refreshes the poll. Schedules `refreshed` tick if necessary.\n *\n * @returns A promise that resolves after tick is scheduled and never rejects.\n *\n * #### Notes\n * The returned promise resolves after the tick is scheduled, but before\n * the polling action is run. To wait until after the poll action executes,\n * await the `poll.tick` promise: `await poll.refresh(); await poll.tick;`\n */\n refresh() {\n return this.schedule({\n cancel: ({ phase }) => phase === 'refreshed',\n interval: Poll.IMMEDIATE,\n phase: 'refreshed'\n });\n }\n /**\n * Schedule the next poll tick.\n *\n * @param next - The next poll state data to schedule. Defaults to standby.\n *\n * @param next.cancel - Cancels state transition if function returns `true`.\n *\n * @returns A promise that resolves when the next poll state is active.\n *\n * #### Notes\n * This method is not meant to be invoked by user code typically. It is public\n * to allow poll instances to be composed into classes that schedule ticks.\n */\n async schedule(next = {}) {\n if (this.isDisposed) {\n return;\n }\n // Check if the phase transition should be canceled.\n if (next.cancel && next.cancel(this.state)) {\n return;\n }\n // Update poll state.\n const pending = this._tick;\n const scheduled = new PromiseDelegate();\n const state = {\n interval: this.frequency.interval,\n payload: null,\n phase: 'standby',\n timestamp: new Date().getTime(),\n ...next\n };\n this._state = state;\n this._tick = scheduled;\n // Clear the schedule if possible.\n clearTimeout(this._timeout);\n // Emit ticked signal, resolve pending promise, and await its settlement.\n this._ticked.emit(this.state);\n pending.resolve(this);\n await pending.promise;\n if (state.interval === Poll.NEVER) {\n this._timeout = undefined;\n return;\n }\n // Schedule next execution and cache its timeout handle.\n const execute = () => {\n if (this.isDisposed || this.tick !== scheduled.promise) {\n return;\n }\n this._execute();\n };\n // Cache the handle in case it needs to be unscheduled.\n this._timeout = setTimeout(execute, state.interval);\n }\n /**\n * Starts the poll. Schedules `started` tick if necessary.\n *\n * @returns A promise that resolves after tick is scheduled and never rejects.\n */\n start() {\n return this.schedule({\n cancel: ({ phase }) => phase !== 'constructed' && phase !== 'standby' && phase !== 'stopped',\n interval: Poll.IMMEDIATE,\n phase: 'started'\n });\n }\n /**\n * Stops the poll. Schedules `stopped` tick if necessary.\n *\n * @returns A promise that resolves after tick is scheduled and never rejects.\n */\n stop() {\n return this.schedule({\n cancel: ({ phase }) => phase === 'stopped',\n interval: Poll.NEVER,\n phase: 'stopped'\n });\n }\n /**\n * Whether the poll is hidden.\n *\n * #### Notes\n * This property is only relevant in a browser context.\n */\n get hidden() {\n return Private.hidden;\n }\n /**\n * Execute a new poll factory promise or stand by if necessary.\n */\n _execute() {\n let standby = typeof this.standby === 'function' ? this.standby() : this.standby;\n // Check if execution should proceed, linger, or stand by.\n if (standby === 'never') {\n standby = false;\n }\n else if (standby === 'when-hidden') {\n if (this.hidden) {\n standby = ++this._lingered > this._linger;\n }\n else {\n this._lingered = 0;\n standby = false;\n }\n }\n // If in standby mode schedule next tick without calling the factory.\n if (standby) {\n void this.schedule();\n return;\n }\n const pending = this.tick;\n this._factory(this.state)\n .then((resolved) => {\n if (this.isDisposed || this.tick !== pending) {\n return;\n }\n void this.schedule({\n payload: resolved,\n phase: this.state.phase === 'rejected' ? 'reconnected' : 'resolved'\n });\n })\n .catch((rejected) => {\n if (this.isDisposed || this.tick !== pending) {\n return;\n }\n void this.schedule({\n interval: Private.sleep(this.frequency, this.state),\n payload: rejected,\n phase: 'rejected'\n });\n });\n }\n}\n/**\n * A namespace for `Poll` types, interfaces, and statics.\n */\n(function (Poll) {\n /**\n * An interval value in ms that indicates the poll should tick immediately.\n */\n Poll.IMMEDIATE = 0;\n /**\n * Delays are 32-bit integers in many browsers so intervals need to be capped.\n *\n * #### Notes\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Maximum_delay_value\n */\n Poll.MAX_INTERVAL = 2147483647;\n /**\n * An interval value that indicates the poll should never tick.\n */\n Poll.NEVER = Infinity;\n})(Poll || (Poll = {}));\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n /**\n * The default backoff growth rate if `backoff` is `true`.\n */\n Private.DEFAULT_BACKOFF = 3;\n /**\n * The default polling frequency.\n */\n Private.DEFAULT_FREQUENCY = {\n backoff: true,\n interval: 1000,\n max: 30 * 1000\n };\n /**\n * The default number of times to `linger` when a poll is hidden.\n */\n Private.DEFAULT_LINGER = 1;\n /**\n * The default poll name.\n */\n Private.DEFAULT_NAME = 'unknown';\n /**\n * The default poll standby behavior.\n */\n Private.DEFAULT_STANDBY = 'when-hidden';\n /**\n * The first poll tick state's default values superseded in constructor.\n */\n Private.DEFAULT_STATE = {\n interval: Poll.NEVER,\n payload: null,\n phase: 'constructed',\n timestamp: new Date(0).getTime()\n };\n /**\n * The disposed tick state values.\n */\n Private.DISPOSED_STATE = {\n interval: Poll.NEVER,\n payload: null,\n phase: 'disposed',\n timestamp: new Date(0).getTime()\n };\n /**\n * Returns the number of milliseconds to sleep before the next tick.\n *\n * @param frequency - The poll's base frequency.\n * @param last - The poll's last tick.\n */\n function sleep(frequency, last) {\n const { backoff, interval, max } = frequency;\n if (interval === Poll.NEVER) {\n return interval;\n }\n const growth = backoff === true ? Private.DEFAULT_BACKOFF : backoff === false ? 1 : backoff;\n const random = getRandomIntInclusive(interval, last.interval * growth);\n return Math.min(max, random);\n }\n Private.sleep = sleep;\n /**\n * Keep track of whether the document is hidden. This flag is only relevant in\n * a browser context.\n *\n * Listen to `visibilitychange` event to set the `hidden` flag.\n *\n * Listening to `pagehide` is also necessary because Safari support for\n * `visibilitychange` events is partial, cf.\n * https://developer.mozilla.org/docs/Web/API/Document/visibilitychange_event\n */\n Private.hidden = (() => {\n if (typeof document === 'undefined') {\n return false;\n }\n document.addEventListener('visibilitychange', () => {\n Private.hidden = document.visibilityState === 'hidden';\n });\n document.addEventListener('pagehide', () => {\n Private.hidden = document.visibilityState === 'hidden';\n });\n return document.visibilityState === 'hidden';\n })();\n /**\n * Get a random integer between min and max, inclusive of both.\n *\n * #### Notes\n * From\n * https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Math/random#Getting_a_random_integer_between_two_values_inclusive\n *\n * From the MDN page: It might be tempting to use Math.round() to accomplish\n * that, but doing so would cause your random numbers to follow a non-uniform\n * distribution, which may not be acceptable for your needs.\n */\n function getRandomIntInclusive(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n})(Private || (Private = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * A base class to implement rate limiters with different invocation strategies.\n *\n * @typeparam T - The resolved type of the underlying function.\n *\n * @typeparam U - The rejected type of the underlying function.\n *\n * @typeparam V - Arguments for the underlying function.\n */\nclass RateLimiter {\n /**\n * Instantiate a rate limiter.\n *\n * @param fn - The function to rate limit.\n *\n * @param limit - The rate limit; defaults to 500ms.\n */\n constructor(fn, limit = 500) {\n /**\n * Arguments for the underlying function.\n */\n this.args = undefined;\n /**\n * A promise that resolves on each successful invocation.\n */\n this.payload = null;\n this.limit = limit;\n this.poll = new Poll({\n auto: false,\n factory: async () => {\n const { args } = this;\n this.args = undefined;\n return fn(...args);\n },\n frequency: { backoff: false, interval: Poll.NEVER, max: Poll.NEVER },\n standby: 'never'\n });\n this.payload = new PromiseDelegate();\n this.poll.ticked.connect((_, state) => {\n const { payload } = this;\n if (state.phase === 'resolved') {\n this.payload = new PromiseDelegate();\n payload.resolve(state.payload);\n return;\n }\n if (state.phase === 'rejected' || state.phase === 'stopped') {\n this.payload = new PromiseDelegate();\n payload.promise.catch(_ => undefined);\n payload.reject(state.payload);\n return;\n }\n }, this);\n }\n /**\n * Whether the rate limiter is disposed.\n */\n get isDisposed() {\n return this.payload === null;\n }\n /**\n * Disposes the rate limiter.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this.args = undefined;\n this.payload = null;\n this.poll.dispose();\n }\n /**\n * Stop the function if it is mid-flight.\n */\n async stop() {\n return this.poll.stop();\n }\n}\n/**\n * Wraps and debounces a function that can be called multiple times and only\n * executes the underlying function one `interval` after the last invocation.\n *\n * @typeparam T - The resolved type of the underlying function. Defaults to any.\n *\n * @typeparam U - The rejected type of the underlying function. Defaults to any.\n *\n * @typeparam V - Arguments for the underlying function. Defaults to any[].\n */\nclass Debouncer extends RateLimiter {\n /**\n * Invokes the function and only executes after rate limit has elapsed.\n * Each invocation resets the timer.\n */\n invoke(...args) {\n this.args = args;\n void this.poll.schedule({ interval: this.limit, phase: 'invoked' });\n return this.payload.promise;\n }\n}\n/**\n * Wraps and throttles a function that can be called multiple times and only\n * executes the underlying function once per `interval`.\n *\n * @typeparam T - The resolved type of the underlying function. Defaults to any.\n *\n * @typeparam U - The rejected type of the underlying function. Defaults to any.\n *\n * @typeparam V - Arguments for the underlying function. Defaults to any[].\n */\nclass Throttler extends RateLimiter {\n /**\n * Instantiate a throttler.\n *\n * @param fn - The function being throttled.\n *\n * @param options - Throttling configuration or throttling limit in ms.\n *\n * #### Notes\n * The `edge` defaults to `leading`; the `limit` defaults to `500`.\n */\n constructor(fn, options) {\n super(fn, typeof options === 'number' ? options : options && options.limit);\n this._trailing = false;\n if (typeof options !== 'number' && options && options.edge === 'trailing') {\n this._trailing = true;\n }\n this._interval = this._trailing ? this.limit : Poll.IMMEDIATE;\n }\n /**\n * Throttles function invocations if one is currently in flight.\n */\n invoke(...args) {\n const idle = this.poll.state.phase !== 'invoked';\n if (idle || this._trailing) {\n this.args = args;\n }\n if (idle) {\n void this.poll.schedule({ interval: this._interval, phase: 'invoked' });\n }\n return this.payload.promise;\n }\n}\n\nexport { Debouncer, Poll, RateLimiter, Throttler };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module properties\n */\n/**\n * A class which attaches a value to an external object.\n *\n * #### Notes\n * Attached properties are used to extend the state of an object with\n * semantic data from an unrelated class. They also encapsulate value\n * creation, coercion, and notification.\n *\n * Because attached property values are stored in a hash table, which\n * in turn is stored in a WeakMap keyed on the owner object, there is\n * non-trivial storage overhead involved in their use. The pattern is\n * therefore best used for the storage of rare data.\n */\nclass AttachedProperty {\n /**\n * Construct a new attached property.\n *\n * @param options - The options for initializing the property.\n */\n constructor(options) {\n this._pid = Private.nextPID();\n this.name = options.name;\n this._create = options.create;\n this._coerce = options.coerce || null;\n this._compare = options.compare || null;\n this._changed = options.changed || null;\n }\n /**\n * Get the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @returns The current value of the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and assigned as the current value of the property.\n */\n get(owner) {\n let value;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n value = map[this._pid];\n }\n else {\n value = map[this._pid] = this._createValue(owner);\n }\n return value;\n }\n /**\n * Set the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @param value - The value for the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n set(owner, value) {\n let oldValue;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n let newValue = this._coerceValue(owner, value);\n this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n }\n /**\n * Explicitly coerce the current property value for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n coerce(owner) {\n let oldValue;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n let newValue = this._coerceValue(owner, oldValue);\n this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n }\n /**\n * Get or create the default value for the given owner.\n */\n _createValue(owner) {\n let create = this._create;\n return create(owner);\n }\n /**\n * Coerce the value for the given owner.\n */\n _coerceValue(owner, value) {\n let coerce = this._coerce;\n return coerce ? coerce(owner, value) : value;\n }\n /**\n * Compare the old value and new value for equality.\n */\n _compareValue(oldValue, newValue) {\n let compare = this._compare;\n return compare ? compare(oldValue, newValue) : oldValue === newValue;\n }\n /**\n * Run the change notification if the given values are different.\n */\n _maybeNotify(owner, oldValue, newValue) {\n let changed = this._changed;\n if (changed && !this._compareValue(oldValue, newValue)) {\n changed(owner, oldValue, newValue);\n }\n }\n}\n/**\n * The namespace for the `AttachedProperty` class statics.\n */\n(function (AttachedProperty) {\n /**\n * Clear the stored property data for the given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * This will clear all property values for the owner, but it will\n * **not** run the change notification for any of the properties.\n */\n function clearData(owner) {\n Private.ownerData.delete(owner);\n }\n AttachedProperty.clearData = clearData;\n})(AttachedProperty || (AttachedProperty = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of property owner to property map.\n */\n Private.ownerData = new WeakMap();\n /**\n * A function which computes successive unique property ids.\n */\n Private.nextPID = (() => {\n let id = 0;\n return () => {\n let rand = Math.random();\n let stem = `${rand}`.slice(2);\n return `pid-${stem}-${id++}`;\n };\n })();\n /**\n * Lookup the data map for the property owner.\n *\n * This will create the map if one does not already exist.\n */\n function ensureMap(owner) {\n let map = Private.ownerData.get(owner);\n if (map) {\n return map;\n }\n map = Object.create(null);\n Private.ownerData.set(owner, map);\n return map;\n }\n Private.ensureMap = ensureMap;\n})(Private || (Private = {}));\n\nexport { AttachedProperty };\n//# sourceMappingURL=index.es6.js.map\n","import { find, ArrayExt } from '@lumino/algorithm';\nimport { PromiseDelegate } from '@lumino/coreutils';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module signaling\n */\n/**\n * A concrete implementation of `ISignal`.\n *\n * #### Example\n * ```typescript\n * import { ISignal, Signal } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get valueChanged: ISignal {\n * return this._valueChanged;\n * }\n *\n * get value(): number {\n * return this._value;\n * }\n *\n * set value(value: number) {\n * if (value === this._value) {\n * return;\n * }\n * this._value = value;\n * this._valueChanged.emit(value);\n * }\n *\n * private _value = 0;\n * private _valueChanged = new Signal(this);\n * }\n *\n * function logger(sender: SomeClass, value: number): void {\n * console.log(sender.name, value);\n * }\n *\n * let m1 = new SomeClass('foo');\n * let m2 = new SomeClass('bar');\n *\n * m1.valueChanged.connect(logger);\n * m2.valueChanged.connect(logger);\n *\n * m1.value = 42; // logs: foo 42\n * m2.value = 17; // logs: bar 17\n * ```\n */\nclass Signal {\n /**\n * Construct a new signal.\n *\n * @param sender - The sender which owns the signal.\n */\n constructor(sender) {\n this.sender = sender;\n }\n /**\n * Connect a slot to the signal.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n connect(slot, thisArg) {\n return Private.connect(this, slot, thisArg);\n }\n /**\n * Disconnect a slot from the signal.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n disconnect(slot, thisArg) {\n return Private.disconnect(this, slot, thisArg);\n }\n /**\n * Emit the signal and invoke the connected slots.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n emit(args) {\n Private.emit(this, args);\n }\n}\n/**\n * The namespace for the `Signal` class statics.\n */\n(function (Signal) {\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectBetween(sender, receiver) {\n Private.disconnectBetween(sender, receiver);\n }\n Signal.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n Private.disconnectSender(sender);\n }\n Signal.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectReceiver(receiver) {\n Private.disconnectReceiver(receiver);\n }\n Signal.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectAll(object) {\n Private.disconnectAll(object);\n }\n Signal.disconnectAll = disconnectAll;\n /**\n * Clear all signal data associated with the given object.\n *\n * @param object - The object for which the data should be cleared.\n *\n * #### Notes\n * This removes all signal connections and any other signal data\n * associated with the object.\n */\n function clearData(object) {\n Private.disconnectAll(object);\n }\n Signal.clearData = clearData;\n /**\n * Get the signal exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return Private.exceptionHandler;\n }\n Signal.getExceptionHandler = getExceptionHandler;\n /**\n * Set the signal exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a slot throws an exception.\n */\n function setExceptionHandler(handler) {\n let old = Private.exceptionHandler;\n Private.exceptionHandler = handler;\n return old;\n }\n Signal.setExceptionHandler = setExceptionHandler;\n})(Signal || (Signal = {}));\n/**\n * A concrete implementation of `IStream`.\n *\n * #### Example\n * ```typescript\n * import { IStream, Stream } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get pings(): IStream {\n * return this._pings;\n * }\n *\n * ping(value: string) {\n * this._pings.emit(value);\n * }\n *\n * private _pings = new Stream(this);\n * }\n *\n * let m1 = new SomeClass('foo');\n *\n * m1.pings.connect((_, value: string) => {\n * console.log('connect', value);\n * });\n *\n * void (async () => {\n * for await (const ping of m1.pings) {\n * console.log('iterator', ping);\n * }\n * })();\n *\n * m1.ping('alpha'); // logs: connect alpha\n * // logs: iterator alpha\n * m1.ping('beta'); // logs: connect beta\n * // logs: iterator beta\n * ```\n */\nclass Stream extends Signal {\n constructor() {\n super(...arguments);\n this._pending = new PromiseDelegate();\n }\n /**\n * Return an async iterator that yields every emission.\n */\n async *[Symbol.asyncIterator]() {\n let pending = this._pending;\n while (true) {\n try {\n const { args, next } = await pending.promise;\n pending = next;\n yield args;\n }\n catch (_) {\n return; // Any promise rejection stops the iterator.\n }\n }\n }\n /**\n * Emit the signal, invoke the connected slots, and yield the emission.\n *\n * @param args - The args to pass to the connected slots.\n */\n emit(args) {\n const pending = this._pending;\n const next = (this._pending = new PromiseDelegate());\n pending.resolve({ args, next });\n super.emit(args);\n }\n /**\n * Stop the stream's async iteration.\n */\n stop() {\n this._pending.promise.catch(() => undefined);\n this._pending.reject('stop');\n this._pending = new PromiseDelegate();\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The signal exception handler function.\n */\n Private.exceptionHandler = (err) => {\n console.error(err);\n };\n /**\n * Connect a slot to a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n function connect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Ensure the sender's array of receivers is created.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers) {\n receivers = [];\n receiversForSender.set(signal.sender, receivers);\n }\n // Bail if a matching connection already exists.\n if (findConnection(receivers, signal, slot, thisArg)) {\n return false;\n }\n // Choose the best object for the receiver.\n let receiver = thisArg || slot;\n // Ensure the receiver's array of senders is created.\n let senders = sendersForReceiver.get(receiver);\n if (!senders) {\n senders = [];\n sendersForReceiver.set(receiver, senders);\n }\n // Create a new connection and add it to the end of each array.\n let connection = { signal, slot, thisArg };\n receivers.push(connection);\n senders.push(connection);\n // Indicate a successful connection.\n return true;\n }\n Private.connect = connect;\n /**\n * Disconnect a slot from a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n function disconnect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Lookup the list of receivers, and bail if none exist.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return false;\n }\n // Bail if no matching connection exits.\n let connection = findConnection(receivers, signal, slot, thisArg);\n if (!connection) {\n return false;\n }\n // Choose the best object for the receiver.\n let receiver = thisArg || slot;\n // Lookup the array of senders, which is now known to exist.\n let senders = sendersForReceiver.get(receiver);\n // Clear the connection and schedule cleanup of the arrays.\n connection.signal = null;\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n // Indicate a successful disconnection.\n return true;\n }\n Private.disconnect = disconnect;\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectBetween(sender, receiver) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // If there are no senders, there is nothing to do.\n let senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each connection between the sender and receiver.\n for (const connection of senders) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Clear the connection if it matches the sender.\n if (connection.signal.sender === sender) {\n connection.signal = null;\n }\n }\n // Schedule a cleanup of the senders and receivers.\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n }\n Private.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Clear each receiver connection.\n for (const connection of receivers) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Choose the best object for the receiver.\n let receiver = connection.thisArg || connection.slot;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of senders, which is now known to exist.\n scheduleCleanup(sendersForReceiver.get(receiver));\n }\n // Schedule a cleanup of the receivers.\n scheduleCleanup(receivers);\n }\n Private.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectReceiver(receiver) {\n // If there are no senders, there is nothing to do.\n let senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each sender connection.\n for (const connection of senders) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Lookup the sender for the connection.\n let sender = connection.signal.sender;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of receivers, which is now known to exist.\n scheduleCleanup(receiversForSender.get(sender));\n }\n // Schedule a cleanup of the list of senders.\n scheduleCleanup(senders);\n }\n Private.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n */\n function disconnectAll(object) {\n // Remove all connections where the given object is the sender.\n disconnectSender(object);\n // Remove all connections where the given object is the receiver.\n disconnectReceiver(object);\n }\n Private.disconnectAll = disconnectAll;\n /**\n * Emit a signal and invoke its connected slots.\n *\n * @param signal - The signal of interest.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n function emit(signal, args) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Invoke the slots for connections with a matching signal.\n // Any connections added during emission are not invoked.\n for (let i = 0, n = receivers.length; i < n; ++i) {\n let connection = receivers[i];\n if (connection.signal === signal) {\n invokeSlot(connection, args);\n }\n }\n }\n Private.emit = emit;\n /**\n * A weak mapping of sender to array of receiver connections.\n */\n const receiversForSender = new WeakMap();\n /**\n * A weak mapping of receiver to array of sender connections.\n */\n const sendersForReceiver = new WeakMap();\n /**\n * A set of connection arrays which are pending cleanup.\n */\n const dirtySet = new Set();\n /**\n * A function to schedule an event loop callback.\n */\n const schedule = (() => {\n let ok = typeof requestAnimationFrame === 'function';\n return ok ? requestAnimationFrame : setImmediate;\n })();\n /**\n * Find a connection which matches the given parameters.\n */\n function findConnection(connections, signal, slot, thisArg) {\n return find(connections, connection => connection.signal === signal &&\n connection.slot === slot &&\n connection.thisArg === thisArg);\n }\n /**\n * Invoke a slot with the given parameters.\n *\n * The connection is assumed to be valid.\n *\n * Exceptions in the slot will be caught and logged.\n */\n function invokeSlot(connection, args) {\n let { signal, slot, thisArg } = connection;\n try {\n slot.call(thisArg, signal.sender, args);\n }\n catch (err) {\n Private.exceptionHandler(err);\n }\n }\n /**\n * Schedule a cleanup of a connection array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any connection with a\n * `null` signal will be removed from the array.\n */\n function scheduleCleanup(array) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(array);\n }\n /**\n * Cleanup the connection lists in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupConnections);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty connections in a connections array.\n *\n * This will remove any connection with a `null` signal.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupConnections(connections) {\n ArrayExt.removeAllWhere(connections, isDeadConnection);\n }\n /**\n * Test whether a connection is dead.\n *\n * A dead connection has a `null` signal.\n */\n function isDeadConnection(connection) {\n return connection.signal === null;\n }\n})(Private || (Private = {}));\n\nexport { Signal, Stream };\n//# sourceMappingURL=index.es6.js.map\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.attributeNames = exports.elementNames = void 0;\nexports.elementNames = new Map([\n [\"altglyph\", \"altGlyph\"],\n [\"altglyphdef\", \"altGlyphDef\"],\n [\"altglyphitem\", \"altGlyphItem\"],\n [\"animatecolor\", \"animateColor\"],\n [\"animatemotion\", \"animateMotion\"],\n [\"animatetransform\", \"animateTransform\"],\n [\"clippath\", \"clipPath\"],\n [\"feblend\", \"feBlend\"],\n [\"fecolormatrix\", \"feColorMatrix\"],\n [\"fecomponenttransfer\", \"feComponentTransfer\"],\n [\"fecomposite\", \"feComposite\"],\n [\"feconvolvematrix\", \"feConvolveMatrix\"],\n [\"fediffuselighting\", \"feDiffuseLighting\"],\n [\"fedisplacementmap\", \"feDisplacementMap\"],\n [\"fedistantlight\", \"feDistantLight\"],\n [\"fedropshadow\", \"feDropShadow\"],\n [\"feflood\", \"feFlood\"],\n [\"fefunca\", \"feFuncA\"],\n [\"fefuncb\", \"feFuncB\"],\n [\"fefuncg\", \"feFuncG\"],\n [\"fefuncr\", \"feFuncR\"],\n [\"fegaussianblur\", \"feGaussianBlur\"],\n [\"feimage\", \"feImage\"],\n [\"femerge\", \"feMerge\"],\n [\"femergenode\", \"feMergeNode\"],\n [\"femorphology\", \"feMorphology\"],\n [\"feoffset\", \"feOffset\"],\n [\"fepointlight\", \"fePointLight\"],\n [\"fespecularlighting\", \"feSpecularLighting\"],\n [\"fespotlight\", \"feSpotLight\"],\n [\"fetile\", \"feTile\"],\n [\"feturbulence\", \"feTurbulence\"],\n [\"foreignobject\", \"foreignObject\"],\n [\"glyphref\", \"glyphRef\"],\n [\"lineargradient\", \"linearGradient\"],\n [\"radialgradient\", \"radialGradient\"],\n [\"textpath\", \"textPath\"],\n]);\nexports.attributeNames = new Map([\n [\"definitionurl\", \"definitionURL\"],\n [\"attributename\", \"attributeName\"],\n [\"attributetype\", \"attributeType\"],\n [\"basefrequency\", \"baseFrequency\"],\n [\"baseprofile\", \"baseProfile\"],\n [\"calcmode\", \"calcMode\"],\n [\"clippathunits\", \"clipPathUnits\"],\n [\"diffuseconstant\", \"diffuseConstant\"],\n [\"edgemode\", \"edgeMode\"],\n [\"filterunits\", \"filterUnits\"],\n [\"glyphref\", \"glyphRef\"],\n [\"gradienttransform\", \"gradientTransform\"],\n [\"gradientunits\", \"gradientUnits\"],\n [\"kernelmatrix\", \"kernelMatrix\"],\n [\"kernelunitlength\", \"kernelUnitLength\"],\n [\"keypoints\", \"keyPoints\"],\n [\"keysplines\", \"keySplines\"],\n [\"keytimes\", \"keyTimes\"],\n [\"lengthadjust\", \"lengthAdjust\"],\n [\"limitingconeangle\", \"limitingConeAngle\"],\n [\"markerheight\", \"markerHeight\"],\n [\"markerunits\", \"markerUnits\"],\n [\"markerwidth\", \"markerWidth\"],\n [\"maskcontentunits\", \"maskContentUnits\"],\n [\"maskunits\", \"maskUnits\"],\n [\"numoctaves\", \"numOctaves\"],\n [\"pathlength\", \"pathLength\"],\n [\"patterncontentunits\", \"patternContentUnits\"],\n [\"patterntransform\", \"patternTransform\"],\n [\"patternunits\", \"patternUnits\"],\n [\"pointsatx\", \"pointsAtX\"],\n [\"pointsaty\", \"pointsAtY\"],\n [\"pointsatz\", \"pointsAtZ\"],\n [\"preservealpha\", \"preserveAlpha\"],\n [\"preserveaspectratio\", \"preserveAspectRatio\"],\n [\"primitiveunits\", \"primitiveUnits\"],\n [\"refx\", \"refX\"],\n [\"refy\", \"refY\"],\n [\"repeatcount\", \"repeatCount\"],\n [\"repeatdur\", \"repeatDur\"],\n [\"requiredextensions\", \"requiredExtensions\"],\n [\"requiredfeatures\", \"requiredFeatures\"],\n [\"specularconstant\", \"specularConstant\"],\n [\"specularexponent\", \"specularExponent\"],\n [\"spreadmethod\", \"spreadMethod\"],\n [\"startoffset\", \"startOffset\"],\n [\"stddeviation\", \"stdDeviation\"],\n [\"stitchtiles\", \"stitchTiles\"],\n [\"surfacescale\", \"surfaceScale\"],\n [\"systemlanguage\", \"systemLanguage\"],\n [\"tablevalues\", \"tableValues\"],\n [\"targetx\", \"targetX\"],\n [\"targety\", \"targetY\"],\n [\"textlength\", \"textLength\"],\n [\"viewbox\", \"viewBox\"],\n [\"viewtarget\", \"viewTarget\"],\n [\"xchannelselector\", \"xChannelSelector\"],\n [\"ychannelselector\", \"yChannelSelector\"],\n [\"zoomandpan\", \"zoomAndPan\"],\n]);\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Module dependencies\n */\nvar ElementType = __importStar(require(\"domelementtype\"));\nvar entities_1 = require(\"entities\");\n/**\n * Mixed-case SVG and MathML tags & attributes\n * recognized by the HTML parser.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nvar foreignNames_1 = require(\"./foreignNames\");\nvar unencodedElements = new Set([\n \"style\",\n \"script\",\n \"xmp\",\n \"iframe\",\n \"noembed\",\n \"noframes\",\n \"plaintext\",\n \"noscript\",\n]);\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n if (!attributes)\n return;\n return Object.keys(attributes)\n .map(function (key) {\n var _a, _b;\n var value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case attribute names */\n key = (_b = foreignNames_1.attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n }\n if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n return key;\n }\n return key + \"=\\\"\" + (opts.decodeEntities !== false\n ? entities_1.encodeXML(value)\n : value.replace(/\"/g, \""\")) + \"\\\"\";\n })\n .join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nvar singleTag = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nfunction render(node, options) {\n if (options === void 0) { options = {}; }\n var nodes = \"length\" in node ? node : [node];\n var output = \"\";\n for (var i = 0; i < nodes.length; i++) {\n output += renderNode(nodes[i], options);\n }\n return output;\n}\nexports.default = render;\nfunction renderNode(node, options) {\n switch (node.type) {\n case ElementType.Root:\n return render(node.children, options);\n case ElementType.Directive:\n case ElementType.Doctype:\n return renderDirective(node);\n case ElementType.Comment:\n return renderComment(node);\n case ElementType.CDATA:\n return renderCdata(node);\n case ElementType.Script:\n case ElementType.Style:\n case ElementType.Tag:\n return renderTag(node, options);\n case ElementType.Text:\n return renderText(node, options);\n }\n}\nvar foreignModeIntegrationPoints = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignObject\",\n \"desc\",\n \"title\",\n]);\nvar foreignElements = new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n var _a;\n // Handle SVG / MathML in HTML\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case element names */\n elem.name = (_a = foreignNames_1.elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n /* Exit foreign mode at integration points */\n if (elem.parent &&\n foreignModeIntegrationPoints.has(elem.parent.name)) {\n opts = __assign(__assign({}, opts), { xmlMode: false });\n }\n }\n if (!opts.xmlMode && foreignElements.has(elem.name)) {\n opts = __assign(__assign({}, opts), { xmlMode: \"foreign\" });\n }\n var tag = \"<\" + elem.name;\n var attribs = formatAttributes(elem.attribs, opts);\n if (attribs) {\n tag += \" \" + attribs;\n }\n if (elem.children.length === 0 &&\n (opts.xmlMode\n ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n opts.selfClosingTags !== false\n : // User explicitly asked for self-closing tags, even in HTML mode\n opts.selfClosingTags && singleTag.has(elem.name))) {\n if (!opts.xmlMode)\n tag += \" \";\n tag += \"/>\";\n }\n else {\n tag += \">\";\n if (elem.children.length > 0) {\n tag += render(elem.children, opts);\n }\n if (opts.xmlMode || !singleTag.has(elem.name)) {\n tag += \"\";\n }\n }\n return tag;\n}\nfunction renderDirective(elem) {\n return \"<\" + elem.data + \">\";\n}\nfunction renderText(elem, opts) {\n var data = elem.data || \"\";\n // If entities weren't decoded, no need to encode them back\n if (opts.decodeEntities !== false &&\n !(!opts.xmlMode &&\n elem.parent &&\n unencodedElements.has(elem.parent.name))) {\n data = entities_1.encodeXML(data);\n }\n return data;\n}\nfunction renderCdata(elem) {\n return \"\";\n}\nfunction renderComment(elem) {\n return \"\";\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = void 0;\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for

      6^gt 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 qvJ~4Tv-`jLg9rbg&jR@$K@XHZN5f%y8(= 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 BGgbfq literal 13399 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 diff --git a/tests/test_graphical_units/control_data/transform/CyclicReplace.npz b/tests/test_graphical_units/control_data/transform/CyclicReplace.npz index cb93772e70433dcc0add84c1487ef215631d3138..bba12ff013855bd8875b591c8b34eca991a1120d 100644 GIT binary patch literal 18747 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 literal 18791 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 z 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 r4;YF^h7Wl7~$*>w>64SM>?lPMm#eY~`2Z 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 diff --git a/tests/test_graphical_units/control_data/threed/Y_Direction.npz b/tests/test_graphical_units/control_data/threed/Y_Direction.npz index 5d72dad8dcaa363030c22155614c9dc541ab1c9c..b4f0b39e545a718015600c7de5841f98a09a1ac4 100644 GIT binary patch literal 88858 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 z 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 literal 88891 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 Yf7^mG*?r-IFmnd~f4I$S_^0Q80V=CT2mk;8 delta 3833 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 UtUu>%vSzdC|3BT*9&C317i711MF0Q* diff --git a/tests/test_graphical_units/control_data/mobjects/become.npz b/tests/test_graphical_units/control_data/mobjects/become.npz index 4980e9d1d8c416e2da5323cb764830468d2c4360..afd7ee89dbcedfa78912a6491890fa71ce1146b2 100644 GIT binary patch delta 43 scmeA+>Nb)J@MdPwWnf_70AfXkKg;9J|A&H&Qi~;+bs2OgACT|{06xkP?f?J) delta 26 fcmeA+>Na8x@MdNanS4M(e51@l31$&y5ZfC7VEqRo diff --git a/tests/test_graphical_units/control_data/mobjects/match_style.npz b/tests/test_graphical_units/control_data/mobjects/match_style.npz index dcdad6d328e2c40ed43fd7a8afe6526f7651f40a..caed3f85b02297fa067182728cd1d41d25df0d7d 100644 GIT binary patch literal 9089 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 diff --git a/tests/test_graphical_units/control_data/mobjects/vmobject_joint_types.npz b/tests/test_graphical_units/control_data/mobjects/vmobject_joint_types.npz index 8f668025d3493047a79fc7417d536e870e7049e1..15bf7bb3325379991709bc73ff0192b66ae6dab4 100644 GIT binary patch delta 43 scmaDX_E=0Rz?+#xmw|zS1BewFT3J5W|A&H&Qop&Fbs2OgOK^Jw06KvW;{X5v delta 43 xcmaDX_E=0Rz?+#xgn@y91BewFT3J5WU*uw7Xke9O*eLazi&=zOWU>UeHvr8=2^;_b diff --git a/tests/test_graphical_units/control_data/modifier_methods/Gradient.npz b/tests/test_graphical_units/control_data/modifier_methods/Gradient.npz index 435fa88780c6ff1602720b7cf1e0a4d9c142dd59..93b1b45b248f09b4cc315bbc2bddb0a50a26a845 100644 GIT binary patch literal 4955 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 W=DZ9{8W3m%T97?>e-B1b2>LfdvR@GZ literal 4989 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 diff --git a/tests/test_graphical_units/control_data/movements/Homotopy.npz b/tests/test_graphical_units/control_data/movements/Homotopy.npz index 8d80b520425566d212b6bc317ea932dcf63fa5e7..223fb76fa7d4f9cbdfc5f11105388f5a788eaffc 100644 GIT binary patch literal 16160 zcmeHO3s6&68V;?NZQYUWlkJF5JG*5^Tj-ACg5=e1J7sp+iepF73Z#y;X~hsRk_UNQ zTF13rRx(}3vMz+|EOo6SL}ej_8xkLDvx+A50WstSMz})Ay@ZhWmYbUvu6g8g+w`%5y2e*NX;{5u z?8JQJ7=Qiy=GE_SXy`F#^wiaSwRqm=YtBA)s;=#N?R)MukH5%w|D|qd#lckeZ!4dm zMhCKAU2^#CjE^iIX)t42`QoSkiQ}HwVp^KOE%#-G5h&OwY*rzrR5^dD2=`6zl2Rsz z@Q6Pfe@F-u?CNw+XSXj*fjDJ;fpGquVJk3~zLAux3Zm zl>Fuvc>KbF<>s*~hjbfd=+aua?^4-X6Z&rM$$6cwcJCv9SZz)Y?)@GVnxo&mk;WpE z$&R*Fyk}2ZM{c$sp%U`YiTzfkj3zE%R?Da1)cZ@d?$f*Zl?v#*QYMo%^@}fKnY9j+ z)oT5dVVpL`OFQY#u&!n5n@p?ZG^%ZUXGw~stR6jbo@=a0dFd+_uPyz(PX?2Nd%p+y zgXo^jnh(t;)AQ`=o>mf?Q^;HEssi$$qA;d$O^;n!*&6=RPQ6c+?0&ngN%T1I?9a+) zRDNYot6oM{x?HZk$^z?J60e~JK61j^Szi12R&$wi{$Kyzl^o2~9t?d5S4iO}hR~|< ztA|-^c5c#{-+}qqsI;lirQ1r{OV7>17U0iWRKy^+`}}?YT%5DtCw2TsGi{*bcD`e; z>-_#@vlylq6JuRktvrD|??B=Y^HeMopg{BR@Fx8XUYS7AN@s9Dsp(vtk@06`fpHed zgLt_GuIME_eYFc7Sn%rWtmI&>_TbbdEN~Paw^yW#;AOrRU%t~kuf!^^_R-3QHu&7L#!)PaN~2= zgsB6&=8)1gE(~KRW1?&tPlg#*9Q~FXNSeiuldJ=?aL}}P6jQdAC^VZD+E|D?a(;gW z9s4)Z#)vvuk0v9sw6%ff{VE5}+H(Q)qZ>D?7{wqNMvRQjpT z3?&&E=fj%s@IeC}3&&6flfPif#l9}T&Zv!f&9nxG?eoSh|WlZflbL7f>ae=Zd4b6q}IWQ+!MbQ?fm>@lG|Y~#AGpWPT5&C{v? zOtxGu(M;`ko!-5`D6ygb0mOm|2Ub?{^!-(vjS14v=GXYk;N`aQAR^bg7Ej4A5z@u` zPZ|_BW40|(^!f%n;muLC6>Br7tp1}M3)qxOCBZY&aXEnoyr6XxD1a#b+kF&lq)cY39Ot&U9fP8KL=AuEU3#2Xjihk5Tc6$E?&w zU9PYlkNL)16_wh++1#$ahFk(8nZ zVq^od9@!v2u2^CIqILvR!X2b09x%3#sMCIg{rF4!JL zeS6uW&EcsAt(qF0zG8m5m{R4kzb2)HZgNL29B?_Z@IWVoh$eSsseM?}NECx`#z>Qs zBh_pc+e0>Q)S2O=I7^)(XOmOyv^XQJo4rTd`yXziCc+4N)BZ8Gp_}#dr`~jAZGX1q zr%QXbKKV=|Yt5IXzgQ1nGkuzJ{F$rI(cF_CZ?UO_6!i{>sW%kpC2z%znsXC6ZFr5c!6Vm zqH3EcWIY$B$nMf#PC+NEz(9oci}ETnu08MyA z_|h#?sCTGC;FR4hS<#z;Q)!azBJdkc5jT%oUIEV?jh}fMT9BEh4)4 zMpjLLicEi;CK|%~RvNUz;PVI~lM5v=LA{59sQ%AA2z;ROmwd!`Aixd`rPBEpn3s!8 zXi!k9?k_DZ%|JXrHq(Qc6yM$95$RDUpvg)vj?8pv+ynKV8zXuEuL2B}h<*-Ruh63> zn3#PdyFmKcY0oka#|4&D6^6mS`SRZ92Y>gwtoTCdtWuu-=wHLZQ(BH-DM;!rG#4{*Q~ zICW@i4tAu^B>~ByzYEI-UaZjWi{9vvM<>i0d1(#E6Y9-MHpA4Qjf^-zwLA@?=`oqy zqoCmwV+-(?(GPVduc9V}kF>@+Lmoh-y_>g>`pJwue58#TNtsa1}T|`QX;{8El;A?h9aI) zX|spoZ&}PVR%PNpZK6frq*wJhndypf-g-7t4g+{t~Isk5Xs0 z+tK8l2$YDK{%TPDX&=3Q{d&F}19^b1D7Sa|8=l4^bD&nZ#797IesH7#kabYRv4__m z^i)Cqh+4POZsM4@+-8GGYz2K^ttxfvQli=A-eJMHF^LE2Dt)dP5D=t}g`8=b#1>pB6?SzXCtMSt6_2vP27GlUkoIM>$kS-2ptj!d z`f^EdL^pMQnS!Ej)yt(}IQ|d$B10StJ=`XC`>Wr+wwNBBjt5wCHqHGR@TH4z4uZt8 z5gM!rgU;X;>FMc(?v*ox23|i0v@~C{vuH856fd;1V(%ab9X()3K%c3Z+Ux_RoAJ)h zyP6En&GJD^qyxT$2!&bZLVD=Zx6&gcR5EDqEB>MnKH}?cB{gRhQ@vNUQR}FQDUT{O z=7_RMj$_TyBtpG?TTye=pu|T9-ly?fD4CN}?+JPpkl3PyAe%`*n+;P*LzsJPoTCiy zp+| z1Os^^A*+X4jcKMR^qr{A@O#L!#;JAI0kLf_qr_f{aOyZIKeCtq|_{NYz4eV zRoLfh>InBFk2u|?vQO&W6CH+3w%Ywx!a)Frr@K2}kAOab0?5hR+l z?o!R~`-S`95v=!aEe+-~aHzV^MLk6Q1cd1wD7uR=aW1>Y|iKULoCj no}DoD7$!A1D6wZ`cF*i<*L8sW&3QU}q=HQfKYYg0(d^n#m!dKi?;3aQBlJJf^i=V8pWL4e!>~dGvaWNx(etc!DK`2J;p{K$eTaF-KfVX}b z!>6XEE|W^tO?$TsNko%gN-9J43yHWyF|%M-w@kb0CtDB7${^h8+wp^MYz!O+kz)jT zPf>5pTYX(40PP1@-c#njCK7kcBHfHpc*UAormW4IH=k&3Zf@!dUDTx29T}gPDAL+a znZr|;At;Xa*zjwB_9VXlT1jbX>6d7?7n*zDq0?=PK`Pc@6`S_-rzk&Omv^G0qvK(; z|4y@%tU8Rlj>kFq^5i9epnLA!EGa81TLSpFtnKXv*|%d8NU>-LORictQW zh}Y+z@I}yHU(-(mS>RIKF_te!2afT%?W};h4^NYa3)pwxOFjX(sT1u>6H4SdJ8L0_ zU6)tC5hP!Up1Vo>+U&~7>on)>^E*}3Bdwi#Fbn4|L#$N)9EbR z!gNhk%{#`8!cfE%%nori!L$%$)4Okp784bzPg}@@KO`e}jwHF*M|0=L4unk4nK2YW zpkK7GT~ed$KtyVWiN4!A0gPr&A5GIE#jp&P7x+3BWW^YDmzXx|sI%KpUf9A%18qfp zweAg?T<>6X1_v4`Bx%&0e?~<87S;Ux{2>X?)g||S`rfJn$Sl^7*rOrLuO#z!Ssp5C z*u7Q)pOsxbHCUw~A{$FJEzqr%Nx2oHko&WB4Mkql9{5s$DMhE^A(kMilcVr)vA+Gz zeIc#d_oYw_$u3+rc2VoT^|qnd{^TG2)Ez(grpDlPx{U8@qh)BwSXczYJJou!v}G@Y z!4UOS-2F7_(7HLlrGa2D7<9&@hd4j_8G^$$3k!kBHn*USJ@lH<3xXDCKV>>Qcfv2mIc(X^W z(eoY^4Xu*aOn>1CnK2#Hnd?VdbFaPe-Gv8-?eaILJ*ZJn@NW{#92 z7|jf?CkJkN9AXXL3@jJWx%NWUkt9;j0yPNR$O_KPPT@XRuU%w4lODNWzN8{brBYcy z5g4MMpkYCsO2bFJ);w}>7(^#ACuA^FBoe=WgJ0vKfvs zj|q`85p%Z0$S}AR)w}6zg8_X3X4yL=)IhyN5pl}QAwWgw2$AIefZ~wrf;>CBC5Ks# zKnia&>|nGL75)JNBg6wYbIpsss$BhFs#9TQiu$cTmDx8xeGR|$z=}8j-Er%?&;Ky_ z?|<~px$$3K{L#ywh=0(2u_-pHa{PfS)JaP5y z=YHvU<3C<}f3wZ<^x*G@*KGPHdEZGhcWuwunBi3X9ZjV=paRTES zUUwL*KQ=NF+NM(z?(b6gx!Fv zr5O>x{~T4mnNe##E%?Q7H5W+EMRH&p9=L162_d+#%BvwOCgfapV6>Ch6`sme>_x#X z@xZBt0tFU<)f>Jx^gU)LOskV}XZx$XQ$tN%>=8JvZX_C!wf6Utsbl_to3|%NSLQU$ z$rA6>)NA5>BFohtV{!7LqQj|7dcB0Pr46SRB&OBAZm}s}Xg8kXA&(ho{}PWo$c&~8 zGMS7?1i7C|tyUK&k;Ai~RC@?ek>t(j1pSbEasXr9$V+40`v)Zmkb%|BWym>U%A${$ z+U&Elv#*(IEgx-)L_q&ZpoM7HL(|Np{^?ZVE~SBM<|560l9Uthd;mATR3K{dld|Wp zucmBdv)Qflw|7!9LZMI|)?#Jaxh5BCuZDctIvcM{srNA;9A|bkUdsH&N|}pgTFMYN@P{r8| zCF=kNqHAc2K84;_c}_ut3IyVB-wF33CN_m51Xa@M>&VS0y*&drV*djW3PeTO?j}HV zNyC)@LkGjg6@LlDKQ{lP-@ux^nkdjw+0J(hXxu~DSy@?)0_x$nq}fAS zi{%^^NPZ5Rxt>NLr$7TS=t1MkiY-9w$#?IQWky^HSh(JL7O`uv{P`mD>&c4g3si_}I7$V&R${FvQ zSf+k%r6JNN48IYj2(@Lcfb($zKyHwO8M+rw&mJA^{fWwfW66SrKDY;3#P1$LcmpYT zA7p4hGwB!frnn-p3>$WU*4S3ii3h0>Xft0RP5$-^#nCsGsD`iA?p7~^q(`6k$NEZ6 zMKswMct~UeMXsuGqcOTYYj;8uL0P)1B;MJ)EZyBe4$$GF`F-V*RY})gKw{I8qkAxcAD0w0iyGu-&QYmPiD?ULYWW3LY73S)nd*_-fAX z_?DGr+NqODN9>&nIhdws6aU^PE94WPp07etUW~Gq9d7=P{Dc*2R({RM@}GPv`e_3A&IP~u3tRI43*X9PVgLXD diff --git a/tests/test_graphical_units/control_data/movements/MoveAlongPath.npz b/tests/test_graphical_units/control_data/movements/MoveAlongPath.npz index cc6f427524616bc3ecd3a2c87550ff7bd9211101..f8f0570744d781ddea819a98d7e14893a6d2bd6e 100644 GIT binary patch delta 43 scmX>geLz|&z?+#xmw|zS1BewFJ{Fz7{~roAN=5K8>oVw0F6H$G07=6TzW@LL delta 43 xcmX>geLz|&z?+#xgn@y91BewFJ{Fz7ugA;4;BZo#VWU(8FS7`<$mCL9ZvfbQ3GM&@ diff --git a/tests/test_graphical_units/control_data/movements/MoveTo.npz b/tests/test_graphical_units/control_data/movements/MoveTo.npz index 6a3268d11f21f7d4e66a8664f0afe863c990c8bf..de7f30093ff7921642a528eaea5dd37f9792aa7b 100644 GIT binary patch delta 43 scmaE(^+ro7z?+#xmw|zS1BewF?jJpu`X355O0kGC>oVw0RuuIH093*dV*mgE delta 26 fcmaE(^+t;|z?+#xWU`{D_(mBfQDzZl5ZfC7V88|L diff --git a/tests/test_graphical_units/control_data/movements/PhaseFlow.npz b/tests/test_graphical_units/control_data/movements/PhaseFlow.npz index de58b1451e30180bda48935c9ee3dbd985b14975..8e087323d162c119a5206fb709bf773f85b6a91a 100644 GIT binary patch delta 43 scmX@3e@0&_z?+#xmw|zS1BewF!UG;2_zwjerBcM1bs2OgH;Q`$079q`VgLXD delta 26 fcmX@3e@34*z?+#xWOAdp_(qu|ab^)_5ZfC7W+DdO diff --git a/tests/test_graphical_units/control_data/movements/Rotate.npz b/tests/test_graphical_units/control_data/movements/Rotate.npz index f0b4956518e75588a9ae1d480e3e189808a151cf..43e5b3afcd4f2e89f608d369c0214b2e50ac6217 100644 GIT binary patch literal 12752 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 DwNqtV diff --git a/tests/test_graphical_units/control_data/movements/Shift.npz b/tests/test_graphical_units/control_data/movements/Shift.npz index b7dfd8d9807a876a063ef7b154fc424b90465e44..2cd4fd992db314db5009b044f1e4c519f0ee989f 100644 GIT binary patch delta 43 scmX@3bw*1nz?+#xmw|zS1BewF9<&zi`VR#grJjf|>oVw0W)$@X089c9oB#j- delta 26 fcmX@3bw-Odz?+#xWHO_u_(qvWBFsPtWP1YuVD|=1 diff --git a/tests/test_graphical_units/control_data/numbers/set_value_with_updaters.npz b/tests/test_graphical_units/control_data/numbers/set_value_with_updaters.npz index f0cbfa5f65453d8604c6574cdfe9533aceaca008..9f2ab8ea3707f12b90b0701436d43aae084abd22 100644 GIT binary patch delta 6144 zcmeI0`BzhC{>MSws#U&I$D$}Oj$^4ZfEJOmCAQX5%BIzT0!dU<1cV?VAlWXhGtj98 zs!>pu#HnJC7*d3QEJ;+VC|iIKwm>3chyg-?EI_t9Ppq9e^A~)7nViEpgu}hhz0dRc zyx*_STOFg0aXb`ax7^*v#%4A6*=F-yjng3f?sLV_3$pv(;n%evFYc1A`LOolRK*wN zZ*0D?i$3gzaa(iA+5H2;`+vOKS+Sp8!DXMGJh8PTG1&D?EvDj9Fx&e`S+vf+?5Nk( z{LawOC?(P+fC1;#d+giNh0Ie!b8hZ9E>YI*yOG=$a9XM$3`* z^$n-TWaO;FFSarKXMZZGGIngsb-DPweBiIg8(;r?aBbD`v=>iI2JL13yw6&AK__T1 z{hZ`rQS0HG#KmuE`M!o(yMmiqK~n2h@V(vM1jpu(Cyy|`rp>K%_|twox32E4ZfYQx zhW9a!*mZl|4k`%G8v5nr0g*8X_nd}V-AH4)Zd$Gqz!qAI>-qQb6CJ_v^sKYdO&Q5F z|Bn&A&$s2?X?1~``GIM#pKG72_3YztJb2pPTJqAoVR3q>MpTw59nxyv>)xWRoKaOo zu`xWqQ3y8E9(=qTy0Is&SAr9a%6Xq>Uwwlbl^o{y8K-MlB#5gzeEUmOD^h;#h~IPx z31x9l?7x3JVWQ(^!tBe(x@t0Zwm$}!JP6;6rw13IGmdjD7NeRuUV!8y3S}il7sj7? zn@g9O%9SW5RlSUgvae{EZ*vo^aER@mjgC?ajl8*M&=zsP5Bj*JPaD*7U3FaRT_&Bl zi(6ZJRMOyyhRnKkMp(;4hWU)79^iR~74N-=C{*v6I5YqHMHrH410@hqK~Y!=Au%b5 zB>{WZsOB3TF)ojS7hl9ke^IJdXt@-|Q&ZIPd#ptU81ZqOFtAZk{4kyYy~O%$lcI;1@fut=B?@7pV54Gxj-&RD%tSzlD*@^ zKNU&b5!pPEe!GW?k%4N96sQ+W8X?n@Jhm2Wrpr7yrGy(Hs}JqsRgy+^m8LDInS)$a z03$%gX{Wrtj5VFoNl+HbPFc)-6^+w^$&z1B?+tcENg9N5V>Wk=q91Yv#~z}?Tw}-@ zRdtfdaY#{?iHWXHL38Plu#F+IG`u?hmDq*&Hf=I=u>N@U?!LvN8|{&mKR zEXY}BF)~9Wg-iR#?eY@BJLVcdL|f4j>07_G#uZ`Jw1pZYmi zY)!^rx7%J_h4A<|1bn~|u60$U=o?nuivO~}xom!3D~e!tmiRb$Dmp^CMyK)i`-Oc( z)HT|zm7mal+89R@tlR*7AK6rLJ+u4PXJNwiv%%$21a?py{LwK4?W3@_k6kn_ z4A6uc#_XXRGfirKE!Avj?Ct@Cd!M%0A^HY+BNYuI>n_ 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 esE!*!R*C__eV*ri?)$ghsv=d9 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 JfKu&_{9o4g6jA^H diff --git a/tests/test_graphical_units/control_data/opengl/Circle.npz b/tests/test_graphical_units/control_data/opengl/Circle.npz index 5dd50f220e2203efc3b5feead02d15d590252e51..8cc6e43c4801065b36ea1a0476927b88df37224a 100644 GIT binary patch literal 6546 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 literal 6611 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 S6#v}@zQ8C6`B`1@*FOLah$|fc diff --git a/tests/test_graphical_units/control_data/opengl/FixedMobjects3D.npz b/tests/test_graphical_units/control_data/opengl/FixedMobjects3D.npz index 2371dbfaeb98f707ba537e12ebd33f970d955de6..204e542a8d79941394c85633be586d3d35554820 100644 GIT binary patch delta 43 scmdnWx0O#Sz?+#xmw|zS1BewF-W@*7`5y{4N}Xk6)@9J0{EE#R06Yp1*8l(j delta 43 xcmdnWx0O#Sz?+#xgn@y91BewF-W@*7xtNWCp@CJBVWZSpHf9k9k;$*vyaCGC3EKbw diff --git a/tests/test_graphical_units/control_data/plot/axes.npz b/tests/test_graphical_units/control_data/plot/axes.npz index 1024168f80cc3956e196eae637b466f8800396ff..a013b9a0068972792b82923dbceebf63f0fe2a93 100644 GIT binary patch delta 1825 zcmZ8i4Ny~88ohx6ilx-CEIS~mTf33Os4ZyURFzy;s4INvm_MQd-F4$iff_|e!Ib&ohUwrRKZ>uakc0tn0TXU|lB96=-FJ;IS=C+= z29kT)_wtH0oa%#WGyu_%Zc^Nx(=3m2+FF!UDz#LdTM3(2A3TWGSlNmcG<2{lhoodvK=scV)lgTtg5&GH^0_?CEhhuy>+uGaPDKek13P}`_oI4Pq z9f{kLuv=<7TfF?pUok(Q!?e2x!rhA^Y@Vv)2O|wBm(pmf)jqiB?m;?+j6$o~NsOyk z{cBTD01SSuYvr!&J-?KxU0A@+S9ROEO;I20+fl69MKmFx1rAf5Q){ zX`v~CclMMA0K+w!A?_N{=JED7Up8^pO&D6kUQg$dprKZTwC2oj*za%DL1V!d`Ak&W ziUU#5U&W4iK9`uZ1$J2Gj;wKgTC>=Sk)oHDrewMDx=4*lnX#LYIQD|DpY2j4A`0Zt zbGcbJUOg1P(AtsJSN3rFQK=%0EFN1*cS((g!&t?~D%A_-zAf;r+iCZkCMPGSBZd5a z=QD+ZxhQoyrXx*ekMK1*$esc@EDOG;ji~;=y8*|?z-usC8H_y$? zKfb^Gy~Gm*i=M7W*Y44!CMG6otnQ#bbRHub5h~MJ=`_=r@mYbK<4bt8HFD*btlY(C zU9qIR$sRo8%9UGlY?z>XDnJuUmLGBS{@}uC1w>&n0>hfn?2=D#Cpzz(r;i>$bH4HN zZJL^z>c|_v*O5OVnl`cWMIk}ql$Lq^UGuvDjuvV#q674m3U*9_*s0guS0CE6X_KZh zIsHaSp3`9ufv=R6RY}MIa1)Y85)4%55W)K5l2ZC=y0o!@FLkW`N0~3N%uYKQ8+LWp z8)@#~aGvOLemP9n{tI1~b6(umwmS%acDsFLoUG~Hl(>_|M*2ON7<<3lW*C4=1zfWl zmKw##F5aN{P2>+$;bN1YtJfc2Ne5v5YlNyACdE2BXKT(JRBu3<|3LD{V}tw{azL8Z zurm^u+R^f7``v+ESlU$pj*7AL;?cj}BIR2`Sc#|&`^wk6pm^PE(vWrR)c zpsC-id;ve}66CZrv+2bKVRKzEcS>0Em=(6gBwhgE8t=2C;++HDkALo;+})v=lKr#v zlImVw+Hy%|=2o#~mZf2lB_Z@S$WDDJPenGRLPA1pibM3>BdgPG#0+t9VQP0#o~rvC zc{$=AFR7@$pMDzs_1DZ);b|x!IQUR^QMe96ph7EkC@}wSfXg+B_A-|LRZL7w?u4i? zck1D{%rm6gzkiu3rPD;##coA^B{p7-MQn&=?)UmVoSo8sGB)*2=6;P8xomb2V^a*$ zb6)Rl{)+W^-e@vn^rx>wmaLN}|CE6O!y^>G>>mmtUAcMeYLw&pVz-_kWg_iU*2vp2 z@PxmH!62BX1q{stOf(Rc4YSv?%J38W=8h9NZ6LFV_t5km9*G@lmgmAkp3x5s9)dc9 zKknOHFsL!&Lv=2oAl{E3H|UCm(}tFdDkW|go;G+ZKV0LwNkFThRc{cUM#o*temZ07 zUG68jlFU*TYHf2W%aZk5RK4H{-|LjDkg=94rGVlGDEC#LU33l0@O@EeXIGI4uCM}B z{mY|M#l1-OkDC>9UvwW#L`9R{5{aMWk0yaV5pOLT?BE$c0E4^Ul6||Vvd#_EYgL6b zpU}cq7X(neUmFqW0iv5npo;9%$(j%V!YlcWJB56MwFDIi<|(4fcV}Qd!UqHwkqPXv z)?oxY=*?{R3jF^gFOYbC;->j+Zg6K KyAioSz<&W@hL%bI delta 1829 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 a7GQrLqt6aQ|NoUszq{kaM#Vq$xAlL??w!H_ delta 2830 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 diff --git a/tests/test_graphical_units/control_data/plot/custom_coordinates.npz b/tests/test_graphical_units/control_data/plot/custom_coordinates.npz index c189f89af6fd4939e4f80f9cd48f6a4d9cfe268e..28e7dc78f8500d40e2dc06855cb2c754ef587ec1 100644 GIT binary patch literal 4128 zcmd^Cc~nzp7Jta7bLv7nr-It4v9n0kBCUXqZ1I$7IhC?h39BJslnheHu!Iys5~v47 zD}yr(AWM>BAyk%7#K;l|3@&Lw6Cs8`Af(7Zz>q`&a`tu6^c!cNjQf)8bW(A5&gX{tGrf>o6O86=_Biyi5{EjfCD&s;@ceY%go_PWcMFQk0MqX-c2^ zy7Bjv?Iz>nzjqj926MZztB=|#r>B~kbhSY}jusNjDA7uNLW&33^Z776L4JgMKC!SF zT^HHRvEq4g?^pXC{6sb7 z;WiNTA+f6I03if~OB_C3*Hf|sg1RJF^{Q03CiSqrYLjC(LeN+3ajT}M6S)M8unw3W zx+7biq?0$WDw)aktD`!rrfaaus>ph$OcE~n_ax%d&a!X@#y=66CF`A%1)v@#Z1ra%4^^D$dE-NWEX$|D8&oHrBnSkW|+0YrfM!TO7NT{Pf=CTXACc zC<}GB0`PEWjUVp>t}z55f)Dp(==8x@|Ii_Ux4touF@r}L1_jS6m2jlGwn|O_i|cNn+`59WGN9((u!R4E(4};KomJ1J3niyc+ksswtD=;} zlAb#4@V^^oNE$3B7b}?*4*Xv*yB4ZzL-d3A{8o+?e2yhFo6mny%W2P3U9qOen!eAE z;MFz5#Lf=S#cwZ6R9xC~pjn<43C~VGDsw>5=lgtlEEKs))w8^y>Sd5e!xQ;SlbUh8 zxijYO#Zg=tbw+%2EyA|(gsWK6;`1?0#_aREcEt=2a?!XTzqpAYDiWaR?UWTsD9#B- z2dzX?Yo}2^tQ)0hNitD9ib&totz^+hv1HjWmMq5vu)MKR=@W%IBdj2!9V@ibzkm{~ z4nPVHVA;uTBw;8{>1HGB%rgVG_6K^--g_z_k0kk$AGP#L1N|ZF^;z1U;NJk$G{@rJ?WJr8LE1@;uZchyUZR< zbdwfhd1(u#Hb9x(Ym`BSQShpo0dXK2D`a?t?rUbzmT$H{@804-Wt;;huY07;n@WL6 z#P>`h@iR3c25P)ao0Bp>)u#i&BuOvjIh zyu8Yt0DU&s1;9;u`sblGlIlH}i>ppIsGEC%_pP5OlBIT#MtrFPfP3+OjWaJZHq|;QVGZ;xBOU2>?~hz$PJ){_{8T*cdS(dh|_WT zgFy`1w1_9OJLXN&C`!HO+(Q=!IXpyQ6*}`5Zy2? z-S!=uZ`sv#G?FBZctMZJXz2aSnI9HKTbj^(Y{)x0`sQZ4J?%3o%E`$dUlcWXlnTpr z1Chi+gNE0@>ol5F4y4SWBs^9og{n6VUANV*)T>S~H zf@K;XkboP`VQ?z7$}K>C@vpc4V73kNv)SMT{qQ`GoYaw1`}Xfa%mU;Go4^lF_d$Le QHz8UZ@bLssq2+}CAC^Y^I{*Lx literal 4128 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 literal 28752 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 I?~H)|3r#SH8UO$Q diff --git a/tests/test_graphical_units/control_data/plot/get_area_with_boundary_and_few_plot_points.npz b/tests/test_graphical_units/control_data/plot/get_area_with_boundary_and_few_plot_points.npz index 282bbe1c40a99480c1d4144932322c1e33299c16..ed00f4d1d69a7b7e69700de4a94beccce6f69a2f 100644 GIT binary patch literal 5395 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 VntN@hO-Fk*z~2_|`xtwv`481l(u@EA literal 5393 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 PI;sQy?7?p__O|a|Rd=H= diff --git a/tests/test_graphical_units/control_data/plot/get_axis_labels.npz b/tests/test_graphical_units/control_data/plot/get_axis_labels.npz index 76da3ed568d123e6d0f617e1fa1c6683045a0d98..a6521dbdab694818e8b2d9d42a2398a2ad63a730 100644 GIT binary patch literal 5381 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 diff --git a/tests/test_graphical_units/control_data/plot/get_graph_label.npz b/tests/test_graphical_units/control_data/plot/get_graph_label.npz index c90a697a6d486a821416923334e9474944195e0c..29a4489476c60b5cfa66bcf8f310f55c555ebbfd 100644 GIT binary patch literal 12724 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 literal 12720 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 diff --git a/tests/test_graphical_units/control_data/plot/get_lines_to_point.npz b/tests/test_graphical_units/control_data/plot/get_lines_to_point.npz index d65208f03ee3f3392840940e7b11707e38b5138f..ecc63af1251f4e8157fdfa5c67e085b06b963ea1 100644 GIT binary patch literal 6993 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 literal 7092 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 BO(y^V diff --git a/tests/test_graphical_units/control_data/plot/get_riemann_rectangles_use_vectorized[False].npz b/tests/test_graphical_units/control_data/plot/get_riemann_rectangles_use_vectorized[False].npz index f756d25445f7471000171a802bcfd4d7bc2acb64..1d24f980135b1a4b19694c6d221bcb7a82018a52 100644 GIT binary patch literal 18817 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 H{`S8B${^`5 literal 18863 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 diff --git a/tests/test_graphical_units/control_data/plot/get_riemann_rectangles_use_vectorized[True].npz b/tests/test_graphical_units/control_data/plot/get_riemann_rectangles_use_vectorized[True].npz index f756d25445f7471000171a802bcfd4d7bc2acb64..1d24f980135b1a4b19694c6d221bcb7a82018a52 100644 GIT binary patch literal 18817 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 H{`S8B${^`5 literal 18863 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 diff --git a/tests/test_graphical_units/control_data/plot/get_x_axis_label.npz b/tests/test_graphical_units/control_data/plot/get_x_axis_label.npz index c1f5a74e90b2a3ed6d0510d04563c4f9f9fd2922..81715dfacd65c30ead45d16949dfb61d191de513 100644 GIT binary patch literal 4461 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 literal 4612 zcmeHLdsGuw8Xs)YZo6vTMXi)TtJWe^Q2_ywV5?|XS5fo^2ud^E0EIsCRnt`WQr}>E;! z_$Q-1fBgOz54__S7#Mg>V*yAe&OiS7AMYh{O(4iOyD^4JCX@dX;SVO*`6Yh3MM>#< zJ$2xXSS_!k%4c~#?v+$3bwsiXf~+?$EG*PCH#f6uivz)O)foxH#<-NXSl3yw5rPhJ zQOXxj7AsHf-;_vK#x&ls{u5oVL(tfBBGLF%7U||z8y#*6K{Gz=m8ag5crFzYvD|k3 z#cZm#dWFlf@qVf53I*fB0E+dTt)2$TK886v^NOhq>dg#$TOj2`G?hygS_;GkI#Hr> z4UmDarO~|X+Lohp9Gsl;RVoRi%~h!b_GVVl^5-b8Kv3D4DH~8nZ()H-ZC#&lUY&ApVJ#a!af`wkC!*|$()`P`m{!z z>f?i6Jgb#$+_&&}phc!R$jFh_!ZfZ~$~K3*nHR2m+o(5W>wJH1K{IBEoN)%eEdxa$*^mSl8Z4A(7xKYp}$^;+`*eNdcu;mh&+ z6Gmp47ao51E{<2_RTJ8lQYnd%^vHWL5v8QKsgzBLD{d=t{_-=Hf+Z7{#w(~@oq4t~ zB`4tm^dO5uNek11a;|GUM$NqQAccalG>WFT>50V2f{1>P&Dh+@?xKKcYS`WMN>}A= zhAJsQpqVfBK{y0pu_bYGVV=*Ea16%9VW!W0iH| zv-vawh{8aB|6ERzNs4|^f*Yh_aP4U(D+%|bR$88O%EQA$5o3`9M>tc_X-n@Sr7Msm zFUAA}R7ch`cks6$PT4Lgj`21}Cnw}|7rWTgK55v>FF;hWhddNkwcu-f=kR~ZVzqWU*GpWA>-4P zGxoOrbq`nOv3`DjLS{_F(%9wo$GPsyGj~-_uGm%8*0XGAp!{foj2$b{jg^$dht!mV zlJX~_qegD2MDgOvXMO$s*LL5Y`T2~5ha}E9O_g++edqF;>Mi!+6&to4eTqh^GE>3e zqCFiQ9huxO4{&Dgky4f1;*gkw<>IOE}yoi#cJg()dbm4rRf`+ zDtvzU}X5ra^uC&h|(~}n8~iD#QDhqp|Fr+ z&};i6OeHQWT7Yc#-gYeeL{?VT6v)acX9W8$+a4h=P~usCP5g zZ+=2bEin$Fbt;}iL{IVQz`z3S2UvK=J=Dim^?Ne8y{MPFa$590*gXS&J`?B%4M;Y4 z*WY@Q89Os}XGG#mhOO-U<|S0E?AhU6-|xju^;ZJ_e1Jqw2KSg^6 zAe>?aq`}n1iTqr*br#Owg(Obo!3sH?AGk3R@d&903zdv-2jd)o#0r4>&GAEeotAe$ z>up|Ten{c)1;km$0wb^~ixW7FLNqm=LO37%Fl07gmkb6JJ%8E_!8C1_1nue11mG*MD=%1$m|RI6MuVE6IlqO})@V_&W5pB}8`0q7h~liQD^-S4b@`i*oS ze{^yGyU*@r3xz@iF)Sdn{Q6aCigWx9@Ykm4(&LXvrib!DS;yM7dWYu>4f(%#r_*YM zmVu!tbh0zpfwzP1ZUSuuEdq$`W%pn!>5%k9fXN|EHXpO}dfNVopa4M&o`DyKi#fE1 zTFQ-D)kesJlP%zL)Xj8~Jor^Nxedwm(xlBCq02ZFDc&l*7%*jgolOwAV7UrpqO8CmTrB{7)Z7$4BCJ=8)b)=3_mm()yrQ?1GjB6(e< z4;!@+f2K%k#8y^A(%Q^q(M@0mtYD0IG%k;_s*G+sM;KnQu8Wi;#1KI*Q5O0Bw2d2p zu3q*y0Z>7Zv;cUk8h{V6npT@kv4f!Yjt34 i^PkUb{^g-G;5g{tPH=oZO;^LCCg5`r+#8WooPPowMZ}!| diff --git a/tests/test_graphical_units/control_data/plot/get_z_axis_label.npz b/tests/test_graphical_units/control_data/plot/get_z_axis_label.npz index d56d4761eb45c7cdbb2175f7061272a21ba703d2..d0a6e53ec3bc81bc397f83ed5cc2155fa2302c6a 100644 GIT binary patch literal 15240 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 Bv;+VE literal 15244 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 U*hv_Oz-1V)(J}hyr4P)%0Y|2$kpKVy diff --git a/tests/test_graphical_units/control_data/plot/log_scaling_graph.npz b/tests/test_graphical_units/control_data/plot/log_scaling_graph.npz index 2abf2c0e007961ef4b4f9c9ef09c9cc877280604..90a1c236b21900216876549a3c635343fc0feb51 100644 GIT binary patch literal 14916 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 N|Fq!mG#rP){0|~x!>s@S literal 14905 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 diff --git a/tests/test_graphical_units/control_data/plot/plot_derivative_graph_use_vectorized[False].npz b/tests/test_graphical_units/control_data/plot/plot_derivative_graph_use_vectorized[False].npz index bf393eb228aa881a5c285f8c53c79675bf5a2c6d..3fb814bf0fa75fa8ca2256599add2fe99a1aa801 100644 GIT binary patch literal 31795 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

  • &fO?j#&%77T$pj5f;Zaoyl6*D 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 R_wcJq;2VbG-k;(B{tM5i>rMaw literal 8368 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 Mc7(3&7yb9Y07p_DHUIzs diff --git a/tests/test_graphical_units/control_data/geometry/Coordinates.npz b/tests/test_graphical_units/control_data/geometry/Coordinates.npz index 3f0e04bee78bc6f8b5a88c3ae9c399f97cd7b4b2..821e953cbb10b4552d4b0a9d6f9ba42527e08198 100644 GIT binary patch delta 43 rcmaDO_eM@Cz?+#xmw|zS1BewFSQi=O{D*>#QY`$;x(vFL75TjZED{c@ delta 26 fcmaDO_ePF2z?+#xWU?Z^_(mBfer6G75ZfC7UFrqI diff --git a/tests/test_graphical_units/control_data/geometry/CurvedArrow.npz b/tests/test_graphical_units/control_data/geometry/CurvedArrow.npz index 8c86f738cedf886d10bf062abba24a4018b96f25..bf856e6ae0bb0f1c345fbd8e9c84c3ee7488cae9 100644 GIT binary patch literal 2946 zcmeHJi#L>M82==xBwd&(L+z@O$fcvGVc1B@5M`!WcatQFkwHstX=%5zb;7u1td%q_ zGv$(lT-KaoD&uaFK@=LdQ6n0YnSJMS_MF|nV9y@!cfQN}+~42xeDC|XU=&vyLJ+hT z+}}f~*#`Dv`Pc}lL+8T?!Tvty2;l^ykkBXvXcLs6v>ix7(A;|I3z`{pI-cRNLpjtZ zx~Niz)6;BIo)fRbJ;_<4L%pyyU1d+L4K+Os&fxs{uphhnh+*RIza+vs5%a5#xb&E< zwQWSwp1qix}W7B<{WuJB@ zoDV(@KLdia&6vk3Vgi&P$mBp?Bo1W&K?(W7%91WOpt7NjU8|p~0YOdgV$0+tR<)cY zUMQnENEGLSuXBr~#>9iZawc1~P$nM}sOOc=0=4~)#E?tHYo5dxR;+@cuZ+cTnMdA~ z)IignklnS#*QCt2qq{nBs{16~=L)tnX+gf+QV_2dyQAYS3o|%4NSN%QcJcw~Tw9iD zKv&J=2;)X)g=BuJ%N02_H^Pw3oNzdth=UCd4xYCJT(|DGZ?jog-cUX1DG1AV+w4&N zlqei5oA7chOn^>ENlB5Ly{4$#l{Go`DueJcZLf^R%-rv1LnIPW_*_(ke)JBYR!XJQ z+j$C}PtMxO9Gu2t)ln!EP!%l;xuj`FiP!SD<)s)r4v&YU)gb5xvN{Zwe06cQ(6slu zvRXI}h}c#V7|AjC^!rb4<|;$bcNhl;2ODQ+XOwG1WMuN_=;+5RAXWaMBi~j)3le-D zlSh=Oq|!W4O^l^WSM%aGZN%Gwf$pqgI^8%eJ>9N-HAp>DS#8H_p7>&5;I9;^?Y=S( zxK+&8yDV&mvCm1K+nwBXz@>q{zJ4=*q8(_Llo+Iu$;YJH8r=__RJ66VxsJWV!#e@1 zAOK{q_2!9G-J~3I;&?mupt-rdOq4ko&!&03YR3u}W^PfWMsMD_#Sri(_@=#2{8~7! zpsq}gGlv>68Af9P#VT;42c$F8o)U~q{9fGd=<6frQE8qvTVA9f;Al9&3ig_Uwy=zz z*RyubJ#<+I?WbWOC6{{DnOVjz9mp-ZM-+oBT14xDbnMGKbouO|un)&k801u2j(I+n zx;NTL!e|BQwKokThLeRFhdr|r|8GqE*qph8h6I2!jjX2+yt%2SN{*(*p zF;{{BVEGjlrZKg%oSLmr{zQD=O&h8BW zC}2^jTIx|9l2luZ;;Vz)1^WB@?=oXc3I?EfgG?reF3of2J}^^_&r?MrQRt`9=Z`P- zmw)7K1jufwt*c{{;OSizPR!WN7FT9BsH&>wKYeP})6?^Fk_tTeFlqe3cv}t}X6T+q zx#nIKgnLu&k9kvfg%}NAni;6J_3;^olX{xWW9i=Ynr0!K%%Q>^!d!sWv6rv2OdCXUg#OtvOL}2RUko<1zefVtETDh&&n_6H QH4>@*-_QM?d#?*l zMO7aFpaGxtVEzyZ5w8T`;tC_64fKIuxOa#z#mD=Cw{_?_ni9}i?18R8?zQ+8;sS^Q zWwlrKaYfs&_!M5YXpQdLhps<{dZW~qZmjO`OA4!0b8Tk*uQBFss_XUk>Fhthp+(1F z&6S&Fmoyxdb<<04k8IkmN4c#NSJ_BqmlX=$1#md5uvT@mb#q3txgbfi|7gnQP8r!_ zoS9Kkmz#qP3$B>2Zk$TnHd)s&_TmPGoDdc=Q~X)bhwoxb40p~qHGCCHunWCX^2DQp z62UOSob`6AoS{pYvC~xxL&!s-A&r%pnW?HsVfppkYgJz3Xz?uRR+MKdzPHl1xxUDv?PqU%L-QPo4B*(H78&!`ejMIWv&4Lj~~Z{ zDok^=+z^EqcXfxGuN>jaf?5r+{~knjsJL0d@mm4Fr|Q#7f%F!ir9d%m$wX=KQ<&m} z3V@c#%hkk5Q~5xjwi%~ZAPdhS+QqOguTbKA`y$>Q7K`-&6G^4gIULRi4USdwZiH79 zSk)N$-c7m{wohb!IL_{`^>NYfUuMhTeu-YI&I zQWV@b^)oWATH3PxvVuv~J0Ow|8zGjjBooI|i3$S8TwQfzVq$(j%IEV9IGvqE{*Y!z zhVT)!ByUVS@Nj(r*NLkFnQz|V-;J*FY#wi3%*!V3%cmY5FFguzN;6495M<;QBv5mA zK}HGp@bD;Hq@9tRoGhgwLqFR_u&@{5@F^|?f?mEud`=Ydh$=~zYrGh?Vbld1`tqP1 zkwT%AR#m0tYXY#&ij``lXYJYK9?d`+8f;_Cpg8vqisl6(k>|+qkdP4GVnzpOG}^c4 z-|W9b5Dzj3V<9`BX3;Q9oso`ySF)Qn?(?Gd^sqdsOF!tDC*!iM4R-V4{5`#*yRlGV z-$Gy{4m=Dq+|6&jtp3dZ-jaJUE<2gN%9Igr`E^P%B_2>nbBR~vL~o9rW}LFL#ZX$% zcs!mLAy;;vb+%QU1Zz9}QHX-`eKj8ifLCdGX{m-C^&=YN*<^76dE1^w|NOSyiK_;H zO=ebBRxx!hCN>roKL#0j&(BQqY9SQb_fWxM5st^>xsDLn6UW=HtwsH0?tCqOl^pSK zi(Or)u(1cumuPQZUY@t8iN>3dhY=$qBfX*XYnXsVbf{eCa0@}y>GHbzhaMLklEAjS_o2_7ECe!tz+h12&WeWTNp`Pu2cW5?p-<6rld z5xiw{UwI2r(7UxqD9nq>gN0ix`DU;_gd7kYjMmc9f|Wu)QR|mfMkrx0oC{3+xcPYw zDs=(8!u#jnvU>XZZpfJBq^jihG}DCMq8aAsfJkK0S9vP81-EBv5Df)!H^b*h*(TDu z;jUclXfrc@b}ETqPNHk-neAU7!wh9wXWFl6{b-2MCf5gRs%x*&$i`5#o%8LtAdZt# zX(GzdI?<7?T}&2aY{p3~0C<&)4Ik=|Hk1cGV@>+W6t%K zy7J^}%ks6Xz_J4WGX-qE$W&c$O3L~w|8`vdJ7M|m1paY&cEPQH>ofpL@Rsk^+u({0 Fz@LixxiSC% diff --git a/tests/test_graphical_units/control_data/geometry/CurvedArrowCustomTip.npz b/tests/test_graphical_units/control_data/geometry/CurvedArrowCustomTip.npz index b6ca4008cd2a66e64649eb72629cf3c73ec75788..e7704669c9c2b4c222501a0e76e5d05419f86b3c 100644 GIT binary patch literal 5033 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 literal 5028 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 OHE`L2e~&*-+5Q7fABV;O diff --git a/tests/test_graphical_units/control_data/geometry/CustomDoubleArrow.npz b/tests/test_graphical_units/control_data/geometry/CustomDoubleArrow.npz index 720f5fd505856b9e74bb3d461cf626681a15bb3d..4d9680cfb6a13d71022e0be0aa1b470ef7438e2b 100644 GIT binary patch literal 2907 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 literal 5933 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 Cai50( diff --git a/tests/test_graphical_units/control_data/geometry/Dot.npz b/tests/test_graphical_units/control_data/geometry/Dot.npz index 2adb2ccc4a7c98d06f30313c55901e6b1015d590..64d72736d904e108a64e0cbcb9285de6c09b53d8 100644 GIT binary patch delta 43 scmX@hf0kb=z?+#xmw|zS1BewFCVw=N{0{{irBd0Mbs2OgH?eyI055Y7jQ{`u delta 43 xcmX@hf0kb=z?+#xgn@y91BewFCVw=Nv}R{uXke9O*eI3C&Md+#GP#M}8vwRO2rU2r diff --git a/tests/test_graphical_units/control_data/geometry/DoubleArrow.npz b/tests/test_graphical_units/control_data/geometry/DoubleArrow.npz index 01739318a1972e0463feee7a25e8b5f3c4f853d1..cf15b21bcb3e7285ca75945ffe77125e35806770 100644 GIT binary patch delta 43 scmeAa=oF9&@MdPwWnf_70AfXk-5QrU|3kq>sfFy!x(vFL_py5e02;UtZvX%Q delta 26 fcmeAa=oDZL@MdNanY@o(e51^Kc4iS~5ZfC7SXc(3 diff --git a/tests/test_graphical_units/control_data/geometry/Elbow.npz b/tests/test_graphical_units/control_data/geometry/Elbow.npz index 7068f03a4aa84e934bac4df514c16748be65ca7a..2476dbb254aec194f908f84f9a35a6f22afa4a80 100644 GIT binary patch delta 43 scmey(_nS{Dz?+#xmw|zS1BewF&UkJY`40sfrG(j;bs2Og8?bu=06SCLf_(mB)c4iS~5ZfC7UbF?* diff --git a/tests/test_graphical_units/control_data/geometry/Ellipse.npz b/tests/test_graphical_units/control_data/geometry/Ellipse.npz index f6a1ef43aab473f9d09d512a625ce8048443e92f..d70fa09a7181f6d9d36a5b7f42a5a56910089bc7 100644 GIT binary patch literal 4538 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 VXWc*Bz9pdn-r&>$JotD>^KU^@WfTAa diff --git a/tests/test_graphical_units/control_data/geometry/LabeledArrow.npz b/tests/test_graphical_units/control_data/geometry/LabeledArrow.npz index 43baefcbc5e09386f61e3ae344937d6f5f47c08d..5b25ccf676efbe532cb027e67838ac99fc0b1b1a 100644 GIT binary patch delta 43 scmX>ic0^1nz?+#xmw|zS1BewFCWtz1`40sfrS5Ps>oVw0{>kMH050?pNdN!< delta 43 xcmX>ic0^1nz?+#xgn@y91BewFCWtz1*~G=b(7-CmuuWDDz?+#xmw|zS1BewFq$`ts{zJh=DON6KT?XCBN?hImDJu?< delta 43 xcmaDW@>WDDz?+#xgn@y91BewFq$`tsZgVm)G_XoCY?NZMElGm9{bOy0)s4FH=S2jBnz diff --git a/tests/test_graphical_units/control_data/geometry/Polygon.npz b/tests/test_graphical_units/control_data/geometry/Polygon.npz index 5488492734ef8936d443e86099bd0e84218fbc51..aa4e9aa8d166d8d1ea19b9028f0698b7daebe480 100644 GIT binary patch delta 43 scmaDQ`btzPz?+#xmw|zS1BewFHuo}w{)d8%QcYaUx(vFL=W}@j05>5I*#H0l delta 26 fcmaDQ`bv~Fz?+#xWb%A2@r^PKT+AZOAhtIEX(0z0 diff --git a/tests/test_graphical_units/control_data/geometry/Polygram.npz b/tests/test_graphical_units/control_data/geometry/Polygram.npz index fdfc4ee0618a05c95dc583de16a19f1ada1a87e7..ed89e70af15c84b8d847def38e450fe7d41506b5 100644 GIT binary patch literal 11927 zcmeHtXIN9&zIQwxbw&kd#!hvPA~uLflM)z3M5U>SfV6`k2nYzFB_YId6cq&&1f&Hi z5~X*fgs2EeOANhd6d{2SBBU8Yl6URs%zK`DpZocKx%jA{JA1Fa*1!D9|D4s@e`>;D zuphwhUtyY;K2J%%f62qP!hAwK1Fw2`dxm*x1>Hccf&B!#xo#J@5(ZnRCHo7;n!KCl zFeovR({Mu>f({#j4=VeM#!%P-sN-$B&C%4d>aKvabj+ZpcBQV^-5r(I)s=RgWmiRY#ADqOXHHa&R*iwKxSO zgDTp)174Q=%%gr+Sftp*g~$Msk)(X#iM{QQ-(KMV{`}wEf!{b6oi3-wWv_+7o;4_n z#l@|R2W4@1=to2Uabl#CXbShXaWd!jvO6}Pz6J)n7E~zZ8hEzmNIVV-BNt4-;(N~w zFWFZa4th@R>%E8H1by^W+|)2sKY3&2vZpBW?|5|-th22Cj>CXPawAMOz(Hhr{)xRL8!KOMzxT#T_y_NdXb_ z;bJ^3Dj+D(UrNul=Z!2Zb>;49UBTu&r^GjXN@W;=6=vk|#p~~cV@z%6w#mVg8L5fc zOe&_IKEy_BJ-B}Jef$ov!k6h-n$BFaU$5~7b3b~K6xC8tg>)iv^0|6Q)o6XRJG9h- zj+zGNz_@v2%-7oTVpBoiLO7zZ_dZ?;+~C0b;QoDwu^+R;%4!w{5xLJ^d{uIH*-DO@ zBXVmyamgev`UV*6Uf@WiR@cxobgw(Nw499{`?SDo)py;AFas}at*&BxXV6%ZPJTRV z%3Td1v1>Ny&n&i~MIN~YRaV>xu($7y&aE_s>Ph%28&%fJ8!rkRxN2EL>#V1Y=NfY? zg25wx+pMy|k-&NB9i+Q7pEDp7Zz*r!JTM&f%?%xS!C*m0b{(k}^K15wQZ%#moGZ1G z%!d2ZejT`O{7BVHl3#w?et9{s9_;P2N^W|+ZZSgJn}yPd&dOzyDGB|)i+v2%Kfp~k zuWM8H94*H5H+)FyH8zj&{P?5Vq4HW zc-VgXVBGF(Y00>l_Mwb&6Kx!XDsQRnSlx@@4~#D+PT4|F`GETTs=`xBpPTSqcy2Ht zTIz6*@LCkytfe!K`dr}h!Kw!c&8w>wf8H;hYxbSV#3=-JjSq?pH+GN3rUb9*Av*F1 zw9}MbO_N}!dC#SNdd`9OfA1bL7(uPqqCLtcNRtMs<8mp{R^m6}(wu9v=G-qH#+(6JUo&dylTNUxoguhhlkIi@1D5(ySc2Id^M_O zWACu?YwU*^DEUJ#7nCotSNHeo)8EkZppx_TAi|eS@jtoQjI)8ti5~q@twmnu zWoetCRY4f!&(!;ENo{#`D7!jqsS7_wdXVS4()AEd%W)2@TVo>!AtBu-&bkxM4ZlPz@)|08lv&R$T2Y~AW3i&JhpWBrGcc`d2r0i ze|s4Xv%fcbUM|v-0`|HlNagNDUyQlB=u#UQ*}Ts++_J9Y(##jC?7d4by1PFWWTy2A zJB#W~H@9t5nf5iZwO}1Q(Ob9Hk1tFNJTv}_@fJ|aR=92zCdF&Cqj-i?&cNU!J-WA0 zME2N@0H^(-aqHH!+gDxq&yh*$nUS%pZ{IS~=MTb3yAMy*AOc&LOL6jd)UQ%?pp|yK z-=yyofSBAziNn)RI@ml-t=;2i4;AO%nCFISU7V_!|2Eo@4&sZ-$tp=V!q>>SrT7-fRh0ShUYu@vUl0c`W6_36; zP4r4{O=%^xXiduNtITS>>@`-yrzrNc^;wmRr$zo!6=Ue-t7>9-Sz(C9dfc_g%nCeCtpi-S6-o_{h`RCedeS+3EG#yB|M(OgviO z*U>Vvqk^a!8axfp4vj%q0 zm$9;`YU$&PO}MRM!A0$GRXx*E$|G)DU)q!nyErcUW#RQ-Oj*XW6NaMbxk6^zxu2X+b)oHtc<*Sc688#&DkH8le(zz&S>1H$L zCkE=uf&B;NyWJ-<`K?KGT3tQp#V?EQ_g611-$TOV@fxv7U1U!lIkC_5^t|pna{tBN z7Iu0~;!rd4$dd>FOf+JDrn{wLJsR!ORiKEo=_v6qO-a}?3`*q_2i`q!3^pyoG(S;t zM&!1&u_r107i-xD`%A_-eq)Zw!HpVdeEX%b=Lbth!;b_?OECC{;H+*IK5urURRjq% z=AuHnN(B~_{-;TztMY8BZp?Hkm7^OzZ7`MUQa&n0F)kwZfm`VE>O}o@8p!Sl?D~_S zB>dK|vsjf`wG^60-I7oD+loSYPVIry=e4iPpvybTz`JeV3#;h*n`xIm(}&qFwZl{m zwZuVtS*n=PcqsTj=+^qVs9tJW8V;Ly#h5cV;T{viwU#TT<)w@gkN)9LeuyVD>~uw5 z8VbhlC_FJ;v4Por{<_Rg+0j#~Cfd6rs#-8v*AMMNO z5}eRLl3M23MjkkK$}P-6|I%W_d=CSaky-Sked4I-a0EW~g45;gmzw!8K`MfDgMP!S z3)V20E>_n2_Usb>5df0xhpTQ)gj$7Uee&1QJz!CeI*VvsN6TfR^mg4O2JH7w?XJ;* z`nUz7h)^ylTe@of?A7qH#Zg&3TCt$mOIes#7WL(oPXvr?^2?+a>$3C_lwuXOKW6!y z>=W>g68Z%18rOvPQm>>#uQ0V4uQR>a5y}i2Rfr_}D&O-9CK}TWaYK?`@lb`CW4@t3 zj*wv{@u;TJ{Js=by9`TQ!E#H+mX@0>-EBM4itE&V044vEuhH>oEs~+Zr6~|JN6}Zf zCYm;cpFznQYIlpU=bC5~y>PR5G0HzamH>4G(psn}epn3$O%y5wMr38uQXKM7Z+ z^Vw?8r+W<*Om~1w!ZLODG&%abYe+jq>Fi^u;)CN1Q50l198@M2{naQRT- z^q=!%EoM(*)&sz;gT|NJ|BWR!-~g5YS#;(J-kh}8f{jVb^g+h+r_wO?`D(eFs_M*zF@e4_Do%Gv(>>S zP|Yr@lcZKL8=gjQ@09e}upjc{$V67!(};|8=VSybSXkGLYhhoQ`|}prm^NocWO%flErTCrmB<`^o0)Qx7*O@o{*cospw9 zRMG8n{l(=>B=cl#jssM~y`M&Ol=p3BMo0~6n3HDc901Tgy>LYjRQBKLgWLY z5-R0d01TZ{feXyA4*CS8noq`5(XC+pYcrA6lwv@QPZWDQh8ykya-cGw+aCgXtlX)p(raFVv2f^&=`HyA&v z`SP)pf(~a6`OUephJ)y)7ao6={hXz&4LOL9(|b8=@1Rs=`he16!W2*(Unu;gSt!A! z{+u6G@&UF3*ksVx;}@ch?n5AzJjId$Mn&X$WkpEYp&WL-blX|u@c5~H;M4F{%4!Vg z3wp@o*;ARcLK~-*Pi0)9Z*!H#)~(wtgB9fVh)X=s1_EbNa}%GPXGA0om)sc**9WE9 zA{fBE0Ro&7KY!F+m7o0}p{LWoqqlPWMC-gBhWfaH8oMb`gw-(C00A@m3~DA(sITc} z$I1lCVx_kY3J5i#oNhwD>c|suYI#9bcL>qPR3YC?pNykC8DR``mED z=k?&R78JYb7YwswKoJ3A3zo@DEJZE3a#ulvdzA1pC1x7lvQ*ok$ZDwMfr_n+FpdxS zG-zgc;ShG@MQ}9hbLL{Fe@%{c?-@{+wc0&U7=3q1ArZ^O*m-88sHolxPJ!8sA^$~P!cE$v8d)`69%xL%rAjwFvHmq75 z_Tw}pht1mHPp7Hm`L2iEY(EN!{Ag4IVD=p*j^|u|fqE=9sB<>^S5n0hwEL&`hxY$K zFcV!uYaXVp5YC;ufbQV{DEYoD|Barn1qBq!_ygZ5riw!O*H%$(MZsZA(C2lI-d;06 z&at4Jb#>T6@EvZw$AME+?Ph6E+GXN2kQF1&plMbD?wJvvW{G8YaVx9JCf{bbZRqdt zk$k$(*yX3_Gszj}W;j7g&v+1`zvGnK*ZhT*IS5ehS_9jix+~Hw!n=8b==c=f@y8tP z@8WBk5xb1X`j_9g>kIIjXDJMjNlkZan@nw`_>kdzDrXJQ(kv6xc9;q;k5ouGT$&fW zNgJ)7k@`8~^f1A{{4w|P89FVeVEEj^br|fYaX?C_BBLY@%;xN47+zJl}Cx;ma`7s z1}7;e`=7Wff$wqEWk5&s*oo}qNjb)^p{@Y#UE}8>A(7TLe{N(n07|MKe(0F{{3Xx} z95VqU?-+6>iGSY{J|x8H52u}oL*NdDZ;C0M?Oj+p+<3Mjta){Q zY9dM~tdCD~scgP=>jr>xEl+XM16!XwQRPI_)^%4iuK_fiPhSUu@WOW;S7j3gcOBAk z**JGdM}*2J3q{r0((xgj?mK*(ZD=JC=+zFBn`zBYOiA;l3g#gecNys*j!pOYoM?cTiK4}hGO{uq}0K6bqiX|PF z0RrtWK*U*9@)!@f5zdMdo?97%$Tm7carj-pV$UosrS%kcIzWT=^#R-+vp;O-F~_4j1?C!V?b=0T#Mqa>L$cV{%BnxHW-G7%0-VetqvOBg=E~87;?G3 zB?Xizx##pAAt;NW+(|-+gaR)@g@1=xpP&cJ5HbRvg+Qo>tK$LW<}pM2v}rWuiw^FQ zn+L+TCvghY=@-Gmz_HuU;frTGnn7(OfJ!(W!>*9q;WItsUJWYYCb?pP--Bujh7rqF z5s3N%7M@2Uhex`bm|^iC8IU)6F2C(*ELGndK9tt-#dc-tYWd=i>nz%+|yLK*^QXJ)d52G_88>`5V}9l(m-p@<7=2nZ8tk3Z6n0IY|`NvV-Rl%8@~b8K5Z5d zxBD|lbi-hQ)R}gG zfNK+TI_$79;I4|FmEAh*I@`PR;f)8;nTFc=BpmOtP*AW-E;J!M(hRSPV|~ZOQ$An= zRr_OB&lx4S)r&~EZsjp@5%@VXaqkYgaPJeryb^J8z~(P37Zcmhj(+uqY(JGBiH_e( zPX}l>uO9dsEjIM?)BTsRojW6X)Q9yL4T=G-wyoECP)nd_Qij?ZA0qV7<7;4lGCzM) z`uJ^FJD`7ejq80iRGN2;f^he*1I&0M zsVyY4G)aRO6oT(ffe^mogrb-_6Kh}AoBgD2KJ($RC#W)gn<2K2&iOLf?iOODFI~Kd z&_5gdGSVcf!2K#)LKOj5;upxTNFGsxI7XqN%uf36^g|QSkH-t;bw0yybUS)HOnxSM z0Ljt+6L-Nq{b#y|s-D%Et7#Qzx}{$#VAe{+;A2Azm>gTPOhAWZ>EyEu^=8{>_&9dC zgn@w>|ra9C=IbS01Gl0MtQ=}3HFN+%R{IG zQUgrS^b#`yH}q-Gty+561T43a!<^WL1mEeIT%{Hu4g?rnZ@n{0r;2LYs2t@$h-=QD zZsB?EFJtV4M7q-Mcg47*;-4$o)#nVaUj(c+Vr*?@Uv#JVQYThMg&|bwU@UnYvmL31 zHbvv%%wq+Od_~hIvza$|i84KaciNw&t|v&UWPnn<9bt#;9Z}qi&B?^60cT7u5l=s) z(=+!9ZkCS4d{wP*%osrYyYvmD6ihbNOsm;Qrk;D!8umAp zVR|piUQN?6CR5*Y&Wb(j&muNAIS-5}HA-&n(c3b6_&%OcdwSm7r`CKZTMa>}KU2=y z5jj)Fa?G&pJpsf4yf-a(55~MV9#4-dz+6Yv=bvF!4)&>38w_xQ4Kj(jXxp4f@5It- z_XSS-TLF&TIX3CMD6+<$f;P5#m$tyD5qIm(NeHgudD0(%<3+ zVZ8Gw5hLBU{m+c*DrO51Q)L=ew0bQkRT_gcs)@~J=+^*`-`zXmI3%~ggCKCto4oz!jxk_REv>Sd~3sL z-^7y?`y8Xhj7O6jbZ0*W03~^`-8IxrU&@f_qCCHLw?rtl1UVn-Fy%7A$Gwmyyiry* z{vSfADEvW?ht~l%)i@iu7i-AUPyhn!BbF7Un1ViUnsga;cNlpJC!GgA%3Ez_NF+iL z%BhMFtV8xiE%eK~P0P(lj?Y6u>>_?7e;@Enaor6VtOz|w+>_E{rB zrBp!~kfn3?>K%eK;4yL=N#ymQ0k;|ODV=L=kqHB7?yg%9cIF57Yjw`6XpJ^kTMQUq zKiq&ujVBItAMzXJEwALX6j{hb*N@7O=;|}5$d8I$$xgY;tPUU7|}eSFm&6esfl2mpE4=(`{F$qHo>fks^jxY=!<$kb}w zG-f(b<^q&ABUr@+6eEX3klfk;%CxwubRu$M|8@b6ilzu4vLmp{T}5ah*NyB0ifT|< zg^Y0nZQ8~`6!S-)p+z6?A|OXJzO=^5!3hxX8ZiM;aR3tLG7?nn?Yb9JUV?c8;Fs+G zZilk|_$I{K>xo)?`%Eu$_@onlgfc4U-H|-Lap+f3AGT`&iimq~K=ovU2@hWZ@PFd? z89%OdCFH&UO8~jj47B?Uyw0qzSZB3I?IdN3)$#KoPW<_)8Z~Hk;SnI^T%g~-(+d-? zv*hn?{9>64REbN)ko5=r-$HC9_j#oGOvQPsj^3_X>|^ek%e4Hu#H5xu{DHiDfvHuC zc_pa>+`t~Fsz4S`ydM3-fZMW&n$)F5B~ieCXfKWBoKj0ZVf83F?TXBR$_G*^gGBI; zLtAHNg5iet?lW=^Mo?F*R)7aqV3*W#KbvsiY>QPT^!X11)~{AN8XDdK-&tn4zUvD) z9bQ*Ie7kt@p3HbN{mXdc-2bn}+wlv%}z2IYaIp z8LGChYcb0kH$o}jkNTf%Kx={FgKR+euHiuXpB68pxECaMt#r1*4~Rs9B1d%!a-u`AeN7>l6ZYl4~LtIHp26JKh*1z?nBq ziDf?F<=9HI=3hl_u4$D7puwLrN>o(SUyzyv(g8I4b|2Yf10*hH2OkFF;-j=2HH1CZ zYOLlJr%c*O8OS*?jl5ibl;J#|P;0myi6ARhfCYmS&0hlNN zj@g)75v4C`C(HmX(UsFIb$1Uajs&x6?}q#Mk^X@qBy>$Hq}Gx$nWm^qkg?(awx&d7 z5B$|Px0Sblzt)f4bqiMXJ%59eL5IIgR(+sD0FCX!b_5XYKQwXyAa`Nzs+!G$e2e#E z$m&(u@jzQ?)QkDr7Uo{{jVE?6PzjFbMe;z0`(0NAaETn@^NaijKcGD4L6)46dtg@ zgf6oE?5aPKYeJi?5#iE&-2P5HaLwM>9HF>m{YjZ;AT%QSX!eB4ixw?pPO@_9cY!Oc zCA9qz<^;$yuC+({5}<0kJf_@4k>{aAgIO{Sy<+ON>&ko&Vby#!yb}yJn8Kl2aI^d< z$o5cy7V*3NNw4_skA@0vBEGuH7V4q#vbH{mLYP~GG zgFCW$-Goq)H|v}K{cSQz7l6X5v0nfhG@YAvu*t%!1VhGMFnH(R%nw2N2po9wAE_qN z2q1-xw)J*@&iG^10O63?om)v@<_i>pYn!pNTD?P0W6O-Cw-a?hM;Hx3Q=ESx zx`7Re_gid*7jSX`Z2vjV_~MXIY{4?V4aDz)j;B(_p^s0Rn;C)7;FvX-PXp;F|D2O| ze|W-~F0gCn6Xr0(Y|-J1@+!NC2yioP>&8W2kDhq>JMw?TstH8E*O6xmW@o)SwXf8J zmF!MUO33b`t=Y%P2SP4xf^E$D-DVC0%?UlZ7;%3}9^}f?*uYm`PP6X!Z^tp27>c3z zbngQ>+5D_e&LtT1kQ7yI?4ktTT0P6nFdhpo_<;skq@k5g@Yh<}Qh@_YA+ zTlu*mB#oww&;Z9{?{IO-bYOK!+9&LPOK?{}35C#Bf*Cd%ArY{W-CJwfKYhDWW)+QX z6>lHDEg_V5NmL;V35cOE-Efp}o##?v;GBtnTL7Dogwse=r?inlUjwR)ikZ4gzER0| z!7eIPy>&JEaVweEZNZQx*r<%+ zw|!L?7nH%b|M&I3yaTWAi=^kQ*8D>grU_Q^|HsIo0dZ(p9HhqIUpK*d!~V-q`8lg~ Tptr+dYrrq4?^%G)!C?Onh4U<| literal 11918 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 F{}1F4FgXAK diff --git a/tests/test_graphical_units/control_data/geometry/Rectangle.npz b/tests/test_graphical_units/control_data/geometry/Rectangle.npz index d6cb95a7d8c660d700c78bb06674eae736f9e38e..71cc79bf750a4d4cb1390ee591d503ca99a5c7cb 100644 GIT binary patch delta 43 scmX>gd_Y(#z?+#xmw|zS1BewFb`~G4{0{{ir6M?)bs2OgmvVXo063%&00000 delta 43 xcmX>gd_Y(#z?+#xgn@y91BewFb`~G4)Z=7eXke9O*eDgj$t=PwGP#t~8vwqU2$cW; diff --git a/tests/test_graphical_units/control_data/geometry/RegularPolygram.npz b/tests/test_graphical_units/control_data/geometry/RegularPolygram.npz index 184e6120e2b7c2493431a6bb572055ff82b7d993..20b04f9a7330c432f65e739c1fe3fb532cebd46e 100644 GIT binary patch literal 13655 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 L;OBCE=+*xM6@2H< literal 13693 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 K{?*Whe*0fW$m;3< diff --git a/tests/test_graphical_units/control_data/geometry/RightAngle.npz b/tests/test_graphical_units/control_data/geometry/RightAngle.npz index 3ea7a3be71315c0e2223347c4ea3baf080a3ed0b..8ea2c4caa8dad045a833e54f562345a6c59beb12 100644 GIT binary patch delta 43 rcmbQnKaF21z?+#xmw|zS1BewF6nSfw{fB~$QhMynx(vFLz1h714P6d0 delta 43 xcmbQnKaF21z?+#xgn@y91BewF6nSfwv9L2RG_XoCY?RVtXBJ@=ne5H(4FHei2Aco? diff --git a/tests/test_graphical_units/control_data/geometry/RoundedRectangle.npz b/tests/test_graphical_units/control_data/geometry/RoundedRectangle.npz index 98083a27cb91a21adb801a2b04b2f788c8cf3265..9ec3bd73fbdc5c943c754d44f7c9bb612222e61a 100644 GIT binary patch literal 4410 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 N!7rRQfpGmEIxqkL diff --git a/tests/test_graphical_units/control_data/geometry/Sector.npz b/tests/test_graphical_units/control_data/geometry/Sector.npz index 3af257c26ee5f8ad566b2a5cee7fdaca98e294f5..ab5cd0b8f70d6295cb3d7a276774abeb52d7bfa6 100644 GIT binary patch delta 43 scmbOzGEqb-z?+#xmw|zS1BewFR;{^w@jn!7lv>HjtjnM~`531+06EGK)&Kwi delta 43 xcmbOzGEqb-z?+#xgn@y91BewFR;{^wv7VEGp@CJBVWZSaPG%8ik;%t6y#dA(3A_LR diff --git a/tests/test_graphical_units/control_data/geometry/Star.npz b/tests/test_graphical_units/control_data/geometry/Star.npz index 8c4c938efedc7ff09d844bde36a2816b0dfd880b..ee6906323ddcd861921175da8ddc169c14dcd7e3 100644 GIT binary patch literal 9012 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 I?t{Vp2X@4STmS$7 literal 9023 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

    clZI%rh*0KM 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/test_graphical_units/test_img_and_svg.py b/tests/test_graphical_units/test_img_and_svg.py index 1a94ddcf2a..b234431abb 100644 --- a/tests/test_graphical_units/test_img_and_svg.py +++ b/tests/test_graphical_units/test_img_and_svg.py @@ -242,6 +242,17 @@ def test_RotateTransform(scene): scene.wait() +@frames_comparison +def test_path_multiple_moves(scene): + svg_obj = SVGMobject( + get_svg_resource("path_multiple_moves.svg"), + fill_color=WHITE, + stroke_color=WHITE, + stroke_width=3, + ) + scene.add(svg_obj) + + @frames_comparison def test_ImageMobject(scene): file_path = get_svg_resource("tree_img_640x351.png") From 388504307ad5d1c5f7396b858c927cfa78822710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20V=C3=A1zquez?= Date: Sun, 13 Nov 2022 17:14:55 -0600 Subject: [PATCH 150/555] Implemented :class:`.LineJointTypes` for both Cairo and OpenGL renderer (#3016) * LineJoins added * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * added joint type enum, refactored proposed implementation * added test for joint types * added documentation * let LineJointType.AUTO be rendered like before * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * update added example in basic.py to reflect changed implementation * fix RTD build * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * moved rendered example in documentation * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- example_scenes/basic.py | 15 ++++ manim/camera/camera.py | 9 +++ manim/constants.py | 37 ++++++++++ .../opengl/opengl_vectorized_mobject.py | 14 ++-- manim/mobject/types/vectorized_mobject.py | 65 ++++++++++-------- manim/renderer/opengl_renderer.py | 6 -- .../mobjects/vmobject_joint_types.npz | Bin 0 -> 2915 bytes tests/test_graphical_units/test_mobjects.py | 17 +++++ 8 files changed, 119 insertions(+), 44 deletions(-) create mode 100644 tests/test_graphical_units/control_data/mobjects/vmobject_joint_types.npz diff --git a/example_scenes/basic.py b/example_scenes/basic.py index f7257ab8f7..cf5f475223 100644 --- a/example_scenes/basic.py +++ b/example_scenes/basic.py @@ -161,4 +161,19 @@ def construct(self): self.play(FadeOut(shapes)) +Triangle.set_default(stroke_width=20) + + +class LineJoints(Scene): + def construct(self): + t1 = Triangle() + t2 = Triangle(line_join=LineJointType.ROUND) + t3 = Triangle(line_join=LineJointType.BEVEL) + + grp = VGroup(t1, t2, t3).arrange(RIGHT) + grp.set(width=config.frame_width - 1) + + self.add(grp) + + # See many more examples at https://docs.manim.community/en/stable/examples.html diff --git a/manim/camera/camera.py b/manim/camera/camera.py index 1128ea612a..84e7060e38 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -30,6 +30,13 @@ from ..utils.iterables import list_difference_update from ..utils.space_ops import angle_of_vector +LINE_JOIN_MAP = { + LineJointType.AUTO: None, # TODO: this could be improved + LineJointType.ROUND: cairo.LineJoin.ROUND, + LineJointType.BEVEL: cairo.LineJoin.BEVEL, + LineJointType.MITER: cairo.LineJoin.MITER, +} + class Camera: """Base camera class. @@ -768,6 +775,8 @@ def apply_stroke( # This ensures lines have constant width as you zoom in on them. * (self.frame_width / self.frame_width), ) + if vmobject.joint_type != LineJointType.AUTO: + ctx.set_line_join(LINE_JOIN_MAP[vmobject.joint_type]) ctx.stroke_preserve() return self diff --git a/manim/constants.py b/manim/constants.py index ef50e0b396..d81d85902c 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -72,6 +72,7 @@ "SHIFT_VALUE", "CTRL_VALUE", "RendererType", + "LineJointType", ] # Messages @@ -264,3 +265,39 @@ class RendererType(Enum): CAIRO = "cairo" #: A renderer based on the cairo backend. OPENGL = "opengl" #: An OpenGL-based renderer. + + +class LineJointType(Enum): + """Collection of available line joint types. + + See the example below for a visual illustration of the different + joint types. + + Examples + -------- + + .. manim:: LineJointVariants + :save_last_frame: + + class LineJointVariants(Scene): + def construct(self): + mob = VMobject(stroke_width=20, color=GREEN).set_points_as_corners([ + np.array([-2, 0, 0]), + np.array([0, 0, 0]), + np.array([-2, 1, 0]), + ]) + lines = VGroup(*[mob.copy() for _ in range(len(LineJointType))]) + for line, joint_type in zip(lines, LineJointType): + line.joint_type = joint_type + + lines.arrange(RIGHT, buff=1) + self.add(lines) + for line in lines: + label = Text(line.joint_type.name).next_to(line, DOWN) + self.add(label) + """ + + AUTO = 0 + ROUND = 1 + BEVEL = 2 + MITER = 3 diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 90b1f38b66..2c12462b0a 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -35,13 +35,6 @@ z_to_vector, ) -JOINT_TYPE_MAP = { - "auto": 0, - "round": 1, - "bevel": 2, - "miter": 3, -} - def triggers_refreshed_triangulation(func): @wraps(func) @@ -108,7 +101,7 @@ def __init__( should_subdivide_sharp_curves: bool = False, should_remove_null_curves: bool = False, # Could also be "bevel", "miter", "round" - joint_type: str = "auto", + joint_type: LineJointType | None = None, flat_stroke: bool = True, render_primitive=moderngl.TRIANGLES, triangulation_locked: bool = False, @@ -134,7 +127,8 @@ def __init__( self.long_lines = long_lines self.should_subdivide_sharp_curves = should_subdivide_sharp_curves self.should_remove_null_curves = should_remove_null_curves - # Could also be "bevel", "miter", "round" + if joint_type is None: + joint_type = LineJointType.AUTO self.joint_type = joint_type self.flat_stroke = flat_stroke self.render_primitive = render_primitive @@ -1564,7 +1558,7 @@ def get_shader_wrapper_list(self): def get_stroke_uniforms(self): result = dict(super().get_shader_uniforms()) - result["joint_type"] = JOINT_TYPE_MAP[self.joint_type] + result["joint_type"] = self.joint_type.value result["flat_stroke"] = float(self.flat_stroke) return result diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 55f69e5ccf..36bf146263 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -1,5 +1,6 @@ """Mobjects that use vector graphics.""" +from __future__ import annotations __all__ = [ "VMobject", @@ -70,6 +71,10 @@ class VMobject(Mobject): that it should count in parent mobject's path tolerance_for_point_equality This is within a pixel + joint_type + The line joint type used to connect the curve segments + of this vectorized mobject. See :class:`.LineJointType` + for options. """ sheen_factor = 0.0 @@ -85,6 +90,7 @@ def __init__( background_stroke_opacity=1.0, background_stroke_width=0, sheen_factor=0.0, + joint_type: LineJointType | None = None, sheen_direction=UL, close_new_points=False, pre_function_handle_to_anchor_scale_factor=0.01, @@ -103,6 +109,9 @@ def __init__( 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 = ( @@ -208,8 +217,8 @@ def update_rgbas_array(self, array_name, color=None, opacity=None): def set_fill( self, - color: Optional[str] = None, - opacity: Optional[float] = None, + color: str | None = None, + opacity: float | None = None, family: bool = True, ): """Set the fill color and fill opacity of a :class:`VMobject`. @@ -574,14 +583,14 @@ 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: Union[Image, str]): + def color_using_background_image(self, background_image: Image | str): self.background_image = background_image self.set_color(WHITE) for submob in self.submobjects: submob.color_using_background_image(background_image) return self - def get_background_image(self) -> Union[Image, str]: + def get_background_image(self) -> Image | str: return self.background_image def match_background_image(self, vmobject): @@ -827,7 +836,7 @@ def close_path(self): 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: np.ndarray) -> VMobject: for point in points: self.add_line_to(point) return points @@ -929,7 +938,7 @@ def rotate( self, angle: float, axis: np.ndarray = OUT, - about_point: Optional[Sequence[float]] = None, + about_point: Sequence[float] | None = None, **kwargs, ): self.rotate_sheen_direction(angle, axis) @@ -1000,7 +1009,7 @@ def consider_points_equals_2d(self, p0: np.ndarray, p1: np.ndarray) -> bool: def get_cubic_bezier_tuples_from_points(self, points): return np.array(list(self.gen_cubic_bezier_tuples_from_points(points))) - def gen_cubic_bezier_tuples_from_points(self, points: np.ndarray) -> typing.Tuple: + def gen_cubic_bezier_tuples_from_points(self, points: np.ndarray) -> tuple: """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 ..]) @@ -1031,7 +1040,7 @@ def _gen_subpaths_from_points( self, points: np.ndarray, filter_func: typing.Callable[[int], bool], - ) -> typing.Tuple: + ) -> 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. @@ -1075,7 +1084,7 @@ def gen_subpaths_from_points_2d(self, points): lambda n: not self.consider_points_equals_2d(points[n - 1], points[n]), ) - def get_subpaths(self) -> typing.Tuple: + def get_subpaths(self) -> tuple: """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. @@ -1122,7 +1131,7 @@ def get_nth_curve_function(self, n: int) -> typing.Callable[[float], np.ndarray] def get_nth_curve_length_pieces( self, n: int, - sample_points: Optional[int] = None, + sample_points: int | None = None, ) -> np.ndarray: """Returns the array of short line lengths used for length approximation. @@ -1151,7 +1160,7 @@ def get_nth_curve_length_pieces( def get_nth_curve_length( self, n: int, - sample_points: Optional[int] = None, + sample_points: int | None = None, ) -> float: """Returns the (approximate) length of the nth curve. @@ -1175,8 +1184,8 @@ def get_nth_curve_length( def get_nth_curve_function_with_length( self, n: int, - sample_points: Optional[int] = None, - ) -> typing.Tuple[typing.Callable[[float], np.ndarray], float]: + sample_points: int | None = None, + ) -> tuple[typing.Callable[[float], np.ndarray], float]: """Returns the expression of the nth curve along with its (approximate) length. Parameters @@ -1229,7 +1238,7 @@ def get_curve_functions( def get_curve_functions_with_lengths( self, **kwargs - ) -> typing.Iterable[typing.Tuple[typing.Callable[[float], np.ndarray], float]]: + ) -> typing.Iterable[tuple[typing.Callable[[float], np.ndarray], float]]: """Gets the functions and lengths of the curves for the mobject. Parameters @@ -1294,7 +1303,7 @@ def point_from_proportion(self, alpha: float) -> np.ndarray: def proportion_from_point( self, - point: typing.Iterable[typing.Union[float, int]], + point: typing.Iterable[float | int], ) -> float: """Returns the proportion along the path of the :class:`VMobject` a particular given point is at. @@ -1401,7 +1410,7 @@ def get_points_defining_boundary(self): # 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())))) - def get_arc_length(self, sample_points_per_curve: Optional[int] = None) -> float: + def get_arc_length(self, sample_points_per_curve: int | None = None) -> float: """Return the approximated length of the whole curve. Parameters @@ -1423,7 +1432,7 @@ def get_arc_length(self, sample_points_per_curve: Optional[int] = None) -> float ) # Alignment - def align_points(self, vmobject: "VMobject"): + def align_points(self, vmobject: VMobject): """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. @@ -1614,7 +1623,7 @@ def interpolate_color(self, mobject1, mobject2, alpha): def pointwise_become_partial( self, - vmobject: "VMobject", + vmobject: VMobject, a: float, b: float, ): @@ -1674,7 +1683,7 @@ def pointwise_become_partial( ) return self - def get_subcurve(self, a: float, b: float) -> "VMobject": + def get_subcurve(self, a: float, b: float) -> VMobject: """Returns the subcurve of the VMobject between the interval [a, b]. The curve is a VMobject itself. @@ -1906,7 +1915,7 @@ def __sub__(self, vmobject): def __isub__(self, vmobject): return self.remove(vmobject) - def __setitem__(self, key: int, value: Union[VMobject, typing.Sequence[VMobject]]): + def __setitem__(self, key: int, value: VMobject | typing.Sequence[VMobject]): """Override the [] operator for item assignment. Parameters @@ -2032,10 +2041,10 @@ def construct(self): def __init__( self, - mapping_or_iterable: Union[ - typing.Mapping[typing.Hashable, VMobject], - typing.Iterable[typing.Tuple[typing.Hashable, VMobject]], - ] = {}, + mapping_or_iterable: ( + typing.Mapping[typing.Hashable, VMobject] + | typing.Iterable[tuple[typing.Hashable, VMobject]] + ) = {}, show_keys: bool = False, **kwargs, ): @@ -2049,10 +2058,10 @@ def __repr__(self): def add( self, - mapping_or_iterable: Union[ - typing.Mapping[typing.Hashable, VMobject], - typing.Iterable[typing.Tuple[typing.Hashable, VMobject]], - ], + mapping_or_iterable: ( + typing.Mapping[typing.Hashable, VMobject] + | typing.Iterable[tuple[typing.Hashable, VMobject]] + ), ): """Adds the key-value pairs to the :class:`VDict` object. diff --git a/manim/renderer/opengl_renderer.py b/manim/renderer/opengl_renderer.py index ffd29cc1bf..aa0bdbebf4 100644 --- a/manim/renderer/opengl_renderer.py +++ b/manim/renderer/opengl_renderer.py @@ -218,12 +218,6 @@ def interpolate(self, *args, **kwargs): points_per_curve = 3 -JOINT_TYPE_MAP = { - "auto": 0, - "round": 1, - "bevel": 2, - "miter": 3, -} class OpenGLRenderer: diff --git a/tests/test_graphical_units/control_data/mobjects/vmobject_joint_types.npz b/tests/test_graphical_units/control_data/mobjects/vmobject_joint_types.npz new file mode 100644 index 0000000000000000000000000000000000000000..8f668025d3493047a79fc7417d536e870e7049e1 GIT binary patch literal 2915 zcmWIWW@Zs#U|`??Vnv2lmJjw9xfmE4SS1Qg>}jbo$3MDe&q}Qn`11J3a)EhGrlLL5BwRbvUyE~bF7??irXm^L87Ouo zUVv5B^}l0JAD7jN{cp}aS5ca$FhBQv>HYcdy(=2u9jW}h&o1WPt3U6)dS~ay?aP07 z?a=eby=UjXzWsRf;*a9<=gH~!AA5iQ&cBrEzl&F!Z#Oqnm*2mkE;;@4yW{0{5&tVb zzw4iGyVu5Qb5&O5mS2Zv?!I50S6Px?(tp2CM@Odw;^a|sGz1212wYG_z2lDzg$!P?tJFH@c`iy+Z1*Bp^-um}_Z)9shdS|Lsu}ymWe7AD7 zdp6wkPpi+DY%gCg^WvJXPhDT}bpJB%cJbN&XPsOM)uA;b=e)Q0{P%f(|J-YQKli(* zj0x22fY!arV6Oq4wc^mdiC_zXP6|nU?*X%K)rNAgJ3+w{dczv*2w-?LYQ2#KhZ)e7 z4x-=sRG{uzz*X%oG-~{C44fJJo9(i-aG*Sf(frWJry=>AGSQGNZ_O~d-~y1m!-Slb$}{&@2-NX1&7pZgduZ?Oyh za$Vs2y06B`|NhuIw7q(5zik)0yycZW#a{#T7G>qSO&dPb)w!cN6kA3lx=Y0q^-kQgMKG68hiFJSWAKZkBo>C48o*Pj1o^SS)%j6n=AdzU=doBw7SpT61qi1VgC`@Y?OazEJj-@Euv^MhaR zY;%{d-vP8QjpJ9v{Xtvgjyh~K1Rx=>VE;d+0B=Sn5oTOXVnj$aFoM{q4deiCRyL3* NBM{mEX+drf4*)Ch<(~im literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/test_mobjects.py b/tests/test_graphical_units/test_mobjects.py index e5c531842d..21ea20437c 100644 --- a/tests/test_graphical_units/test_mobjects.py +++ b/tests/test_graphical_units/test_mobjects.py @@ -36,3 +36,20 @@ def test_match_style(scene): VGroup(square, circle).arrange() circle.match_style(square) scene.add(square, circle) + + +@frames_comparison +def test_vmobject_joint_types(scene): + angled_line = VMobject(stroke_width=20, color=GREEN).set_points_as_corners( + [ + np.array([-2, 0, 0]), + np.array([0, 0, 0]), + np.array([-2, 1, 0]), + ] + ) + lines = VGroup(*[angled_line.copy() for _ in range(len(LineJointType))]) + for line, joint_type in zip(lines, LineJointType): + line.joint_type = joint_type + + lines.arrange(RIGHT, buff=1) + scene.add(lines) From 8ad3940f4be8eb0fa66d43ca926bf54dbe848de8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 14 Nov 2022 20:58:10 -0700 Subject: [PATCH 151/555] [pre-commit.ci] pre-commit autoupdate (#3021) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v3.2.0 → v3.2.2](https://github.com/asottile/pyupgrade/compare/v3.2.0...v3.2.2) - [github.com/pre-commit/mirrors-mypy: v0.982 → v0.990](https://github.com/pre-commit/mirrors-mypy/compare/v0.982...v0.990) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f40031435b..30dabd42a8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v3.2.0 + rev: v3.2.2 hooks: - id: pyupgrade name: Update code to new python versions @@ -51,7 +51,7 @@ repos: flake8-docstrings==1.6.0, flake8-rst-docstrings==0.2.3, flake8-pytest-style==1.5.0, flake8-simplify==0.14.1, flake8-comprehensions>=3.6.1] - repo: https://github.com/pre-commit/mirrors-mypy - rev: 'v0.982' + rev: 'v0.990' hooks: - id: mypy additional_dependencies: [types-decorator, types-docutils, types-requests, types-setuptools] From 594274ab9744f15fc11f58aaa1203dce60713295 Mon Sep 17 00:00:00 2001 From: vahndi Date: Mon, 14 Nov 2022 23:03:21 -0500 Subject: [PATCH 152/555] extend typehint in Axes.coords_to_point to indicate float coordinates are accepted (#3022) --- manim/mobject/graphing/coordinate_systems.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 80f88b94c8..703d879d7c 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -1966,7 +1966,7 @@ def _create_axis( return axis def coords_to_point( - self, *coords: Sequence[float] | Sequence[Sequence[float]] | np.ndarray + self, *coords: float | Sequence[float] | Sequence[Sequence[float]] | np.ndarray ) -> np.ndarray: """Accepts coordinates from the axes and returns a point with respect to the scene. From 68968e98d3f556eb4a14b7e61f44a75cbe055377 Mon Sep 17 00:00:00 2001 From: Kian-Meng Ang Date: Tue, 15 Nov 2022 12:56:09 +0800 Subject: [PATCH 153/555] Fix missing stub packages for mypy (#2958) This resolves the error when running mypy hook for pre-commit: `error: Library stubs not installed for "backports.cached_property" (or incompatible with Python 3.7) [import]` We also prettify the pre-commit's yaml config file. Co-authored-by: Benjamin Hackl --- .pre-commit-config.yaml | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 30dabd42a8..f866495655 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -41,20 +41,34 @@ repos: - repo: https://github.com/asottile/blacken-docs rev: v1.12.1 hooks: - - id: blacken-docs + - id: blacken-docs additional_dependencies: [black==22.3.0] - repo: https://github.com/PyCQA/flake8 rev: 5.0.4 hooks: - id: flake8 - additional_dependencies: [flake8-builtins==1.5.3, flake8-bugbear==21.4.3, - flake8-docstrings==1.6.0, flake8-rst-docstrings==0.2.3, - flake8-pytest-style==1.5.0, flake8-simplify==0.14.1, flake8-comprehensions>=3.6.1] + additional_dependencies: + [ + flake8-bugbear==21.4.3, + flake8-builtins==1.5.3, + flake8-comprehensions>=3.6.1, + flake8-docstrings==1.6.0, + flake8-pytest-style==1.5.0, + flake8-rst-docstrings==0.2.3, + flake8-simplify==0.14.1, + ] - repo: https://github.com/pre-commit/mirrors-mypy - rev: 'v0.990' + rev: v0.990 hooks: - id: mypy - additional_dependencies: [types-decorator, types-docutils, types-requests, types-setuptools] + additional_dependencies: + [ + types-backports, + types-decorator, + types-docutils, + types-requests, + types-setuptools, + ] - repo: https://github.com/codespell-project/codespell rev: v2.2.2 From c82c298cc1e05afae1cbb53debf0e08756c308e2 Mon Sep 17 00:00:00 2001 From: Isaac Beh Date: Tue, 15 Nov 2022 15:12:46 +1000 Subject: [PATCH 154/555] Allowed ``networkx`` to return 3D layouts when passing ``dim=3`` in the ``layout_config`` of a :class:`.Graph` (#2927) * fix: return 3D points when layout_config has dims=3 When layout_config option dims was set to 3, changing or setting graph layout (via _determine_graph_layout) now returns a dictionary of tuples of length 3 to represent vertices. Previously returned a layout with tuples of length 4 instead. When the layout option dim is not 3 or unset, no change is made. * Update manim/mobject/graph.py Co-authored-by: Benjamin Hackl --- manim/mobject/graph.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/manim/mobject/graph.py b/manim/mobject/graph.py index 2f24bbbf2c..011def2597 100644 --- a/manim/mobject/graph.py +++ b/manim/mobject/graph.py @@ -58,7 +58,13 @@ def _determine_graph_layout( auto_layout = automatic_layouts[layout]( nx_graph, scale=layout_scale, **layout_config ) - return {k: np.append(v, [0]) for k, v in auto_layout.items()} + # NetworkX returns a dictionary of 3D points if the dimension + # is specified to be 3. Otherwise, it returns a dictionary of + # 2D points, so adjusting is required. + if layout_config.get("dim") == 3: + return auto_layout + else: + return {k: np.append(v, [0]) for k, v in auto_layout.items()} elif layout == "tree": return _tree_layout( nx_graph, root_vertex=root_vertex, scale=layout_scale, **layout_config From 42d595ac4fb6c607a8375e28f24b9b7193668cb5 Mon Sep 17 00:00:00 2001 From: "OpenRefactory, Inc" <56681071+openrefactory@users.noreply.github.com> Date: Mon, 14 Nov 2022 21:20:57 -0800 Subject: [PATCH 155/555] Suggested fixes by iCR, OpenRefactory, Inc. (#2938) * Suggested fixes by iCR, OpenRefactory, Inc. * Apply suggestions from code review Co-authored-by: Benjamin Hackl --- manim/cli/render/commands.py | 2 +- manim/mobject/opengl/opengl_mobject.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/manim/cli/render/commands.py b/manim/cli/render/commands.py index 9c1fc83fbb..eca0091660 100644 --- a/manim/cli/render/commands.py +++ b/manim/cli/render/commands.py @@ -123,7 +123,7 @@ def __repr__(self): req_info = {} try: - req_info = requests.get(manim_info_url) + req_info = requests.get(manim_info_url, timeout=10) req_info.raise_for_status() stable = req_info.json()["info"]["version"] diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 5e3cd2ecfa..864326497e 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -168,16 +168,16 @@ def __repr__(self): return str(self.name) def __sub__(self, other): - raise NotImplementedError + return NotImplemented def __isub__(self, other): - raise NotImplementedError + return NotImplemented def __add__(self, mobject): - raise NotImplementedError + return NotImplemented def __iadd__(self, mobject): - raise NotImplementedError + return NotImplemented @classmethod def set_default(cls, **kwargs): From 15241e3bfd40dcb5d231ce49034d49cef8cbe42d Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Sat, 19 Nov 2022 08:38:13 -0800 Subject: [PATCH 156/555] CI: update actions version and add dependabot config (#3029) * CI: update actions version - Update inlined code to use `$GITHUB_OUTPUT` see https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ * Add dependabot config to update dependencies automatically --- .github/dependabot.yml | 11 +++++++++++ .github/workflows/cffconvert.yml | 2 +- .github/workflows/ci.yml | 16 ++++++++-------- .github/workflows/publish-docker.yml | 11 ++++++----- .github/workflows/python-publish.yml | 13 +++++++------ 5 files changed, 33 insertions(+), 20 deletions(-) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..147079c447 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" + ignore: + - dependency-name: "*" + update-types: + - "version-update:semver-minor" + - "version-update:semver-patch" diff --git a/.github/workflows/cffconvert.yml b/.github/workflows/cffconvert.yml index 707a71c4b2..6851c52d38 100644 --- a/.github/workflows/cffconvert.yml +++ b/.github/workflows/cffconvert.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out a copy of the repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Check whether the citation metadata from CITATION.cff is valid uses: citation-file-format/cffconvert-github-action@2.0.0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ea5a5ab20a..e1651d7855 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: python: ['3.7.14', '3.10.7'] steps: - name: Checkout the repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Check Runner run: | @@ -74,10 +74,10 @@ jobs: steps: - name: Checkout the repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Python ${{ matrix.python }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} @@ -98,13 +98,13 @@ jobs: echo "::set-output name=date::$(/bin/date -u "+%m%w%Y")" - name: Setup Poetry cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ steps.cache-vars.outputs.poetry-venv-dir }} key: ${{ runner.os }}-poetry-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('poetry.lock') }} - name: Install and cache ffmpeg (all OS) - uses: FedericoCarboni/setup-ffmpeg@v1.1.0 + uses: FedericoCarboni/setup-ffmpeg@v2 with: token: ${{ secrets.GITHUB_TOKEN }} id: setup-ffmpeg @@ -120,7 +120,7 @@ jobs: - name: Setup macOS cache id: cache-macos if: runner.os == 'macOS' - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ github.workspace }}/macos-cache key: ${{ runner.os }}-dependencies-tinytex-${{ hashFiles('.github/manimdependency.json') }}-${{ steps.cache-vars.outputs.date }}-1 @@ -159,7 +159,7 @@ jobs: - name: Setup Windows cache id: cache-windows if: runner.os == 'Windows' - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ github.workspace }}\ManimCache key: ${{ runner.os }}-dependencies-tinytex-${{ hashFiles('.github/manimdependency.json') }}-${{ steps.cache-vars.outputs.date }}-1 @@ -208,4 +208,4 @@ jobs: cd docs && pip install -r requirements.txt && poetry run make doctest O=-tskip-manim - name: Upload coverage - uses: codecov/codecov-action@v1 + uses: codecov/codecov-action@v3 diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml index 4ca4298721..d34e3ac4b4 100644 --- a/.github/workflows/publish-docker.yml +++ b/.github/workflows/publish-docker.yml @@ -16,10 +16,10 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} @@ -41,10 +41,10 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} @@ -57,7 +57,8 @@ jobs: run: | import os ref_tag = os.getenv('tag_act').split('/')[-1] - print(f"::set-output name=tag_name::{ref_tag}") + with open(os.getenv('GITHUB_OUTPUT'), 'w') as f: + print(f"tag_name={ref_tag}", file=f) - name: Build and push uses: docker/build-push-action@v3 diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index d091c857e8..42763dae49 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -8,12 +8,12 @@ jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python 3.8 - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: 3.9 - name: Install dependencies run: python -m pip install --upgrade poetry @@ -30,7 +30,7 @@ jobs: poetry build - name: Store artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: path: dist/*.tar.gz name: manim.tar.gz @@ -54,8 +54,9 @@ jobs: url = f"https://api.github.com/repos/ManimCommunity/manim/releases/tags/{ref_tag}" c = requests.get(url,headers=headers) upload_url=c.json()['upload_url'] - print(f"::set-output name=upload_url::{upload_url}") - print(f"::set-output name=tag_name::{ref_tag[1:]}") + with open(os.getenv('GITHUB_OUTPUT'), 'w') as f: + print(f"upload_url={upload_url}", file=f) + print(f"tag_name={ref_tag[1:]}", file=f) - name: Upload Release Asset id: upload-release From 7f5f8c14cb297f27a4521f93ff72d8318cb4e8cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 12:46:34 +0100 Subject: [PATCH 157/555] Bump jupyter-core from 4.11.1 to 4.11.2 (#3032) Bumps [jupyter-core](https://github.com/jupyter/jupyter_core) from 4.11.1 to 4.11.2. - [Release notes](https://github.com/jupyter/jupyter_core/releases) - [Changelog](https://github.com/jupyter/jupyter_core/blob/main/CHANGELOG.md) - [Commits](https://github.com/jupyter/jupyter_core/compare/4.11.1...4.11.2) --- updated-dependencies: - dependency-name: jupyter-core dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/poetry.lock b/poetry.lock index 068f118f4b..3caddd32a4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -107,7 +107,7 @@ python-versions = ">=3.5" 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"] +tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] [[package]] name = "Babel" @@ -226,7 +226,7 @@ optional = false python-versions = ">=3.6.0" [package.extras] -unicode_backport = ["unicodedata2"] +unicode-backport = ["unicodedata2"] [[package]] name = "click" @@ -770,9 +770,9 @@ python-versions = ">=3.6.1,<4.0" [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" @@ -868,10 +868,10 @@ test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-comm [[package]] name = "jupyter-core" -version = "4.11.1" +version = "4.11.2" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.dependencies] @@ -1019,7 +1019,7 @@ typing_extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [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"] @@ -1085,7 +1085,7 @@ python-versions = ">=3.7" 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"] @@ -1196,7 +1196,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"] @@ -1853,7 +1853,7 @@ name = "pywin32" version = "304" description = "Python for Window Extensions" category = "main" -optional = true +optional = false python-versions = "*" [[package]] @@ -1913,7 +1913,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" @@ -2117,7 +2117,7 @@ python-versions = ">=3.6" 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]] @@ -2306,7 +2306,7 @@ name = "traitlets" version = "5.4.0" description = "" category = "main" -optional = true +optional = false python-versions = ">=3.7" [package.extras] @@ -3033,8 +3033,8 @@ jupyter-client = [ {file = "jupyter_client-7.3.5.tar.gz", hash = "sha256:3c58466a1b8d55dba0bf3ce0834e4f5b7760baf98d1d73db0add6f19de9ecd1d"}, ] jupyter-core = [ - {file = "jupyter_core-4.11.1-py3-none-any.whl", hash = "sha256:715e22bb6cc7db3718fddfac1f69f1c7e899ca00e42bdfd4bf3705452b9fd84a"}, - {file = "jupyter_core-4.11.1.tar.gz", hash = "sha256:2e5f244d44894c4154d06aeae3419dd7f1b0ef4494dc5584929b398c61cfd314"}, + {file = "jupyter_core-4.11.2-py3-none-any.whl", hash = "sha256:3815e80ec5272c0c19aad087a0d2775df2852cfca8f5a17069e99c9350cecff8"}, + {file = "jupyter_core-4.11.2.tar.gz", hash = "sha256:c2909b9bc7dca75560a6c5ae78c34fd305ede31cd864da3c0d0bb2ed89aa9337"}, ] jupyter-server = [ {file = "jupyter_server-1.19.1-py3-none-any.whl", hash = "sha256:ea3587840f2a906883c9eecb6bc85ef87ba1b7ba4cb6eafbacfac4a568862106"}, From ebe36178e722c8590a44e23872208ee52bc12bbd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 04:38:23 -0800 Subject: [PATCH 158/555] Bump pillow from 9.2.0 to 9.3.0 (#3033) Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.2.0 to 9.3.0. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/9.2.0...9.3.0) --- updated-dependencies: - dependency-name: pillow dependency-type: direct:production ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- poetry.lock | 125 +++++++++++++++++++++++++++------------------------- 1 file changed, 64 insertions(+), 61 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3caddd32a4..b3792a0a0b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1449,8 +1449,8 @@ optional = true python-versions = "*" [[package]] -name = "Pillow" -version = "9.2.0" +name = "pillow" +version = "9.3.0" description = "Python Imaging Library (Fork)" category = "main" optional = false @@ -3501,65 +3501,68 @@ 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.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"}, - {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7888310f6214f19ab2b6df90f3f06afa3df7ef7355fc025e78a3044737fab1f5"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831e648102c82f152e14c1a0938689dbb22480c548c8d4b8b248b3e50967b88c"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cc1d2451e8a3b4bfdb9caf745b58e6c7a77d2e469159b0d527a4554d73694d1"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:136659638f61a251e8ed3b331fc6ccd124590eeff539de57c5f80ef3a9594e58"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6e8c66f70fb539301e064f6478d7453e820d8a2c631da948a23384865cd95544"}, - {file = "Pillow-9.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37ff6b522a26d0538b753f0b4e8e164fdada12db6c6f00f62145d732d8a3152e"}, - {file = "Pillow-9.2.0-cp310-cp310-win32.whl", hash = "sha256:c79698d4cd9318d9481d89a77e2d3fcaeff5486be641e60a4b49f3d2ecca4e28"}, - {file = "Pillow-9.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d"}, - {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:adabc0bce035467fb537ef3e5e74f2847c8af217ee0be0455d4fec8adc0462fc"}, - {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:336b9036127eab855beec9662ac3ea13a4544a523ae273cbf108b228ecac8437"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50dff9cc21826d2977ef2d2a205504034e3a4563ca6f5db739b0d1026658e004"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6259196a589123d755380b65127ddc60f4c64b21fc3bb46ce3a6ea663659b0"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0554af24df2bf96618dac71ddada02420f946be943b181108cac55a7a2dcd4"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:15928f824870535c85dbf949c09d6ae7d3d6ac2d6efec80f3227f73eefba741c"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bdd0de2d64688ecae88dd8935012c4a72681e5df632af903a1dca8c5e7aa871a"}, - {file = "Pillow-9.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5b87da55a08acb586bad5c3aa3b86505f559b84f39035b233d5bf844b0834b1"}, - {file = "Pillow-9.2.0-cp311-cp311-win32.whl", hash = "sha256:b6d5e92df2b77665e07ddb2e4dbd6d644b78e4c0d2e9272a852627cdba0d75cf"}, - {file = "Pillow-9.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6bf088c1ce160f50ea40764f825ec9b72ed9da25346216b91361eef8ad1b8f8c"}, - {file = "Pillow-9.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:2c58b24e3a63efd22554c676d81b0e57f80e0a7d3a5874a7e14ce90ec40d3069"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef7592281f7c174d3d6cbfbb7ee5984a671fcd77e3fc78e973d492e9bf0eb3f"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dcd7b9c7139dc8258d164b55696ecd16c04607f1cc33ba7af86613881ffe4ac8"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a138441e95562b3c078746a22f8fca8ff1c22c014f856278bdbdd89ca36cff1b"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:93689632949aff41199090eff5474f3990b6823404e45d66a5d44304e9cdc467"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:f3fac744f9b540148fa7715a435d2283b71f68bfb6d4aae24482a890aed18b59"}, - {file = "Pillow-9.2.0-cp37-cp37m-win32.whl", hash = "sha256:fa768eff5f9f958270b081bb33581b4b569faabf8774726b283edb06617101dc"}, - {file = "Pillow-9.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:69bd1a15d7ba3694631e00df8de65a8cb031911ca11f44929c97fe05eb9b6c1d"}, - {file = "Pillow-9.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:030e3460861488e249731c3e7ab59b07c7853838ff3b8e16aac9561bb345da14"}, - {file = "Pillow-9.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:74a04183e6e64930b667d321524e3c5361094bb4af9083db5c301db64cd341f3"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d33a11f601213dcd5718109c09a52c2a1c893e7461f0be2d6febc2879ec2402"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fd6f5e3c0e4697fa7eb45b6e93996299f3feee73a3175fa451f49a74d092b9f"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a647c0d4478b995c5e54615a2e5360ccedd2f85e70ab57fbe817ca613d5e63b8"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4134d3f1ba5f15027ff5c04296f13328fecd46921424084516bdb1b2548e66ff"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:bc431b065722a5ad1dfb4df354fb9333b7a582a5ee39a90e6ffff688d72f27a1"}, - {file = "Pillow-9.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1536ad017a9f789430fb6b8be8bf99d2f214c76502becc196c6f2d9a75b01b76"}, - {file = "Pillow-9.2.0-cp38-cp38-win32.whl", hash = "sha256:2ad0d4df0f5ef2247e27fc790d5c9b5a0af8ade9ba340db4a73bb1a4a3e5fb4f"}, - {file = "Pillow-9.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ec52c351b35ca269cb1f8069d610fc45c5bd38c3e91f9ab4cbbf0aebc136d9c8"}, - {file = "Pillow-9.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ed2c4ef2451de908c90436d6e8092e13a43992f1860275b4d8082667fbb2ffc"}, - {file = "Pillow-9.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ad2f835e0ad81d1689f1b7e3fbac7b01bb8777d5a985c8962bedee0cc6d43da"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea98f633d45f7e815db648fd7ff0f19e328302ac36427343e4432c84432e7ff4"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7761afe0126d046974a01e030ae7529ed0ca6a196de3ec6937c11df0df1bc91c"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a54614049a18a2d6fe156e68e188da02a046a4a93cf24f373bffd977e943421"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:5aed7dde98403cd91d86a1115c78d8145c83078e864c1de1064f52e6feb61b20"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:13b725463f32df1bfeacbf3dd197fb358ae8ebcd8c5548faa75126ea425ccb60"}, - {file = "Pillow-9.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:808add66ea764ed97d44dda1ac4f2cfec4c1867d9efb16a33d158be79f32b8a4"}, - {file = "Pillow-9.2.0-cp39-cp39-win32.whl", hash = "sha256:337a74fd2f291c607d220c793a8135273c4c2ab001b03e601c36766005f36885"}, - {file = "Pillow-9.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:fac2d65901fb0fdf20363fbd345c01958a742f2dc62a8dd4495af66e3ff502a4"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ad2277b185ebce47a63f4dc6302e30f05762b688f8dc3de55dbae4651872cdf3"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7b502bc34f6e32ba022b4a209638f9e097d7a9098104ae420eb8186217ebbb"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1f14f5f691f55e1b47f824ca4fdcb4b19b4323fe43cc7bb105988cad7496be"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:dfe4c1fedfde4e2fbc009d5ad420647f7730d719786388b7de0999bf32c0d9fd"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:f07f1f00e22b231dd3d9b9208692042e29792d6bd4f6639415d2f23158a80013"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1802f34298f5ba11d55e5bb09c31997dc0c6aed919658dfdf0198a2fe75d5490"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17d4cafe22f050b46d983b71c707162d63d796a1235cdf8b9d7a112e97b15bac"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96b5e6874431df16aee0c1ba237574cb6dff1dcb173798faa6a9d8b399a05d0e"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"}, - {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"}, +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"}, From da7d453c8c664d4a15bf2be362a9aad66f9d40fe Mon Sep 17 00:00:00 2001 From: Ievgen Pyrogov <207112+gmile@users.noreply.github.com> Date: Fri, 25 Nov 2022 14:35:21 +0100 Subject: [PATCH 159/555] Include ubuntu/latex install instructions (#3035) --- docs/source/installation/linux.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/source/installation/linux.rst b/docs/source/installation/linux.rst index 7006efd156..25d2d63ad1 100644 --- a/docs/source/installation/linux.rst +++ b/docs/source/installation/linux.rst @@ -138,6 +138,12 @@ to install with your package manager. Usually, `TeX Live `__ is a good candidate if you don't care too much about disk space. +For Ubuntu, sufficient latex can be installed by running: + +.. code-block:: bash + + sudo apt install texlive texlive-latex-extra + Should you choose to work with some smaller TeX distribution like `TinyTeX `__ , the full list of LaTeX packages which Manim interacts with in some way (a subset might From 482994b58f22061c8f2b8e127dc4d00f654b9c6a Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Sat, 26 Nov 2022 12:36:13 -0500 Subject: [PATCH 160/555] Update python-opengl -> python3-opengl for Ubuntu CI task (#3045) * Update python-opengl -> python3-opengl https://packages.ubuntu.com/jammy/python3-opengl The ubuntu CI flows had been failing because the python2 version does not exist past focal (20.04 LTS) * Pin to ubuntu 22.04 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e1651d7855..ea3f8f4528 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-22.04, macos-latest, windows-latest] python: ['3.7', '3.8', '3.9', '3.10'] steps: @@ -113,7 +113,7 @@ jobs: if: runner.os == 'Linux' run: | sudo apt update - sudo apt-get -y install texlive texlive-latex-extra texlive-fonts-extra texlive-latex-recommended texlive-science texlive-fonts-extra tipa python-opengl libpango1.0-dev xvfb + sudo apt-get -y install texlive texlive-latex-extra texlive-fonts-extra texlive-latex-recommended texlive-science texlive-fonts-extra tipa python3-opengl libpango1.0-dev xvfb # start xvfb in background sudo /usr/bin/Xvfb $DISPLAY -screen 0 1280x1024x24 & From f8b0495b05bbdf4463ba2e2151fde45ddf62443c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 29 Nov 2022 13:32:01 +0100 Subject: [PATCH 161/555] [pre-commit.ci] pre-commit autoupdate (#3037) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v4.3.0 → v4.4.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.3.0...v4.4.0) - [github.com/PyCQA/flake8: 5.0.4 → 6.0.0](https://github.com/PyCQA/flake8/compare/5.0.4...6.0.0) - [github.com/pre-commit/mirrors-mypy: v0.990 → v0.991](https://github.com/pre-commit/mirrors-mypy/compare/v0.990...v0.991) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f866495655..51f010c607 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ fail_fast: false exclude: ^(manim/grpc/gen/|docs/i18n/) repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.3.0 + rev: v4.4.0 hooks: - id: check-ast name: Validate Python @@ -44,7 +44,7 @@ repos: - id: blacken-docs additional_dependencies: [black==22.3.0] - repo: https://github.com/PyCQA/flake8 - rev: 5.0.4 + rev: 6.0.0 hooks: - id: flake8 additional_dependencies: @@ -58,7 +58,7 @@ repos: flake8-simplify==0.14.1, ] - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.990 + rev: v0.991 hooks: - id: mypy additional_dependencies: From 5bc4bc072cc14b36274d8b48001d1f61e5457ae0 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Tue, 29 Nov 2022 08:22:08 -0500 Subject: [PATCH 162/555] Add Debian dependencies required for pycairo and manimpango (#3044) Without these packages, using `poetry install` fails on pycairo and manimpango because there is no C++ compiler nor headers to compile parts of those packages. --- docs/source/installation/linux.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/installation/linux.rst b/docs/source/installation/linux.rst index 25d2d63ad1..a496510932 100644 --- a/docs/source/installation/linux.rst +++ b/docs/source/installation/linux.rst @@ -39,7 +39,7 @@ simply run: .. code-block:: bash sudo apt update - sudo apt install libcairo2-dev libpango1.0-dev ffmpeg + sudo apt install build-essential python3-dev libcairo2-dev libpango1.0-dev ffmpeg If you don't have python3-pip installed, install it via: From 59b78c27b6ec40ff2e2e2fd31793494ada8c81f1 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Tue, 29 Nov 2022 15:51:38 +0100 Subject: [PATCH 163/555] linux installation instructions: minor language improvement / specification --- docs/source/installation/linux.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/installation/linux.rst b/docs/source/installation/linux.rst index a496510932..f0af5c8fd3 100644 --- a/docs/source/installation/linux.rst +++ b/docs/source/installation/linux.rst @@ -138,7 +138,8 @@ to install with your package manager. Usually, `TeX Live `__ is a good candidate if you don't care too much about disk space. -For Ubuntu, sufficient latex can be installed by running: +For Debian-based systems (like Ubuntu), sufficient LaTeX dependencies can be +installed by running: .. code-block:: bash From 2044ef8abcd4bffe75b053c9eebd57ac7214498c Mon Sep 17 00:00:00 2001 From: Hugues Devimeux <36239975+huguesdevimeux@users.noreply.github.com> Date: Wed, 30 Nov 2022 22:10:13 +0100 Subject: [PATCH 164/555] Removed unused ``GraphicalUnitTester`` (#3054) * Removed graphicalUnitTester * Removed reference about it in teh docs --- docs/source/contributing/testing.rst | 1 - tests/utils/GraphicalUnitTester.py | 151 --------------------------- 2 files changed, 152 deletions(-) delete mode 100644 tests/utils/GraphicalUnitTester.py diff --git a/docs/source/contributing/testing.rst b/docs/source/contributing/testing.rst index f17bac1d1d..059e2ba30e 100644 --- a/docs/source/contributing/testing.rst +++ b/docs/source/contributing/testing.rst @@ -112,7 +112,6 @@ The ``manim/tests`` directory looks like this: │ └── test_cli_flags.py └── utils ├── commands.py - ├── GraphicalUnitTester.py ├── __init__.py ├── testing_utils.py └── video_tester.py diff --git a/tests/utils/GraphicalUnitTester.py b/tests/utils/GraphicalUnitTester.py deleted file mode 100644 index 02128221c9..0000000000 --- a/tests/utils/GraphicalUnitTester.py +++ /dev/null @@ -1,151 +0,0 @@ -from __future__ import annotations - -import logging -import os -from pathlib import Path - -import numpy as np - -from manim import config, tempconfig -from manim.renderer.opengl_renderer import OpenGLRenderer -from manim.scene.scene import Scene - - -class GraphicalUnitTester: - """Class used to test the animations. - - Parameters - ---------- - scene_class - The scene to be tested - module_tested - The name of the module tested. i.e if we are testing functions of creation.py, the module will be "creation" - - Attributes - ----------- - path_tests_medias_cache : : class:`str` - Path to 'media' folder generated by manim. This folder contains cached data used by some tests. - path_control_data : :class:`str` - Path to the data used for the tests (i.e the pre-rendered frames). - scene : :class:`Scene` - The scene tested - """ - - def __init__( - self, scene_class: type[Scene], module_tested: str, tmpdir, rgb_atol=0 - ): - # Disable the the logs, (--quiet is broken) TODO - logging.disable(logging.CRITICAL) - tests_directory = Path(__file__).absolute().parent.parent - - self.path_tests_medias_cache = ( - Path(tmpdir) - / "test_graphical_units" - / "tests_cache" - / module_tested - / scene_class.__name__ - ) - - self.path_control_data = ( - Path(tests_directory) - / "control_data" - / "graphical_units_data" - / module_tested - ) - self.rgb_atol = rgb_atol - - # IMPORTANT NOTE : The graphical units tests don't use for now any - # custom manim.cfg, since it is impossible to manually select a - # manim.cfg from a python file. (see issue #293) - config["text_dir"] = Path(self.path_tests_medias_cache) / "Text" - config["tex_dir"] = Path(self.path_tests_medias_cache) / "Tex" - - config["disable_caching"] = True - config["quality"] = "low_quality" - - for dir_temp in [ - self.path_tests_medias_cache, - config["text_dir"], - config["tex_dir"], - ]: - Path(dir_temp).mkdir(parents=True) - - with tempconfig({"dry_run": True}): - if config["renderer"] == "opengl": - self.scene = scene_class(renderer=OpenGLRenderer()) - else: - self.scene = scene_class(skip_animations=True) - self.scene.render() - - def _load_data(self): - """Load the np.array of the last frame of a pre-rendered scene. If not found, throw FileNotFoundError. - - Returns - ------- - :class:`numpy.array` - The pre-rendered frame. - """ - frame_data_path = Path(self.path_control_data) / f"{self.scene}.npz" - return np.load(frame_data_path)["frame_data"] - - def _show_diff_helper(self, frame_data, expected_frame_data): - """Will visually display with matplotlib differences between frame generated and the one expected.""" - import matplotlib.gridspec as gridspec # type: ignore - import matplotlib.pyplot as plt - - gs = gridspec.GridSpec(2, 2) - fig = plt.figure() - fig.suptitle(f"Test for {str(self.scene).replace('Test', '')}", fontsize=16) - - ax = fig.add_subplot(gs[0, 0]) - ax.imshow(frame_data) - ax.set_title("Generated :") - - ax = fig.add_subplot(gs[0, 1]) - ax.imshow(expected_frame_data) - ax.set_title("Expected :") - - ax = fig.add_subplot(gs[1, :]) - diff_im = expected_frame_data.copy() - diff_im = np.where( - frame_data != np.array([0, 0, 0, 255]), - np.array([0, 255, 0, 255], dtype="uint8"), - np.array([0, 0, 0, 255], dtype="uint8"), - ) # Set any non-black pixels to green - np.putmask( - diff_im, - expected_frame_data != frame_data, - np.array([255, 0, 0, 255], dtype="uint8"), - ) # Set any different pixels to red - ax.imshow(diff_im, interpolation="nearest") - ax.set_title("Differences summary : (green = same, red = different)") - - plt.show() - plt.savefig(f"{self.scene}.png") - - def test(self, show_diff=False): - """Compare pre-rendered frame to the frame rendered during the test.""" - frame_data = self.scene.renderer.get_frame() - expected_frame_data = self._load_data() - - assert frame_data.shape == expected_frame_data.shape, ( - "The frames have different shape:" - + f"\nexpected_frame_data.shape = {expected_frame_data.shape}" - + f"\nframe_data.shape = {frame_data.shape}" - ) - - mismatches = np.logical_not( - np.isclose(frame_data, expected_frame_data, atol=self.rgb_atol, rtol=0), - ) - if mismatches.any(): - incorrect_indices = np.argwhere(mismatches) - first_incorrect_index = incorrect_indices[0][:2] - first_incorrect_point = frame_data[tuple(first_incorrect_index)] - expected_point = expected_frame_data[tuple(first_incorrect_index)] - if show_diff: - self._show_diff_helper(frame_data, expected_frame_data) - assert not mismatches.any(), ( - f"The frames don't match. {str(self.scene).replace('Test', '')} has been modified." - + "\nPlease ignore if it was intended." - + f"\nFirst unmatched index is at {first_incorrect_index}: {first_incorrect_point} != {expected_point}" - ) From ab57a6eb35949c8d4c695355a30b5837d992f3ee Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 1 Dec 2022 18:38:44 +0100 Subject: [PATCH 165/555] Frame comparison pixel threshold (#3053) * implemented threshold for number of pixel value errors * fix implementation, throw proper warning * added test for pixel value error threshold * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove forgotten debug print * introduce constants for frame_comparison tolerance * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * rename constant Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/utils/testing/_frames_testers.py | 21 +++++++++++++++++- .../utils/pixel_error_threshold.npz | Bin 0 -> 32115 bytes tests/test_graphical_units/test_utils.py | 11 +++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 tests/test_graphical_units/control_data/utils/pixel_error_threshold.npz create mode 100644 tests/test_graphical_units/test_utils.py diff --git a/manim/utils/testing/_frames_testers.py b/manim/utils/testing/_frames_testers.py index 7c7fa46783..be0bc38447 100644 --- a/manim/utils/testing/_frames_testers.py +++ b/manim/utils/testing/_frames_testers.py @@ -1,6 +1,7 @@ from __future__ import annotations import contextlib +import warnings from pathlib import Path import numpy as np @@ -9,6 +10,9 @@ from ._show_diff import show_diff_helper +FRAME_ABSOLUTE_TOLERANCE = 1.01 +FRAME_MISMATCH_RATIO_TOLERANCE = 1e-5 + class _FramesTester: def __init__(self, file_path: Path, show_diff=False) -> None: @@ -42,12 +46,27 @@ def check_frame(self, frame_number: int, frame: np.ndarray): np.testing.assert_allclose( frame, self._frames[frame_number], - atol=1.01, + atol=FRAME_ABSOLUTE_TOLERANCE, err_msg=f"Frame no {frame_number}. You can use --show_diff to visually show the difference.", verbose=False, ) self._frames_compared += 1 except AssertionError as e: + number_of_matches = np.isclose( + frame, self._frames[frame_number], atol=FRAME_ABSOLUTE_TOLERANCE + ).sum() + number_of_mismatches = frame.size - number_of_matches + if number_of_mismatches / frame.size < FRAME_MISMATCH_RATIO_TOLERANCE: + # we tolerate a small (< 0.001%) amount of pixel value errors + # in the tests, this accounts for minor OS dependent inconsistencies + self._frames_compared += 1 + warnings.warn( + f"Mismatch of {number_of_mismatches} pixel values in frame {frame_number} " + f"against control data in {self._file_path}. Below error threshold, " + "continuing..." + ) + return + if self._show_diff: show_diff_helper( frame_number, diff --git a/tests/test_graphical_units/control_data/utils/pixel_error_threshold.npz b/tests/test_graphical_units/control_data/utils/pixel_error_threshold.npz new file mode 100644 index 0000000000000000000000000000000000000000..3221041c4b9ba5a4d44bc141899a41444abfd916 GIT binary patch literal 32115 zcmeI*y-OQm0D$o~#)uXTo&*;KiB-{pf`f?ovA7gdNoZXJiv(1NqLnD3sELc1!9^Tv z`v=5H8wsdQ1_zzuQlzxh_)(J%HIdd24w3WjHU~EsbI*m`amfvrAMZVv;e~TK%-J>} zM6UX_i$UM=;_-|SbJcsoDr{oF>mKg!?Q@U2>qbVWOrlW#Mm4-%Y$YxuwW}T}c)Ol^_Fih+IU8H9 zOf*|o#$x^|=VUN??Ta-f)jfl+l#{9QU2ho@Mjr?UzYh5MhEE|wfFZzrko#a}{3(<_ zw3hw;o;qFmzb0SAOB4PyW1F#^8DpC}HFs)iM$M=hC8UIukP=ctN=OMQAtj`Ql#miq zLP|&pDIq1Kgp`mH8mNTwQfpI%KFRQ(vhlJ@VL<=^1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~f#)W$`?<78pA0A~KcwJuJA2L-0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009J)A*VG@n+%wJ=Rbc@ z(zShaIGz5=3IoOgm%&q}z(4D9n6hl<#~zWc&q&r+b0%%`@PX+rhb2e*)TF*z)UAD1 G+q(xbt8Rz@ literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/test_utils.py b/tests/test_graphical_units/test_utils.py new file mode 100644 index 0000000000..12ed860bc1 --- /dev/null +++ b/tests/test_graphical_units/test_utils.py @@ -0,0 +1,11 @@ +from __future__ import annotations + +from manim.utils.testing.frames_comparison import frames_comparison + +__module_test__ = "utils" + + +@frames_comparison +def test_pixel_error_threshold(scene): + """Scene produces black frame, control data has 11 modified pixel values.""" + pass From 621f829522add077b8925685687d3f05549212f5 Mon Sep 17 00:00:00 2001 From: Onur Solmaz Date: Thu, 1 Dec 2022 23:40:28 +0100 Subject: [PATCH 166/555] Added thematic guide for the ``manim-voiceover`` plugin (#3049) * Added page explaining manim voiceover * Update docs/source/guides/add_voiceovers.rst Co-authored-by: Benjamin Hackl Co-authored-by: Benjamin Hackl --- docs/source/guides/add_voiceovers.rst | 65 +++++++++++++++++++++++++++ docs/source/guides/index.rst | 5 ++- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 docs/source/guides/add_voiceovers.rst diff --git a/docs/source/guides/add_voiceovers.rst b/docs/source/guides/add_voiceovers.rst new file mode 100644 index 0000000000..90a6b30c36 --- /dev/null +++ b/docs/source/guides/add_voiceovers.rst @@ -0,0 +1,65 @@ +########################### +Adding Voiceovers to Videos +########################### + +Creating a full-fledged video with voiceovers is a bit more involved than +creating purely visual Manim scenes. One has to use `a video editing +program `__ +to add the voiceovers after the video has been rendered. This process +can be difficult and time-consuming, since it requires a lot of planning +and preparation. + +To ease the process of adding voiceovers to videos, we have created +`Manim Voiceover `__, a plugin +that lets you add voiceovers to scenes directly in Python. To install it, run + +.. code-block:: bash + + pip install "manim-voiceover[azure,gtts]" + +Visit `the installation page `__ +for more details on how to install Manim Voiceover. + +Basic Usage +########### + +Manim Voiceover lets you ... + +- Add voiceovers to Manim videos directly in Python, without having to use a video editor. +- Record voiceovers with your microphone during rendering through a simple command line interface. +- Develop animations with auto-generated AI voices from various free and proprietary services. + +It provides a very simple API that lets you specify your voiceover script +and then record it during rendering: + +.. code-block:: python + + from manim import * + from manim_voiceover import VoiceoverScene + from manim_voiceover.services.recorder import RecorderService + + # Simply inherit from VoiceoverScene instead of Scene to get all the + # voiceover functionality. + class RecorderExample(VoiceoverScene): + def construct(self): + # You can choose from a multitude of TTS services, + # or in this example, record your own voice: + self.set_speech_service(RecorderService()) + + circle = Circle() + + # Surround animation sections with with-statements: + with self.voiceover(text="This circle is drawn as I speak.") as tracker: + self.play(Create(circle), run_time=tracker.duration) + # The duration of the animation is received from the audio file + # and passed to the tracker automatically. + + # This part will not start playing until the previous voiceover is finished. + with self.voiceover(text="Let's shift it to the left 2 units.") as tracker: + self.play(circle.animate.shift(2 * LEFT), run_time=tracker.duration) + +To get started with Manim Voiceover, +visit the `Quick Start Guide `__. + +Visit the `Example Gallery `__ +to see some examples of Manim Voiceover in action. diff --git a/docs/source/guides/index.rst b/docs/source/guides/index.rst index 2d32784276..0f0a92b98d 100644 --- a/docs/source/guides/index.rst +++ b/docs/source/guides/index.rst @@ -6,4 +6,7 @@ Thematic Guides :maxdepth: 2 :glob: - * + configuration + deep_dive + using_text + add_voiceovers From e8855d98cef21f9ffec97b7f3f49cd3147fba3f7 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Fri, 2 Dec 2022 16:41:08 +0530 Subject: [PATCH 167/555] Added support for Python 3.11, dropped support for Python 3.7 (#3030) * Add support for Python 3.11 as well drop support for Python 3.7 * update lockfile * Fix an import statement for new version of moderngl * CI: use pipx to install poetry should fix macos 3.11 errors * Update poetry.lock try a newer version of poetry, forgot to update in a long time * update lock file * update poetry.lock * try downgrading pycairo * CI: fix poetry picking up wrong python version * CI: change poetry cache key older wrong environments will not be used then * re-introduce caret restriction for pycairo Co-authored-by: Benjamin Hackl --- .github/workflows/ci.yml | 10 +- manim/renderer/shader.py | 2 +- poetry.lock | 1625 ++++++++++++++++++++------------------ pyproject.toml | 4 +- 4 files changed, 873 insertions(+), 768 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ea3f8f4528..4bfb2a8ba6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,8 @@ jobs: strategy: fail-fast: false matrix: - python: ['3.7.14', '3.10.7'] + # TODO: test on 3.8 and 3.11 + python: ['3.10.7'] steps: - name: Checkout the repository uses: actions/checkout@v3 @@ -70,7 +71,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-22.04, macos-latest, windows-latest] - python: ['3.7', '3.8', '3.9', '3.10'] + python: ['3.8', '3.9', '3.10', '3.11'] steps: - name: Checkout the repository @@ -83,7 +84,8 @@ jobs: - name: Install Poetry run: | - pip install --user poetry + pipx install poetry + poetry config virtualenvs.prefer-active-python true - name: Setup macOS PATH if: runner.os == 'macOS' @@ -101,7 +103,7 @@ jobs: uses: actions/cache@v3 with: path: ${{ steps.cache-vars.outputs.poetry-venv-dir }} - key: ${{ runner.os }}-poetry-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('poetry.lock') }} + key: ${{ runner.os }}-poetry-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('poetry.lock') }}-1 - name: Install and cache ffmpeg (all OS) uses: FedericoCarboni/setup-ffmpeg@v2 diff --git a/manim/renderer/shader.py b/manim/renderer/shader.py index d1bba27503..dc28222489 100644 --- a/manim/renderer/shader.py +++ b/manim/renderer/shader.py @@ -312,7 +312,7 @@ def render(self): else: self.shader.context.disable(moderngl.DEPTH_TEST) - from moderngl.program_members.attribute import Attribute + from moderngl.program_members import Attribute shader_attributes = [] for k, v in self.shader.shader_program._members.items(): diff --git a/poetry.lock b/poetry.lock index b3792a0a0b..8e7a30c1b8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,7 +8,7 @@ python-versions = "*" [[package]] name = "anyio" -version = "3.6.1" +version = "3.6.2" description = "High level compatibility layer for multiple asynchronous event loop implementations" category = "main" optional = true @@ -17,12 +17,11 @@ python-versions = ">=3.6.2" [package.dependencies] idna = ">=2.8" sniffio = ">=1.1" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16)"] +trio = ["trio (>=0.16,<0.22)"] [[package]] name = "appnope" @@ -42,7 +41,6 @@ python-versions = ">=3.6" [package.dependencies] argon2-cffi-bindings = "*" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] @@ -74,18 +72,33 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [[package]] name = "astroid" -version = "2.11.7" +version = "2.12.13" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.2" [package.dependencies] lazy-object-proxy = ">=1.4.0" -setuptools = ">=20.0" -typed-ast = {version = ">=1.4.0,<2.0", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""} typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} -wrapt = ">=1.11,<2" +wrapt = [ + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, +] + +[[package]] +name = "asttokens" +version = "2.2.0" +description = "Annotate AST trees with source code positions" +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +six = "*" + +[package.extras] +test = ["astroid", "pytest"] [[package]] name = "atomicwrites" @@ -110,8 +123,8 @@ tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900 tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] [[package]] -name = "Babel" -version = "2.10.3" +name = "babel" +version = "2.11.0" description = "Internationalization utilities" category = "main" optional = false @@ -128,14 +141,6 @@ category = "main" optional = true python-versions = "*" -[[package]] -name = "backports.cached-property" -version = "1.0.2" -description = "cached_property() - computed once per instance, cached as attribute" -category = "main" -optional = false -python-versions = ">=3.6.0" - [[package]] name = "beautifulsoup4" version = "4.11.1" @@ -165,7 +170,6 @@ mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] @@ -238,7 +242,6 @@ python-versions = ">=3.7" [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "click-default-group" @@ -265,11 +268,11 @@ typing-extensions = {version = "*", markers = "python_version <= \"3.8\""} [[package]] name = "colorama" -version = "0.4.5" +version = "0.4.6" description = "Cross-platform colored terminal text." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" [[package]] name = "colour" @@ -293,6 +296,24 @@ python-versions = "*" [package.extras] test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] +[[package]] +name = "contourpy" +version = "1.0.6" +description = "Python library for calculating contours of 2D quadrilateral grids" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +numpy = ">=1.16" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["docutils (<0.18)", "sphinx (<=5.2.0)", "sphinx-rtd-theme"] +test = ["Pillow", "flake8", "isort", "matplotlib", "pytest"] +test-minimal = ["pytest"] +test-no-codebase = ["Pillow", "matplotlib", "pytest"] + [[package]] name = "coverage" version = "6.5.0" @@ -316,7 +337,7 @@ optional = false python-versions = ">=3.6" [[package]] -name = "Cython" +name = "cython" version = "0.29.32" description = "The Cython compiler for writing C extensions for the Python language." category = "main" @@ -336,7 +357,7 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", [[package]] name = "dearpygui" -version = "1.7.1" +version = "1.8.0" description = "DearPyGui: A simple Python GUI Toolkit" category = "main" optional = true @@ -344,7 +365,7 @@ python-versions = ">=3.7" [[package]] name = "debugpy" -version = "1.6.3" +version = "1.6.4" description = "An implementation of the Debug Adapter Protocol for Python" category = "main" optional = true @@ -367,7 +388,7 @@ optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] -name = "Deprecated" +name = "deprecated" version = "1.2.13" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." category = "dev" @@ -382,11 +403,11 @@ dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version [[package]] name = "dill" -version = "0.3.5.1" +version = "0.3.6" description = "serialize all of python" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +python-versions = ">=3.7" [package.extras] graph = ["objgraph (>=1.7.2)"] @@ -426,6 +447,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.extras] testing = ["pre-commit"] +[[package]] +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 = "*" + +[package.extras] +tests = ["asttokens", "littleutils", "pytest", "rich"] + [[package]] name = "fastjsonschema" version = "2.16.2" @@ -458,7 +490,6 @@ optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} mccabe = ">=0.6.0,<0.7.0" pycodestyle = ">=2.7.0,<2.8.0" pyflakes = ">=2.3.0,<2.4.0" @@ -494,7 +525,7 @@ test = ["coverage", "coveralls", "mock", "pytest", "pytest-cov"] [[package]] name = "flake8-comprehensions" -version = "3.10.0" +version = "3.10.1" description = "A flake8 plugin to help you write better list/set/dict comprehensions." category = "dev" optional = false @@ -502,7 +533,6 @@ python-versions = ">=3.7" [package.dependencies] flake8 = ">=3.0,<3.2.0 || >3.2.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "flake8-docstrings" @@ -559,11 +589,10 @@ python-versions = ">=3.6.1" [package.dependencies] astor = ">=0.1" flake8 = ">=3.7" -importlib-metadata = {version = ">=0.9", markers = "python_version < \"3.8\""} [[package]] name = "fonttools" -version = "4.37.4" +version = "4.38.0" description = "Tools to manipulate font files" category = "dev" optional = false @@ -599,18 +628,18 @@ sphinx-basic-ng = "*" [[package]] name = "gitdb" -version = "4.0.9" +version = "4.0.10" description = "Git Object Database" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] smmap = ">=3.0.1,<6" [[package]] -name = "GitPython" -version = "3.1.28" +name = "gitpython" +version = "3.1.29" description = "GitPython is a python library used to interact with Git repositories" category = "dev" optional = false @@ -618,11 +647,10 @@ python-versions = ">=3.7" [package.dependencies] gitdb = ">=4.0.1,<5" -typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} [[package]] name = "glcontext" -version = "2.3.6" +version = "2.3.7" description = "Portable OpenGL Context" category = "main" optional = false @@ -630,7 +658,7 @@ python-versions = "*" [[package]] name = "identify" -version = "2.5.6" +version = "2.5.9" description = "File identification library for Python" category = "dev" optional = false @@ -657,14 +685,13 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.13.0" +version = "5.1.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" [package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] @@ -697,11 +724,11 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.16.0" +version = "6.17.1" description = "IPython Kernel for Jupyter" category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} @@ -717,15 +744,16 @@ tornado = ">=6.1" traitlets = ">=5.1.0" [package.extras] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=6.0)", "pytest-cov", "pytest-timeout"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" -version = "7.34.0" +version = "8.7.0" description = "IPython: Productive Interactive Computing" category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" [package.dependencies] appnope = {version = "*", markers = "sys_platform == \"darwin\""} @@ -736,24 +764,26 @@ jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -traitlets = ">=4.2" +prompt-toolkit = ">=3.0.11,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" [package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] +all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.20)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] +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"] [[package]] -name = "ipython_genutils" +name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" category = "main" @@ -787,7 +817,7 @@ numpy = "*" [[package]] name = "jedi" -version = "0.18.1" +version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." category = "main" optional = true @@ -797,11 +827,12 @@ python-versions = ">=3.6" parso = ">=0.8.0,<0.9.0" [package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] +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" @@ -827,7 +858,7 @@ dev = ["hypothesis"] [[package]] name = "jsonschema" -version = "4.16.0" +version = "4.17.3" description = "An implementation of JSON Schema validation for Python" category = "main" optional = true @@ -835,11 +866,9 @@ python-versions = ">=3.7" [package.dependencies] attrs = ">=17.4.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] @@ -847,7 +876,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jupyter-client" -version = "7.3.5" +version = "7.4.7" description = "Jupyter protocol implementation and client libraries" category = "main" optional = true @@ -864,26 +893,28 @@ traitlets = "*" [package.extras] doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] +test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-core" -version = "4.11.2" +version = "5.1.0" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "main" -optional = false -python-versions = ">=3.7" +optional = true +python-versions = ">=3.8" [package.dependencies] +platformdirs = ">=2.5" pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = "*" +traitlets = ">=5.3" [package.extras] +docs = ["myst-parser", "sphinxcontrib-github-alt", "traitlets"] test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-server" -version = "1.19.1" +version = "1.23.3" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "main" optional = true @@ -908,11 +939,11 @@ traitlets = ">=5.1" websocket-client = "*" [package.extras] -test = ["coverage", "ipykernel", "pre-commit", "pytest (>=6.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] +test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "jupyterlab" -version = "3.4.8" +version = "3.5.0" description = "JupyterLab computational environment" category = "main" optional = true @@ -922,7 +953,7 @@ python-versions = ">=3.7" ipython = "*" jinja2 = ">=2.1" jupyter-core = "*" -jupyter-server = ">=1.16,<2.0" +jupyter-server = ">=1.16.0,<3" jupyterlab-server = ">=2.10,<3.0" nbclassic = "*" notebook = "<7" @@ -944,7 +975,7 @@ python-versions = ">=3.7" [[package]] name = "jupyterlab-server" -version = "2.15.2" +version = "2.16.3" description = "A set of server components for JupyterLab and JupyterLab like applications." category = "main" optional = true @@ -952,17 +983,18 @@ python-versions = ">=3.7" [package.dependencies] babel = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jinja2 = ">=3.0.3" json5 = "*" jsonschema = ">=3.0.1" -jupyter-server = ">=1.8,<2" +jupyter-server = ">=1.8,<3" packaging = "*" requests = "*" [package.extras] +docs = ["autodoc-traits", "docutils (<0.19)", "jinja2 (<3.1.0)", "mistune (<1)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] 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 (>=5.3.2)", "pytest-console-scripts", "pytest-cov", "ruamel-yaml", "strict-rfc3339"] +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"] [[package]] name = "kiwisolver" @@ -972,20 +1004,17 @@ category = "dev" optional = false python-versions = ">=3.7" -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - [[package]] name = "lazy-object-proxy" -version = "1.7.1" +version = "1.8.0" description = "A fast and thorough lazy object proxy." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] -name = "ManimPango" -version = "0.4.1" +name = "manimpango" +version = "0.4.3" description = "Bindings for Pango for using with Manim." category = "main" optional = false @@ -1015,7 +1044,6 @@ python-versions = ">=3.7" [package.dependencies] mdurl = ">=0.1,<1.0" -typing_extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [package.extras] benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] @@ -1028,7 +1056,7 @@ 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" @@ -1037,22 +1065,23 @@ python-versions = ">=3.7" [[package]] name = "matplotlib" -version = "3.5.3" +version = "3.6.2" description = "Python plotting package" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" [package.dependencies] +contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" kiwisolver = ">=1.0.1" -numpy = ">=1.17" +numpy = ">=1.19" packaging = ">=20.0" pillow = ">=6.2.0" pyparsing = ">=2.2.1" python-dateutil = ">=2.7" -setuptools_scm = ">=4,<7" +setuptools_scm = ">=7" [[package]] name = "matplotlib-inline" @@ -1107,14 +1136,14 @@ python-versions = "*" [[package]] name = "moderngl" -version = "5.6.4" +version = "5.7.3" description = "ModernGL: High performance rendering for Python 3" category = "main" optional = false python-versions = "*" [package.dependencies] -glcontext = ">=2,<3" +glcontext = ">=2.3.6,<3" [[package]] name = "moderngl-window" @@ -1163,7 +1192,6 @@ python-versions = ">=3.6" [package.dependencies] mypy-extensions = ">=0.4.3" tomli = ">=1.1.0" -typed-ast = {version = ">=1.4.0,<2", markers = "python_version < \"3.8\""} typing-extensions = ">=3.10" [package.extras] @@ -1203,7 +1231,7 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest [[package]] name = "nbclassic" -version = "0.4.5" +version = "0.4.8" description = "A web-based notebook environment for interactive computing" category = "main" optional = true @@ -1231,29 +1259,30 @@ traitlets = ">=4.2.1" [package.extras] docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-tornasync", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] [[package]] name = "nbclient" -version = "0.7.0" +version = "0.7.2" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "main" optional = true python-versions = ">=3.7.0" [package.dependencies] -jupyter-client = ">=6.1.5" -nbformat = ">=5.0" -nest-asyncio = "*" -traitlets = ">=5.2.2" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +nbformat = ">=5.1" +traitlets = ">=5.3" [package.extras] -sphinx = ["Sphinx (>=1.7)", "autodoc-traits", "mock", "moto", "myst-parser", "sphinx-book-theme"] -test = ["black", "check-manifest", "flake8", "ipykernel", "ipython", "ipywidgets", "mypy", "nbconvert", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme"] +test = ["ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.2.1" +version = "7.2.5" description = "Converting Jupyter Notebooks" category = "main" optional = true @@ -1288,7 +1317,7 @@ webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.6.1" +version = "5.7.0" description = "The Jupyter Notebook format" category = "main" optional = true @@ -1296,7 +1325,6 @@ python-versions = ">=3.7" [package.dependencies] fastjsonschema = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.8\""} jsonschema = ">=2.6" jupyter-core = "*" traitlets = ">=5.1" @@ -1314,18 +1342,18 @@ python-versions = ">=3.5" [[package]] name = "networkx" -version = "2.6.3" +version = "2.8.8" description = "Python package for creating and manipulating graphs and networks" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" [package.extras] -default = ["matplotlib (>=3.3)", "numpy (>=1.19)", "pandas (>=1.1)", "scipy (>=1.5,!=1.6.1)"] -developer = ["black (==21.5b1)", "pre-commit (>=2.12)"] -doc = ["nb2plots (>=0.6)", "numpydoc (>=1.1)", "pillow (>=8.2)", "pydata-sphinx-theme (>=0.6,<1.0)", "sphinx (>=4.0,<5.0)", "sphinx-gallery (>=0.9,<1.0)", "texext (>=0.6.6)"] -extra = ["lxml (>=4.5)", "pydot (>=1.4.1)", "pygraphviz (>=1.7)"] -test = ["codecov (>=2.1)", "pytest (>=6.2)", "pytest-cov (>=2.12)"] +default = ["matplotlib (>=3.4)", "numpy (>=1.19)", "pandas (>=1.3)", "scipy (>=1.8)"] +developer = ["mypy (>=0.982)", "pre-commit (>=2.20)"] +doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.2)", "pydata-sphinx-theme (>=0.11)", "sphinx (>=5.2)", "sphinx-gallery (>=0.11)", "texext (>=0.6.6)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.9)", "sympy (>=1.10)"] +test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "nodeenv" @@ -1340,7 +1368,7 @@ setuptools = "*" [[package]] name = "notebook" -version = "6.4.12" +version = "6.5.2" description = "A web-based notebook environment for interactive computing" category = "main" optional = true @@ -1353,6 +1381,7 @@ ipython-genutils = "*" jinja2 = "*" jupyter-client = ">=5.3.4" jupyter-core = ">=4.6.1" +nbclassic = ">=0.4.7" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" @@ -1366,29 +1395,29 @@ traitlets = ">=4.2.1" [package.extras] docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium", "testpath"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] [[package]] name = "notebook-shim" -version = "0.1.0" +version = "0.2.2" description = "A shim layer for notebook traits and config" category = "main" optional = true python-versions = ">=3.7" [package.dependencies] -jupyter-server = ">=1.8,<2.0" +jupyter-server = ">=1.8,<3" [package.extras] test = ["pytest", "pytest-console-scripts", "pytest-tornasync"] [[package]] name = "numpy" -version = "1.21.6" +version = "1.23.5" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.8" [[package]] name = "packaging" @@ -1423,7 +1452,7 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.10.1" +version = "0.10.2" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false @@ -1461,7 +1490,7 @@ docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues 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" @@ -1470,15 +1499,15 @@ python-versions = ">=3.6" [[package]] name = "platformdirs" -version = "2.5.2" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" +version = "2.5.4" +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" [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] +test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -1488,9 +1517,6 @@ category = "dev" optional = false python-versions = ">=3.6" -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] @@ -1506,7 +1532,6 @@ python-versions = ">=3.7" [package.dependencies] cfgv = ">=2.0.0" identify = ">=1.0.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} nodeenv = ">=0.11.1" pyyaml = ">=5.1" toml = "*" @@ -1514,7 +1539,7 @@ virtualenv = ">=20.0.8" [[package]] name = "prometheus-client" -version = "0.14.1" +version = "0.15.0" description = "Python client for the Prometheus monitoring system." category = "main" optional = true @@ -1525,7 +1550,7 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.31" +version = "3.0.33" description = "Library for building powerful interactive command lines in Python" category = "main" optional = true @@ -1536,7 +1561,7 @@ wcwidth = "*" [[package]] name = "psutil" -version = "5.9.2" +version = "5.9.4" description = "Cross-platform lib for process and system monitoring in Python." category = "main" optional = false @@ -1564,6 +1589,17 @@ category = "main" optional = true python-versions = "*" +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +category = "main" +optional = true +python-versions = "*" + +[package.extras] +tests = ["pytest"] + [[package]] name = "py" version = "1.11.0" @@ -1574,7 +1610,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pycairo" -version = "1.21.0" +version = "1.23.0" description = "Python interface for cairo" category = "main" optional = false @@ -1627,16 +1663,16 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] -name = "PyGithub" -version = "1.55" +name = "pygithub" +version = "1.57" description = "Use the full Github API v3" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] deprecated = "*" -pyjwt = ">=2.0" +pyjwt = ">=2.4.0" pynacl = ">=1.4.0" requests = ">=2.14.0" @@ -1645,14 +1681,14 @@ integrations = ["cryptography"] [[package]] name = "pyglet" -version = "2.0a4" +version = "2.0.1" description = "Cross-platform windowing and multimedia library" category = "main" optional = false python-versions = "*" [[package]] -name = "Pygments" +name = "pygments" version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" @@ -1663,42 +1699,44 @@ python-versions = ">=3.6" plugins = ["importlib-metadata"] [[package]] -name = "PyJWT" -version = "2.5.0" +name = "pyjwt" +version = "2.6.0" description = "JSON Web Token implementation in Python" category = "dev" optional = false python-versions = ">=3.7" [package.extras] -crypto = ["cryptography (>=3.3.1)", "types-cryptography (>=3.3.21)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.3.1)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "types-cryptography (>=3.3.21)", "zope.interface"] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "2.13.9" +version = "2.15.7" description = "python code static checker" category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.2" [package.dependencies] -astroid = ">=2.11.5,<=2.12.0-dev0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} +astroid = ">=2.12.13,<=2.14.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = ">=0.2" isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} [package.extras] -testutil = ["gitpython (>3)"] +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" @@ -1714,22 +1752,22 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] [[package]] name = "pyobjc-core" -version = "8.5.1" +version = "9.0" description = "Python<->ObjC Interoperability Module" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] -name = "pyobjc-framework-Cocoa" -version = "8.5.1" +name = "pyobjc-framework-cocoa" +version = "9.0" description = "Wrappers for the Cocoa frameworks on macOS" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -pyobjc-core = ">=8.5.1" +pyobjc-core = ">=9.0" [[package]] name = "pyparsing" @@ -1756,7 +1794,7 @@ numpy = "*" [[package]] name = "pyrsistent" -version = "0.18.1" +version = "0.19.2" description = "Persistent/Functional/Immutable data structures" category = "main" optional = true @@ -1774,7 +1812,6 @@ python-versions = ">=3.6" atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" @@ -1842,7 +1879,7 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2022.4" +version = "2022.6" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -1850,22 +1887,22 @@ python-versions = "*" [[package]] name = "pywin32" -version = "304" +version = "305" description = "Python for Window Extensions" category = "main" -optional = false +optional = true python-versions = "*" [[package]] name = "pywinpty" -version = "2.0.8" +version = "2.0.9" description = "Pseudo terminal support for Windows from Python." category = "main" optional = true python-versions = ">=3.7" [[package]] -name = "PyYAML" +name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" category = "dev" @@ -1944,14 +1981,19 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] [[package]] name = "scipy" -version = "1.7.3" -description = "SciPy: Scientific Library for Python" +version = "1.9.3" +description = "Fundamental algorithms for scientific computing in Python" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.8" [package.dependencies] -numpy = ">=1.16.5,<1.23.0" +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" @@ -1966,7 +2008,7 @@ 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" @@ -1980,29 +2022,30 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "65.4.1" +version = "65.6.3" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" +category = "dev" optional = false python-versions = ">=3.7" [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)", "mock", "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-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +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 = "6.4.2" +version = "7.0.5" description = "the blessed package to manage your versions by scm tags" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] packaging = ">=20.0" setuptools = "*" tomli = ">=1.0.0" +typing-extensions = "*" [package.extras] test = ["pytest (>=6.2)", "virtualenv (>20)"] @@ -2018,7 +2061,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "skia-pathops" -version = "0.7.2" +version = "0.7.4" description = "Python access to operations on paths using the Skia library" category = "main" optional = false @@ -2060,7 +2103,7 @@ optional = false python-versions = ">=3.6" [[package]] -name = "Sphinx" +name = "sphinx" version = "4.5.0" description = "Python documentation generator" category = "dev" @@ -2221,6 +2264,22 @@ category = "main" optional = false python-versions = ">=2.7" +[[package]] +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 = "*" + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + [[package]] name = "svgelements" version = "1.8.4" @@ -2231,7 +2290,7 @@ python-versions = "*" [[package]] name = "terminado" -version = "0.16.0" +version = "0.17.0" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." category = "main" optional = true @@ -2243,22 +2302,23 @@ pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} tornado = ">=6.1.0" [package.extras] -test = ["pre-commit", "pytest (>=6.0)", "pytest-timeout"] +docs = ["pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] [[package]] name = "tinycss2" -version = "1.1.1" +version = "1.2.1" description = "A tiny CSS parser" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] webencodings = ">=0.4" [package.extras] doc = ["sphinx", "sphinx_rtd_theme"] -test = ["coverage[toml]", "pytest", "pytest-cov", "pytest-flake8", "pytest-isort"] +test = ["flake8", "isort", "pytest"] [[package]] name = "toml" @@ -2276,6 +2336,14 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "tomlkit" +version = "0.11.6" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "tornado" version = "6.2" @@ -2303,23 +2371,16 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.4.0" -description = "" +version = "5.6.0" +description = "Traitlets Python configuration system" category = "main" -optional = false +optional = true python-versions = ">=3.7" [package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pre-commit", "pytest"] -[[package]] -name = "typed-ast" -version = "1.5.4" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" -optional = false -python-versions = ">=3.6" - [[package]] name = "types-decorator" version = "0.1.7" @@ -2330,14 +2391,14 @@ python-versions = "*" [[package]] name = "types-docutils" -version = "0.19.1" +version = "0.19.1.1" description = "Typing stubs for docutils" category = "dev" optional = false python-versions = "*" [[package]] -name = "types-Pillow" +name = "types-pillow" version = "8.3.11" description = "Typing stubs for Pillow" category = "dev" @@ -2346,15 +2407,15 @@ python-versions = "*" [[package]] name = "types-protobuf" -version = "3.20.4" +version = "3.20.4.6" description = "Typing stubs for protobuf" category = "dev" optional = false python-versions = "*" [[package]] -name = "types-Pygments" -version = "2.13.1" +name = "types-pygments" +version = "2.13.1.1" description = "Typing stubs for Pygments" category = "dev" optional = false @@ -2366,7 +2427,7 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.28.11.2" +version = "2.28.11.5" description = "Typing stubs for requests" category = "dev" optional = false @@ -2385,7 +2446,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.25" +version = "1.26.25.4" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -2401,11 +2462,11 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.12" +version = "1.26.13" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] @@ -2414,20 +2475,19 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.16.5" +version = "20.17.0" description = "Virtual Python Environment builder" category = "dev" optional = false python-versions = ">=3.6" [package.dependencies] -distlib = ">=0.3.5,<1" +distlib = ">=0.3.6,<1" filelock = ">=3.4.1,<4" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.8\""} platformdirs = ">=2.4,<3" [package.extras] -docs = ["proselint (>=0.13)", "sphinx (>=5.1.1)", "sphinx-argparse (>=0.3.1)", "sphinx-rtd-theme (>=1)", "towncrier (>=21.9)"] +docs = ["proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-argparse (>=0.3.2)", "sphinx-rtd-theme (>=1)", "towncrier (>=22.8)"] testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] [[package]] @@ -2459,7 +2519,7 @@ python-versions = "*" [[package]] name = "websocket-client" -version = "1.4.1" +version = "1.4.2" description = "WebSocket client for Python with low level API options" category = "main" optional = true @@ -2480,7 +2540,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "zipp" -version = "3.9.0" +version = "3.11.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false @@ -2496,8 +2556,8 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "1.1" -python-versions = ">=3.7,<3.11" -content-hash = "7427fde1a59595ee9a5fddd5fd67126de36be4398670784dca9bec63723e6f2e" +python-versions = ">=3.8,<3.12" +content-hash = "bc07ed049ee4c50bccf6a2691080f425375aae4f834f1af93c003b40c1850f12" [metadata.files] alabaster = [ @@ -2505,8 +2565,8 @@ alabaster = [ {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, ] anyio = [ - {file = "anyio-3.6.1-py3-none-any.whl", hash = "sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be"}, - {file = "anyio-3.6.1.tar.gz", hash = "sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b"}, + {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"}, @@ -2544,8 +2604,12 @@ astor = [ {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, ] astroid = [ - {file = "astroid-2.11.7-py3-none-any.whl", hash = "sha256:86b0a340a512c65abf4368b80252754cda17c02cdbbd3f587dddf98112233e7b"}, - {file = "astroid-2.11.7.tar.gz", hash = "sha256:bb24615c77f4837c707669d16907331374ae8a964650a66999da3f5ca68dc946"}, + {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.0-py2.py3-none-any.whl", hash = "sha256:c56caef774a929923696f09ceea0eadcb95c94b30e8ee4f9fc4f5867096caaeb"}, + {file = "asttokens-2.2.0.tar.gz", hash = "sha256:e27b1f115daebfafd4d1826fc75f9a72f0b74bd3ae4ee4d9380406d74d35e52c"}, ] atomicwrites = [ {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, @@ -2554,18 +2618,14 @@ 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.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, - {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, +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"}, ] -"backports.cached-property" = [ - {file = "backports.cached-property-1.0.2.tar.gz", hash = "sha256:9306f9eed6ec55fd156ace6bc1094e2c86fae5fb2bf07b6a9c00745c656e75dd"}, - {file = "backports.cached_property-1.0.2-py3-none-any.whl", hash = "sha256:baeb28e1cd619a3c9ab8941431fe34e8490861fb998c6c4590693d50171db0cc"}, -] beautifulsoup4 = [ {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, @@ -2687,8 +2747,8 @@ cloup = [ {file = "cloup-0.13.1.tar.gz", hash = "sha256:ea0acc67eed994b86e79b70d76bc2ea525b7f98f3cd8e63696896d549597ef4d"}, ] colorama = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, + {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"}, @@ -2698,6 +2758,77 @@ 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"}, @@ -2754,7 +2885,7 @@ cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, ] -Cython = [ +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"}, @@ -2801,40 +2932,44 @@ data-science-types = [ {file = "data_science_types-0.2.23-py3-none-any.whl", hash = "sha256:bca319abc0e53a0316f9fcb887937e942477cb9e5fc63c8581e0b0438903b977"}, ] dearpygui = [ - {file = "dearpygui-1.7.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:85f39fb21071cf49ebed3389cdb7e4dbe40ef2e0ccc61c51a74e6042c0c2eada"}, - {file = "dearpygui-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:68c664b609c9cd87feea6d93cb44453cc54992be28e278fa1a82062cbbc0b53b"}, - {file = "dearpygui-1.7.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:9616efc1d2205f8211d2b14a1d9cb79a3736a184c4357e77d9f8804039152cf5"}, - {file = "dearpygui-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:a1ec93d63efbbee0fb4e6863a679e7ea6f0ad592119e562cef6e2c8c93e17971"}, - {file = "dearpygui-1.7.1-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:431e7a4e5ded86bc2822e72d8f2701d66c943d07d32121064a35426fd3f57efc"}, - {file = "dearpygui-1.7.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ff5e6d5e480ba629d6038e2b4c08ebb86d85dffce29633abc45dbe0b7dd1452a"}, - {file = "dearpygui-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:01641ca8b65ae80d8b83300aa61e14505709bdf4b3384480ccd56b6c49ea8f89"}, - {file = "dearpygui-1.7.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:f929734485e9e8325ef90d0d2a937cafe44f515c6e00d6dfe6421df1edd782ea"}, - {file = "dearpygui-1.7.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:f0b906c7005c595c831988596079c040540d5f68c4265141b9dbb58abe7df644"}, - {file = "dearpygui-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:513f012182170954f55013cd5bc702f58dbc7cdfcec7a11a47247044096f7889"}, - {file = "dearpygui-1.7.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:e48260f211a1c6085190e0a8d2bab7b8b94193f25547636ea5cebfbfbeed7c82"}, - {file = "dearpygui-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e16fb825122a465049f0e16445903c6984d440bd37471ab2fb67e207bdf4dee1"}, - {file = "dearpygui-1.7.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:083c61419d0b8a87caff9338ba058be9468f41afb02b7c0184e1d426db18d376"}, - {file = "dearpygui-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:0518505a81174e1b4de5525bf9664d6def1232c88dfda842853a1a8cf2cecd28"}, + {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.3-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:c4b2bd5c245eeb49824bf7e539f95fb17f9a756186e51c3e513e32999d8846f3"}, - {file = "debugpy-1.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b8deaeb779699350deeed835322730a3efec170b88927debc9ba07a1a38e2585"}, - {file = "debugpy-1.6.3-cp310-cp310-win32.whl", hash = "sha256:fc233a0160f3b117b20216f1169e7211b83235e3cd6749bcdd8dbb72177030c7"}, - {file = "debugpy-1.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:dda8652520eae3945833e061cbe2993ad94a0b545aebd62e4e6b80ee616c76b2"}, - {file = "debugpy-1.6.3-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5c814596a170a0a58fa6fad74947e30bfd7e192a5d2d7bd6a12156c2899e13a"}, - {file = "debugpy-1.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c4cd6f37e3c168080d61d698390dfe2cd9e74ebf80b448069822a15dadcda57d"}, - {file = "debugpy-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:3c9f985944a30cfc9ae4306ac6a27b9c31dba72ca943214dad4a0ab3840f6161"}, - {file = "debugpy-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:5ad571a36cec137ae6ed951d0ff75b5e092e9af6683da084753231150cbc5b25"}, - {file = "debugpy-1.6.3-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:adcfea5ea06d55d505375995e150c06445e2b20cd12885bcae566148c076636b"}, - {file = "debugpy-1.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:daadab4403427abd090eccb38d8901afd8b393e01fd243048fab3f1d7132abb4"}, - {file = "debugpy-1.6.3-cp38-cp38-win32.whl", hash = "sha256:6efc30325b68e451118b795eff6fe8488253ca3958251d5158106d9c87581bc6"}, - {file = "debugpy-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:86d784b72c5411c833af1cd45b83d80c252b77c3bfdb43db17c441d772f4c734"}, - {file = "debugpy-1.6.3-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:4e255982552b0edfe3a6264438dbd62d404baa6556a81a88f9420d3ed79b06ae"}, - {file = "debugpy-1.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cca23cb6161ac89698d629d892520327dd1be9321c0960e610bbcb807232b45d"}, - {file = "debugpy-1.6.3-cp39-cp39-win32.whl", hash = "sha256:7c302095a81be0d5c19f6529b600bac971440db3e226dce85347cc27e6a61908"}, - {file = "debugpy-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:34d2cdd3a7c87302ba5322b86e79c32c2115be396f3f09ca13306d8a04fe0f16"}, - {file = "debugpy-1.6.3-py2.py3-none-any.whl", hash = "sha256:84c39940a0cac410bf6aa4db00ba174f973eef521fbe9dd058e26bcabad89c4f"}, - {file = "debugpy-1.6.3.zip", hash = "sha256:e8922090514a890eec99cfb991bab872dd2e353ebb793164d5f01c362b9a40bf"}, + {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"}, @@ -2844,13 +2979,13 @@ 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 = [ +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.5.1-py2.py3-none-any.whl", hash = "sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302"}, - {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, + {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"}, @@ -2868,6 +3003,10 @@ 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"}, @@ -2889,8 +3028,8 @@ flake8-builtins = [ {file = "flake8_builtins-1.5.3-py2.py3-none-any.whl", hash = "sha256:7706babee43879320376861897e5d1468e396a40b8918ed7bccf70e5f90b8687"}, ] flake8-comprehensions = [ - {file = "flake8-comprehensions-3.10.0.tar.gz", hash = "sha256:181158f7e7aa26a63a0a38e6017cef28c6adee71278ce56ce11f6ec9c4905058"}, - {file = "flake8_comprehensions-3.10.0-py3-none-any.whl", hash = "sha256:dad454fd3d525039121e98fa1dd90c46bc138708196a4ebbc949ad3c859adedb"}, + {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"}, @@ -2913,64 +3052,76 @@ flake8-simplify = [ {file = "flake8_simplify-0.14.6.tar.gz", hash = "sha256:c4008db8016707684a1f0502ee69f3c2da37687d3cf7031cc1f326bf5986bf47"}, ] fonttools = [ - {file = "fonttools-4.37.4-py3-none-any.whl", hash = "sha256:afae1b39555f9c3f0ad1f0f1daf678e5ad157e38c8842ecb567951bf1a9b9fd7"}, - {file = "fonttools-4.37.4.zip", hash = "sha256:86918c150c6412798e15a0de6c3e0d061ddefddd00f97b4f7b43dfa867ad315e"}, + {file = "fonttools-4.38.0-py3-none-any.whl", hash = "sha256:820466f43c8be8c3009aef8b87e785014133508f0de64ec469e4efb643ae54fb"}, + {file = "fonttools-4.38.0.zip", hash = "sha256:2bb244009f9bf3fa100fc3ead6aeb99febe5985fa20afbfbaa2f8946c2fbdaf1"}, ] 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.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, - {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, + {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.28-py3-none-any.whl", hash = "sha256:77bfbd299d8709f6af7e0c70840ef26e7aff7cf0c1ed53b42dd7fc3a310fcb02"}, - {file = "GitPython-3.1.28.tar.gz", hash = "sha256:6bd3451b8271132f099ceeaf581392eaf6c274af74bb06144307870479d0697c"}, +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.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2eb3c2d7879076a33e801283ab2403788b78e1a45dc89e664a3100b967d471a1"}, - {file = "glcontext-2.3.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:86441e63363dcbb97ee813c9978c1d8998563e76b3726776da04b7be49813be3"}, - {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e613a52a32b9fd5a528981c94b39078064a96380cad91ade4c312340d5404af"}, - {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ba701c46e7b774857b756ac6af15487b917a29dce195e40d834638edaad6f4"}, - {file = "glcontext-2.3.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:861304731c2fa5413e24abc32ac8335e93cf9f8dc7ab767ea69d380d8d503b1b"}, - {file = "glcontext-2.3.6-cp310-cp310-win32.whl", hash = "sha256:cb5b67ffc75ff4a358e8f739d3c65e1bbcc9e75c651dd5945c787d7b9c3ad03f"}, - {file = "glcontext-2.3.6-cp310-cp310-win_amd64.whl", hash = "sha256:032d10008de005b51a2401820356e9f7d51bc9c2a28f8194cc1c345bf1a8a3f9"}, - {file = "glcontext-2.3.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:16bde9cf3bae7129f5308be4a1143db58e68b49b10c77e4e34f9a51cf98fd557"}, - {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25a94ddd93eef639fd0a377b7ebc1ac972978796a2ada74fd5b03b88719d88a"}, - {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a800ba7fd1912f6424bd5979ba596f08308a9e949da73aba942b0a535860170"}, - {file = "glcontext-2.3.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bcb5b2ddd21d37f8a1b2aaa62e3952e54a09bc31d29b861a4dcc57a536514f0"}, - {file = "glcontext-2.3.6-cp37-cp37m-win32.whl", hash = "sha256:e646d9c5af3b583f74a586fd151b787314352116e7c06c4902da93e15082bdb4"}, - {file = "glcontext-2.3.6-cp37-cp37m-win_amd64.whl", hash = "sha256:2ac6f80440510473621d287603ef69a08b985c06619f62f42cb485e5ca6e872c"}, - {file = "glcontext-2.3.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b6030d9deedba125d95d39abd72c36fbf6f0a7f866e600f22b210e368afbf522"}, - {file = "glcontext-2.3.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8ca64b73e16712537a95d2e848a13391f83d72f5c19bde5f05562b62b2a1fee6"}, - {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:226453bb7ff5a79e88c59ae38b60d1ce002fa2196b19aa8fada147221816e78c"}, - {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48f299b77612b9c80f026204ee3a3062b56cb0776c1d25a6b5ce05fb7e18b261"}, - {file = "glcontext-2.3.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81addba70acbc3fa84ace2b53509c89ff3c7bfe068d1ba2d7d3478140aed2838"}, - {file = "glcontext-2.3.6-cp38-cp38-win32.whl", hash = "sha256:233a9a977d545acf7d2ea1065c986fe6b711948f31499ce5e49e5366eefafa08"}, - {file = "glcontext-2.3.6-cp38-cp38-win_amd64.whl", hash = "sha256:7f114582574c8013fdec09154767b2c3f87875b74ff9938b20d3265971d08971"}, - {file = "glcontext-2.3.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c8adc530ecbb0c01c0abcc56ee71c7bcf8799209bff9e5c32f1a1d77f7035468"}, - {file = "glcontext-2.3.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:01106836f02d0098cbcacbc6d0c911f27fa728177d5a651ff44325dfafba7077"}, - {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3f573bde2183943f6161aeb81cad14a2978f143c686dd52253a38cdae7e7667"}, - {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:60a982fc78b4400d3b5075f9790977c4d2bdf99824af3cd0428ae5a54437635f"}, - {file = "glcontext-2.3.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64c0425155174fd2faaff7f631d41792365e357484c7f44a6b38efc1ea38468c"}, - {file = "glcontext-2.3.6-cp39-cp39-win32.whl", hash = "sha256:8789947abf3594a11655f23be88481dae0a660bbf8f42e2a5fa95a8fce59ba2c"}, - {file = "glcontext-2.3.6-cp39-cp39-win_amd64.whl", hash = "sha256:22699f81696756ec98fcf8b9a2ebd1dd73a42f81501d7748855e66b63d963c36"}, - {file = "glcontext-2.3.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:970a2769c6aed12e29bd1edbb30a04fa17871a6cf7bb95190e65302c693ce928"}, - {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a30c62c6168b42a32083dc8c967e421f8c346e4452a00809c056ce6c6bea0c4"}, - {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e531662f37d171c08fcdc4ca442468266bef77da14c72c183bcaa2cd80111386"}, - {file = "glcontext-2.3.6-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98d5dfc4629ed85e51176fc1d8563944e0439b77bc6fe2365cb42207838ea32f"}, - {file = "glcontext-2.3.6-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:41a69166c20b1a67b2652a5074a78078df7e19f36c65d92f6552535a1182d4cc"}, - {file = "glcontext-2.3.6-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8b118f0361e61e21279e414a1fa759288421ac311e44ce08e718de38f788183"}, - {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4f862f2b4426f1786743448c899d225e8383538602a04c3ffc9622956d08140"}, - {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e59f5afe61c5bc18dc7766c36a0ac912794a53605b30469c6c6be20483f4b42f"}, - {file = "glcontext-2.3.6-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d399cba251b301d94eb7a41017ba68e001673f642606229fba7a0d4183b3273"}, - {file = "glcontext-2.3.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:bd50f826bb70df2415c7166d5e0aebdda3e47df8af385f562d8d5ba6018f87e9"}, - {file = "glcontext-2.3.6.tar.gz", hash = "sha256:cdb540eec587deddca037fb4dfdaa0921dcab0fd4d7ea5f1079e44fcb1b81e67"}, + {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.6-py2.py3-none-any.whl", hash = "sha256:b276db7ec52d7e89f5bc4653380e33054ddc803d25875952ad90b0f012cbcdaa"}, - {file = "identify-2.5.6.tar.gz", hash = "sha256:6c32dbd747aa4ceee1df33f25fed0b0f6e0d65721b15bd151307ff7056d50245"}, + {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"}, @@ -2981,8 +3132,8 @@ imagesize = [ {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.13.0-py3-none-any.whl", hash = "sha256:8a8a81bcf996e74fee46f0d16bd3eaa382a7eb20fd82445c3ad11f4090334116"}, - {file = "importlib_metadata-4.13.0.tar.gz", hash = "sha256:dd0173e8f150d6815e098fd354f6414b0f079af4644ddfe90c71e2fc6174346d"}, + {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.0-py3-none-any.whl", hash = "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437"}, @@ -2993,14 +3144,14 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] ipykernel = [ - {file = "ipykernel-6.16.0-py3-none-any.whl", hash = "sha256:d3d95241cd4dd302fea9d5747b00509b58997356d1f6333c9a074c3eccb78cb3"}, - {file = "ipykernel-6.16.0.tar.gz", hash = "sha256:7fe42c0d58435e971dc15fd42189f20d66bf35f3056bda4f6554271bc1fa3d0d"}, + {file = "ipykernel-6.17.1-py3-none-any.whl", hash = "sha256:3a9a1b2ad6dbbd5879855aabb4557f08e63fa2208bffed897f03070e2bb436f6"}, + {file = "ipykernel-6.17.1.tar.gz", hash = "sha256:e178c1788399f93a459c241fe07c3b810771c607b1fb064a99d2c5d40c90c5d4"}, ] ipython = [ - {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, - {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, + {file = "ipython-8.7.0-py3-none-any.whl", hash = "sha256:352042ddcb019f7c04e48171b4dd78e4c4bb67bf97030d170e154aac42b656d9"}, + {file = "ipython-8.7.0.tar.gz", hash = "sha256:882899fe78d5417a0aa07f995db298fa28b58faeba2112d2e3a4c95fe14bb738"}, ] -ipython_genutils = [ +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"}, ] @@ -3013,10 +3164,10 @@ isosurfaces = [ {file = "isosurfaces-0.1.0.tar.gz", hash = "sha256:fa1b44e5e59d2f429add49289ab89e36f8dcda49b7badd99e0beea273be331f4"}, ] jedi = [ - {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, - {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, + {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, + {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, ] -Jinja2 = [ +jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] @@ -3025,32 +3176,32 @@ json5 = [ {file = "json5-0.9.10.tar.gz", hash = "sha256:ad9f048c5b5a4c3802524474ce40a622fae789860a86f10cc4f7e5f9cf9b46ab"}, ] jsonschema = [ - {file = "jsonschema-4.16.0-py3-none-any.whl", hash = "sha256:9e74b8f9738d6a946d70705dc692b74b5429cd0960d58e79ffecfc43b2221eb9"}, - {file = "jsonschema-4.16.0.tar.gz", hash = "sha256:165059f076eff6971bae5b742fc029a7b4ef3f9bcf04c14e4776a7605de14b23"}, + {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.3.5-py3-none-any.whl", hash = "sha256:b33222bdc9dd1714228bd286af006533a0abe2bbc093e8f3d29dc0b91bdc2be4"}, - {file = "jupyter_client-7.3.5.tar.gz", hash = "sha256:3c58466a1b8d55dba0bf3ce0834e4f5b7760baf98d1d73db0add6f19de9ecd1d"}, + {file = "jupyter_client-7.4.7-py3-none-any.whl", hash = "sha256:df56ae23b8e1da1b66f89dee1368e948b24a7f780fa822c5735187589fc4c157"}, + {file = "jupyter_client-7.4.7.tar.gz", hash = "sha256:330f6b627e0b4bf2f54a3a0dd9e4a22d2b649c8518168afedce2c96a1ceb2860"}, ] jupyter-core = [ - {file = "jupyter_core-4.11.2-py3-none-any.whl", hash = "sha256:3815e80ec5272c0c19aad087a0d2775df2852cfca8f5a17069e99c9350cecff8"}, - {file = "jupyter_core-4.11.2.tar.gz", hash = "sha256:c2909b9bc7dca75560a6c5ae78c34fd305ede31cd864da3c0d0bb2ed89aa9337"}, + {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-server = [ - {file = "jupyter_server-1.19.1-py3-none-any.whl", hash = "sha256:ea3587840f2a906883c9eecb6bc85ef87ba1b7ba4cb6eafbacfac4a568862106"}, - {file = "jupyter_server-1.19.1.tar.gz", hash = "sha256:d1cc3596945849742bc3eedf0699feeb50ad6c6045ebef02a9298b7f13c27e9f"}, + {file = "jupyter_server-1.23.3-py3-none-any.whl", hash = "sha256:438496cac509709cc85e60172e5538ca45b4c8a0862bb97cd73e49f2ace419cb"}, + {file = "jupyter_server-1.23.3.tar.gz", hash = "sha256:f7f7a2f9d36f4150ad125afef0e20b1c76c8ff83eb5e39fb02d3b9df0f9b79ab"}, ] jupyterlab = [ - {file = "jupyterlab-3.4.8-py3-none-any.whl", hash = "sha256:4626a0434c76a3a22f11c4efaa1d031d2586367f72cfdbdbff6b08b6ef0060f7"}, - {file = "jupyterlab-3.4.8.tar.gz", hash = "sha256:1fafb8b657005d91603f3c3adfd6d9e8eaf33fdc601537fef09283332efe67cb"}, + {file = "jupyterlab-3.5.0-py3-none-any.whl", hash = "sha256:f433059fe0e12d75ea90a81a0b6721113bb132857e3ec2197780b6fe84cbcbde"}, + {file = "jupyterlab-3.5.0.tar.gz", hash = "sha256:e02556c8ea1b386963c4b464e4618aee153c5416b07ab481425c817a033323a2"}, ] 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.15.2-py3-none-any.whl", hash = "sha256:ec7cc9ddd16c407ba3ecd3579771fa7ae4c8f239ba401649f35e44ecbc3d41cc"}, - {file = "jupyterlab_server-2.15.2.tar.gz", hash = "sha256:c0bcdd4606e640e6f16d236ceac55336dc8bf98cbbce067af27524ccc2fb2640"}, + {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"}, @@ -3123,58 +3274,43 @@ kiwisolver = [ {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, ] lazy-object-proxy = [ - {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb8c5fd1684d60a9902c60ebe276da1f2281a318ca16c1d0a96db28f62e9166b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a57d51ed2997e97f3b8e3500c984db50a554bb5db56c50b5dab1b41339b37e36"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd45683c3caddf83abbb1249b653a266e7069a09f486daa8863fb0e7496a9fdb"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8561da8b3dd22d696244d6d0d5330618c993a215070f473b699e00cf1f3f6443"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fccdf7c2c5821a8cbd0a9440a456f5050492f2270bd54e94360cac663398739b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win32.whl", hash = "sha256:898322f8d078f2654d275124a8dd19b079080ae977033b713f677afcfc88e2b9"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:85b232e791f2229a4f55840ed54706110c80c0a210d076eee093f2b2e33e1bfd"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:46ff647e76f106bb444b4533bb4153c7370cdf52efc62ccfc1a28bdb3cc95442"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f3bb77efe1367b2515f8cb4790a11cffae889148ad33adad07b9b55e0ab22c"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c19814163728941bb871240d45c4c30d33b8a2e85972c44d4e63dd7107faba44"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e40f2013d96d30217a51eeb1db28c9ac41e9d0ee915ef9d00da639c5b63f01a1"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2052837718516a94940867e16b1bb10edb069ab475c3ad84fd1e1a6dd2c0fcfc"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win32.whl", hash = "sha256:6a24357267aa976abab660b1d47a34aaf07259a0c3859a34e536f1ee6e76b5bb"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6aff3fe5de0831867092e017cf67e2750c6a1c7d88d84d2481bd84a2e019ec35"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a6e94c7b02641d1311228a102607ecd576f70734dc3d5e22610111aeacba8a0"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ce15276a1a14549d7e81c243b887293904ad2d94ad767f42df91e75fd7b5b6"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e368b7f7eac182a59ff1f81d5f3802161932a41dc1b1cc45c1f757dc876b5d2c"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ecbb350991d6434e1388bee761ece3260e5228952b1f0c46ffc800eb313ff42"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:553b0f0d8dbf21890dd66edd771f9b1b5f51bd912fa5f26de4449bfc5af5e029"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:c7a683c37a8a24f6428c28c561c80d5f4fd316ddcf0c7cab999b15ab3f5c5c69"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:df2631f9d67259dc9620d831384ed7732a198eb434eadf69aea95ad18c587a28"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07fa44286cda977bd4803b656ffc1c9b7e3bc7dff7d34263446aec8f8c96f88a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dca6244e4121c74cc20542c2ca39e5c4a5027c81d112bfb893cf0790f96f57e"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91ba172fc5b03978764d1df5144b4ba4ab13290d7bab7a50f12d8117f8630c38"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:043651b6cb706eee4f91854da4a089816a6606c1428fd391573ef8cb642ae4f7"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b9e89b87c707dd769c4ea91f7a31538888aad05c116a59820f28d59b3ebfe25a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:9d166602b525bf54ac994cf833c385bfcc341b364e3ee71e3bf5a1336e677b55"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f3953eb575b45480db6568306893f0bd9d8dfeeebd46812aa09ca9579595148"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dd7ed7429dbb6c494aa9bc4e09d94b778a3579be699f9d67da7e6804c422d3de"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ed0c2b380eb6248abdef3cd425fc52f0abd92d2b07ce26359fcbc399f636ad"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7096a5e0c1115ec82641afbdd70451a144558ea5cf564a896294e346eb611be1"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f769457a639403073968d118bc70110e7dce294688009f5c24ab78800ae56dc8"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:39b0e26725c5023757fc1ab2a89ef9d7ab23b84f9251e28f9cc114d5b59c1b09"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:2130db8ed69a48a3440103d4a520b89d8a9405f1b06e2cc81640509e8bf6548f"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61"}, - {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, -] -ManimPango = [ - {file = "ManimPango-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc70c1ae3bb853b7244ea2c9b50c908e9d7a93062ec68315872e38771cc66969"}, - {file = "ManimPango-0.4.1-cp310-cp310-win32.whl", hash = "sha256:5228e5326dc52753f4e6855ac4bf9667d78c0005315cddaf74fac5c2a6f87bc3"}, - {file = "ManimPango-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:a83da66451498d6cc3f6e637157ca6c7530b68f9bc0ac6fe043b04bf78c87073"}, - {file = "ManimPango-0.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb84060069e35bbc220cc9a19658f3e694019a98cee2154fee1171a47bf3db44"}, - {file = "ManimPango-0.4.1-cp37-cp37m-win32.whl", hash = "sha256:02eee359b971d8f900ecb4de0e0023abe1aaec8f5e1c39c663a99a4e2b4425b0"}, - {file = "ManimPango-0.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:c59cadd9ed02c0d748fcf294ddb7d158c2ba2a50caa96d6af58ee0bcde327d67"}, - {file = "ManimPango-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d36b4df474149e958fadcc31a29cefc90ced6240053fa0e9cd3188a5649eca6b"}, - {file = "ManimPango-0.4.1-cp38-cp38-win32.whl", hash = "sha256:5ed7b089681d1379c4250b070b668079e92d69251491ec8e010c083d21a80775"}, - {file = "ManimPango-0.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:7a0e42e17b2caae12bcd68502befa0e879c8503e6d31cd07e8d819b1e2567718"}, - {file = "ManimPango-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2375739e7a65a7f16e5856b392d930410c194066dd44cf6000d5ef2eb3b7d6f3"}, - {file = "ManimPango-0.4.1-cp39-cp39-win32.whl", hash = "sha256:109f2f5298f7a53354871766b21bc3a40e41eba448030fdcdffb970a295ebf28"}, - {file = "ManimPango-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:ca35af36d490000a7155fdb3aae124bcdfe2a167086c95df0aeee92483f1dce1"}, - {file = "ManimPango-0.4.1.tar.gz", hash = "sha256:f2da037ccdfe174040d3315001cc59bfc7405cd1b1191078bd4db0938005d649"}, + {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.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1ced70e48725bbba7da442e36a013df447ebd1b1cc2cfac02222a4b78f03615c"}, @@ -3212,7 +3348,7 @@ 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 = [ +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"}, @@ -3255,41 +3391,47 @@ MarkupSafe = [ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] matplotlib = [ - {file = "matplotlib-3.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a206a1b762b39398efea838f528b3a6d60cdb26fe9d58b48265787e29cd1d693"}, - {file = "matplotlib-3.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd45a6f3e93a780185f70f05cf2a383daed13c3489233faad83e81720f7ede24"}, - {file = "matplotlib-3.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d62880e1f60e5a30a2a8484432bcb3a5056969dc97258d7326ad465feb7ae069"}, - {file = "matplotlib-3.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ab29589cef03bc88acfa3a1490359000c18186fc30374d8aa77d33cc4a51a4a"}, - {file = "matplotlib-3.5.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2886cc009f40e2984c083687251821f305d811d38e3df8ded414265e4583f0c5"}, - {file = "matplotlib-3.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c995f7d9568f18b5db131ab124c64e51b6820a92d10246d4f2b3f3a66698a15b"}, - {file = "matplotlib-3.5.3-cp310-cp310-win32.whl", hash = "sha256:6bb93a0492d68461bd458eba878f52fdc8ac7bdb6c4acdfe43dba684787838c2"}, - {file = "matplotlib-3.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:2e6d184ebe291b9e8f7e78bbab7987d269c38ea3e062eace1fe7d898042ef804"}, - {file = "matplotlib-3.5.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6ea6aef5c4338e58d8d376068e28f80a24f54e69f09479d1c90b7172bad9f25b"}, - {file = "matplotlib-3.5.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:839d47b8ead7ad9669aaacdbc03f29656dc21f0d41a6fea2d473d856c39c8b1c"}, - {file = "matplotlib-3.5.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3b4fa56159dc3c7f9250df88f653f085068bcd32dcd38e479bba58909254af7f"}, - {file = "matplotlib-3.5.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:94ff86af56a3869a4ae26a9637a849effd7643858a1a04dd5ee50e9ab75069a7"}, - {file = "matplotlib-3.5.3-cp37-cp37m-win32.whl", hash = "sha256:35a8ad4dddebd51f94c5d24bec689ec0ec66173bf614374a1244c6241c1595e0"}, - {file = "matplotlib-3.5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:43e9d3fa077bf0cc95ded13d331d2156f9973dce17c6f0c8b49ccd57af94dbd9"}, - {file = "matplotlib-3.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:22227c976ad4dc8c5a5057540421f0d8708c6560744ad2ad638d48e2984e1dbc"}, - {file = "matplotlib-3.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf618a825deb6205f015df6dfe6167a5d9b351203b03fab82043ae1d30f16511"}, - {file = "matplotlib-3.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9befa5954cdbc085e37d974ff6053da269474177921dd61facdad8023c4aeb51"}, - {file = "matplotlib-3.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3840c280ebc87a48488a46f760ea1c0c0c83fcf7abbe2e6baf99d033fd35fd8"}, - {file = "matplotlib-3.5.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dacddf5bfcec60e3f26ec5c0ae3d0274853a258b6c3fc5ef2f06a8eb23e042be"}, - {file = "matplotlib-3.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b428076a55fb1c084c76cb93e68006f27d247169f056412607c5c88828d08f88"}, - {file = "matplotlib-3.5.3-cp38-cp38-win32.whl", hash = "sha256:874df7505ba820e0400e7091199decf3ff1fde0583652120c50cd60d5820ca9a"}, - {file = "matplotlib-3.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:b28de401d928890187c589036857a270a032961411934bdac4cf12dde3d43094"}, - {file = "matplotlib-3.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3211ba82b9f1518d346f6309df137b50c3dc4421b4ed4815d1d7eadc617f45a1"}, - {file = "matplotlib-3.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6fe807e8a22620b4cd95cfbc795ba310dc80151d43b037257250faf0bfcd82bc"}, - {file = "matplotlib-3.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5c096363b206a3caf43773abebdbb5a23ea13faef71d701b21a9c27fdcef72f4"}, - {file = "matplotlib-3.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bcdfcb0f976e1bac6721d7d457c17be23cf7501f977b6a38f9d38a3762841f7"}, - {file = "matplotlib-3.5.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e64ac9be9da6bfff0a732e62116484b93b02a0b4d4b19934fb4f8e7ad26ad6a"}, - {file = "matplotlib-3.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:73dd93dc35c85dece610cca8358003bf0760d7986f70b223e2306b4ea6d1406b"}, - {file = "matplotlib-3.5.3-cp39-cp39-win32.whl", hash = "sha256:879c7e5fce4939c6aa04581dfe08d57eb6102a71f2e202e3314d5fbc072fd5a0"}, - {file = "matplotlib-3.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:ab8d26f07fe64f6f6736d635cce7bfd7f625320490ed5bfc347f2cdb4fae0e56"}, - {file = "matplotlib-3.5.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:99482b83ebf4eb6d5fc6813d7aacdefdd480f0d9c0b52dcf9f1cc3b2c4b3361a"}, - {file = "matplotlib-3.5.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f814504e459c68118bf2246a530ed953ebd18213dc20e3da524174d84ed010b2"}, - {file = "matplotlib-3.5.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57f1b4e69f438a99bb64d7f2c340db1b096b41ebaa515cf61ea72624279220ce"}, - {file = "matplotlib-3.5.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d2484b350bf3d32cae43f85dcfc89b3ed7bd2bcd781ef351f93eb6fb2cc483f9"}, - {file = "matplotlib-3.5.3.tar.gz", hash = "sha256:339cac48b80ddbc8bfd05daae0a3a73414651a8596904c2a881cfd1edb65f26c"}, + {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"}, @@ -3312,63 +3454,56 @@ mistune = [ {file = "mistune-2.0.4.tar.gz", hash = "sha256:9ee0a66053e2267aba772c71e06891fa8f1af6d4b01d5e84e267b4570d4d9808"}, ] moderngl = [ - {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:186f8ab2b869c56f677dc87de0577a60790fb9306bd5149cedc433a39e9291e5"}, - {file = "moderngl-5.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de252103b24a8dc40c7f6e1755e29bc9263c33b92141787b50c7ab0266c74906"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bcfcec3bc3b9a1ee19e94fa524913fd45c37214ea69301a6911e8e53f966029"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d76b0fb489a5dc6da591b979f8c471bb5b67409afaa9fe4569bc0abf25221f4"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_27_x86_64.whl", hash = "sha256:792ffe1ec233ed5fcfb0c14955a7f944d64c0d49713ff8b9c5fa3176d96f05c3"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:1f9ed0bc0d706124a01be2ad59b5774bb3b023e61dcf39faf7c4c7ef4b9f4f75"}, - {file = "moderngl-5.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7c2fce8b7a68f3df9189a19f424478e1d853cfd3e142efd1eb0d4cdf44148d7"}, - {file = "moderngl-5.6.4-cp310-cp310-win32.whl", hash = "sha256:0c6b482f678641e56bd44acecd10eddf74d2cd31e472eff6cca05493cf01e2c9"}, - {file = "moderngl-5.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:28b517fc56c9ab9eb1f5833f7d7b1274d3719b962f95f55ccd8a0f6db884a92b"}, - {file = "moderngl-5.6.4-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:bc3764d67f037b67051871345a1d0b7a3d2c19cb5c0c0af0a84c532e802d6642"}, - {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:90006d9dfd5333da604a7d26b2a5e70e1a570f291cd745b8bf80e4833d8821b6"}, - {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:af44437545380a840dafd09658eb56592831dbd4fb481d320249d0d42c591bae"}, - {file = "moderngl-5.6.4-cp35-cp35m-win32.whl", hash = "sha256:b5023633bcbfbab90be6a6f4edcde75f9c1e244d9acbda94678f3e3fb238b363"}, - {file = "moderngl-5.6.4-cp35-cp35m-win_amd64.whl", hash = "sha256:ffc48fc4deeb525ed33a828d13ca4c12c5af8e5cb0449011f1802e18b5fc3c25"}, - {file = "moderngl-5.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:331fd4bce60b10a08eed81a3ed4c70b7c297c38f981fdf3968d03a1c892af247"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1bd864b5cc2fc1255785e33575cec98fa5ded698503c4f8f3fa9230abeaa3a04"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b22534529f5bc52c1fe43336787c06d51123ae978fb56e74e47cabd85056c934"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5151ccf38af80ce8600eac089df1c814eb72aa99c8768307348c1a170104b7e"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ef57f65c639d12d534dce70e5c08965f0856ac371c669c7586904b8db6453eb"}, - {file = "moderngl-5.6.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0032c07b31bec50b26bba7ee7999e0f697000b31456bfa84391614bb92dba376"}, - {file = "moderngl-5.6.4-cp36-cp36m-win32.whl", hash = "sha256:ee5b1eced39d7f6dc68782c2abf01c1130a40b6d83d333d175ee71adbea7c721"}, - {file = "moderngl-5.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:52ee915a559762f0e992344961b35e0d241be32f8aa7464494e958f777e0534c"}, - {file = "moderngl-5.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f83f6ab1fafdba2d9c06a7a1c8a4e460689ea1d514146606acc74f14e0831d93"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c350e06affea9fabc636b2350cf6e58d83ee2e7264527eee0f5d142c167f5463"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3eb65afc8ec4a1d4a4c48696fb0f4f6cf7a7ada6bef97818d717dbca73c57b11"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ec09bb3382d36e5ef3e627e85744b719db1175c3a3fdbadf9acde48eb1aca6"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23b6b30c5a16807d9d2b92f343fcdca8713a88801d8afa985decd302bb6ef7e9"}, - {file = "moderngl-5.6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5eb217b7726511d2382bfdd56b2a8ff5489aa7d1d73bf4f854343b07df286fa9"}, - {file = "moderngl-5.6.4-cp37-cp37m-win32.whl", hash = "sha256:4fd721eb83e73d34c3f7b5a11aec656fef461b51bbe7503b07ea27370c593cbd"}, - {file = "moderngl-5.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:01c71d94dbd59b5d37ead463991e2998c0924426cffa393b9da2b8334551c998"}, - {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:46e7e03360eafa77159e0d6142904de0d2e9400254414820bbc2d0ca16b14388"}, - {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2ec6ecd845f21ba44a08c11521cb71f2a9c2ea2ec189b7ed30d17837d392d70"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:40f74a2246e5302f93f2d46f76c0d2a26cbed1eb29731674c4052476f1e9c9ea"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5e158e6881034c7e1d0c583d7c82ff608439606f2359dc6098e4be4fd93cef9d"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eb8fb5efab2716938308732d16d0caf1a195015d84d73f2b73e3adacd228ba6"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59907d8855dd3ccf1950e8f43f5a1a7cdd93910d8edf538bf52e62098be22360"}, - {file = "moderngl-5.6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8037b6934843000d5fecd2b1933d3894687123fc9afdb19af52a9a628971163d"}, - {file = "moderngl-5.6.4-cp38-cp38-win32.whl", hash = "sha256:a28dc741469eeb69549ee85b4ddbf8e9cfca6a2b19ce0406df9fde20f78082c8"}, - {file = "moderngl-5.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:ce87962b91635d857cac4a753c5d5f647d94dc66dcb0f090bb8d758fd226c3e8"}, - {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d4c56e15a5fb29de0295891ec3b153e2bd8aeada0c0825135aa5851fa481ff28"}, - {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fb139bcdd25eae2c546e5788e9d8719f6c4b18a2ba68a9df31699b4ac57d62d"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9645afaa1704b2628d8a58be0760243d9954a62902283b176ea00a55b54eafe"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a3aaa15eb4d43b79e06a46945869feb13f325312ad63666ef2b7d3e216e3a09"}, - {file = "moderngl-5.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a07531c6b0f3da3058bd8927bc6c75eface98ce1416d8be4072b9b11b314b718"}, - {file = "moderngl-5.6.4-cp39-cp39-win32.whl", hash = "sha256:fc5cc1601a3df8f45f1901c6b9960731e0619d1781b0d036e12341fbf2ef55d3"}, - {file = "moderngl-5.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:1c74b71c9acee9f0e69807a086d76e92f37c1960c3bb1d6a6e2472fd03f7be5b"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1927a52fd3465c508045a1c4a8ea8c793399830d48458d431936f24f8827f136"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d04747cc9a96f786d04c8a176d5d2cbb51159efd66287d0e676ac674f53e861"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9092c50a2bb293be770f6f0ae5f1cb940848bf03682696c473a6d3f2c7710d2"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571e524fde685e21dbe132f4eb7bb223cfc235dc917a4cf122bc44897be18e89"}, - {file = "moderngl-5.6.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ee02dba4b32d7a165a36c797ce495d71deb085a7e29cfa7f1236fa7ccdfc6160"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0c02fdd386c45ad5d5053a436da64181a7821a042f6665c4ae415edfbdfe244c"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e2b40f1e11ee5f251a0d564e6a5d285ff91adf361e84f6912fc10959b92bd83"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d5f918dda6dc1ec5465d7105b06c5525041fbc368df5d4636145006ce3d303"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a6bd0e342388b931954671ccf8300ab36cc7d8c991547581efa6df5628bda8b"}, - {file = "moderngl-5.6.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:890caba3795a0288259d76a2cee014c6ffc00619bef179a8d0a87fd9c16a3729"}, - {file = "moderngl-5.6.4.tar.gz", hash = "sha256:8c6d04559f5e3bf75a18525cd46d213c0f3a8409363718978e6de691bdb551fb"}, + {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"}, @@ -3409,73 +3544,70 @@ myst-parser = [ {file = "myst_parser-0.17.2-py3-none-any.whl", hash = "sha256:1635ce3c18965a528d6de980f989ff64d6a1effb482e1f611b1bfb79e38f3d98"}, ] nbclassic = [ - {file = "nbclassic-0.4.5-py3-none-any.whl", hash = "sha256:07fba5a9e52a6ed7e795b45d300629b2a07a69e5a47398833b7977a7ecc8a3c1"}, - {file = "nbclassic-0.4.5.tar.gz", hash = "sha256:05704c6cdd8301bf52e40ed9fae39e80d6bc5d2d447dc67831c145b4dd928779"}, + {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.0-py3-none-any.whl", hash = "sha256:434c91385cf3e53084185334d675a0d33c615108b391e260915d1aa8e86661b8"}, - {file = "nbclient-0.7.0.tar.gz", hash = "sha256:a1d844efd6da9bc39d2209bf996dbd8e07bf0f36b796edfabaa8f8a9ab77c3aa"}, + {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.1-py3-none-any.whl", hash = "sha256:50a54366ab53da20e82668818b7b2f3f7b85c0bcd46ec8e18836f12b39180dfa"}, - {file = "nbconvert-7.2.1.tar.gz", hash = "sha256:1e180801205ad831b6e2480c5a03307dfb6327fa5b2f9b156d6fed45f9700686"}, + {file = "nbconvert-7.2.5-py3-none-any.whl", hash = "sha256:3e90e108bb5637b5b8a1422af1156af1368b39dd25369ff7faa7dfdcdef18f81"}, + {file = "nbconvert-7.2.5.tar.gz", hash = "sha256:8fdc44fd7d9424db7fdc6e1e834a02f6b8620ffb653767388be2f9eb16f84184"}, ] nbformat = [ - {file = "nbformat-5.6.1-py3-none-any.whl", hash = "sha256:9c071f0f615c1b0f4f9bf6745ecfd3294fc02daf279a05c76004c901e9dc5893"}, - {file = "nbformat-5.6.1.tar.gz", hash = "sha256:146b5b9969391387c2089256359f5da7c718b1d8a88ba814320273ea410e646e"}, + {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.6.3-py3-none-any.whl", hash = "sha256:80b6b89c77d1dfb64a4c7854981b60aeea6360ac02c6d4e4913319e0a313abef"}, - {file = "networkx-2.6.3.tar.gz", hash = "sha256:c0946ed31d71f1b732b5aaa6da5a0388a345019af232ce2f49c766e2d6795c51"}, + {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.4.12-py3-none-any.whl", hash = "sha256:8c07a3bb7640e371f8a609bdbb2366a1976c6a2589da8ef917f761a61e3ad8b1"}, - {file = "notebook-6.4.12.tar.gz", hash = "sha256:6268c9ec9048cff7a45405c990c29ac9ca40b0bc3ec29263d218c5e01f2b4e86"}, + {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.1.0-py3-none-any.whl", hash = "sha256:02432d55a01139ac16e2100888aa2b56c614720cec73a27e71f40a5387e45324"}, - {file = "notebook_shim-0.1.0.tar.gz", hash = "sha256:7897e47a36d92248925a2143e3596f19c60597708f7bef50d81fcd31d7263e85"}, + {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.21.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8737609c3bbdd48e380d463134a35ffad3b22dc56295eff6f79fd85bd0eeeb25"}, - {file = "numpy-1.21.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fdffbfb6832cd0b300995a2b08b8f6fa9f6e856d562800fea9182316d99c4e8e"}, - {file = "numpy-1.21.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3820724272f9913b597ccd13a467cc492a0da6b05df26ea09e78b171a0bb9da6"}, - {file = "numpy-1.21.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f17e562de9edf691a42ddb1eb4a5541c20dd3f9e65b09ded2beb0799c0cf29bb"}, - {file = "numpy-1.21.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f30427731561ce75d7048ac254dbe47a2ba576229250fb60f0fb74db96501a1"}, - {file = "numpy-1.21.6-cp310-cp310-win32.whl", hash = "sha256:d4bf4d43077db55589ffc9009c0ba0a94fa4908b9586d6ccce2e0b164c86303c"}, - {file = "numpy-1.21.6-cp310-cp310-win_amd64.whl", hash = "sha256:d136337ae3cc69aa5e447e78d8e1514be8c3ec9b54264e680cf0b4bd9011574f"}, - {file = "numpy-1.21.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6aaf96c7f8cebc220cdfc03f1d5a31952f027dda050e5a703a0d1c396075e3e7"}, - {file = "numpy-1.21.6-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:67c261d6c0a9981820c3a149d255a76918278a6b03b6a036800359aba1256d46"}, - {file = "numpy-1.21.6-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a6be4cb0ef3b8c9250c19cc122267263093eee7edd4e3fa75395dfda8c17a8e2"}, - {file = "numpy-1.21.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c4068a8c44014b2d55f3c3f574c376b2494ca9cc73d2f1bd692382b6dffe3db"}, - {file = "numpy-1.21.6-cp37-cp37m-win32.whl", hash = "sha256:7c7e5fa88d9ff656e067876e4736379cc962d185d5cd808014a8a928d529ef4e"}, - {file = "numpy-1.21.6-cp37-cp37m-win_amd64.whl", hash = "sha256:bcb238c9c96c00d3085b264e5c1a1207672577b93fa666c3b14a45240b14123a"}, - {file = "numpy-1.21.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:82691fda7c3f77c90e62da69ae60b5ac08e87e775b09813559f8901a88266552"}, - {file = "numpy-1.21.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:643843bcc1c50526b3a71cd2ee561cf0d8773f062c8cbaf9ffac9fdf573f83ab"}, - {file = "numpy-1.21.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:357768c2e4451ac241465157a3e929b265dfac85d9214074985b1786244f2ef3"}, - {file = "numpy-1.21.6-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9f411b2c3f3d76bba0865b35a425157c5dcf54937f82bbeb3d3c180789dd66a6"}, - {file = "numpy-1.21.6-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4aa48afdce4660b0076a00d80afa54e8a97cd49f457d68a4342d188a09451c1a"}, - {file = "numpy-1.21.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a96eef20f639e6a97d23e57dd0c1b1069a7b4fd7027482a4c5c451cd7732f4"}, - {file = "numpy-1.21.6-cp38-cp38-win32.whl", hash = "sha256:5c3c8def4230e1b959671eb959083661b4a0d2e9af93ee339c7dada6759a9470"}, - {file = "numpy-1.21.6-cp38-cp38-win_amd64.whl", hash = "sha256:bf2ec4b75d0e9356edea834d1de42b31fe11f726a81dfb2c2112bc1eaa508fcf"}, - {file = "numpy-1.21.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4391bd07606be175aafd267ef9bea87cf1b8210c787666ce82073b05f202add1"}, - {file = "numpy-1.21.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:67f21981ba2f9d7ba9ade60c9e8cbaa8cf8e9ae51673934480e45cf55e953673"}, - {file = "numpy-1.21.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee5ec40fdd06d62fe5d4084bef4fd50fd4bb6bfd2bf519365f569dc470163ab0"}, - {file = "numpy-1.21.6-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1dbe1c91269f880e364526649a52eff93ac30035507ae980d2fed33aaee633ac"}, - {file = "numpy-1.21.6-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d9caa9d5e682102453d96a0ee10c7241b72859b01a941a397fd965f23b3e016b"}, - {file = "numpy-1.21.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58459d3bad03343ac4b1b42ed14d571b8743dc80ccbf27444f266729df1d6f5b"}, - {file = "numpy-1.21.6-cp39-cp39-win32.whl", hash = "sha256:7f5ae4f304257569ef3b948810816bc87c9146e8c446053539947eedeaa32786"}, - {file = "numpy-1.21.6-cp39-cp39-win_amd64.whl", hash = "sha256:e31f0bb5928b793169b87e3d1e070f2342b22d5245c755e2b81caa29756246c3"}, - {file = "numpy-1.21.6-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd1c8f6bd65d07d3810b90d02eba7997e32abbdf1277a481d698969e921a3be0"}, - {file = "numpy-1.21.6.zip", hash = "sha256:ecb55251139706669fdec2ff073c98ef8e9a84473e51e716211b41aa0f18e656"}, + {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-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, @@ -3490,8 +3622,8 @@ parso = [ {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] pathspec = [ - {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"}, - {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, + {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"}, @@ -3564,13 +3696,13 @@ pillow = [ {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 = [ +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.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, + {file = "platformdirs-2.5.4-py3-none-any.whl", hash = "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10"}, + {file = "platformdirs-2.5.4.tar.gz", hash = "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -3581,46 +3713,28 @@ pre-commit = [ {file = "pre_commit-2.20.0.tar.gz", hash = "sha256:a978dac7bc9ec0bcee55c18a277d553b0f419d259dadb4b9418ff2d00eb43959"}, ] prometheus-client = [ - {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, - {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, + {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.31-py3-none-any.whl", hash = "sha256:9696f386133df0fc8ca5af4895afe5d78f5fcfe5258111c2a79a1c3e41ffa96d"}, - {file = "prompt_toolkit-3.0.31.tar.gz", hash = "sha256:9ada952c9d1787f52ff6d5f3484d0b4df8952787c087edf6a1f7c2cb1ea88148"}, + {file = "prompt_toolkit-3.0.33-py3-none-any.whl", hash = "sha256:ced598b222f6f4029c0800cefaa6a17373fb580cd093223003475ce32805c35b"}, + {file = "prompt_toolkit-3.0.33.tar.gz", hash = "sha256:535c29c31216c77302877d5120aef6c94ff573748a5b5ca5b1b1f76f5e700c73"}, ] psutil = [ - {file = "psutil-5.9.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:8f024fbb26c8daf5d70287bb3edfafa22283c255287cf523c5d81721e8e5d82c"}, - {file = "psutil-5.9.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:b2f248ffc346f4f4f0d747ee1947963613216b06688be0be2e393986fe20dbbb"}, - {file = "psutil-5.9.2-cp27-cp27m-win32.whl", hash = "sha256:b1928b9bf478d31fdffdb57101d18f9b70ed4e9b0e41af751851813547b2a9ab"}, - {file = "psutil-5.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:404f4816c16a2fcc4eaa36d7eb49a66df2d083e829d3e39ee8759a411dbc9ecf"}, - {file = "psutil-5.9.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:94e621c6a4ddb2573d4d30cba074f6d1aa0186645917df42c811c473dd22b339"}, - {file = "psutil-5.9.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:256098b4f6ffea6441eb54ab3eb64db9ecef18f6a80d7ba91549195d55420f84"}, - {file = "psutil-5.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:614337922702e9be37a39954d67fdb9e855981624d8011a9927b8f2d3c9625d9"}, - {file = "psutil-5.9.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39ec06dc6c934fb53df10c1672e299145ce609ff0611b569e75a88f313634969"}, - {file = "psutil-5.9.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3ac2c0375ef498e74b9b4ec56df3c88be43fe56cac465627572dbfb21c4be34"}, - {file = "psutil-5.9.2-cp310-cp310-win32.whl", hash = "sha256:e4c4a7636ffc47b7141864f1c5e7d649f42c54e49da2dd3cceb1c5f5d29bfc85"}, - {file = "psutil-5.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:f4cb67215c10d4657e320037109939b1c1d2fd70ca3d76301992f89fe2edb1f1"}, - {file = "psutil-5.9.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dc9bda7d5ced744622f157cc8d8bdd51735dafcecff807e928ff26bdb0ff097d"}, - {file = "psutil-5.9.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75291912b945a7351d45df682f9644540d564d62115d4a20d45fa17dc2d48f8"}, - {file = "psutil-5.9.2-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4018d5f9b6651f9896c7a7c2c9f4652e4eea53f10751c4e7d08a9093ab587ec"}, - {file = "psutil-5.9.2-cp36-cp36m-win32.whl", hash = "sha256:f40ba362fefc11d6bea4403f070078d60053ed422255bd838cd86a40674364c9"}, - {file = "psutil-5.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9770c1d25aee91417eba7869139d629d6328a9422ce1cdd112bd56377ca98444"}, - {file = "psutil-5.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:42638876b7f5ef43cef8dcf640d3401b27a51ee3fa137cb2aa2e72e188414c32"}, - {file = "psutil-5.9.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91aa0dac0c64688667b4285fa29354acfb3e834e1fd98b535b9986c883c2ce1d"}, - {file = "psutil-5.9.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fb54941aac044a61db9d8eb56fc5bee207db3bc58645d657249030e15ba3727"}, - {file = "psutil-5.9.2-cp37-cp37m-win32.whl", hash = "sha256:7cbb795dcd8ed8fd238bc9e9f64ab188f3f4096d2e811b5a82da53d164b84c3f"}, - {file = "psutil-5.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:5d39e3a2d5c40efa977c9a8dd4f679763c43c6c255b1340a56489955dbca767c"}, - {file = "psutil-5.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd331866628d18223a4265371fd255774affd86244fc307ef66eaf00de0633d5"}, - {file = "psutil-5.9.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b315febaebae813326296872fdb4be92ad3ce10d1d742a6b0c49fb619481ed0b"}, - {file = "psutil-5.9.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7929a516125f62399d6e8e026129c8835f6c5a3aab88c3fff1a05ee8feb840d"}, - {file = "psutil-5.9.2-cp38-cp38-win32.whl", hash = "sha256:561dec454853846d1dd0247b44c2e66a0a0c490f937086930ec4b8f83bf44f06"}, - {file = "psutil-5.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:67b33f27fc0427483b61563a16c90d9f3b547eeb7af0ef1b9fe024cdc9b3a6ea"}, - {file = "psutil-5.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3591616fa07b15050b2f87e1cdefd06a554382e72866fcc0ab2be9d116486c8"}, - {file = "psutil-5.9.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b29f581b5edab1f133563272a6011925401804d52d603c5c606936b49c8b97"}, - {file = "psutil-5.9.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4642fd93785a29353d6917a23e2ac6177308ef5e8be5cc17008d885cb9f70f12"}, - {file = "psutil-5.9.2-cp39-cp39-win32.whl", hash = "sha256:ed29ea0b9a372c5188cdb2ad39f937900a10fb5478dc077283bf86eeac678ef1"}, - {file = "psutil-5.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:68b35cbff92d1f7103d8f1db77c977e72f49fcefae3d3d2b91c76b0e7aef48b8"}, - {file = "psutil-5.9.2.tar.gz", hash = "sha256:feb861a10b6c3bb00701063b37e4afc754f8217f0f09c42280586bd6ac712b5c"}, + {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"}, @@ -3641,20 +3755,26 @@ 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.21.0-cp310-cp310-win32.whl", hash = "sha256:44a2ecf34968de07b3b9dfdcdbccbd25aa3cab267200f234f84e81481a73bbf6"}, - {file = "pycairo-1.21.0-cp310-cp310-win_amd64.whl", hash = "sha256:f63c153a9ea3d21aff85e2caeee4b0c5d566b2368b4ed64826020d12953d76a4"}, - {file = "pycairo-1.21.0-cp37-cp37m-win32.whl", hash = "sha256:70936b19f967fa3cb3cd200c2608911227fa5d09dae21c166f64bc15e714ee41"}, - {file = "pycairo-1.21.0-cp37-cp37m-win_amd64.whl", hash = "sha256:31e1c4850db03201d33929cbe1905ce1b33202683ebda7bb0d4dba489115066b"}, - {file = "pycairo-1.21.0-cp38-cp38-win32.whl", hash = "sha256:dace6b356c476de27f8e1522428ac21a799c225703f746e2957d441f885dcb6c"}, - {file = "pycairo-1.21.0-cp38-cp38-win_amd64.whl", hash = "sha256:4357f20a6b1de8f1e8072a74ff68ab4c9a0ae698cd9f5c0f2b2cdd9b28b635f6"}, - {file = "pycairo-1.21.0-cp39-cp39-win32.whl", hash = "sha256:6d37375aab9f2bb6136f076c19815d72108383baae89fbc0d6cb8e5092217d02"}, - {file = "pycairo-1.21.0-cp39-cp39-win_amd64.whl", hash = "sha256:26b72b813c6f9d495f71057eab89c13e70a21c92360e9265abc049e0a931fa39"}, - {file = "pycairo-1.21.0.tar.gz", hash = "sha256:251907f18a552df938aa3386657ff4b5a4937dde70e11aa042bc297957f4b74b"}, + {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"}, @@ -3676,27 +3796,27 @@ 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.55-py3-none-any.whl", hash = "sha256:2caf0054ea079b71e539741ae56c5a95e073b81fa472ce222e81667381b9601b"}, - {file = "PyGithub-1.55.tar.gz", hash = "sha256:1bbfff9372047ff3f21d5cd8e07720f3dbfdaf6462fcaed9d815f528f1ba7283"}, +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.0a4-py3-none-any.whl", hash = "sha256:bdf709d46a97c50817a17492aac8467056753ebd4fbf738c8f495004f008ef0a"}, - {file = "pyglet-2.0a4.zip", hash = "sha256:24724841fae19c8060c349f2ae470ed49df3dca4bef1ba7fa6050b9b4bd77d74"}, + {file = "pyglet-2.0.1-py3-none-any.whl", hash = "sha256:6c0c0fe95fbc3b26c2f008e83bcc3dcbda1609dca6da7c3954bc4d1b529f2303"}, + {file = "pyglet-2.0.1.zip", hash = "sha256:ec36eba0c769bac25c5347acf14f8a7ac8f64fe469458a0a998ed1d507975e47"}, ] -Pygments = [ +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.5.0-py3-none-any.whl", hash = "sha256:8d82e7087868e94dd8d7d418e5088ce64f7daab4b36db654cbaedb46f9d1ca80"}, - {file = "PyJWT-2.5.0.tar.gz", hash = "sha256:e77ab89480905d86998442ac5788f35333fa85f65047a534adc38edf3c88fc3b"}, +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.13.9-py3-none-any.whl", hash = "sha256:705c620d388035bdd9ff8b44c5bcdd235bfb49d276d488dd2c8ff1736aa42526"}, - {file = "pylint-2.13.9.tar.gz", hash = "sha256:095567c96e19e6f57b5b907e67d265ff535e588fe26b12b5ebe1fc5645b2c731"}, + {file = "pylint-2.15.7-py3-none-any.whl", hash = "sha256:1d561d1d3e8be9dd880edc685162fbdaa0409c88b9b7400873c0cf345602e326"}, + {file = "pylint-2.15.7.tar.gz", hash = "sha256:91e4776dbcb4b4d921a3e4b6fec669551107ba11f29d9199154a01622e460a57"}, ] -PyNaCl = [ +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"}, @@ -3709,24 +3829,22 @@ PyNaCl = [ {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, ] pyobjc-core = [ - {file = "pyobjc-core-8.5.1.tar.gz", hash = "sha256:f8592a12de076c27006700c4a46164478564fa33d7da41e7cbdd0a3bf9ddbccf"}, - {file = "pyobjc_core-8.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b62dcf987cc511188fc2aa5b4d3b9fd895361ea4984380463497ce4b0752ddf4"}, - {file = "pyobjc_core-8.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0accc653501a655f66c13f149a1d3d30e6cb65824edf852f7960a00c4f930d5b"}, - {file = "pyobjc_core-8.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f82b32affc898e9e5af041c1cecde2c99f2ce160b87df77f678c99f1550a4655"}, - {file = "pyobjc_core-8.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f7b2f6b6f3caeb882c658fe0c7098be2e8b79893d84daa8e636cb3e58a07df00"}, - {file = "pyobjc_core-8.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:872c0202c911a5a2f1269261c168e36569f6ddac17e5d854ac19e581726570cc"}, - {file = "pyobjc_core-8.5.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:21f92e231a4bae7f2d160d065f5afbf5e859a1e37f29d34ac12592205fc8c108"}, - {file = "pyobjc_core-8.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:315334dd09781129af6a39641248891c4caa57043901750b0139c6614ce84ec0"}, -] -pyobjc-framework-Cocoa = [ - {file = "pyobjc-framework-Cocoa-8.5.1.tar.gz", hash = "sha256:9a3de5cdb4644e85daf53f2ed912ef6c16ea5804a9e65552eafe62c2e139eb8c"}, - {file = "pyobjc_framework_Cocoa-8.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:aa572acc2628488a47be8d19f4701fc96fce7377cc4da18316e1e08c3918521a"}, - {file = "pyobjc_framework_Cocoa-8.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cb3ae21c8d81b7f02a891088c623cef61bca89bd671eff58c632d2f926b649f3"}, - {file = "pyobjc_framework_Cocoa-8.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:88f08f5bd94c66d373d8413c1d08218aff4cff0b586e0cc4249b2284023e7577"}, - {file = "pyobjc_framework_Cocoa-8.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:063683b57e4bd88cb0f9631ae65d25ec4eecf427d2fe8d0c578f88da9c896f3f"}, - {file = "pyobjc_framework_Cocoa-8.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f8806ddfac40620fb27f185d0f8937e69e330617319ecc2eccf6b9c8451bdd1"}, - {file = "pyobjc_framework_Cocoa-8.5.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:7733a9a201df9e0cc2a0cf7bf54d76bd7981cba9b599353b243e3e0c9eefec10"}, - {file = "pyobjc_framework_Cocoa-8.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f0ab227f99d3e25dd3db73f8cde0999914a5f0dd6a08600349d25f95eaa0da63"}, + {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"}, @@ -3737,27 +3855,28 @@ pyrr = [ {file = "pyrr-0.10.3.tar.gz", hash = "sha256:3c0f7b20326e71f706a610d58f2190fff73af01eef60c19cb188b186f0ec7e1d"}, ] pyrsistent = [ - {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, - {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, - {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, - {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, + {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-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, @@ -3780,33 +3899,34 @@ python-dateutil = [ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] pytz = [ - {file = "pytz-2022.4-py2.py3-none-any.whl", hash = "sha256:2c0784747071402c6e99f0bafdb7da0fa22645f06554c7ae06bf6358897e9c91"}, - {file = "pytz-2022.4.tar.gz", hash = "sha256:48ce799d83b6f8aab2020e369b627446696619e79645419610b9facd909b3174"}, + {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, + {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, ] pywin32 = [ - {file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"}, - {file = "pywin32-304-cp310-cp310-win_amd64.whl", hash = "sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48"}, - {file = "pywin32-304-cp310-cp310-win_arm64.whl", hash = "sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f"}, - {file = "pywin32-304-cp311-cp311-win32.whl", hash = "sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269"}, - {file = "pywin32-304-cp311-cp311-win_amd64.whl", hash = "sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4"}, - {file = "pywin32-304-cp311-cp311-win_arm64.whl", hash = "sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43"}, - {file = "pywin32-304-cp36-cp36m-win32.whl", hash = "sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1"}, - {file = "pywin32-304-cp36-cp36m-win_amd64.whl", hash = "sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988"}, - {file = "pywin32-304-cp37-cp37m-win32.whl", hash = "sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5"}, - {file = "pywin32-304-cp37-cp37m-win_amd64.whl", hash = "sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df"}, - {file = "pywin32-304-cp38-cp38-win32.whl", hash = "sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96"}, - {file = "pywin32-304-cp38-cp38-win_amd64.whl", hash = "sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e"}, - {file = "pywin32-304-cp39-cp39-win32.whl", hash = "sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc"}, - {file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"}, + {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.8-cp310-none-win_amd64.whl", hash = "sha256:9cbf89834abc8d4d4c5f295f11e15dd93889a8069db876f2bc10cc64aa4060ac"}, - {file = "pywinpty-2.0.8-cp37-none-win_amd64.whl", hash = "sha256:a2f9a95f3b74262ef73f1be5257c295c8caab1f79f081aa3400ca61c724f9bc6"}, - {file = "pywinpty-2.0.8-cp38-none-win_amd64.whl", hash = "sha256:23389d56258d6a1fbc4b41257bd65e5bdabaf6fde7f30a13806e557ea9ee6865"}, - {file = "pywinpty-2.0.8-cp39-none-win_amd64.whl", hash = "sha256:ea7c1da94eed5ef93e75026c67c60d4dca33ea9a1c212fa89221079a7b463c68"}, - {file = "pywinpty-2.0.8.tar.gz", hash = "sha256:a89b9021c63ef78b1e7d8e14f0fac4748c88a0c2e4f529c84f37f6e72b914280"}, -] -PyYAML = [ + {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"}, @@ -3940,91 +4060,92 @@ rich = [ {file = "rich-12.6.0.tar.gz", hash = "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"}, ] scipy = [ - {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, - {file = "scipy-1.7.3-1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b0e0aeb061a1d7dcd2ed59ea57ee56c9b23dd60100825f98238c06ee5cc4467e"}, - {file = "scipy-1.7.3-1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b78a35c5c74d336f42f44106174b9851c783184a85a3fe3e68857259b37b9ffb"}, - {file = "scipy-1.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:173308efba2270dcd61cd45a30dfded6ec0085b4b6eb33b5eb11ab443005e088"}, - {file = "scipy-1.7.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:21b66200cf44b1c3e86495e3a436fc7a26608f92b8d43d344457c54f1c024cbc"}, - {file = "scipy-1.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceebc3c4f6a109777c0053dfa0282fddb8893eddfb0d598574acfb734a926168"}, - {file = "scipy-1.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7eaea089345a35130bc9a39b89ec1ff69c208efa97b3f8b25ea5d4c41d88094"}, - {file = "scipy-1.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:304dfaa7146cffdb75fbf6bb7c190fd7688795389ad060b970269c8576d038e9"}, - {file = "scipy-1.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:033ce76ed4e9f62923e1f8124f7e2b0800db533828c853b402c7eec6e9465d80"}, - {file = "scipy-1.7.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4d242d13206ca4302d83d8a6388c9dfce49fc48fdd3c20efad89ba12f785bf9e"}, - {file = "scipy-1.7.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8499d9dd1459dc0d0fe68db0832c3d5fc1361ae8e13d05e6849b358dc3f2c279"}, - {file = "scipy-1.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca36e7d9430f7481fc7d11e015ae16fbd5575615a8e9060538104778be84addf"}, - {file = "scipy-1.7.3-cp37-cp37m-win32.whl", hash = "sha256:e2c036492e673aad1b7b0d0ccdc0cb30a968353d2c4bf92ac8e73509e1bf212c"}, - {file = "scipy-1.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:866ada14a95b083dd727a845a764cf95dd13ba3dc69a16b99038001b05439709"}, - {file = "scipy-1.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:65bd52bf55f9a1071398557394203d881384d27b9c2cad7df9a027170aeaef93"}, - {file = "scipy-1.7.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:f99d206db1f1ae735a8192ab93bd6028f3a42f6fa08467d37a14eb96c9dd34a3"}, - {file = "scipy-1.7.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5f2cfc359379c56b3a41b17ebd024109b2049f878badc1e454f31418c3a18436"}, - {file = "scipy-1.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb7ae2c4dbdb3c9247e07acc532f91077ae6dbc40ad5bd5dca0bb5a176ee9bda"}, - {file = "scipy-1.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c2d250074cfa76715d58830579c64dff7354484b284c2b8b87e5a38321672c"}, - {file = "scipy-1.7.3-cp38-cp38-win32.whl", hash = "sha256:87069cf875f0262a6e3187ab0f419f5b4280d3dcf4811ef9613c605f6e4dca95"}, - {file = "scipy-1.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:7edd9a311299a61e9919ea4192dd477395b50c014cdc1a1ac572d7c27e2207fa"}, - {file = "scipy-1.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eef93a446114ac0193a7b714ce67659db80caf940f3232bad63f4c7a81bc18df"}, - {file = "scipy-1.7.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:eb326658f9b73c07081300daba90a8746543b5ea177184daed26528273157294"}, - {file = "scipy-1.7.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:93378f3d14fff07572392ce6a6a2ceb3a1f237733bd6dcb9eb6a2b29b0d19085"}, - {file = "scipy-1.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edad1cf5b2ce1912c4d8ddad20e11d333165552aba262c882e28c78bbc09dbf6"}, - {file = "scipy-1.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d1cc2c19afe3b5a546ede7e6a44ce1ff52e443d12b231823268019f608b9b12"}, - {file = "scipy-1.7.3-cp39-cp39-win32.whl", hash = "sha256:2c56b820d304dffcadbbb6cbfbc2e2c79ee46ea291db17e288e73cd3c64fefa9"}, - {file = "scipy-1.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:3f78181a153fa21c018d346f595edd648344751d7f03ab94b398be2ad083ed3e"}, - {file = "scipy-1.7.3.tar.gz", hash = "sha256:ab5875facfdef77e0a47d5fd39ea178b58e60e454a4c85aa1e52fcb80db7babf"}, + {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 = [ +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.4.1-py3-none-any.whl", hash = "sha256:1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012"}, - {file = "setuptools-65.4.1.tar.gz", hash = "sha256:3050e338e5871e70c72983072fe34f6032ae1cdeeeb67338199c2f74e083a80e"}, + {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-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, - {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, + {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.2.zip", hash = "sha256:19d85c9afefba15af92b13c8889964f77e6382f58f42c6040b4019eb28cba690"}, - {file = "skia_pathops-0.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8ce9ee85d53fff7c9e444f25ea98b817f87440694babde069df0112d37bf2ed4"}, - {file = "skia_pathops-0.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:754a37e32e06d0c0affdae3cd7f97496997a07a322d3aaa0964a0bfa0fe84bfc"}, - {file = "skia_pathops-0.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e4e6c792303419848ba8c035f3496faafcf4a23ec0b0c7596eda0c77b5d1500"}, - {file = "skia_pathops-0.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6b518fca15b4456ddf99062f334c0333a5165be976fb0c9e071af29128583f7"}, - {file = "skia_pathops-0.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:44a3c57c9bcae38fcc438ac6b048ba0c50759994ab466c424c5d7f6812d3a222"}, - {file = "skia_pathops-0.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e35b8962c5b9f10fb40f66708c18cc0bc17e0b0c98230e72514f780a1f42aac9"}, - {file = "skia_pathops-0.7.2-cp310-cp310-win32.whl", hash = "sha256:14172fc2817b7e51d3e6859b435d11c917db68beb11d441aad4b247113c902a8"}, - {file = "skia_pathops-0.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:17ee7f807e434e66cf8398607b696c7d529f1a2416452135a5f327c4e54b511d"}, - {file = "skia_pathops-0.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:835b55899665b7fa14e51eb1f2eaa4c0e876bc5965dc92b7e89dc00519620f56"}, - {file = "skia_pathops-0.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a58fcde1010a58bd6f251c4f2af2e0a37e281b4e807e295c84dcfb3541fef78b"}, - {file = "skia_pathops-0.7.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28060f7a64fa834b1a88fb053227da30b5c27699dc08aa347a985ac3eced9b5"}, - {file = "skia_pathops-0.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a8e7729f32ac87419467efd6858c375fe01da21eb62c8a553c43327ff1cf9d7"}, - {file = "skia_pathops-0.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:577371bc51a2b3efdee943b1c2f61af8765b7383bf2bf490968e61c7acb2204d"}, - {file = "skia_pathops-0.7.2-cp37-cp37m-win32.whl", hash = "sha256:bb8d25a0b5659cf1981c90c843b229c836ad0277808b8becbbb2a92972078cbf"}, - {file = "skia_pathops-0.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6b61da9869d11b58bf471b851adc647fe989d625f0ddd02bc78d1cdcd3e0db60"}, - {file = "skia_pathops-0.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:56dbaea031aca9f9e219a42fc454f386b0816d011119da0b7d43d92110e48148"}, - {file = "skia_pathops-0.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7aa3ec93b5d7b6c4da607453b7b082770756ad6d5346af2dc6a4df061b786eed"}, - {file = "skia_pathops-0.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18fa97eab0e20daf89f57951f2218a8ac42493c7455eee37793e7771c414e28b"}, - {file = "skia_pathops-0.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:172ddfc3bc573d994bf8d4a6ea1eb35a97976e3959831e306e4eca211c92392b"}, - {file = "skia_pathops-0.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ab02f93bbad07cf249498271c4be885b27aea0b747b769cbfc255e7cb10cc689"}, - {file = "skia_pathops-0.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:24c7cb009ba379a0f4683e66801d752f87f3dcf1c76f57863155aec557042ed3"}, - {file = "skia_pathops-0.7.2-cp38-cp38-win32.whl", hash = "sha256:91c760e780bf99eac3be974d84ec7f61317794ed6deae54a28d2c8d5f61089b6"}, - {file = "skia_pathops-0.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:a0ea795750d0d41c26b158b1018d94a60f78008a77e75f2c56f39e24d5541d68"}, - {file = "skia_pathops-0.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f1a14fcaa6902e7f9ba8944e90e532e020b8f9554bd7443daed3caf9d9919cb8"}, - {file = "skia_pathops-0.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:462abfc5529fd42b433bf5ce88bd1cb1e3d589269f67600472b79feb2be3c081"}, - {file = "skia_pathops-0.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6f3328815e6bcced0947df374937d51c6a386f260259c1732ff71b1cdd72c3d"}, - {file = "skia_pathops-0.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1932a387b14c9661f4a578cfd74a71b01436adcc4ef3d0f526b85b7d3f28f2a3"}, - {file = "skia_pathops-0.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c261583734215751b59e12290323a177770002618819ad670acdb5b98b60dff6"}, - {file = "skia_pathops-0.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:50fc18167cbb93b2c57c151289e2773b1db9347ba56d82e35f6fed1bd79a9268"}, - {file = "skia_pathops-0.7.2-cp39-cp39-win32.whl", hash = "sha256:34a8eaace3386880303a564945e292961cfb1cadd06f178b1f959a6a0b8d6c40"}, - {file = "skia_pathops-0.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:1e89d3cc2be2748ba09a06abc5cfe86743c0ec4a16366e34122d9e74e1276204"}, - {file = "skia_pathops-0.7.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bf945cd0df19160c2eb3241db5773c6ca45404dfc661a64a825b93dd9517068"}, - {file = "skia_pathops-0.7.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9cd88c5bde4a0889ce090d2788eb8db0a6a3ed23c01a77c49cb847739b1257a"}, + {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"}, @@ -4042,7 +4163,7 @@ soupsieve = [ {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, ] -Sphinx = [ +sphinx = [ {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, ] @@ -4089,17 +4210,21 @@ sphinxext-opengraph = [ 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.16.0-py3-none-any.whl", hash = "sha256:3e995072a7178a104c41134548ce9b03e4e7f0a538e9c29df4f1fbc81c7cfc75"}, - {file = "terminado-0.16.0.tar.gz", hash = "sha256:fac14374eb5498bdc157ed32e510b1f60d5c3c7981a9f5ba018bb9a64cec0c25"}, + {file = "terminado-0.17.0-py3-none-any.whl", hash = "sha256:bf6fe52accd06d0661d7611cc73202121ec6ee51e46d8185d489ac074ca457c2"}, + {file = "terminado-0.17.0.tar.gz", hash = "sha256:520feaa3aeab8ad64a69ca779be54be9234edb2d0d6567e76c93c2c9a4e6e43f"}, ] tinycss2 = [ - {file = "tinycss2-1.1.1-py3-none-any.whl", hash = "sha256:fe794ceaadfe3cf3e686b22155d0da5780dd0e273471a51846d0a02bc204fec8"}, - {file = "tinycss2-1.1.1.tar.gz", hash = "sha256:b2e44dd8883c360c35dd0d1b5aad0b610e5156c2cb3b33434634e539ead9d8bf"}, + {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"}, @@ -4109,6 +4234,10 @@ 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"}, @@ -4127,78 +4256,52 @@ tqdm = [ {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, ] traitlets = [ - {file = "traitlets-5.4.0-py3-none-any.whl", hash = "sha256:93663cc8236093d48150e2af5e2ed30fc7904a11a6195e21bab0408af4e6d6c8"}, - {file = "traitlets-5.4.0.tar.gz", hash = "sha256:3f2c4e435e271592fe4390f1746ea56836e3a080f84e7833f0f801d9613fec39"}, -] -typed-ast = [ - {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, - {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, - {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, - {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, - {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, - {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, - {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, - {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, - {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, - {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, + {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.tar.gz", hash = "sha256:7df133b87105af410fc6a992030a70ee9f5a2c2636c5afe7e0de285eb9fdb015"}, - {file = "types_docutils-0.19.1-py3-none-any.whl", hash = "sha256:6b110b17ba4bfbde765b69acca6a6da373094d99a5a3bce1d5a8c9d29b293d89"}, + {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 = [ +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.tar.gz", hash = "sha256:0dad3a5009895c985a56e2837f61902bad9594151265ac0ee907bb16d0b01eb7"}, - {file = "types_protobuf-3.20.4-py3-none-any.whl", hash = "sha256:5082437afe64ce3b31c8db109eae86e02fda11e4d5f9ac59cb8578a8a138aa70"}, + {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.tar.gz", hash = "sha256:6e231ec18f5d651f7863734bfdd8ca2f50dedd0c521422828a3f9638d6490092"}, - {file = "types_Pygments-2.13.1-py3-none-any.whl", hash = "sha256:52f71bc31caa0d0578ce8bb7e7761d3b1f6797ece86e26c6bc49a1f15e1e485c"}, +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.2.tar.gz", hash = "sha256:fdcd7bd148139fb8eef72cf4a41ac7273872cad9e6ada14b11ff5dfdeee60ed3"}, - {file = "types_requests-2.28.11.2-py3-none-any.whl", hash = "sha256:14941f8023a80b16441b3b46caffcbfce5265fd14555844d6029697824b5a2ef"}, + {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.tar.gz", hash = "sha256:5aef0e663724eef924afa8b320b62ffef2c1736c1fa6caecfc9bc6c8ae2c3def"}, - {file = "types_urllib3-1.26.25-py3-none-any.whl", hash = "sha256:c1d78cef7bd581e162e46c20a57b2e1aa6ebecdcf01fd0713bb90978ff3e3427"}, + {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"}, ] urllib3 = [ - {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, - {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, + {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.16.5-py3-none-any.whl", hash = "sha256:d07dfc5df5e4e0dbc92862350ad87a36ed505b978f6c39609dc489eadd5b0d27"}, - {file = "virtualenv-20.16.5.tar.gz", hash = "sha256:227ea1b9994fdc5ea31977ba3383ef296d7472ea85be9d6732e42a91c04e80da"}, + {file = "virtualenv-20.17.0-py3-none-any.whl", hash = "sha256:40a7e06a98728fd5769e1af6fd1a706005b4bb7e16176a272ed4292473180389"}, + {file = "virtualenv-20.17.0.tar.gz", hash = "sha256:7d6a8d55b2f73b617f684ee40fd85740f062e1f2e379412cb1879c7136f05902"}, ] watchdog = [ {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330"}, @@ -4236,8 +4339,8 @@ webencodings = [ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] websocket-client = [ - {file = "websocket-client-1.4.1.tar.gz", hash = "sha256:f9611eb65c8241a67fb373bef040b3cf8ad377a9f6546a12b620b6511e8ea9ef"}, - {file = "websocket_client-1.4.1-py3-none-any.whl", hash = "sha256:398909eb7e261f44b8f4bd474785b6ec5f5b499d4953342fe9755e01ef624090"}, + {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 = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, @@ -4306,6 +4409,6 @@ wrapt = [ {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] zipp = [ - {file = "zipp-3.9.0-py3-none-any.whl", hash = "sha256:972cfa31bc2fedd3fa838a51e9bc7e64b7fb725a8c00e7431554311f180e9980"}, - {file = "zipp-3.9.0.tar.gz", hash = "sha256:3a7af91c3db40ec72dd9d154ae18e008c69efe8ca88dde4f9a731bb82fe2f9eb"}, + {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"}, + {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"}, ] diff --git a/pyproject.toml b/pyproject.toml index 66655e511e..a30dde18df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ packages = [ ] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.8,<3.12" click = ">=7.2,<=9.0" click-default-group = "^1.2.2" colour = "^0.1.5" @@ -36,7 +36,7 @@ scipy = "^1.7.3" tqdm = "^4.62.3" pydub = "^0.25.1" rich = ">=6.0,!=12.0.0" -pycairo = "^1.19" +pycairo = "^1.21" manimpango = "^0.4.0.post0" networkx = "^2.5" decorator = "^5.0.7" From f4943c0a3e6f8d5981ba788b0fd70ab47705d4e9 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 2 Dec 2022 16:02:12 +0100 Subject: [PATCH 168/555] Prepared new release: v0.17.0 (#3023) * bumped version number * generated changelog, first pass * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * generated changelog, second pass * changelog generation, third pass * changelog generation, final pass * added some changelog descriptions, final polishing * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed some more PR titles (via @naveen521kk) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CITATION.cff | 4 +- docs/source/changelog.rst | 1 + docs/source/changelog/0.17.0-changelog.rst | 296 +++++++++++++++++++++ pyproject.toml | 2 +- 4 files changed, 300 insertions(+), 3 deletions(-) create mode 100644 docs/source/changelog/0.17.0-changelog.rst diff --git a/CITATION.cff b/CITATION.cff index 4009ab7ce8..6b46dca60a 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -4,10 +4,10 @@ authors: - name: "The Manim Community Developers" cff-version: "1.2.0" -date-released: 2022-07-13 +date-released: 2022-12-02 license: MIT message: "We acknowledge the importance of good software to support research, and we note that research becomes more valuable when it is communicated effectively. To demonstrate the value of Manim, we ask that you cite Manim in your work." title: Manim – Mathematical Animation Framework url: "https://www.manim.community/" -version: "v0.16.0" +version: "v0.17.0" ... diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index e0ab4e874e..9f589e457a 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -5,6 +5,7 @@ Changelog .. toctree:: + changelog/0.17.0-changelog changelog/0.16.0-changelog changelog/0.15.2-changelog changelog/0.15.1-changelog diff --git a/docs/source/changelog/0.17.0-changelog.rst b/docs/source/changelog/0.17.0-changelog.rst new file mode 100644 index 0000000000..82fe1dc638 --- /dev/null +++ b/docs/source/changelog/0.17.0-changelog.rst @@ -0,0 +1,296 @@ +******* +v0.17.0 +******* + +:Date: December 02, 2022 + +Contributors +============ + +A total of 32 people contributed to this +release. People with a '+' by their names authored a patch for the first +time. + +* Alex Lembcke +* Alexander Vázquez +* Benjamin Hackl +* Duc Phat + +* Hugues Devimeux +* Ievgen Pyrogov + +* Isaac Beh + +* Jeff Hanke + +* John Hammond + +* Jérome Eertmans + +* Kevin Lubick +* Kian-Meng Ang + +* Naveen M K +* Nick Skriloff + +* NotWearingPants +* Onur Solmaz + +* OpenRefactory, Inc + +* Owen Samuel + +* Pavel Zwerschke + +* Sparsh Goenka +* Taxo Rubio +* ad-chaos + +* fcrozatier +* mostly documentation + +* vahndi + + + +The patches included in this release have been reviewed by +the following contributors. + +* Benjamin Hackl +* Darylgolden +* Hugues Devimeux +* Jan-Hendrik Müller +* Kevin Lubick +* Mohammed Belgoumri +* Naveen M K +* NotWearingPants +* Raghav Goel +* Sparsh Goenka +* Tristan Schulz +* ad-chaos +* friedkeenan + +Pull requests merged +==================== + +A total of 63 pull requests were merged for this release. + +Breaking changes +---------------- + +* :pr:`2898`: Ported improved implementation of :class:`.SVGMobject` from 3b1b/manim + The implementation of :class:`.SVGMobject` is completely changed in this release. + Manim now uses the Python library ``svgelements`` to parse SVGs, instead of trying + to do it itself. The former class for SVG path objects, ``SVGPathMobject`` has been + replaced (without deprecation) with :class:`.VMobjectFromSVGPath`. + + If you need to create a mobject from an SVG path string, you can do so via:: + + import svgelements as se + my_path_mobject = VMobjectFromSVGPath(se.Path(my_path_string)) + + The unused class ``TexSymbol`` has been removed. The modules + ``manim.mobject.svg.svg_path`` and ``manim.mobject.svg.style_utils`` became + superfluous due to the rework and have been removed. + + +* :pr:`3030`: Added support for Python 3.11, dropped support for Python 3.7 + + +Highlights +---------- + +* :pr:`3049`: Added thematic guide for the ``manim-voiceover`` plugin + This new :doc:`thematic guide ` provides a brief + introduction to ``manim-voiceover``, a plugin that helps to add voiceovers + to your manimations. Supports both working with your own voice as well as + synthetically generated voices. + + +New features +------------ + +* :pr:`2883`: Added animation :class:`.RemoveTextLetterByLetter` + + +* :pr:`3016`: Implemented :class:`.LineJointTypes` for both Cairo and OpenGL renderer + + +* :pr:`3017`: Replaced renderer strings with :class:`.RendererType` enum entries + + +Enhancements +------------ + +* :pr:`2927`: Allowed ``networkx`` to return 3D layouts when passing ``dim=3`` in the ``layout_config`` of a :class:`.Graph` + + +* :pr:`3014`: Enabled code completion for :meth:`.Mobject.animate` for some IDEs + Uses a Union of the existing Generic `Mobject` Type `T` and `_Animation Builder` as the declared return type from `Mobject.animate` to improve code completion. + +Fixed bugs +---------- + +* :pr:`2846`: Prevent :class:`.TransformMatchingTex` from crashing when there is nothing to fade + + +* :pr:`2885`: Always expand user when validating file-paths + + +* :pr:`2888`: Fixed bug with propagation of ``tex_template`` value when using ``tempconfig`` + + +* :pr:`2895`: Fixed broken :class:`.ShowPassingFlashWithThinningStrokeWidth` + + +* :pr:`2920`: Fixed alignment of faded lines when passing ``faded_line_ratio`` to :class:`.NumberPlane` + + +* :pr:`2977`: Allow rendering of empty text strings + + +* :pr:`2992`: Fixed ``CLI.tex_template_file`` config file setting + + +* :pr:`3003`: Fixed setting ``run_time`` of :class:`.Succession` after creating the animation object + + +* :pr:`3019`: Fixed rendering SVG paths with multiple move commands + + +Documentation-related changes +----------------------------- + +* :pr:`2881`: Fixed small typo in deep dive guide + + +* :pr:`2886`: Added docstring to and fixed type hint of :func:`.get_winding_number` + + +* :pr:`2892`: Corrected error in the ``PolygonOnAxes`` example + + +* :pr:`2903`: Fixed minor grammar issues in :doc:`/faq/general` + + +* :pr:`2904`: Fixed formatting and grammar issues in :doc:`/contributing/development` + + +* :pr:`2911`: Disabled autoplay for ``SoundExample`` in documentation + + +* :pr:`2914`: Added conda installation instructions + + +* :pr:`2915`: Added documentation to :mod:`.three_dimensions` + + +* :pr:`2919`: Corrected parameters and enhanced the description of :meth:`.ImageMobject.interpolate_color` + + +* :pr:`2932`: Fixed whitespace formatting issue + + +* :pr:`2933`: Improved answer to the "no scenes in this module" error + + +* :pr:`2936`: Added installation instructions for Windows via ``winget`` + + +* :pr:`2962`: Disabled "Edit on GitHub" button in documentation + + +* :pr:`2978`: Added documentation and example for :class:`.CyclicReplace` + + +* :pr:`3001`: Added FAQ entry regarding failed ``manimpango`` build + + +* :pr:`3004`: Fixed docbuild warnings + + +* :pr:`3018`: Follow-up to :pr:`2988` -- fixes and improvements to some docstrings + + +* :pr:`3022`: Corrected type hint in :meth:`Axes.coords_to_point` + + +* :pr:`3035`: Include latex install instructions on ubuntu + + +* :pr:`3044`: Added Debian dependencies required for pycairo and manimpango + + +Changes concerning the testing system +------------------------------------- + +* :pr:`2893`: Improved performance of ``test_threed.py`` + + +* :pr:`2981`: Implemented fallback save behavior for ``pytest --show_diff`` + + +* :pr:`2982`: Rewrote unstable tests for :mod:`.text_mobject` to be non-graphical + + +* :pr:`2991`: Migrated ``os.path`` to ``pathlib.Path`` in tests + + +* :pr:`3053`: Added threshold for pixel value errors in frame comparison tests + + +Changes to our development infrastructure +----------------------------------------- + +* :pr:`2925`: CI (test-arm): Updated python version to ``3.10.6`` + + +* :pr:`2963`: CI (test-arm): Always select the correct python version + + +* :pr:`3029`: CI: Updated actions version and added dependabot config + + +* :pr:`3045`: Updated python-opengl -> python3-opengl for Ubuntu CI task + + +Code quality improvements and similar refactors +----------------------------------------------- + +* :pr:`2872`: Add ``extract_frames.py`` utility script to help visualize test control data + + +* :pr:`2877`: Fixed binder launch problem by adding missing optional ``notebook`` dependency + + +* :pr:`2887`: Removed empty i18n files that caused filename clashes + + +* :pr:`2931`: Updated ``mapbox-earcut`` + + +* :pr:`2938`: Suggested fixes by iCR, OpenRefactory, Inc. + + +* :pr:`2954`: Fixed click version string in ``pyproject.toml`` + + +* :pr:`2958`: Fix missing stub packages for mypy + + +* :pr:`2975`: Fixed broken links in README + + +* :pr:`2980`: Migrate more ``os.path`` to ``pathlib.Path`` + + +* :pr:`2983`: Fixed Windows CI Pipeline + + +* :pr:`2988`: Converted all types of parameters in docstrings to proper type annotations + + +* :pr:`2994`: Fixed segmentation faults from doctests under Python 3.10 + + +* :pr:`2995`: Added encoding to ``open`` in :mod:`.utils.text_file_writing` + + +* :pr:`3032`: Bump jupyter-core from 4.11.1 to 4.11.2 + + +* :pr:`3033`: Bump pillow from 9.2.0 to 9.3.0 + + +* :pr:`3054`: Removed unused ``GraphicalUnitTester`` + + +New releases +------------ + +* :pr:`3023`: Prepared new release: v0.17.0 diff --git a/pyproject.toml b/pyproject.toml index a30dde18df..f67da32120 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "manim" -version = "0.16.0.post0" +version = "0.17.0" description = "Animation engine for explanatory math videos." authors = ["The Manim Community Developers ", "3b1b "] license="MIT" From bd0ba12104f4dc2a7b726d6f3728754a49913677 Mon Sep 17 00:00:00 2001 From: Onur Solmaz Date: Tue, 6 Dec 2022 12:44:03 +0100 Subject: [PATCH 169/555] Use unicode encoding in add_subcaption() (#3062) Add `encoding="utf-8"` --- manim/scene/scene_file_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index 0767d8e505..1891588675 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -727,7 +727,7 @@ def flush_cache_directory(self): def write_subcaption_file(self): """Writes the subcaption file.""" subcaption_file = Path(config.output_file).with_suffix(".srt") - subcaption_file.write_text(srt.compose(self.subcaptions)) + subcaption_file.write_text(srt.compose(self.subcaptions), encoding="utf-8") logger.info(f"Subcaption file has been written as {subcaption_file}") def print_file_ready_message(self, file_path): From c4eeb2efb817a470e449d9dbcc8fd9749097507e Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Tue, 6 Dec 2022 17:47:15 +0530 Subject: [PATCH 170/555] Always use ``/`` when calling LaTeX (#3061) * Add a test to reproduce #3060 * Always use `/` when calling LaTeX Using `\` isn't supported by LaTeX and simply errors out saying it can't find the file. In this commit, the path is converted to POSIX like path (ie. use `/`) before calling LaTeX. Fixes https://github.com/ManimCommunity/manim/issues/3060 --- manim/utils/tex_file_writing.py | 12 ++++++------ tests/module/mobject/text/test_texmobject.py | 13 +++++++++++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/manim/utils/tex_file_writing.py b/manim/utils/tex_file_writing.py index 5423c80c8b..6afa7ed5b4 100644 --- a/manim/utils/tex_file_writing.py +++ b/manim/utils/tex_file_writing.py @@ -129,8 +129,8 @@ def tex_compilation_command( "-interaction=batchmode", f'-output-format="{output_format[1:]}"', "-halt-on-error", - f'-output-directory="{tex_dir}"', - f'"{tex_file}"', + f'-output-directory="{tex_dir.as_posix()}"', + f'"{tex_file.as_posix()}"', ">", os.devnull, ] @@ -146,8 +146,8 @@ def tex_compilation_command( outflag, "-interaction=batchmode", "-halt-on-error", - f'-output-directory="{tex_dir}"', - f'"{tex_file}"', + f'-output-directory="{tex_dir.as_posix()}"', + f'"{tex_file.as_posix()}"', ">", os.devnull, ] @@ -229,10 +229,10 @@ def convert_to_svg(dvi_file: Path, extension: str, page: int = 1): "dvisvgm", "--pdf" if extension == ".pdf" else "", "-p " + str(page), - f'"{dvi_file}"', + f'"{dvi_file.as_posix()}"', "-n", "-v 0", - "-o " + f'"{result}"', + "-o " + f'"{result.as_posix()}"', ">", os.devnull, ] diff --git a/tests/module/mobject/text/test_texmobject.py b/tests/module/mobject/text/test_texmobject.py index 4585a82fee..c45681fad2 100644 --- a/tests/module/mobject/text/test_texmobject.py +++ b/tests/module/mobject/text/test_texmobject.py @@ -33,6 +33,19 @@ def test_tex(): assert Path(config.media_dir, "Tex", "f2e45e6e82d750e6.svg").exists() +def test_tex_temp_directory(tmpdir, monkeypatch): + # Adds a test for #3060 + # It's not possible to reproduce the issue normally, because we use + # tempconfig to change media directory to temporary directory by default + # we partially, revert that change here. + monkeypatch.chdir(tmpdir) + Path(tmpdir, "media").mkdir() + with tempconfig({"media_dir": "media"}): + Tex("The horse does not eat cucumber salad.") + assert Path("media", "Tex").exists() + assert Path("media", "Tex", "f2e45e6e82d750e6.svg").exists() + + def test_percent_char_rendering(): Tex(r"\%") assert Path(config.media_dir, "Tex", "3f48edf8ebaf82c8.tex").exists() From 9e859f163c72bdeace5c341d1bf1b89d3c3af33c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 6 Dec 2022 12:35:55 +0000 Subject: [PATCH 171/555] [pre-commit.ci] pre-commit autoupdate (#3058) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v3.2.2 → v3.3.0](https://github.com/asottile/pyupgrade/compare/v3.2.2...v3.3.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Naveen M K --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 51f010c607..a351047f4d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v3.2.2 + rev: v3.3.0 hooks: - id: pyupgrade name: Update code to new python versions From 0bbebc3040aa08c63513696cdaa877ff36df509f Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 8 Dec 2022 13:49:22 +0100 Subject: [PATCH 172/555] increase minimal version of svgelements (#3064) --- poetry.lock | 583 ++++++++++++++++++++++++++++++++++--------------- pyproject.toml | 2 +- 2 files changed, 404 insertions(+), 181 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8e7a30c1b8..6b6b9aa9ae 100644 --- a/poetry.lock +++ b/poetry.lock @@ -62,6 +62,17 @@ cffi = ">=1.0.1" dev = ["cogapp", "pre-commit", "pytest", "wheel"] tests = ["pytest"] +[[package]] +name = "arrow" +version = "1.2.3" +description = "Better dates & times for Python" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +python-dateutil = ">=2.7.0" + [[package]] name = "astor" version = "0.8.1" @@ -88,7 +99,7 @@ wrapt = [ [[package]] name = "asttokens" -version = "2.2.0" +version = "2.2.1" description = "Annotate AST trees with source code positions" category = "main" optional = true @@ -120,10 +131,10 @@ python-versions = ">=3.5" 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"] +tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] [[package]] -name = "babel" +name = "Babel" version = "2.11.0" description = "Internationalization utilities" category = "main" @@ -196,7 +207,7 @@ dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0 [[package]] name = "certifi" -version = "2022.9.24" +version = "2022.12.7" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -230,7 +241,7 @@ optional = false python-versions = ">=3.6.0" [package.extras] -unicode-backport = ["unicodedata2"] +unicode_backport = ["unicodedata2"] [[package]] name = "click" @@ -285,6 +296,20 @@ python-versions = "*" [package.extras] test = ["nose"] +[[package]] +name = "comm" +version = "0.1.1" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +traitlets = ">5.3" + +[package.extras] +test = ["pytest"] + [[package]] name = "commonmark" version = "0.9.1" @@ -337,7 +362,7 @@ optional = false python-versions = ">=3.6" [[package]] -name = "cython" +name = "Cython" version = "0.29.32" description = "The Cython compiler for writing C extensions for the Python language." category = "main" @@ -388,7 +413,7 @@ optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] -name = "deprecated" +name = "Deprecated" version = "1.2.13" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." category = "dev" @@ -471,15 +496,15 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.8.0" +version = "3.8.2" description = "A platform independent file lock." category = "dev" optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2022.6.21)", "sphinx (>=5.1.1)", "sphinx-autodoc-typehints (>=1.19.1)"] -testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2022.9.29)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] +testing = ["covdefaults (>=2.2.2)", "coverage (>=6.5)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] [[package]] name = "flake8" @@ -612,6 +637,14 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=14.0.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +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" + [[package]] name = "furo" version = "2022.9.29" @@ -638,7 +671,7 @@ python-versions = ">=3.7" 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" @@ -701,7 +734,7 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag [[package]] name = "importlib-resources" -version = "5.10.0" +version = "5.10.1" description = "Read resources from Python packages" category = "main" optional = true @@ -724,7 +757,7 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.17.1" +version = "6.19.0" description = "IPython Kernel for Jupyter" category = "main" optional = true @@ -732,6 +765,7 @@ python-versions = ">=3.8" [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" debugpy = ">=1.0" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" @@ -741,11 +775,14 @@ packaging = "*" psutil = "*" pyzmq = ">=17" tornado = ">=6.1" -traitlets = ">=5.1.0" +traitlets = ">=5.4.0" [package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "pytest-timeout"] +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" @@ -780,16 +817,27 @@ 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 = "*" +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +arrow = ">=0.15.0" + [[package]] name = "isort" version = "5.10.1" @@ -800,9 +848,9 @@ python-versions = ">=3.6.1,<4.0" [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" @@ -832,7 +880,7 @@ 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" @@ -856,6 +904,14 @@ python-versions = "*" [package.extras] dev = ["hypothesis"] +[[package]] +name = "jsonpointer" +version = "2.3" +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.*" + [[package]] name = "jsonschema" version = "4.17.3" @@ -866,9 +922,17 @@ python-versions = ">=3.7" [package.dependencies] attrs = ">=17.4.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] @@ -876,7 +940,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jupyter-client" -version = "7.4.7" +version = "7.4.8" description = "Jupyter protocol implementation and client libraries" category = "main" optional = true @@ -912,38 +976,74 @@ traitlets = ">=5.3" docs = ["myst-parser", "sphinxcontrib-github-alt", "traitlets"] test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] +[[package]] +name = "jupyter-events" +version = "0.5.0" +description = "Jupyter Event System library" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +jsonschema = {version = ">=4.3.0", extras = ["format-nongpl"]} +python-json-logger = "*" +pyyaml = "*" +traitlets = "*" + +[package.extras] +cli = ["click", "rich"] +test = ["click", "coverage", "pre-commit", "pytest (>=6.1.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] + [[package]] name = "jupyter-server" -version = "1.23.3" +version = "2.0.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" [package.dependencies] anyio = ">=3.1.0,<4" argon2-cffi = "*" jinja2 = "*" -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.7.0" +jupyter-client = ">=7.4.4" +jupyter-events = ">=0.4.0" +jupyter-server-terminals = "*" nbconvert = ">=6.4.4" -nbformat = ">=5.2.0" +nbformat = ">=5.3.0" packaging = "*" prometheus-client = "*" pywinpty = {version = "*", markers = "os_name == \"nt\""} -pyzmq = ">=17" -Send2Trash = "*" +pyzmq = ">=24" +send2trash = "*" terminado = ">=0.8.3" -tornado = ">=6.1.0" -traitlets = ">=5.1" +tornado = ">=6.2.0" +traitlets = ">=5.3.0" websocket-client = "*" [package.extras] -test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] +docs = ["docutils (<0.19)", "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"] +test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.4.2" +description = "A Jupyter Server Extension Providing Terminals." +category = "main" +optional = true +python-versions = ">=3.8" + +[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"] [[package]] name = "jupyterlab" -version = "3.5.0" +version = "3.5.1" description = "JupyterLab computational environment" category = "main" optional = true @@ -1013,7 +1113,7 @@ optional = false python-versions = ">=3.7" [[package]] -name = "manimpango" +name = "ManimPango" version = "0.4.3" description = "Bindings for Pango for using with Manim." category = "main" @@ -1022,7 +1122,7 @@ python-versions = ">=3.7" [[package]] name = "mapbox-earcut" -version = "1.0.0" +version = "1.0.1" description = "Python bindings for the mapbox earcut C++ polygon triangulation library." category = "main" optional = false @@ -1047,7 +1147,7 @@ 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"] @@ -1056,7 +1156,7 @@ 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" @@ -1104,7 +1204,7 @@ python-versions = "*" [[package]] name = "mdit-py-plugins" -version = "0.3.1" +version = "0.3.3" description = "Collection of plugins for markdown-it-py" category = "dev" optional = false @@ -1114,7 +1214,7 @@ python-versions = ">=3.7" 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"] @@ -1224,7 +1324,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"] @@ -1282,7 +1382,7 @@ test = ["ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>= [[package]] name = "nbconvert" -version = "7.2.5" +version = "7.2.6" description = "Converting Jupyter Notebooks" category = "main" optional = true @@ -1307,12 +1407,12 @@ tinycss2 = "*" traitlets = ">=5.0" [package.extras] -all = ["ipykernel", "ipython", "ipywidgets (>=7)", "myst-parser", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pyqtwebengine (>=5.15)", "pytest", "pytest-cov", "pytest-dependency", "sphinx (==5.0.2)", "sphinx-rtd-theme", "tornado (>=6.1)"] -docs = ["ipython", "myst-parser", "nbsphinx (>=0.2.12)", "sphinx (==5.0.2)", "sphinx-rtd-theme"] -qtpdf = ["pyqtwebengine (>=5.15)"] +all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)"] +qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)", "pytest", "pytest-cov", "pytest-dependency"] +test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)", "pytest", "pytest-dependency"] webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] @@ -1421,14 +1521,11 @@ python-versions = ">=3.8" [[package]] name = "packaging" -version = "21.3" +version = "22.0" description = "Core utilities for Python packages" category = "main" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +python-versions = ">=3.7" [[package]] name = "pandocfilters" @@ -1478,7 +1575,7 @@ optional = true python-versions = "*" [[package]] -name = "pillow" +name = "Pillow" version = "9.3.0" description = "Python Imaging Library (Fork)" category = "main" @@ -1490,7 +1587,7 @@ docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues 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" @@ -1499,7 +1596,7 @@ python-versions = ">=3.6" [[package]] name = "platformdirs" -version = "2.5.4" +version = "2.6.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "main" optional = false @@ -1550,7 +1647,7 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.33" +version = "3.0.36" description = "Library for building powerful interactive command lines in Python" category = "main" optional = true @@ -1663,7 +1760,7 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] -name = "pygithub" +name = "PyGithub" version = "1.57" description = "Use the full Github API v3" category = "dev" @@ -1688,7 +1785,7 @@ optional = false python-versions = "*" [[package]] -name = "pygments" +name = "Pygments" version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" @@ -1699,7 +1796,7 @@ python-versions = ">=3.6" plugins = ["importlib-metadata"] [[package]] -name = "pyjwt" +name = "PyJWT" version = "2.6.0" description = "JSON Web Token implementation in Python" category = "dev" @@ -1714,7 +1811,7 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "2.15.7" +version = "2.15.8" description = "python code static checker" category = "dev" optional = false @@ -1736,7 +1833,7 @@ 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" @@ -1759,7 +1856,7 @@ optional = false python-versions = ">=3.7" [[package]] -name = "pyobjc-framework-cocoa" +name = "pyobjc-framework-Cocoa" version = "9.0" description = "Wrappers for the Cocoa frameworks on macOS" category = "main" @@ -1773,7 +1870,7 @@ pyobjc-core = ">=9.0" name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" +category = "dev" optional = false python-versions = ">=3.6.8" @@ -1877,6 +1974,14 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" [package.dependencies] six = ">=1.5" +[[package]] +name = "python-json-logger" +version = "2.0.4" +description = "A python library adding a json log formatter" +category = "main" +optional = true +python-versions = ">=3.5" + [[package]] name = "pytz" version = "2022.6" @@ -1902,10 +2007,10 @@ optional = true python-versions = ">=3.7" [[package]] -name = "pyyaml" +name = "PyYAML" version = "6.0" description = "YAML parser and emitter for Python" -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -1950,7 +2055,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" @@ -1963,6 +2068,25 @@ python-versions = "*" [package.dependencies] docutils = ">=0.11,<1.0" +[[package]] +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.*" + +[package.dependencies] +six = "*" + +[[package]] +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.*" + [[package]] name = "rich" version = "12.6.0" @@ -2008,7 +2132,7 @@ 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" @@ -2103,7 +2227,7 @@ optional = false python-versions = ">=3.6" [[package]] -name = "sphinx" +name = "Sphinx" version = "4.5.0" description = "Python documentation generator" category = "dev" @@ -2160,7 +2284,7 @@ python-versions = ">=3.6" 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]] @@ -2290,7 +2414,7 @@ python-versions = "*" [[package]] name = "terminado" -version = "0.17.0" +version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." category = "main" optional = true @@ -2302,7 +2426,7 @@ pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} tornado = ">=6.1.0" [package.extras] -docs = ["pydata-sphinx-theme", "sphinx"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] [[package]] @@ -2398,7 +2522,7 @@ optional = false python-versions = "*" [[package]] -name = "types-pillow" +name = "types-Pillow" version = "8.3.11" description = "Typing stubs for Pillow" category = "dev" @@ -2414,7 +2538,7 @@ optional = false python-versions = "*" [[package]] -name = "types-pygments" +name = "types-Pygments" version = "2.13.1.1" description = "Typing stubs for Pygments" category = "dev" @@ -2460,6 +2584,17 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "uri-template" +version = "1.2.0" +description = "RFC 6570 URI Template Processor" +category = "main" +optional = true +python-versions = ">=3.6" + +[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"] + [[package]] name = "urllib3" version = "1.26.13" @@ -2475,7 +2610,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.17.0" +version = "20.17.1" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -2492,7 +2627,7 @@ testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7 [[package]] name = "watchdog" -version = "2.1.9" +version = "2.2.0" description = "Filesystem events monitoring" category = "main" optional = false @@ -2509,6 +2644,14 @@ 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" @@ -2557,7 +2700,7 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "1.1" python-versions = ">=3.8,<3.12" -content-hash = "bc07ed049ee4c50bccf6a2691080f425375aae4f834f1af93c003b40c1850f12" +content-hash = "a8297c429841e13547aabdce01ed0e83d072ebcfac53d3bdb08568e9d76a0d54" [metadata.files] alabaster = [ @@ -2599,6 +2742,10 @@ argon2-cffi-bindings = [ {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"}, @@ -2608,8 +2755,8 @@ astroid = [ {file = "astroid-2.12.13.tar.gz", hash = "sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7"}, ] asttokens = [ - {file = "asttokens-2.2.0-py2.py3-none-any.whl", hash = "sha256:c56caef774a929923696f09ceea0eadcb95c94b30e8ee4f9fc4f5867096caaeb"}, - {file = "asttokens-2.2.0.tar.gz", hash = "sha256:e27b1f115daebfafd4d1826fc75f9a72f0b74bd3ae4ee4d9380406d74d35e52c"}, + {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, + {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, ] atomicwrites = [ {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, @@ -2618,7 +2765,7 @@ 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 = [ +Babel = [ {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, ] @@ -2658,8 +2805,8 @@ bleach = [ {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, ] certifi = [ - {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, - {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, + {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"}, @@ -2754,6 +2901,10 @@ 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.1-py3-none-any.whl", hash = "sha256:788a4ec961956c1cb2b0ba3c21f2458ff5757bb2f552032b140787af88d670a3"}, + {file = "comm-0.1.1.tar.gz", hash = "sha256:f395ea64f4f261f35ffc2fbf80a62ec071375dac48cd3ea56092711e74dd063e"}, +] commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, @@ -2885,7 +3036,7 @@ cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, ] -cython = [ +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"}, @@ -2979,7 +3130,7 @@ 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 = [ +Deprecated = [ {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, ] @@ -3012,8 +3163,8 @@ fastjsonschema = [ {file = "fastjsonschema-2.16.2.tar.gz", hash = "sha256:01e366f25d9047816fe3d288cbfc3e10541daf0af2044763f3d0ade42476da18"}, ] filelock = [ - {file = "filelock-3.8.0-py3-none-any.whl", hash = "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4"}, - {file = "filelock-3.8.0.tar.gz", hash = "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc"}, + {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"}, @@ -3055,6 +3206,10 @@ 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"}, @@ -3063,7 +3218,7 @@ gitdb = [ {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, ] -gitpython = [ +GitPython = [ {file = "GitPython-3.1.29-py3-none-any.whl", hash = "sha256:41eea0deec2deea139b459ac03656f0dd28fc4a3387240ec1d3c259a2c47850f"}, {file = "GitPython-3.1.29.tar.gz", hash = "sha256:cc36bfc4a3f913e66805a28e84703e419d9c264c1077e537b54f0e1af85dbefd"}, ] @@ -3136,25 +3291,29 @@ importlib-metadata = [ {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"}, ] importlib-resources = [ - {file = "importlib_resources-5.10.0-py3-none-any.whl", hash = "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437"}, - {file = "importlib_resources-5.10.0.tar.gz", hash = "sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668"}, + {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.17.1-py3-none-any.whl", hash = "sha256:3a9a1b2ad6dbbd5879855aabb4557f08e63fa2208bffed897f03070e2bb436f6"}, - {file = "ipykernel-6.17.1.tar.gz", hash = "sha256:e178c1788399f93a459c241fe07c3b810771c607b1fb064a99d2c5d40c90c5d4"}, + {file = "ipykernel-6.19.0-py3-none-any.whl", hash = "sha256:851aa3f9cbbec6918136ada733069a6709934b8106a743495070cf46917eb9a9"}, + {file = "ipykernel-6.19.0.tar.gz", hash = "sha256:7aabde9e201c4a8f43000f4be0d057f91df13b906ea646acd9047fcb85600b9b"}, ] 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 = [ +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"}, @@ -3167,7 +3326,7 @@ 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 = [ +Jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] @@ -3175,25 +3334,37 @@ 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.7-py3-none-any.whl", hash = "sha256:df56ae23b8e1da1b66f89dee1368e948b24a7f780fa822c5735187589fc4c157"}, - {file = "jupyter_client-7.4.7.tar.gz", hash = "sha256:330f6b627e0b4bf2f54a3a0dd9e4a22d2b649c8518168afedce2c96a1ceb2860"}, + {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-1.23.3-py3-none-any.whl", hash = "sha256:438496cac509709cc85e60172e5538ca45b4c8a0862bb97cd73e49f2ace419cb"}, - {file = "jupyter_server-1.23.3.tar.gz", hash = "sha256:f7f7a2f9d36f4150ad125afef0e20b1c76c8ff83eb5e39fb02d3b9df0f9b79ab"}, + {file = "jupyter_server-2.0.0-py3-none-any.whl", hash = "sha256:999c10535587ed3194005b6205baaadb0d2dd32f0e6d667d9177e32e0d5ec85a"}, + {file = "jupyter_server-2.0.0.tar.gz", hash = "sha256:4ed33c3d8a2c9c1e5e6238c5a837f65ec4b1edf2bf87a3f677cc057207757a10"}, +] +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.0-py3-none-any.whl", hash = "sha256:f433059fe0e12d75ea90a81a0b6721113bb132857e3ec2197780b6fe84cbcbde"}, - {file = "jupyterlab-3.5.0.tar.gz", hash = "sha256:e02556c8ea1b386963c4b464e4618aee153c5416b07ab481425c817a033323a2"}, + {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"}, @@ -3294,7 +3465,7 @@ lazy-object-proxy = [ {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 = [ +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"}, @@ -3313,42 +3484,71 @@ manimpango = [ {file = "ManimPango-0.4.3.tar.gz", hash = "sha256:732f1cb98bcc122c0dee93bb54966aa595f90730e5096ad6d86602cf4ba1a103"}, ] mapbox-earcut = [ - {file = "mapbox_earcut-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1ced70e48725bbba7da442e36a013df447ebd1b1cc2cfac02222a4b78f03615c"}, - {file = "mapbox_earcut-1.0.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b106999b3880188891e1e87f2c5abbf739bc09ec89f8044e196fd4607d24ccf0"}, - {file = "mapbox_earcut-1.0.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:653e03417a308febcd2cb74812d7077dbd52c47da492c9b2e5f9c42adb2d659a"}, - {file = "mapbox_earcut-1.0.0-cp310-cp310-win32.whl", hash = "sha256:b5a74951b9cb827f6bf77cf6f6afc9af5dc57b2e6257770d7d256a1aa0787142"}, - {file = "mapbox_earcut-1.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f630f135e20a781f9d7ce7aa0bba89ebd46d46344970db9aa8cbcf6eb1cb4b94"}, - {file = "mapbox_earcut-1.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:265d60d64a91af267fe9c747625341a5d042009c5436550037cebed69c701c62"}, - {file = "mapbox_earcut-1.0.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7f9245ea3eeab942020058376be0d2368940ecb0a659d5ba83579cf11699cd8a"}, - {file = "mapbox_earcut-1.0.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:55899708fe29ac8213e040ce836afdfe3cf4d63392c78c0c03ccc1b3350fbd25"}, - {file = "mapbox_earcut-1.0.0-cp36-cp36m-win32.whl", hash = "sha256:b7d3e5956d24d9d987c435dadecca723c5db6e7e46c824a8dbd98adb97057442"}, - {file = "mapbox_earcut-1.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6fe02ca7bb1ec5bd5f288807beb880d5677748957e8ecd797aee91b18a235c10"}, - {file = "mapbox_earcut-1.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1c1f0746b7921dc8e09c34774671c679771e36782cecd21e7ceeeccad70dfc35"}, - {file = "mapbox_earcut-1.0.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:faff85293f3baf6fe53db5958dddcbb4f9b883f344921c378f82ddce55eff5a4"}, - {file = "mapbox_earcut-1.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cf4dd5768bc733e6fe0cc6a907e168c4a9777a1d5e148b5daa1edf45ce7c3e9f"}, - {file = "mapbox_earcut-1.0.0-cp37-cp37m-win32.whl", hash = "sha256:8b8f8fe1b42a134c7a113c123be74dca64632e672d82aa4b4024f8453f590d71"}, - {file = "mapbox_earcut-1.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:991bfea36ba73f1cbd22aa93a2ff4beec13657ac5acd7a602a912eb2f84f4860"}, - {file = "mapbox_earcut-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fa58aabef34ffd76b262efec7bc9c9998c1c6561c192b7e7ac60b68c27c6b145"}, - {file = "mapbox_earcut-1.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f62d8b7cb57559ca9aaf5cde8cebe309eb493d344b24b2934e18945e05e89221"}, - {file = "mapbox_earcut-1.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98a412757740faeede3167c54426917076a863ccc74847f9e58bfcf51f0b7be7"}, - {file = "mapbox_earcut-1.0.0-cp38-cp38-win32.whl", hash = "sha256:7cb4d98af4c1b256483903a909099d7a84664e9a5aec5818c84d44f1104c3144"}, - {file = "mapbox_earcut-1.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:4229ec0fbe1baf88cd9a8f17b76d905323ee7daade0f19f573bd488ca8fdc06f"}, - {file = "mapbox_earcut-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:175200a3a7d1db037592b48c3b470695ff969ed0aaa69a00f7526d8502848756"}, - {file = "mapbox_earcut-1.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cefb0fe3427f2a207753e2eb869de05893f1156199474e998c9427bdb465b50b"}, - {file = "mapbox_earcut-1.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7792378a4a13e472ae5021104dfd423fd6e014a67bdbe27c0c49b1df47f6f050"}, - {file = "mapbox_earcut-1.0.0-cp39-cp39-win32.whl", hash = "sha256:4fd85aee997165acd42ba726ba7f087f72b72f53cc0b37d430987c9bf1acc2c1"}, - {file = "mapbox_earcut-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:8f3c4df83fa5f7c942d18fb0433bf903dc22b447860094444dd960dd5b85c526"}, - {file = "mapbox_earcut-1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e4828e9002384e7d7ad1a213f61029f8e17d6fa9a30408d64f9d755f0c11762b"}, - {file = "mapbox_earcut-1.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:10a91eabe076f474375accfc164e91af8bf2b15675d443b08b938315cc234be9"}, - {file = "mapbox_earcut-1.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c5ee744864f7cc9b0b9dd6031871731e2340cf65f18b0ca64121f2682be0ba4e"}, - {file = "mapbox_earcut-1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:cf35d52e0a0413bcb878706c1a565a2939d49a2e011498d905b7bc8d1ad12543"}, - {file = "mapbox_earcut-1.0.0.tar.gz", hash = "sha256:997ab14b9afbc14b1aede880b8f57efc7f28d6811a08db0adf1804b63bab0d9b"}, + {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 = [ +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"}, @@ -3442,8 +3642,8 @@ mccabe = [ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] mdit-py-plugins = [ - {file = "mdit-py-plugins-0.3.1.tar.gz", hash = "sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441"}, - {file = "mdit_py_plugins-0.3.1-py3-none-any.whl", hash = "sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1"}, + {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"}, @@ -3552,8 +3752,8 @@ nbclient = [ {file = "nbclient-0.7.2.tar.gz", hash = "sha256:884a3f4a8c4fc24bb9302f263e0af47d97f0d01fe11ba714171b320c8ac09547"}, ] nbconvert = [ - {file = "nbconvert-7.2.5-py3-none-any.whl", hash = "sha256:3e90e108bb5637b5b8a1422af1156af1368b39dd25369ff7faa7dfdcdef18f81"}, - {file = "nbconvert-7.2.5.tar.gz", hash = "sha256:8fdc44fd7d9424db7fdc6e1e834a02f6b8620ffb653767388be2f9eb16f84184"}, + {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"}, @@ -3610,8 +3810,8 @@ numpy = [ {file = "numpy-1.23.5.tar.gz", hash = "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a"}, ] packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, + {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"}, @@ -3633,7 +3833,7 @@ 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 = [ +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"}, @@ -3696,13 +3896,13 @@ pillow = [ {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 = [ +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.5.4-py3-none-any.whl", hash = "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10"}, - {file = "platformdirs-2.5.4.tar.gz", hash = "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7"}, + {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"}, @@ -3717,8 +3917,8 @@ prometheus-client = [ {file = "prometheus_client-0.15.0.tar.gz", hash = "sha256:be26aa452490cfcf6da953f9436e95a9f2b4d578ca80094b4458930e5f584ab1"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.33-py3-none-any.whl", hash = "sha256:ced598b222f6f4029c0800cefaa6a17373fb580cd093223003475ce32805c35b"}, - {file = "prompt_toolkit-3.0.33.tar.gz", hash = "sha256:535c29c31216c77302877d5120aef6c94ff573748a5b5ca5b1b1f76f5e700c73"}, + {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"}, @@ -3796,7 +3996,7 @@ 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 = [ +PyGithub = [ {file = "PyGithub-1.57-py3-none-any.whl", hash = "sha256:5822febeac2391f1306c55a99af2bc8f86c8bf82ded000030cd02c18f31b731f"}, {file = "PyGithub-1.57.tar.gz", hash = "sha256:c273f252b278fb81f1769505cc6921bdb6791e1cebd6ac850cc97dad13c31ff3"}, ] @@ -3804,19 +4004,19 @@ pyglet = [ {file = "pyglet-2.0.1-py3-none-any.whl", hash = "sha256:6c0c0fe95fbc3b26c2f008e83bcc3dcbda1609dca6da7c3954bc4d1b529f2303"}, {file = "pyglet-2.0.1.zip", hash = "sha256:ec36eba0c769bac25c5347acf14f8a7ac8f64fe469458a0a998ed1d507975e47"}, ] -pygments = [ +Pygments = [ {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, ] -pyjwt = [ +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.7-py3-none-any.whl", hash = "sha256:1d561d1d3e8be9dd880edc685162fbdaa0409c88b9b7400873c0cf345602e326"}, - {file = "pylint-2.15.7.tar.gz", hash = "sha256:91e4776dbcb4b4d921a3e4b6fec669551107ba11f29d9199154a01622e460a57"}, + {file = "pylint-2.15.8-py3-none-any.whl", hash = "sha256:ea82cd6a1e11062dc86d555d07c021b0fb65afe39becbe6fe692efd6c4a67443"}, + {file = "pylint-2.15.8.tar.gz", hash = "sha256:ec4a87c33da054ab86a6c79afa6771dc8765cb5631620053e727fcf3ef8cbed7"}, ] -pynacl = [ +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"}, @@ -3837,7 +4037,7 @@ pyobjc-core = [ {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 = [ +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"}, @@ -3898,6 +4098,10 @@ 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"}, @@ -3926,7 +4130,7 @@ pywinpty = [ {file = "pywinpty-2.0.9-cp39-none-win_amd64.whl", hash = "sha256:ba75ec55f46c9e17db961d26485b033deb20758b1731e8e208e1e8a387fcf70c"}, {file = "pywinpty-2.0.9.tar.gz", hash = "sha256:01b6400dd79212f50a2f01af1c65b781290ff39610853db99bf03962eb9a615f"}, ] -pyyaml = [ +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"}, @@ -4055,6 +4259,14 @@ requests = [ 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"}, @@ -4086,7 +4298,7 @@ screeninfo = [ {file = "screeninfo-0.8.1-py3-none-any.whl", hash = "sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c"}, {file = "screeninfo-0.8.1.tar.gz", hash = "sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1"}, ] -send2trash = [ +Send2Trash = [ {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, ] @@ -4163,7 +4375,7 @@ soupsieve = [ {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, ] -sphinx = [ +Sphinx = [ {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, ] @@ -4219,8 +4431,8 @@ svgelements = [ {file = "svgelements-1.8.4.tar.gz", hash = "sha256:af0fa36d8d239c4df205e110cf531256359c6c4c93aa3cd13ae9599912f1335d"}, ] terminado = [ - {file = "terminado-0.17.0-py3-none-any.whl", hash = "sha256:bf6fe52accd06d0661d7611cc73202121ec6ee51e46d8185d489ac074ca457c2"}, - {file = "terminado-0.17.0.tar.gz", hash = "sha256:520feaa3aeab8ad64a69ca779be54be9234edb2d0d6567e76c93c2c9a4e6e43f"}, + {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"}, @@ -4267,7 +4479,7 @@ 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 = [ +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"}, ] @@ -4275,7 +4487,7 @@ 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 = [ +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"}, ] @@ -4295,45 +4507,56 @@ 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.0-py3-none-any.whl", hash = "sha256:40a7e06a98728fd5769e1af6fd1a706005b4bb7e16176a272ed4292473180389"}, - {file = "virtualenv-20.17.0.tar.gz", hash = "sha256:7d6a8d55b2f73b617f684ee40fd85740f062e1f2e379412cb1879c7136f05902"}, + {file = "virtualenv-20.17.1-py3-none-any.whl", hash = "sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4"}, + {file = "virtualenv-20.17.1.tar.gz", hash = "sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058"}, ] watchdog = [ - {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330"}, - {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d"}, - {file = "watchdog-2.1.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658"}, - {file = "watchdog-2.1.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591"}, - {file = "watchdog-2.1.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33"}, - {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846"}, - {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3"}, - {file = "watchdog-2.1.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654"}, - {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39"}, - {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7"}, - {file = "watchdog-2.1.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd"}, - {file = "watchdog-2.1.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3"}, - {file = "watchdog-2.1.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d"}, - {file = "watchdog-2.1.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_armv7l.whl", hash = "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_i686.whl", hash = "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64.whl", hash = "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_s390x.whl", hash = "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6"}, - {file = "watchdog-2.1.9-py3-none-win32.whl", hash = "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1"}, - {file = "watchdog-2.1.9-py3-none-win_amd64.whl", hash = "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c"}, - {file = "watchdog-2.1.9-py3-none-win_ia64.whl", hash = "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428"}, - {file = "watchdog-2.1.9.tar.gz", hash = "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609"}, + {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"}, + {file = "watchdog-2.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ceaa9268d81205876bedb1069f9feab3eccddd4b90d9a45d06a0df592a04cae9"}, + {file = "watchdog-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1893d425ef4fb4f129ee8ef72226836619c2950dd0559bba022b0818c63a7b60"}, + {file = "watchdog-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e99c1713e4436d2563f5828c8910e5ff25abd6ce999e75f15c15d81d41980b6"}, + {file = "watchdog-2.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a5bd9e8656d07cae89ac464ee4bcb6f1b9cecbedc3bf1334683bed3d5afd39ba"}, + {file = "watchdog-2.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a048865c828389cb06c0bebf8a883cec3ae58ad3e366bcc38c61d8455a3138f"}, + {file = "watchdog-2.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e722755d995035dd32177a9c633d158f2ec604f2a358b545bba5bed53ab25bca"}, + {file = "watchdog-2.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af4b5c7ba60206759a1d99811b5938ca666ea9562a1052b410637bb96ff97512"}, + {file = "watchdog-2.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:619d63fa5be69f89ff3a93e165e602c08ed8da402ca42b99cd59a8ec115673e1"}, + {file = "watchdog-2.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f2b0665c57358ce9786f06f5475bc083fea9d81ecc0efa4733fd0c320940a37"}, + {file = "watchdog-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:441024df19253bb108d3a8a5de7a186003d68564084576fecf7333a441271ef7"}, + {file = "watchdog-2.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a410dd4d0adcc86b4c71d1317ba2ea2c92babaf5b83321e4bde2514525544d5"}, + {file = "watchdog-2.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28704c71afdb79c3f215c90231e41c52b056ea880b6be6cee035c6149d658ed1"}, + {file = "watchdog-2.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2ac0bd7c206bb6df78ef9e8ad27cc1346f2b41b1fef610395607319cdab89bc1"}, + {file = "watchdog-2.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:27e49268735b3c27310883012ab3bd86ea0a96dcab90fe3feb682472e30c90f3"}, + {file = "watchdog-2.2.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:2af1a29fd14fc0a87fb6ed762d3e1ae5694dcde22372eebba50e9e5be47af03c"}, + {file = "watchdog-2.2.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:c7bd98813d34bfa9b464cf8122e7d4bec0a5a427399094d2c17dd5f70d59bc61"}, + {file = "watchdog-2.2.0-py3-none-manylinux2014_i686.whl", hash = "sha256:56fb3f40fc3deecf6e518303c7533f5e2a722e377b12507f6de891583f1b48aa"}, + {file = "watchdog-2.2.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:74535e955359d79d126885e642d3683616e6d9ab3aae0e7dcccd043bd5a3ff4f"}, + {file = "watchdog-2.2.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:cf05e6ff677b9655c6e9511d02e9cc55e730c4e430b7a54af9c28912294605a4"}, + {file = "watchdog-2.2.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:d6ae890798a3560688b441ef086bb66e87af6b400a92749a18b856a134fc0318"}, + {file = "watchdog-2.2.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5aed2a700a18c194c39c266900d41f3db0c1ebe6b8a0834b9995c835d2ca66e"}, + {file = "watchdog-2.2.0-py3-none-win32.whl", hash = "sha256:d0fb5f2b513556c2abb578c1066f5f467d729f2eb689bc2db0739daf81c6bb7e"}, + {file = "watchdog-2.2.0-py3-none-win_amd64.whl", hash = "sha256:1f8eca9d294a4f194ce9df0d97d19b5598f310950d3ac3dd6e8d25ae456d4c8a"}, + {file = "watchdog-2.2.0-py3-none-win_ia64.whl", hash = "sha256:ad0150536469fa4b693531e497ffe220d5b6cd76ad2eda474a5e641ee204bbb6"}, + {file = "watchdog-2.2.0.tar.gz", hash = "sha256:83cf8bc60d9c613b66a4c018051873d6273d9e45d040eed06d6a96241bd8ec01"}, ] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, ] +webcolors = [ + {file = "webcolors-1.12-py3-none-any.whl", hash = "sha256:d98743d81d498a2d3eaf165196e65481f0d2ea85281463d856b1e51b09f62dce"}, + {file = "webcolors-1.12.tar.gz", hash = "sha256:16d043d3a08fd6a1b1b7e3e9e62640d09790dce80d2bdd4792a175b35fe794a9"}, +] webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, diff --git a/pyproject.toml b/pyproject.toml index f67da32120..b4ddc647e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,7 +56,7 @@ srt = "^3.5.0" screeninfo = "^0.8" Pygments = "^2.10.0" "backports.cached-property" = { version = "^1.0.1", python = "<3.8" } -svgelements = "^1.7.2" +svgelements = "^1.8.0" [tool.poetry.extras] jupyterlab = ["jupyterlab", "notebook"] From c081a57ef071f54846d22d87cc918378cd669d69 Mon Sep 17 00:00:00 2001 From: Alex Lembcke Date: Thu, 8 Dec 2022 08:02:04 -0500 Subject: [PATCH 173/555] Added documentation for lagged animations (#2953) * Add docs for lagged animations. * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Update manim/animation/composition.py Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Sparsh Goenka <43041139+sparshg@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/animation/composition.py | 161 ++++++++++++++++++++++++++++++++- 1 file changed, 157 insertions(+), 4 deletions(-) diff --git a/manim/animation/composition.py b/manim/animation/composition.py index 609e6547be..cc6fa2ca7e 100644 --- a/manim/animation/composition.py +++ b/manim/animation/composition.py @@ -29,6 +29,29 @@ class AnimationGroup(Animation): + """Plays a group or series of :class:`~.Animation`. + + Parameters + ---------- + animations + Sequence of :class:`~.Animation` objects to be played. + group + A group of multiple :class:`~.Mobject`. + run_time + The duration of the animation in seconds. + rate_func + The function defining the animation progress based on the relative + runtime (see :mod:`~.rate_functions`) . + lag_ratio + Defines the delay after which the animation is applied to submobjects. A lag_ratio of + ``n.nn`` means the next animation will play when ``nnn%`` of the current animation has played. + Defaults to 0.0, meaning that all animations will be played together. + + This does not influence the total runtime of the animation. Instead the runtime + of individual animations is adjusted so that the complete animation has the defined + run time. + """ + def __init__( self, *animations: Animation, @@ -85,6 +108,18 @@ def update_mobjects(self, dt: float) -> None: anim.update_mobjects(dt) def init_run_time(self, run_time) -> float: + """Calculates the run time of the animation, if different from ``run_time``. + + Parameters + ---------- + run_time + The duration of the animation in seconds. + + Returns + ------- + run_time + The duration of the animation in seconds. + """ self.build_animations_with_timings() if self.anims_with_timings: self.max_end_time = np.max([awt[2] for awt in self.anims_with_timings]) @@ -93,10 +128,7 @@ def init_run_time(self, run_time) -> float: return self.max_end_time if run_time is None else run_time def build_animations_with_timings(self) -> None: - """ - Creates a list of triplets of the form - (anim, start_time, end_time) - """ + """Creates a list of triplets of the form (anim, start_time, end_time).""" self.anims_with_timings = [] curr_time: float = 0 for anim in self.animations: @@ -123,6 +155,42 @@ def interpolate(self, alpha: float) -> None: class Succession(AnimationGroup): + """Plays a series of animations in succession. + + Parameters + ---------- + animations + Sequence of :class:`~.Animation` objects to be played. + lag_ratio + Defines the delay after which the animation is applied to submobjects. A lag_ratio of + ``n.nn`` means the next animation will play when ``nnn%`` of the current animation has played. + Defaults to 1.0, meaning that the next animation will begin when 100% of the current + animation has played. + + This does not influence the total runtime of the animation. Instead the runtime + of individual animations is adjusted so that the complete animation has the defined + run time. + + Examples + -------- + .. manim:: SuccessionExample + + class SuccessionExample(Scene): + def construct(self): + dot1 = Dot(point=LEFT * 2 + UP * 2, radius=0.16, color=BLUE) + dot2 = Dot(point=LEFT * 2 + DOWN * 2, radius=0.16, color=MAROON) + dot3 = Dot(point=RIGHT * 2 + DOWN * 2, radius=0.16, color=GREEN) + dot4 = Dot(point=RIGHT * 2 + UP * 2, radius=0.16, color=YELLOW) + self.add(dot1, dot2, dot3, dot4) + + self.play(Succession( + dot1.animate.move_to(dot2), + dot2.animate.move_to(dot3), + dot3.animate.move_to(dot4), + dot4.animate.move_to(dot1) + )) + """ + def __init__(self, *animations: Animation, lag_ratio: float = 1, **kwargs) -> None: super().__init__(*animations, lag_ratio=lag_ratio, **kwargs) @@ -162,6 +230,10 @@ def update_active_animation(self, index: int) -> None: self.active_end_time = self.anims_with_timings[index][2] def next_animation(self) -> None: + """Proceeds to the next animation. + + This method is called right when the active animation finishes. + """ if self.active_animation is not None: self.active_animation.finish() self.update_active_animation(self.active_index + 1) @@ -178,6 +250,50 @@ def interpolate(self, alpha: float) -> None: class LaggedStart(AnimationGroup): + """Adjusts the timing of a series of :class:`~.Animation` according to ``lag_ratio``. + + Parameters + ---------- + animations + Sequence of :class:`~.Animation` objects to be played. + lag_ratio + Defines the delay after which the animation is applied to submobjects. A lag_ratio of + ``n.nn`` means the next animation will play when ``nnn%`` of the current animation has played. + Defaults to 0.05, meaning that the next animation will begin when 5% of the current + animation has played. + + This does not influence the total runtime of the animation. Instead the runtime + of individual animations is adjusted so that the complete animation has the defined + run time. + + Examples + -------- + .. manim:: LaggedStartExample + + class LaggedStartExample(Scene): + def construct(self): + title = Text("lag_ratio = 0.25").to_edge(UP) + + dot1 = Dot(point=LEFT * 2 + UP, radius=0.16) + dot2 = Dot(point=LEFT * 2, radius=0.16) + dot3 = Dot(point=LEFT * 2 + DOWN, radius=0.16) + line_25 = DashedLine( + start=LEFT + UP * 2, + end=LEFT + DOWN * 2, + color=RED + ) + label = Text("25%", font_size=24).next_to(line_25, UP) + self.add(title, dot1, dot2, dot3, line_25, label) + + self.play(LaggedStart( + dot1.animate.shift(RIGHT * 4), + dot2.animate.shift(RIGHT * 4), + dot3.animate.shift(RIGHT * 4), + lag_ratio=0.25, + run_time=4 + )) + """ + def __init__( self, *animations: Animation, @@ -188,6 +304,43 @@ def __init__( class LaggedStartMap(LaggedStart): + """Plays a series of :class:`~.Animation` while mapping a function to submobjects. + + Parameters + ---------- + AnimationClass + :class:`~.Animation` to apply to mobject. + mobject + :class:`~.Mobject` whose submobjects the animation, and optionally the function, + are to be applied. + arg_creator + Function which will be applied to :class:`~.Mobject`. + run_time + The duration of the animation in seconds. + + Examples + -------- + .. manim:: LaggedStartMapExample + + class LaggedStartMapExample(Scene): + def construct(self): + title = Tex("LaggedStartMap").to_edge(UP, buff=LARGE_BUFF) + dots = VGroup( + *[Dot(radius=0.16) for _ in range(35)] + ).arrange_in_grid(rows=5, cols=7, buff=MED_LARGE_BUFF) + self.add(dots, title) + + # Animate yellow ripple effect + for mob in dots, title: + self.play(LaggedStartMap( + ApplyMethod, mob, + lambda m : (m.set_color, YELLOW), + lag_ratio = 0.1, + rate_func = there_and_back, + run_time = 2 + )) + """ + def __init__( self, AnimationClass: Callable[..., Animation], From f4aa88c368e01fd1a193bb77c22eb2b2fef7d666 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 8 Dec 2022 14:08:47 +0100 Subject: [PATCH 174/555] Increased minimal version of ``pytest`` (#3066) * upgrade pytest to ^7.2 * rename msg to reason in pytest.mark.skip --- poetry.lock | 70 ++++++++++--------- pyproject.toml | 2 +- .../opengl/test_opengl_renderer.py | 2 +- 3 files changed, 40 insertions(+), 34 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6b6b9aa9ae..bb771a861e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -111,14 +111,6 @@ six = "*" [package.extras] test = ["astroid", "pytest"] -[[package]] -name = "atomicwrites" -version = "1.4.1" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - [[package]] name = "attrs" version = "22.1.0" @@ -298,14 +290,14 @@ test = ["nose"] [[package]] name = "comm" -version = "0.1.1" +version = "0.1.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." category = "main" optional = true python-versions = ">=3.6" [package.dependencies] -traitlets = ">5.3" +traitlets = ">=5.3" [package.extras] test = ["pytest"] @@ -461,6 +453,17 @@ category = "main" optional = true python-versions = ">=3.6" +[[package]] +name = "exceptiongroup" +version = "1.0.4" +description = "Backport of PEP 654 (exception groups)" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +test = ["pytest (>=6)"] + [[package]] name = "execnet" version = "1.9.0" @@ -757,7 +760,7 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.19.0" +version = "6.19.1" description = "IPython Kernel for Jupyter" category = "main" optional = true @@ -996,7 +999,7 @@ test = ["click", "coverage", "pre-commit", "pytest (>=6.1.0)", "pytest-asyncio ( [[package]] name = "jupyter-server" -version = "2.0.0" +version = "2.0.1" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "main" optional = true @@ -1007,6 +1010,7 @@ anyio = ">=3.1.0,<4" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" jupyter-events = ">=0.4.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" @@ -1018,12 +1022,14 @@ pyzmq = ">=24" send2trash = "*" terminado = ">=0.8.3" tornado = ">=6.2.0" -traitlets = ">=5.3.0" +traitlets = ">=5.6.0" websocket-client = "*" [package.extras] -docs = ["docutils (<0.19)", "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"] +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" @@ -1899,24 +1905,23 @@ python-versions = ">=3.7" [[package]] name = "pytest" -version = "6.2.5" +version = "7.2.0" description = "pytest: simple powerful testing with Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] [[package]] name = "pytest-cov" @@ -2700,7 +2705,7 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "1.1" python-versions = ">=3.8,<3.12" -content-hash = "a8297c429841e13547aabdce01ed0e83d072ebcfac53d3bdb08568e9d76a0d54" +content-hash = "9df7ccd72cfd7f4a98b9a39546c11e4302f0390eecedd60882a8f4cdb7ffb22b" [metadata.files] alabaster = [ @@ -2758,9 +2763,6 @@ asttokens = [ {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, ] -atomicwrites = [ - {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, -] attrs = [ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, @@ -2902,8 +2904,8 @@ colour = [ {file = "colour-0.1.5.tar.gz", hash = "sha256:af20120fefd2afede8b001fbef2ea9da70ad7d49fafdb6489025dae8745c3aee"}, ] comm = [ - {file = "comm-0.1.1-py3-none-any.whl", hash = "sha256:788a4ec961956c1cb2b0ba3c21f2458ff5757bb2f552032b140787af88d670a3"}, - {file = "comm-0.1.1.tar.gz", hash = "sha256:f395ea64f4f261f35ffc2fbf80a62ec071375dac48cd3ea56092711e74dd063e"}, + {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"}, @@ -3150,6 +3152,10 @@ 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"}, @@ -3299,8 +3305,8 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] ipykernel = [ - {file = "ipykernel-6.19.0-py3-none-any.whl", hash = "sha256:851aa3f9cbbec6918136ada733069a6709934b8106a743495070cf46917eb9a9"}, - {file = "ipykernel-6.19.0.tar.gz", hash = "sha256:7aabde9e201c4a8f43000f4be0d057f91df13b906ea646acd9047fcb85600b9b"}, + {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"}, @@ -3355,8 +3361,8 @@ jupyter-events = [ {file = "jupyter_events-0.5.0.tar.gz", hash = "sha256:e27ffdd6138699d47d42cb65ae6d79334ff7c0d923694381c991ce56a140f2cd"}, ] jupyter-server = [ - {file = "jupyter_server-2.0.0-py3-none-any.whl", hash = "sha256:999c10535587ed3194005b6205baaadb0d2dd32f0e6d667d9177e32e0d5ec85a"}, - {file = "jupyter_server-2.0.0.tar.gz", hash = "sha256:4ed33c3d8a2c9c1e5e6238c5a837f65ec4b1edf2bf87a3f677cc057207757a10"}, + {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"}, @@ -4079,8 +4085,8 @@ pyrsistent = [ {file = "pyrsistent-0.19.2.tar.gz", hash = "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2"}, ] pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, + {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"}, diff --git a/pyproject.toml b/pyproject.toml index b4ddc647e0..05def4b663 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ gui = ["dearpygui"] [tool.poetry.dev-dependencies] pytest-cov = "^3.0.0" -pytest = "^6.0" +pytest = "^7.2" pylint = "^2.12.2" Sphinx = "^4" sphinx-copybutton = "^0.4.0" diff --git a/tests/test_scene_rendering/opengl/test_opengl_renderer.py b/tests/test_scene_rendering/opengl/test_opengl_renderer.py index 6f6f7e8b59..95f7adde0b 100644 --- a/tests/test_scene_rendering/opengl/test_opengl_renderer.py +++ b/tests/test_scene_rendering/opengl/test_opengl_renderer.py @@ -20,7 +20,7 @@ def test_write_to_movie_disables_window(using_temp_opengl_config, disabling_cach assert_file_exists(config["output_file"]) -@pytest.mark.skip(msg="Temporarily skip due to failing in Windows CI") # type: ignore +@pytest.mark.skip(reason="Temporarily skip due to failing in Windows CI") # type: ignore def test_force_window_opengl_render_with_movies( using_temp_opengl_config, force_window_config_write_to_movie, From 9efe81daa3e88e25244affd3700e2d2a8b527635 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 8 Dec 2022 16:28:47 +0100 Subject: [PATCH 175/555] Prepared new release: ``v0.17.1`` (#3065) * generated changelog etc * bump version number * regenerated changelog, second (and final?) pass --- CITATION.cff | 4 +- docs/source/changelog.rst | 1 + docs/source/changelog/0.17.1-changelog.rst | 58 ++++++++++++++++++++++ pyproject.toml | 2 +- 4 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 docs/source/changelog/0.17.1-changelog.rst diff --git a/CITATION.cff b/CITATION.cff index 6b46dca60a..2955290b6a 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -4,10 +4,10 @@ authors: - name: "The Manim Community Developers" cff-version: "1.2.0" -date-released: 2022-12-02 +date-released: 2022-12-08 license: MIT message: "We acknowledge the importance of good software to support research, and we note that research becomes more valuable when it is communicated effectively. To demonstrate the value of Manim, we ask that you cite Manim in your work." title: Manim – Mathematical Animation Framework url: "https://www.manim.community/" -version: "v0.17.0" +version: "v0.17.1" ... diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index 9f589e457a..97f58135b2 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -5,6 +5,7 @@ Changelog .. toctree:: + changelog/0.17.1-changelog changelog/0.17.0-changelog changelog/0.16.0-changelog changelog/0.15.2-changelog diff --git a/docs/source/changelog/0.17.1-changelog.rst b/docs/source/changelog/0.17.1-changelog.rst new file mode 100644 index 0000000000..44bf109f80 --- /dev/null +++ b/docs/source/changelog/0.17.1-changelog.rst @@ -0,0 +1,58 @@ +******* +v0.17.1 +******* + +:Date: December 08, 2022 + +Contributors +============ + +A total of 5 people contributed to this +release. People with a '+' by their names authored a patch for the first +time. + +* Alex Lembcke +* Benjamin Hackl +* Naveen M K +* Onur Solmaz + + +The patches included in this release have been reviewed by +the following contributors. + +* Benjamin Hackl +* Naveen M K +* Sparsh Goenka + +Pull requests merged +==================== + +A total of 6 pull requests were merged for this release. + +Fixed bugs +---------- + +* :pr:`3061`: Always expand file paths using ``/`` when calling LaTeX + + +* :pr:`3062`: Added Unicode encoding in :meth:`.Scene.add_subcaption` + + +Documentation-related changes +----------------------------- + +* :pr:`2953`: Added documentation for lagged animations in :mod:`.animation.composition` + +Code quality improvements and similar refactors +----------------------------------------------- + +* :pr:`3064`: Increased minimal required version of ``svgelements`` + + +* :pr:`3066`: Increased minimal version of ``pytest`` + + +New releases +------------ + +* :pr:`3065`: Prepared new release: ``v0.17.1`` diff --git a/pyproject.toml b/pyproject.toml index 05def4b663..c327c8f061 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "manim" -version = "0.17.0" +version = "0.17.1" description = "Animation engine for explanatory math videos." authors = ["The Manim Community Developers ", "3b1b "] license="MIT" From 43cabfbd14c83ab877cc5c96d44463b4fcf8b6e2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 18 Dec 2022 02:21:34 +0100 Subject: [PATCH 176/555] [pre-commit.ci] pre-commit autoupdate (#3075) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v3.3.0 → v3.3.1](https://github.com/asottile/pyupgrade/compare/v3.3.0...v3.3.1) - [github.com/psf/black: 22.10.0 → 22.12.0](https://github.com/psf/black/compare/22.10.0...22.12.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a351047f4d..05fa9a2186 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v3.3.0 + rev: v3.3.1 hooks: - id: pyupgrade name: Update code to new python versions @@ -35,7 +35,7 @@ repos: - id: python-check-blanket-noqa name: Precision flake ignores - repo: https://github.com/psf/black - rev: 22.10.0 + rev: 22.12.0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs From 7aed9900743c30c896da28d557a419045174b645 Mon Sep 17 00:00:00 2001 From: CaftBotti <111475301+CaftBotti@users.noreply.github.com> Date: Sun, 18 Dec 2022 09:29:25 +0800 Subject: [PATCH 177/555] Fix typo: "turn into into an np array" to "turn into a np array" (#3074) Co-authored-by: Tristan Schulz --- manim/mobject/graphing/number_line.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index aa56c9358a..bae4c89940 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -173,7 +173,7 @@ def __init__( "num_decimal_places": self._decimal_places_from_step(x_range[2]), } - # turn into into an np array to scale by just applying the function + # turn into a np array to scale by just applying the function self.x_range = np.array(x_range, dtype=float) self.x_min, self.x_max, self.x_step = scaling.function(self.x_range) self.length = length From 4b576e0f1de2eb4ad5130c16c323adcd9728e7fe Mon Sep 17 00:00:00 2001 From: CaftBotti <111475301+CaftBotti@users.noreply.github.com> Date: Sun, 18 Dec 2022 10:35:06 +0800 Subject: [PATCH 178/555] Fix typo: "Whetherer" to "Whether" (#3073) Co-authored-by: Tristan Schulz --- manim/mobject/graphing/scale.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/graphing/scale.py b/manim/mobject/graphing/scale.py index bee130ffd2..a0797f7e9c 100644 --- a/manim/mobject/graphing/scale.py +++ b/manim/mobject/graphing/scale.py @@ -124,7 +124,7 @@ def __init__(self, base: float = 10, custom_labels: bool = True): The base of the log, by default 10. custom_labels For use with :class:`~.Axes`: - Whetherer or not to include ``LaTeX`` axis labels, by default True. + Whether or not to include ``LaTeX`` axis labels, by default True. Examples -------- From 2afe74d13ac45fbcee6bec7bdaeb1fe242f462dd Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Wed, 21 Dec 2022 05:51:42 +0100 Subject: [PATCH 179/555] Updating ci syntax for runner version >=2.298.2 (#3079) * fix for runner version >=2.298.2 * fix for runner version >=2.298.2 * fix for runner version >=2.298.2 * fix for runner version >=2.298.2 * fix for runner version >=2.298.2 * fix for runner version >=2.298.2 * fix for runner version >=2.298.2 * fix for runner version >=2.298.2 * fix for runner version >=2.298.2 * fix for runner version >=2.298.2 * testing out texlive action * installing basic packages add missing * adding packages * remove tipa * remove amssymb * remove MOAR packages * add preview package * add more packages * add fontspec * cache pip installs for doctests in rst files * fix yaml issue * add cache depency path * CI: (test-arm) use python 3.8.16 and 3.11.1 * CI: upload coverage only on arm runners * CI: use cache from actions/setup-python previously we had our own method of caching, this simplifies... * Update .github/workflows/ci.yml * CI: install poetry first before setting up python Co-authored-by: Naveen M K --- .github/workflows/ci.yml | 51 ++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4bfb2a8ba6..0cac97815c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,8 +21,7 @@ jobs: strategy: fail-fast: false matrix: - # TODO: test on 3.8 and 3.11 - python: ['3.10.7'] + python: ["3.8.16", "3.11.1"] steps: - name: Checkout the repository uses: actions/checkout@v3 @@ -61,6 +60,9 @@ jobs: run: | cd docs && poetry run make doctest O=-tskip-manim + # upload coverage report + - name: Upload coverage + uses: codecov/codecov-action@v3 test: runs-on: ${{ matrix.os }} @@ -71,22 +73,23 @@ jobs: fail-fast: false matrix: os: [ubuntu-22.04, macos-latest, windows-latest] - python: ['3.8', '3.9', '3.10', '3.11'] + python: ["3.8", "3.9", "3.10", "3.11"] steps: - name: Checkout the repository uses: actions/checkout@v3 - - name: Setup Python ${{ matrix.python }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python }} - - name: Install Poetry run: | pipx install poetry poetry config virtualenvs.prefer-active-python true + - name: Setup Python ${{ matrix.python }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python }} + cache: "poetry" + - name: Setup macOS PATH if: runner.os == 'macOS' run: | @@ -96,14 +99,7 @@ jobs: shell: bash id: cache-vars run: | - echo "::set-output name=poetry-venv-dir::$(poetry config virtualenvs.path)" - echo "::set-output name=date::$(/bin/date -u "+%m%w%Y")" - - - name: Setup Poetry cache - uses: actions/cache@v3 - with: - path: ${{ steps.cache-vars.outputs.poetry-venv-dir }} - key: ${{ runner.os }}-poetry-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('poetry.lock') }}-1 + echo "date=$(/bin/date -u "+%m%w%Y")" >> $GITHUB_OUTPUT - name: Install and cache ffmpeg (all OS) uses: FedericoCarboni/setup-ffmpeg@v2 @@ -112,17 +108,29 @@ jobs: id: setup-ffmpeg - name: Install system dependencies (Linux) + if: runner.os == 'Linux' + uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: python3-opengl libpango1.0-dev xvfb + version: 1.0 + + - name: Install Texlive (Linux) + if: runner.os == 'Linux' + uses: teatimeguest/setup-texlive-action@v2 + with: + cache: true + packages: scheme-basic fontspec inputenc fontenc tipa mathrsfs calligra xcolor standalone preview doublestroke ms everysel setspace rsfs relsize ragged2e fundus-calligra microtype wasysym physics dvisvgm jknapltx wasy cm-super babel-english gnu-freefont mathastext cbfonts-fd + + - name: Start virtual display (Linux) if: runner.os == 'Linux' run: | - sudo apt update - sudo apt-get -y install texlive texlive-latex-extra texlive-fonts-extra texlive-latex-recommended texlive-science texlive-fonts-extra tipa python3-opengl libpango1.0-dev xvfb # start xvfb in background sudo /usr/bin/Xvfb $DISPLAY -screen 0 1280x1024x24 & - name: Setup macOS cache + uses: actions/cache@v3 id: cache-macos if: runner.os == 'macOS' - uses: actions/cache@v3 with: path: ${{ github.workspace }}/macos-cache key: ${{ runner.os }}-dependencies-tinytex-${{ hashFiles('.github/manimdependency.json') }}-${{ steps.cache-vars.outputs.date }}-1 @@ -207,7 +215,4 @@ jobs: - name: Run doctests in rst files run: | - cd docs && pip install -r requirements.txt && poetry run make doctest O=-tskip-manim - - - name: Upload coverage - uses: codecov/codecov-action@v3 + cd docs && poetry run make doctest O=-tskip-manim From c34a8fbd65052bf48c8a46cf939f0385078a4aed Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 22 Dec 2022 16:31:40 +0100 Subject: [PATCH 180/555] [pre-commit.ci] pre-commit autoupdate (#3081) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pycqa/isort: 5.10.1 → v5.11.3](https://github.com/pycqa/isort/compare/5.10.1...v5.11.3) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Naveen M K --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 05fa9a2186..1e6fd02d0c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,7 @@ repos: - id: check-toml name: Validate Poetry - repo: https://github.com/pycqa/isort - rev: 5.10.1 + rev: v5.11.3 hooks: - id: isort name: isort (python) From 48ff15a8d3d1fd00ce769a647f84a692071e169b Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Fri, 23 Dec 2022 06:52:30 +0100 Subject: [PATCH 181/555] Codeql (#3084) * Add CodeQL workflow for GitHub code scanning * fix codeql errors * ignore example scenes and tests Co-authored-by: LGTM Migrator Co-authored-by: Naveen M K --- .github/codeql.yml | 17 +++++++++ .github/workflows/codeql.yml | 42 +++++++++++++++++++++++ manim/mobject/graph.py | 6 ++-- manim/mobject/text/text_mobject.py | 2 +- manim/mobject/three_d/three_dimensions.py | 7 +++- 5 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 .github/codeql.yml create mode 100644 .github/workflows/codeql.yml diff --git a/.github/codeql.yml b/.github/codeql.yml new file mode 100644 index 0000000000..2f8e91edd0 --- /dev/null +++ b/.github/codeql.yml @@ -0,0 +1,17 @@ +query-filters: + - exclude: + id: py/init-calls-subclass + - exclude: + id: py/unexpected-raise-in-special-method + - exclude: + id: py/modification-of-locals + - exclude: + id: py/multiple-calls-to-init + - exclude: + id: py/missing-call-to-init + +paths: + - manim +paths-ignore: + - tests/ + - example_scenes/ diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000000..85d892800d --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,42 @@ +name: "CodeQL" + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + schedule: + - cron: "21 16 * * 3" + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ python ] + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + config-file: ./.github/codeql.yml + queries: +security-and-quality + + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{ matrix.language }}" diff --git a/manim/mobject/graph.py b/manim/mobject/graph.py index 011def2597..d6ce2756a9 100644 --- a/manim/mobject/graph.py +++ b/manim/mobject/graph.py @@ -627,13 +627,11 @@ def _create_vertex( f"Vertex identifier '{vertex}' is already used for a vertex in this graph.", ) - if isinstance(label, (Mobject, OpenGLMobject)): - label = label - elif label is True: + if label is True: label = MathTex(vertex, fill_color=label_fill_color) elif vertex in self._labels: label = self._labels[vertex] - else: + elif not isinstance(label, (Mobject, OpenGLMobject)): label = None base_vertex_config = copy(self.default_vertex_config) diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 803d7b4350..471e74c133 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -92,7 +92,7 @@ def remove_invisible_chars(mobject: SVGMobject) -> SVGMobject: :class:`~.SVGMobject` The SVGMobject without unwanted invisible characters. """ - + # TODO: Refactor needed iscode = False if mobject.__class__.__name__ == "Text": mobject = mobject[:] diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 6f53ca91d5..346e349742 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -124,12 +124,15 @@ def __init__( self.pre_function_handle_to_anchor_scale_factor = ( pre_function_handle_to_anchor_scale_factor ) - self.func = func + self._func = func self._setup_in_uv_space() self.apply_function(lambda p: func(p[0], p[1])) if self.should_make_jagged: self.make_jagged() + def func(self, u: float, v: float): + return self._func(u, v) + def _get_u_values_and_v_values(self): res = tuplify(self.resolution) if len(res) == 1: @@ -371,6 +374,8 @@ def __init__( res_value = (101, 51) elif config.renderer == RendererType.CAIRO: res_value = (24, 12) + else: + raise Exception("Unknown renderer") resolution = resolution if resolution is not None else res_value From d3b96dd68c12bef84ba5ac7b3f9d83ed58bdc0e3 Mon Sep 17 00:00:00 2001 From: "lgtm-com[bot]" <43144390+lgtm-com[bot]@users.noreply.github.com> Date: Fri, 23 Dec 2022 14:11:21 +0100 Subject: [PATCH 182/555] Add CodeQL workflow for GitHub code scanning (#3024) Co-authored-by: LGTM Migrator Co-authored-by: Tristan Schulz --- .github/codeql.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/codeql.yml b/.github/codeql.yml index 2f8e91edd0..be207a077c 100644 --- a/.github/codeql.yml +++ b/.github/codeql.yml @@ -9,7 +9,6 @@ query-filters: id: py/multiple-calls-to-init - exclude: id: py/missing-call-to-init - paths: - manim paths-ignore: From 7d7c5055d4e2d4ad30ffa37fc1f8f6a725530f76 Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Mon, 26 Dec 2022 01:47:17 +0100 Subject: [PATCH 183/555] Fixed opengl Surface with reordering initialization process (#3089) * Fixed opengl Surface with disabling refresh of shader wrapper id in constructor * Reordered Elements in constructor of opengl_vectorized_mobject to fix initialization dependency issues --- manim/mobject/opengl/opengl_mobject.py | 5 ++++- manim/mobject/opengl/opengl_surface.py | 3 ++- manim/mobject/opengl/opengl_vectorized_mobject.py | 12 ++++++------ tests/opengl/test_opengl_surface.py | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 tests/opengl/test_opengl_surface.py diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 864326497e..69a472f444 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -2627,12 +2627,15 @@ def set_color_by_xyz_func( # For shader data def refresh_shader_wrapper_id(self): - self.shader_wrapper.refresh_id() + self.get_shader_wrapper().refresh_id() return self def get_shader_wrapper(self): from manim.renderer.shader_wrapper import ShaderWrapper + # if hasattr(self, "__shader_wrapper"): + # return self.__shader_wrapper + self.shader_wrapper = ShaderWrapper( vert_data=self.get_shader_data(), vert_indices=self.get_shader_vert_indices(), diff --git a/manim/mobject/opengl/opengl_surface.py b/manim/mobject/opengl/opengl_surface.py index 30641ca2f1..64cbd43f5b 100644 --- a/manim/mobject/opengl/opengl_surface.py +++ b/manim/mobject/opengl/opengl_surface.py @@ -98,6 +98,7 @@ def __init__( # can crop up in the shaders. self.epsilon = epsilon + self.triangle_indices = None super().__init__( color=color, opacity=opacity, @@ -127,7 +128,7 @@ def init_points(self): # - Those generated by values nudged by du # - Those generated by values nudged by dv point_lists = [] - for (du, dv) in [(0, 0), (self.epsilon, 0), (0, self.epsilon)]: + for du, dv in [(0, 0), (self.epsilon, 0), (0, self.epsilon)]: uv_grid = np.array([[[u + du, v + dv] for v in v_range] for u in u_range]) point_grid = np.apply_along_axis(lambda p: self.uv_func(*p), 2, uv_grid) point_lists.append(point_grid.reshape((nu * nv, dim))) diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 2c12462b0a..8dc174e12d 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -137,6 +137,12 @@ def __init__( self.needs_new_triangulation = True self.triangulation = np.zeros(0, dtype="i4") self.orientation = 1 + self.fill_data = None + self.stroke_data = None + self.fill_shader_wrapper = None + self.stroke_shader_wrapper = None + self.init_shader_data() + super().__init__(**kwargs) self.refresh_unit_normal() @@ -145,12 +151,6 @@ def __init__( if stroke_color: self.stroke_color = Color(stroke_color) - self.fill_data = None - self.stroke_data = None - self.fill_shader_wrapper = None - self.stroke_shader_wrapper = None - self.init_shader_data() - def get_group_class(self): return OpenGLVGroup diff --git a/tests/opengl/test_opengl_surface.py b/tests/opengl/test_opengl_surface.py new file mode 100644 index 0000000000..d6897691d4 --- /dev/null +++ b/tests/opengl/test_opengl_surface.py @@ -0,0 +1,14 @@ +import numpy as np + +from manim.mobject.opengl.opengl_surface import OpenGLSurface +from manim.mobject.opengl.opengl_three_dimensions import OpenGLSurfaceMesh + + +def test_surface_initialization(using_opengl_renderer): + surface = OpenGLSurface( + lambda u, v: (u, v, u * np.sin(v) + v * np.cos(u)), + u_range=(-3, 3), + v_range=(-3, 3), + ) + + mesh = OpenGLSurfaceMesh(surface) From c4b40ed138c4b895ce433e68f719f628e823e293 Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Mon, 26 Dec 2022 10:07:58 +0100 Subject: [PATCH 184/555] Prepared new Hotfix Release: `v0.17.2` (#3090) * bump version number * generated changelog for v0.17.2 * either "a NumPy array" or "an np array", based on how "n" is pronounced * minor language improvements * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CITATION.cff | 4 +- docs/source/changelog.rst | 1 + docs/source/changelog/0.17.2-changelog.rst | 61 ++++++++++++++++++++++ manim/mobject/graphing/number_line.py | 2 +- pyproject.toml | 2 +- 5 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 docs/source/changelog/0.17.2-changelog.rst diff --git a/CITATION.cff b/CITATION.cff index 2955290b6a..d449bb13f5 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -4,10 +4,10 @@ authors: - name: "The Manim Community Developers" cff-version: "1.2.0" -date-released: 2022-12-08 +date-released: 2022-12-26 license: MIT message: "We acknowledge the importance of good software to support research, and we note that research becomes more valuable when it is communicated effectively. To demonstrate the value of Manim, we ask that you cite Manim in your work." title: Manim – Mathematical Animation Framework url: "https://www.manim.community/" -version: "v0.17.1" +version: "v0.17.2" ... diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index 97f58135b2..c98396caef 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -5,6 +5,7 @@ Changelog .. toctree:: + changelog/0.17.2-changelog changelog/0.17.1-changelog changelog/0.17.0-changelog changelog/0.16.0-changelog diff --git a/docs/source/changelog/0.17.2-changelog.rst b/docs/source/changelog/0.17.2-changelog.rst new file mode 100644 index 0000000000..633f6cb46e --- /dev/null +++ b/docs/source/changelog/0.17.2-changelog.rst @@ -0,0 +1,61 @@ +******* +v0.17.2 +******* + +:Date: December 26, 2022 + +Contributors +============ + +A total of 5 people contributed to this +release. People with a '+' by their names authored a patch for the first +time. + +* CaftBotti + +* Tristan Schulz +* lgtm-com[bot] + + + +The patches included in this release have been reviewed by +the following contributors. + +* Benjamin Hackl +* Naveen M K +* Tristan Schulz + +Pull requests merged +==================== + +A total of 7 pull requests were merged for this release. + +Fixed bugs +---------- + +* :pr:`3089`: Fixed OpenGL mobjects like :class:`.Surface` by reordering init calls + + +Documentation-related changes +----------------------------- + +* :pr:`3073`: Fixed typo: "Whetherer" to "Whether" + + +* :pr:`3074`: Fixed typo in a comment + + +Code quality improvements and similar refactors +----------------------------------------------- + +* :pr:`3024`: Add CodeQL workflow for GitHub code scanning + + +* :pr:`3079`: Updated CI syntax for runner version >= 2.298.2 + + +* :pr:`3084`: Properly setup CodeQL + + +New releases +------------ + +* :pr:`3090`: Prepared new Hotfix Release: ``v0.17.2`` diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index bae4c89940..db7a1afd89 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -173,7 +173,7 @@ def __init__( "num_decimal_places": self._decimal_places_from_step(x_range[2]), } - # turn into a np array to scale by just applying the function + # turn into a NumPy array to scale by just applying the function self.x_range = np.array(x_range, dtype=float) self.x_min, self.x_max, self.x_step = scaling.function(self.x_range) self.length = length diff --git a/pyproject.toml b/pyproject.toml index c327c8f061..d8e4491d87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "manim" -version = "0.17.1" +version = "0.17.2" description = "Animation engine for explanatory math videos." authors = ["The Manim Community Developers ", "3b1b "] license="MIT" From 96e46ee582f0d03ba411c8e853089df22a521890 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Dec 2022 11:11:12 +0100 Subject: [PATCH 185/555] [pre-commit.ci] pre-commit autoupdate (#3093) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pycqa/isort: v5.11.3 → 5.11.4](https://github.com/pycqa/isort/compare/v5.11.3...5.11.4) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1e6fd02d0c..a985aa0c4d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,7 @@ repos: - id: check-toml name: Validate Poetry - repo: https://github.com/pycqa/isort - rev: v5.11.3 + rev: 5.11.4 hooks: - id: isort name: isort (python) From e87a73cca9ac50ac3e5a9bc4141eb96d54fa0e69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Manr=C3=ADquez=20Novoa?= <49853152+chopan050@users.noreply.github.com> Date: Tue, 27 Dec 2022 07:13:24 -0300 Subject: [PATCH 186/555] perf: improve Mobject.add by checking for redundancy only once (#3092) --- manim/mobject/mobject.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index dddf3c5639..7b6515068c 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -430,13 +430,15 @@ def add(self, *mobjects: Mobject): raise TypeError("All submobjects must be of type Mobject") if m is self: raise ValueError("Mobject cannot contain self") - if any(mobjects.count(elem) > 1 for elem in mobjects): - logger.warning( - "Attempted adding some Mobject as a child more than once, " - "this is not possible. Repetitions are ignored.", - ) - mobjects = remove_list_redundancies(mobjects) - self.submobjects = list_update(self.submobjects, mobjects) + + unique_mobjects = remove_list_redundancies(mobjects) + if len(mobjects) != len(unique_mobjects): + logger.warning( + "Attempted adding some Mobject as a child more than once, " + "this is not possible. Repetitions are ignored.", + ) + + self.submobjects = list_update(self.submobjects, unique_mobjects) return self def insert(self, index: int, mobject: Mobject): From 3a09c07b7e9c77f28a66a15796436cf812190dfe Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Tue, 27 Dec 2022 11:17:36 +0100 Subject: [PATCH 187/555] Minor performance improvement in bezier.py with preallocating array. (#3083) * added some njit * clear points refactored * removing numba again because no speedup present * adding constraint back again for size in interpolate in opengl_mobject * removed numba import * removed logger import in bezier * maybe let's undo that for a second --- manim/mobject/opengl/opengl_mobject.py | 2 +- manim/utils/bezier.py | 18 +- poetry.lock | 4207 ++++++++++++------------ 3 files changed, 2102 insertions(+), 2125 deletions(-) diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 69a472f444..25159ab23c 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -583,7 +583,7 @@ def construct(self): self.set_points(mobject.points) def clear_points(self): - self.resize_points(0) + self.points = np.empty((0, 3)) def get_num_points(self): return len(self.points) diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index 79d93f764b..ce5fff437f 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -101,6 +101,7 @@ def partial_bezier_points(points: np.ndarray, a: float, b: float) -> np.ndarray: # Shortened version of partial_bezier_points just for quadratics, # since this is called a fair amount def partial_quadratic_bezier_points(points, a, b): + points = np.asarray(points, dtype=np.float64) if a == 1: return 3 * [points[-1]] @@ -120,7 +121,7 @@ def curve(t): return [h0, h1, h2] -def split_quadratic_bezier(points: Iterable[float], t: float) -> np.ndarray: +def split_quadratic_bezier(points: np.ndarray, t: float) -> np.ndarray: """Split a quadratic Bézier curve at argument ``t`` into two quadratic curves. Parameters @@ -166,13 +167,14 @@ def subdivide_quadratic_bezier(points: Iterable[float], n: int) -> np.ndarray: .. image:: /_static/bezier_subdivision_example.png """ - beziers = [] + beziers = np.empty((n, 3, 3)) current = points - for i in range(n, 0, -1): + for j in range(0, n): + i = n - j tmp = split_quadratic_bezier(current, 1 / i) - beziers.append(tmp[:3]) + beziers[j] = tmp[:3] current = tmp[3:] - return np.asarray(beziers).reshape(-1, 3) + return beziers.reshape(-1, 3) def quadratic_bezier_remap( @@ -183,7 +185,7 @@ def quadratic_bezier_remap( Parameters ---------- triplets - The triplets of the quadratic bezier curves to be remapped + The triplets of the quadratic bezier curves to be remapped shape(n, 3, 3) new_number_of_curves The number of curves that the output will contain. This needs to be higher than the current number. @@ -232,9 +234,7 @@ def quadratic_bezier_remap( # Linear interpolation variants - - -def interpolate(start: int, end: int, alpha: float) -> float: +def interpolate(start: np.ndarray, end: np.ndarray, alpha: float) -> np.ndarray: return (1 - alpha) * start + alpha * end diff --git a/poetry.lock b/poetry.lock index bb771a861e..37cdd234fa 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 = "*" @@ -118,12 +175,16 @@ description = "Classes Without Boilerplate" category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, + {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, +] [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"] +tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] [[package]] name = "Babel" @@ -132,6 +193,10 @@ 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 +208,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 +220,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" @@ -166,6 +239,29 @@ description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {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"}, +] [package.dependencies] click = ">=8.0.0" @@ -188,6 +284,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 +304,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 +316,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 +393,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 +405,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 +420,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 +435,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 +449,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 +465,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 +477,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 +492,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 +510,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 +525,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" @@ -338,20 +614,76 @@ description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] +files = [ + {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"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] name = "cycler" version = "0.11.0" 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" @@ -360,6 +692,48 @@ description = "The Cython compiler for writing C extensions for the Python langu category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +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" @@ -368,6 +742,10 @@ 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"] @@ -379,6 +757,26 @@ 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" @@ -387,6 +785,26 @@ 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 +813,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,6 +825,10 @@ 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" @@ -411,6 +837,10 @@ description = "Python @deprecated decorator to deprecate old python classes, fun 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 +855,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 +870,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 +882,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,6 +894,10 @@ 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" @@ -460,6 +906,10 @@ description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.0.4-py3-none-any.whl", hash = "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828"}, + {file = "exceptiongroup-1.0.4.tar.gz", hash = "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec"}, +] [package.extras] test = ["pytest (>=6)"] @@ -471,6 +921,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 +936,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 +951,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 +966,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 +982,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 +999,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 +1018,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 +1036,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 +1051,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 +1067,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 +1079,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 +1094,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 +1111,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 +1127,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 +1153,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 +1165,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,6 +1183,10 @@ 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" @@ -680,6 +1198,10 @@ description = "GitPython is a python library used to interact with Git repositor 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,41 +1213,109 @@ description = "Portable OpenGL Context" category = "main" optional = false python-versions = "*" - -[[package]] -name = "identify" -version = "2.5.9" -description = "File identification library for Python" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -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.*" - -[[package]] -name = "importlib-metadata" -version = "5.1.0" -description = "Read metadata from Python packages" -category = "main" -optional = false +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" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "identify-2.5.9-py2.py3-none-any.whl", hash = "sha256:a390fb696e164dbddb047a0db26e57972ae52fbd037ae68797e5ae2f4492485d"}, + {file = "identify-2.5.9.tar.gz", hash = "sha256:906036344ca769539610436e40a684e170c3648b552194980bb7b617a8daeb9f"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.4" +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" +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 = [ + {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" +description = "Read metadata from Python packages" +category = "main" +optional = false python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-5.1.0-py3-none-any.whl", hash = "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"}, + {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"}, +] [package.dependencies] zipp = ">=0.5" @@ -742,6 +1332,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,6 +1351,10 @@ 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" @@ -765,6 +1363,10 @@ description = "IPython Kernel for Jupyter" category = "main" optional = true python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.19.1-py3-none-any.whl", hash = "sha256:8b358a5aaa77c7e4b6cec22b03a910ab6c2968a449dced12082b6a6c56404083"}, + {file = "ipykernel-6.19.1.tar.gz", hash = "sha256:d472029d14408273265a7b0ec6d1923f1b1f51d8643f125c6a6881e5e6e56a39"}, +] [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} @@ -794,6 +1396,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,7 +1426,7 @@ 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" @@ -829,6 +1435,10 @@ 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,6 +1447,10 @@ 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" @@ -848,12 +1462,16 @@ description = "A Python utility / library to sort Python imports." category = "dev" optional = false python-versions = ">=3.6.1,<4.0" +files = [ + {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, + {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, +] [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 +1480,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 +1495,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" @@ -889,6 +1515,10 @@ 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 +1533,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 +1548,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 +1560,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 +1590,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 = "*" @@ -969,6 +1615,10 @@ description = "Jupyter core package. A base package on which Jupyter projects re category = "main" optional = true python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.1.0-py3-none-any.whl", hash = "sha256:f5740d99606958544396914b08e67b668f45e7eff99ab47a7f4bcead419c02f4"}, + {file = "jupyter_core-5.1.0.tar.gz", hash = "sha256:a5ae7c09c55c0b26f692ec69323ba2b62e8d7295354d20f6cd57b749de4a05bf"}, +] [package.dependencies] platformdirs = ">=2.5" @@ -986,6 +1636,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"]} @@ -1004,6 +1658,10 @@ description = "The backend—i.e. core services, APIs, and REST endpoints—to J category = "main" optional = true python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.0.1-py3-none-any.whl", hash = "sha256:3bc09974a5290249de6924a614933e6f4f3d6d11f3061423a9f4e0271064a8b3"}, + {file = "jupyter_server-2.0.1.tar.gz", hash = "sha256:6e71268380ad7e4f2d9dda2f3e51a4fd4d1997b5390d5acdb74c7a195cfe4c00"}, +] [package.dependencies] anyio = ">=3.1.0,<4" @@ -1038,6 +1696,10 @@ description = "A Jupyter Server Extension Providing Terminals." category = "main" optional = true python-versions = ">=3.8" +files = [ + {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"}, +] [package.dependencies] pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} @@ -1054,6 +1716,10 @@ description = "JupyterLab computational environment" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "jupyterlab-3.5.1-py3-none-any.whl", hash = "sha256:c6748b4f21850c0095ed2187ce86d7e06edd9d1180cc4e6a572c4013163c0c74"}, + {file = "jupyterlab-3.5.1.tar.gz", hash = "sha256:59a1b2d79d4b3ebee4d997c8bed8cf450f460c7c35f46b613a93f0b7712b47fc"}, +] [package.dependencies] ipython = "*" @@ -1078,6 +1744,10 @@ 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" @@ -1086,6 +1756,10 @@ description = "A set of server components for JupyterLab and JupyterLab like app category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "jupyterlab_server-2.16.3-py3-none-any.whl", hash = "sha256:d18eb623428b4ee732c2258afaa365eedd70f38b609981ea040027914df32bc6"}, + {file = "jupyterlab_server-2.16.3.tar.gz", hash = "sha256:635a0b176a901f19351c02221a124e59317c476f511200409b7d867e8b2905c3"}, +] [package.dependencies] babel = "*" @@ -1109,6 +1783,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,6 +1861,27 @@ 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" @@ -1125,14 +1890,93 @@ description = "Bindings for Pango for using with Manim." category = "main" optional = false python-versions = ">=3.7" - -[[package]] -name = "mapbox-earcut" -version = "1.0.1" -description = "Python bindings for the mapbox earcut C++ polygon triangulation library." -category = "main" -optional = false +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" +version = "1.0.1" +description = "Python bindings for the mapbox earcut C++ polygon triangulation library." +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 +1991,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"] @@ -1168,6 +2016,48 @@ 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 +2066,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 +2120,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 +2128,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 +2143,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 +2155,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 +2175,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,6 +2187,10 @@ 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" @@ -1247,6 +2199,58 @@ description = "ModernGL: High performance rendering for Python 3" category = "main" optional = false python-versions = "*" +files = [ + {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"}, +] [package.dependencies] glcontext = ">=2.3.6,<3" @@ -1258,6 +2262,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,6 +2290,11 @@ 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 = "*" @@ -1294,23 +2306,49 @@ description = "Optional static typing for Python" category = "dev" optional = false python-versions = ">=3.6" - -[package.dependencies] -mypy-extensions = ">=0.4.3" -tomli = ">=1.1.0" -typing-extensions = ">=3.10" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -python2 = ["typed-ast (>=1.4.0,<2)"] - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." +files = [ + {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"}, +] + +[package.dependencies] +mypy-extensions = ">=0.4.3" +tomli = ">=1.1.0" +typing-extensions = ">=3.10" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +python2 = ["typed-ast (>=1.4.0,<2)"] + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." category = "dev" optional = false python-versions = "*" +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 +2357,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 +2372,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 +2384,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 +2420,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" @@ -1393,6 +2443,10 @@ description = "Converting Jupyter Notebooks" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "nbconvert-7.2.6-py3-none-any.whl", hash = "sha256:f933e82fe48b9a421e4252249f6c0a9a9940dc555642b4729f3f1f526bb16779"}, + {file = "nbconvert-7.2.6.tar.gz", hash = "sha256:c9c0e4b26326f7658ebf4cda0acc591b9727c4e3ee3ede962f70c11833b71b40"}, +] [package.dependencies] beautifulsoup4 = "*" @@ -1428,6 +2482,10 @@ description = "The Jupyter Notebook format" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "nbformat-5.7.0-py3-none-any.whl", hash = "sha256:1b05ec2c552c2f1adc745f4eddce1eac8ca9ffd59bb9fd859e827eaa031319f9"}, + {file = "nbformat-5.7.0.tar.gz", hash = "sha256:1d4760c15c1a04269ef5caf375be8b98dd2f696e5eb9e603ec2bf091f9b0d3f3"}, +] [package.dependencies] fastjsonschema = "*" @@ -1445,6 +2503,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 +2515,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 +2534,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 +2549,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 +2584,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" @@ -1524,6 +2602,36 @@ description = "NumPy is the fundamental package for array computing with Python. category = "main" optional = false python-versions = ">=3.8" +files = [ + {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"}, +] [[package]] name = "packaging" @@ -1532,6 +2640,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 +2652,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 +2664,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)"] @@ -1560,6 +2680,10 @@ description = "Utility library for gitignore style pattern matching of file path category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, + {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, +] [[package]] name = "pexpect" @@ -1568,6 +2692,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,6 +2707,10 @@ 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" @@ -1587,6 +2719,69 @@ 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"] @@ -1599,6 +2794,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 +2806,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 +2822,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 +2838,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 +2858,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 +2873,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 +2888,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 +2915,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 +2941,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 +2953,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 +2968,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 +2980,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 +3001,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 +3013,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 +3025,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,14 +3043,22 @@ description = "Manipulate audio with an simple and easy high level interface" category = "main" optional = false python-versions = "*" - -[[package]] +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" 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 = [ + {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" @@ -1772,6 +3067,10 @@ 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 = "*" @@ -1789,6 +3088,10 @@ description = "Cross-platform windowing and multimedia library" category = "main" optional = false python-versions = "*" +files = [ + {file = "pyglet-2.0.1-py3-none-any.whl", hash = "sha256:6c0c0fe95fbc3b26c2f008e83bcc3dcbda1609dca6da7c3954bc4d1b529f2303"}, + {file = "pyglet-2.0.1.zip", hash = "sha256:ec36eba0c769bac25c5347acf14f8a7ac8f64fe469458a0a998ed1d507975e47"}, +] [[package]] name = "Pygments" @@ -1797,6 +3100,10 @@ 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"] @@ -1808,6 +3115,10 @@ 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)"] @@ -1822,6 +3133,10 @@ description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" +files = [ + {file = "pylint-2.15.8-py3-none-any.whl", hash = "sha256:ea82cd6a1e11062dc86d555d07c021b0fb65afe39becbe6fe692efd6c4a67443"}, + {file = "pylint-2.15.8.tar.gz", hash = "sha256:ec4a87c33da054ab86a6c79afa6771dc8765cb5631620053e727fcf3ef8cbed7"}, +] [package.dependencies] astroid = ">=2.12.13,<=2.14.0-dev0" @@ -1845,12 +3160,24 @@ 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]] @@ -1860,6 +3187,15 @@ description = "Python<->ObjC Interoperability Module" category = "main" optional = false python-versions = ">=3.7" +files = [ + {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"}, +] [[package]] name = "pyobjc-framework-Cocoa" @@ -1868,6 +3204,15 @@ description = "Wrappers for the Cocoa frameworks on macOS" category = "main" optional = false python-versions = ">=3.7" +files = [ + {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"}, +] [package.dependencies] pyobjc-core = ">=9.0" @@ -1879,6 +3224,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 +3239,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 +3255,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 +3287,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 +3311,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 +3330,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 +3346,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 +3368,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,6 +3383,10 @@ 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" @@ -1994,6 +3395,10 @@ description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" +files = [ + {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, + {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, +] [[package]] name = "pywin32" @@ -2002,6 +3407,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,6 +3431,14 @@ 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" @@ -2018,6 +3447,48 @@ 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 +3497,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 +3585,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 +3602,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 +3615,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 +3624,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 +3638,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 +3653,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 +3665,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,7 +3685,30 @@ description = "Fundamental algorithms for scientific computing in Python" category = "main" optional = false python-versions = ">=3.8" - +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" @@ -2131,6 +3724,10 @@ 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\""} @@ -2143,6 +3740,10 @@ 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 +3757,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 +3774,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 +3786,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 +3842,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 +3854,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 +3866,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,6 +3878,10 @@ 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" @@ -2238,6 +3890,10 @@ 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 +3926,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 +3944,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 +3963,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 +3979,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 +3995,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 +4011,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 +4026,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 +4041,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 +4057,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 +4073,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 +4088,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 +4099,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" @@ -2416,6 +4119,10 @@ description = "Svg Elements Parsing" category = "main" optional = false python-versions = "*" +files = [ + {file = "svgelements-1.8.4-py2.py3-none-any.whl", hash = "sha256:dc43ef603c650a2bf6380910bb9a28968e2474eb229295b9a36443f825c3a4f4"}, + {file = "svgelements-1.8.4.tar.gz", hash = "sha256:af0fa36d8d239c4df205e110cf531256359c6c4c93aa3cd13ae9599912f1335d"}, +] [[package]] name = "terminado" @@ -2424,6 +4131,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 +4152,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" @@ -2450,2013 +4165,49 @@ doc = ["sphinx", "sphinx_rtd_theme"] test = ["flake8", "isort", "pytest"] [[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "tomlkit" -version = "0.11.6" -description = "Style preserving TOML library" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "tornado" -version = "6.2" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "main" -optional = true -python-versions = ">= 3.7" - -[[package]] -name = "tqdm" -version = "4.64.1" -description = "Fast, Extensible Progress Meter" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "traitlets" -version = "5.6.0" -description = "Traitlets Python configuration system" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest"] - -[[package]] -name = "types-decorator" -version = "0.1.7" -description = "Typing stubs for decorator" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-docutils" -version = "0.19.1.1" -description = "Typing stubs for docutils" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-Pillow" -version = "8.3.11" -description = "Typing stubs for Pillow" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-protobuf" -version = "3.20.4.6" -description = "Typing stubs for protobuf" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-Pygments" -version = "2.13.1.1" -description = "Typing stubs for Pygments" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -types-docutils = "*" -types-setuptools = "*" - -[[package]] -name = "types-requests" -version = "2.28.11.5" -description = "Typing stubs for requests" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -types-urllib3 = "<1.27" - -[[package]] -name = "types-setuptools" -version = "57.4.18" -description = "Typing stubs for setuptools" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-urllib3" -version = "1.26.25.4" -description = "Typing stubs for urllib3" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "typing-extensions" -version = "4.4.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "uri-template" -version = "1.2.0" -description = "RFC 6570 URI Template Processor" -category = "main" -optional = true -python-versions = ">=3.6" - -[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"] - -[[package]] -name = "urllib3" -version = "1.26.13" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "virtualenv" -version = "20.17.1" -description = "Virtual Python Environment builder" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.4.1,<4" -platformdirs = ">=2.4,<3" - -[package.extras] -docs = ["proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-argparse (>=0.3.2)", "sphinx-rtd-theme (>=1)", "towncrier (>=22.8)"] -testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "watchdog" -version = "2.2.0" -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 = [ +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] -tomli = [ + +[[package]] +name = "tomli" +version = "2.0.1" +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"}, ] -tomlkit = [ + +[[package]] +name = "tomlkit" +version = "0.11.6" +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"}, ] -tornado = [ + +[[package]] +name = "tornado" +version = "6.2" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +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"}, @@ -4469,63 +4220,220 @@ tornado = [ {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, ] -tqdm = [ + +[[package]] +name = "tqdm" +version = "4.64.1" +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"}, ] -traitlets = [ + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "traitlets" +version = "5.6.0" +description = "Traitlets Python configuration system" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ {file = "traitlets-5.6.0-py3-none-any.whl", hash = "sha256:1410755385d778aed847d68deb99b3ba30fbbf489e17a1e8cbb753060d5cce73"}, {file = "traitlets-5.6.0.tar.gz", hash = "sha256:10b6ed1c9cedee83e795db70a8b9c2db157bb3778ec4587a349ecb7ef3b1033b"}, ] -types-decorator = [ + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest"] + +[[package]] +name = "types-decorator" +version = "0.1.7" +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"}, ] -types-docutils = [ + +[[package]] +name = "types-docutils" +version = "0.19.1.1" +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"}, ] -types-Pillow = [ + +[[package]] +name = "types-Pillow" +version = "8.3.11" +description = "Typing stubs for Pillow" +category = "dev" +optional = false +python-versions = "*" +files = [ {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 = [ + +[[package]] +name = "types-protobuf" +version = "3.20.4.6" +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"}, ] -types-Pygments = [ + +[[package]] +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"}, ] -types-requests = [ + +[package.dependencies] +types-docutils = "*" +types-setuptools = "*" + +[[package]] +name = "types-requests" +version = "2.28.11.5" +description = "Typing stubs for requests" +category = "dev" +optional = false +python-versions = "*" +files = [ {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 = [ + +[package.dependencies] +types-urllib3 = "<1.27" + +[[package]] +name = "types-setuptools" +version = "57.4.18" +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"}, ] -types-urllib3 = [ + +[[package]] +name = "types-urllib3" +version = "1.26.25.4" +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"}, ] -typing-extensions = [ + +[[package]] +name = "typing-extensions" +version = "4.4.0" +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"}, ] -uri-template = [ + +[[package]] +name = "uri-template" +version = "1.2.0" +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"}, ] -urllib3 = [ + +[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"] + +[[package]] +name = "urllib3" +version = "1.26.13" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=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"}, ] -virtualenv = [ + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "virtualenv" +version = "20.17.1" +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"}, ] -watchdog = [ + +[package.dependencies] +distlib = ">=0.3.6,<1" +filelock = ">=3.4.1,<4" +platformdirs = ">=2.4,<3" + +[package.extras] +docs = ["proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-argparse (>=0.3.2)", "sphinx-rtd-theme (>=1)", "towncrier (>=22.8)"] +testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "watchdog" +version = "2.2.0" +description = "Filesystem events monitoring" +category = "main" +optional = false +python-versions = ">=3.6" +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 +4463,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 +4593,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 = "9df7ccd72cfd7f4a98b9a39546c11e4302f0390eecedd60882a8f4cdb7ffb22b" From bd04ba4c6a8192f7a6dff5b3945a53dd0920b013 Mon Sep 17 00:00:00 2001 From: Alex Lembcke Date: Tue, 27 Dec 2022 09:17:05 -0500 Subject: [PATCH 188/555] Fixed ``get_axis_labels`` for :class:`.Axes` and :class:`.ThreeDAxes` (#3095) * Fix ~.get_axis_labels() for ThreeDAxes * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl Co-authored-by: Benjamin Hackl --- manim/mobject/graphing/coordinate_systems.py | 205 ++++++++++++++----- 1 file changed, 156 insertions(+), 49 deletions(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 703d879d7c..03f96b838f 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -364,52 +364,8 @@ def _get_axis_label( label.shift_onto_screen(buff=MED_SMALL_BUFF) return label - def get_axis_labels( - self, - x_label: float | str | Mobject = "x", - y_label: float | str | Mobject = "y", - ) -> VGroup: - """Defines labels for the x_axis and y_axis of the graph. - - For increased control over the position of the labels, - use :meth:`get_x_axis_label` and :meth:`get_y_axis_label`. - - Parameters - ---------- - x_label - The label for the x_axis. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs. - y_label - The label for the y_axis. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs. - - Returns - ------- - :class:`~.VGroup` - A :class:`~.Vgroup` of the labels for the x_axis and y_axis. - - - .. seealso:: - :class:`get_x_axis_label` - :class:`get_y_axis_label` - - Examples - -------- - .. manim:: GetAxisLabelsExample - :save_last_frame: - - class GetAxisLabelsExample(Scene): - def construct(self): - ax = Axes() - labels = ax.get_axis_labels( - Tex("x-axis").scale(0.7), Text("y-axis").scale(0.45) - ) - self.add(ax, labels) - """ - - self.axis_labels = VGroup( - self.get_x_axis_label(x_label), - self.get_y_axis_label(y_label), - ) - return self.axis_labels + def get_axis_labels(self): + raise NotImplementedError() def add_coordinates( self, @@ -2124,6 +2080,53 @@ def get_axes(self) -> VGroup: """ return self.axes + def get_axis_labels( + self, + x_label: float | str | Mobject = "x", + y_label: float | str | Mobject = "y", + ) -> VGroup: + """Defines labels for the x_axis and y_axis of the graph. + + For increased control over the position of the labels, + use :meth:`get_x_axis_label` and :meth:`get_y_axis_label`. + + Parameters + ---------- + x_label + The label for the x_axis. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs. + y_label + The label for the y_axis. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs. + + Returns + ------- + :class:`~.VGroup` + A :class:`~.VGroup` of the labels for the x_axis and y_axis. + + + .. seealso:: + :meth:`.get_x_axis_label` + :meth:`.get_y_axis_label` + + Examples + -------- + .. manim:: GetAxisLabelsExample + :save_last_frame: + + class GetAxisLabelsExample(Scene): + def construct(self): + ax = Axes() + labels = ax.get_axis_labels( + Tex("x-axis").scale(0.7), Text("y-axis").scale(0.45) + ) + self.add(ax, labels) + """ + + self.axis_labels = VGroup( + self.get_x_axis_label(x_label), + self.get_y_axis_label(y_label), + ) + return self.axis_labels + def plot_line_graph( self, x_values: Iterable[float], @@ -2361,6 +2364,57 @@ def make_func(axis): submob.get_unit_normal = lambda a: np.ones(3) submob.set_sheen(0.2) + def get_y_axis_label( + self, + label: float | str | Mobject, + edge: Sequence[float] = UR, + direction: Sequence[float] = UR, + buff: float = SMALL_BUFF, + rotation=PI / 2, + rotation_axis=OUT, + **kwargs, + ) -> Mobject: + """Generate a y-axis label. + + Parameters + ---------- + label + The label. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs. + edge + The edge of the y-axis to which the label will be added, by default ``UR``. + direction + Allows for further positioning of the label from an edge, by default ``UR``. + buff + The distance of the label from the line, by default ``SMALL_BUFF``. + rotation + The angle at which to rotate the label, by default ``PI/2``. + rotation_axis + The axis about which to rotate the label, by default ``OUT``. + + Returns + ------- + :class:`~.Mobject` + The positioned label. + + Examples + -------- + .. manim:: GetYAxisLabelExample + :save_last_frame: + + class GetYAxisLabelExample(ThreeDScene): + def construct(self): + ax = ThreeDAxes() + lab = ax.get_y_axis_label(Tex("$y$-label")) + self.set_camera_orientation(phi=2*PI/5, theta=PI/5) + self.add(ax, lab) + """ + + positioned_label = self._get_axis_label( + label, self.get_y_axis(), edge, direction, buff=buff, **kwargs + ) + positioned_label.rotate(rotation, axis=rotation_axis) + return positioned_label + def get_z_axis_label( self, label: float | str | Mobject, @@ -2378,11 +2432,11 @@ def get_z_axis_label( label The label. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs. edge - The edge of the x-axis to which the label will be added, by default ``UR``. + The edge of the z-axis to which the label will be added, by default ``OUT``. direction - Allows for further positioning of the label from an edge, by default ``UR``. + Allows for further positioning of the label from an edge, by default ``RIGHT``. buff - The distance of the label from the line. + The distance of the label from the line, by default ``SMALL_BUFF``. rotation The angle at which to rotate the label, by default ``PI/2``. rotation_axis @@ -2412,6 +2466,59 @@ def construct(self): positioned_label.rotate(rotation, axis=rotation_axis) return positioned_label + def get_axis_labels( + self, + x_label: float | str | Mobject = "x", + y_label: float | str | Mobject = "y", + z_label: float | str | Mobject = "z", + ) -> VGroup: + """Defines labels for the x_axis and y_axis of the graph. + + For increased control over the position of the labels, + use :meth:`.get_x_axis_label` and :meth:`.get_y_axis_label`. + + Parameters + ---------- + x_label + The label for the x_axis. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs. + y_label + The label for the y_axis. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs. + z_label + The label for the z_axis. Defaults to :class:`~.MathTex` for ``str`` and ``float`` inputs. + + Returns + ------- + :class:`~.VGroup` + A :class:`~.VGroup` of the labels for the x_axis, y_axis, and z_axis. + + + .. seealso:: + :meth:`.get_x_axis_label` + :meth:`.get_y_axis_label` + :meth:`.get_z_axis_label` + + Examples + -------- + .. manim:: GetAxisLabelsExample + :save_last_frame: + + class GetAxisLabelsExample(ThreeDScene): + def construct(self): + self.set_camera_orientation(phi=2*PI/5, theta=PI/5) + axes = ThreeDAxes() + labels = axes.get_axis_labels( + Tex("x-axis").scale(0.7), Text("y-axis").scale(0.45), Text("z-axis").scale(0.45) + ) + self.add(axes, labels) + """ + + self.axis_labels = VGroup( + self.get_x_axis_label(x_label), + self.get_y_axis_label(y_label), + self.get_z_axis_label(z_label), + ) + return self.axis_labels + class NumberPlane(Axes): """Creates a cartesian plane with background lines. From 87dbd03622199c3c003b8684e40c059514959a42 Mon Sep 17 00:00:00 2001 From: Alex Lembcke Date: Sat, 31 Dec 2022 19:20:18 -0500 Subject: [PATCH 189/555] Remove deprecated function `set_filly_by_value` from `opengl_surface` (#3103) --- manim/mobject/opengl/opengl_surface.py | 85 -------------------------- 1 file changed, 85 deletions(-) diff --git a/manim/mobject/opengl/opengl_surface.py b/manim/mobject/opengl/opengl_surface.py index 64cbd43f5b..dec54c98ee 100644 --- a/manim/mobject/opengl/opengl_surface.py +++ b/manim/mobject/opengl/opengl_surface.py @@ -341,91 +341,6 @@ def _get_color_by_value(self, s_points): def get_shader_vert_indices(self): return self.get_triangle_indices() - @deprecated( - since="v0.16.0", - message="Use colorscale attribute instead.", - ) - def set_fill_by_value(self, axes, colors): - # directly copied from three_dimensions.py with some compatibility changes. - """Sets the color of each mobject of a parametric surface to a color relative to its z-value - - Parameters - ---------- - axes : - The axes for the parametric surface, which will be used to map z-values to colors. - colors : - A list of colors, ordered from lower z-values to higher z-values. If a list of tuples is passed - containing colors paired with numbers, then those numbers will be used as the pivots. - - Returns - ------- - :class:`~.Surface` - The parametric surface with a gradient applied by value. For chaining. - - Examples - -------- - .. manim:: FillByValueExample - :save_last_frame: - - class FillByValueExample(ThreeDScene): - def construct(self): - resolution_fa = 42 - self.set_camera_orientation(phi=75 * DEGREES, theta=-120 * DEGREES) - axes = ThreeDAxes(x_range=(0, 5, 1), y_range=(0, 5, 1), z_range=(-1, 1, 0.5)) - def param_surface(u, v): - x = u - y = v - z = np.sin(x) * np.cos(y) - return z - surface_plane = Surface( - lambda u, v: axes.c2p(u, v, param_surface(u, v)), - resolution=(resolution_fa, resolution_fa), - v_range=[0, 5], - u_range=[0, 5], - ) - # surface_plane.set_style(fill_opacity=1) - surface_plane.set_fill_by_value(axes=axes, colors=[(RED, -0.4), (YELLOW, 0), (GREEN, 0.4)]) - self.add(axes, surface_plane) - """ - if type(colors[0]) is tuple: - new_colors, pivots = [[i for i, j in colors], [j for i, j in colors]] - else: - new_colors = colors - - pivot_min = axes.z_range[0] - pivot_max = axes.z_range[1] - pivot_frequency = (pivot_max - pivot_min) / (len(new_colors) - 1) - pivots = np.arange( - start=pivot_min, - stop=pivot_max + pivot_frequency, - step=pivot_frequency, - ) - - for mob in self.family_members_with_points(): - # import ipdb; ipdb.set_trace(context=7) - z_value = axes.point_to_coords(mob.get_midpoint())[2] - if z_value <= pivots[0]: - mob.set_color(new_colors[0]) - elif z_value >= pivots[-1]: - mob.set_color(new_colors[-1]) - else: - for i, pivot in enumerate(pivots): - if pivot > z_value: - color_index = (z_value - pivots[i - 1]) / ( - pivots[i] - pivots[i - 1] - ) - color_index = min(color_index, 1) - mob_color = interpolate_color( - new_colors[i - 1], - new_colors[i], - color_index, - ) - mob.set_color(mob_color, recurse=False) - - break - - return self - class OpenGLSurfaceGroup(OpenGLSurface): def __init__(self, *parametric_surfaces, resolution=None, **kwargs): From 0ea586bcae57a014ab3b37297bef08544987c3fc Mon Sep 17 00:00:00 2001 From: Oscar Rangel <59584179+oscjac@users.noreply.github.com> Date: Sun, 1 Jan 2023 20:43:06 -0500 Subject: [PATCH 190/555] Clarified documentation for --resolution flag (#3108) --- manim/cli/render/render_options.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/cli/render/render_options.py b/manim/cli/render/render_options.py index 22166beb73..738f5c310f 100644 --- a/manim/cli/render/render_options.py +++ b/manim/cli/render/render_options.py @@ -83,7 +83,7 @@ def validate_resolution(ctx, param, value): "--resolution", callback=validate_resolution, default=None, - help="Resolution in (W,H) for when 16:9 aspect ratio isn't possible.", + help='Resolution in "W,H" for when 16:9 aspect ratio isn\'t possible.', ), option( "--fps", From 3713ed6b1e0f9d51de8e74717bf4489c592f880f Mon Sep 17 00:00:00 2001 From: Alex Lembcke Date: Mon, 2 Jan 2023 09:37:31 -0500 Subject: [PATCH 191/555] Clean-up, type-hints and documentation for `three_dimensions.py` (#3109) * Clean-up, type-hints and documentation for three_dimensions.py * Added length definition for Line3D. * Update three_dimensions.py * Add TYPE_CHECKING and replacing Colors with Color replacing the Colors Enum with Color because both will soon be deprecated but Color can be tracked down easier * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fixed return for perpendicular line in Line3D. Co-authored-by: Tristan Schulz Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/three_d/three_dimensions.py | 177 +++++++++++++++------- 1 file changed, 122 insertions(+), 55 deletions(-) diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 346e349742..6ee0371a07 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -16,11 +16,9 @@ "Torus", ] - -from typing import * +from typing import TYPE_CHECKING import numpy as np -from colour import Color from manim import config, logger from manim.constants import * @@ -31,14 +29,17 @@ 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 +if TYPE_CHECKING: + from typing import * + + from colour import Color + class ThreeDVMobject(VMobject, metaclass=ConvertToOpenGL): - def __init__(self, shade_in_3d=True, **kwargs): + def __init__(self, shade_in_3d: bool = True, **kwargs): super().__init__(shade_in_3d=shade_in_3d, **kwargs) @@ -63,7 +64,7 @@ class Surface(VGroup, metaclass=ConvertToOpenGL): The opacity of the :class:`Surface`, from 0 being fully transparent to 1 being fully opaque. Defaults to 1. checkerboard_colors - Colors individual faces alternating colors. Overrides ``fill_color``. + ng individual faces alternating colors. Overrides ``fill_color``. stroke_color Color of the stroke surrounding each face of :class:`Surface`. stroke_width @@ -130,7 +131,14 @@ def __init__( if self.should_make_jagged: self.make_jagged() - def func(self, u: float, v: float): + def func(self, u: float, v: float) -> np.ndarray: + """The z values defining the :class:`Surface` being plotted. + + Returns + ------- + :class:`numpy.array` + The z values defining the :class:`Surface`. + """ return self._func(u, v) def _get_u_values_and_v_values(self): @@ -179,7 +187,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: Sequence[Color], opacity: float = None + ) -> Mobject: """Sets the fill_color of each face of :class:`Surface` in an alternating pattern. @@ -202,14 +212,13 @@ def set_fill_by_checkerboard(self, *colors, opacity=None): face.set_fill(colors[c_index], opacity=opacity) return self - @deprecated_params("colors", since="v0.16.0") def set_fill_by_value( self, axes: Mobject, colorscale: Union[Iterable[Color], Color] | None = None, axis: int = 2, **kwargs, - ): + ) -> Mobject: """Sets the color of each mobject of a parametric surface to a color relative to its axis-value. @@ -319,7 +328,7 @@ def param_surface(u, v): class Sphere(Surface): - """An three-dimensional sphere. + """A three-dimensional sphere. Parameters ---------- @@ -363,13 +372,13 @@ def construct(self): def __init__( self, - center=ORIGIN, - radius=1, - resolution=None, - u_range=(0, TAU), - v_range=(0, PI), + center: Sequence[float] = ORIGIN, + radius: float = 1, + resolution: Sequence[int] = None, + u_range: Sequence[float] = (0, TAU), + v_range: Sequence[float] = (0, PI), **kwargs, - ): + ) -> None: if config.renderer == RendererType.OPENGL: res_value = (101, 51) elif config.renderer == RendererType.CAIRO: @@ -391,7 +400,14 @@ def __init__( self.shift(center) - def func(self, u, v): + def func(self, u: float, v: float) -> np.ndarray: + """The z values defining the :class:`Sphere` being plotted. + + Returns + ------- + :class:`numpy.array` + The z values defining the :class:`Sphere`. + """ return self.radius * np.array( [np.cos(u) * np.sin(v), np.sin(u) * np.sin(v), -np.cos(v)], ) @@ -433,10 +449,10 @@ def __init__( self, point: list | np.ndarray = ORIGIN, radius: float = DEFAULT_DOT_RADIUS, - color: Colors = WHITE, - resolution=(8, 8), + color: Color = WHITE, + resolution: Sequence[int] = (8, 8), **kwargs, - ): + ) -> None: super().__init__(center=point, radius=radius, resolution=resolution, **kwargs) self.set_color(color) @@ -473,12 +489,12 @@ def construct(self): def __init__( self, - side_length=2, - fill_opacity=0.75, - fill_color=BLUE, - stroke_width=0, + side_length: float = 2, + fill_opacity: float = 0.75, + fill_color: Color = BLUE, + stroke_width: float = 0, **kwargs, - ): + ) -> None: self.side_length = side_length super().__init__( fill_color=fill_color, @@ -487,7 +503,8 @@ def __init__( **kwargs, ) - def generate_points(self): + def generate_points(self) -> None: + """Creates the sides of the :class:`Cube`.""" for vect in IN, OUT, LEFT, RIGHT, UP, DOWN: face = Square( side_length=self.side_length, @@ -525,11 +542,12 @@ def construct(self): self.add(prismSmall, prismLarge) """ - def __init__(self, dimensions=[3, 2, 1], **kwargs): + def __init__(self, dimensions: Sequence[int] = [3, 2, 1], **kwargs) -> None: self.dimensions = dimensions super().__init__(**kwargs) - def generate_points(self): + def generate_points(self) -> None: + """Creates the sides of the :class:`Prism`.""" super().generate_points() for dim, value in enumerate(self.dimensions): self.rescale_to_fit(value, dim, stretch=True) @@ -610,7 +628,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 @@ -619,6 +637,11 @@ def func(self, u: float, v: float): The radius. v The azimuthal angle. + + Returns + ------- + :class:`numpy.array` + Points defining the :class:`Cone`. """ r = u phi = v @@ -663,7 +686,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 @@ -674,7 +697,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 @@ -724,9 +747,9 @@ def __init__( direction: np.ndarray = Z_AXIS, v_range: Sequence[float] = [0, TAU], show_ends: bool = True, - resolution=(24, 24), + resolution: Sequence[int] = (24, 24), **kwargs, - ): + ) -> None: self._height = height self.radius = radius super().__init__( @@ -742,7 +765,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 @@ -751,13 +774,18 @@ def func(self, u: float, v: float): The height. v The azimuthal angle. + + Returns + ------- + :class:`numpy.ndarray` + Points defining the :class:`Cylinder`. """ height = u phi = v 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 @@ -817,12 +845,12 @@ 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 ---------- - direction + direction : :class:`numpy.array` The direction of the central axis of the :class:`Cylinder`. """ # if get_norm(direction) is get_norm(self.direction): @@ -830,12 +858,12 @@ 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 ------- - direction + direction : :class:`numpy.array` The direction of the central axis of the :class:`Cylinder`. """ return self.direction @@ -873,7 +901,7 @@ def __init__( start: np.ndarray = LEFT, end: np.ndarray = RIGHT, thickness: float = 0.02, - color=None, + color: Color = None, **kwargs, ): self.thickness = thickness @@ -881,7 +909,9 @@ def __init__( 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 + ) -> None: """Sets the start and end points of the line. If either ``start`` or ``end`` are :class:`Mobjects <.Mobject>`, @@ -912,7 +942,23 @@ 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 | float, direction: np.ndarray = None + ) -> np.ndarray: + """Gets a point representing the center of the :class:`Mobjects <.Mobject>`. + + Parameters + ---------- + mob_or_point + :class:`Mobjects <.Mobject>` or point whose center should be returned. + direction + If an edge of a :class:`Mobjects <.Mobject>` should be returned, the direction of the edge. + + Returns + ------- + :class:`numpy.array` + Center of the :class:`Mobjects <.Mobject>` or point, or edge if direction is given. + """ if isinstance(mob_or_point, (Mobject, OpenGLMobject)): mob = mob_or_point if direction is None: @@ -921,7 +967,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 @@ -931,7 +977,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 @@ -944,7 +990,7 @@ def get_end(self): @classmethod def parallel_to( cls, line: Line3D, point: Sequence[float] = ORIGIN, length: float = 5, **kwargs - ): + ) -> Line3D: """Returns a line parallel to another line going through a given point. @@ -954,9 +1000,16 @@ def parallel_to( The line to be parallel to. point The point to pass through. + length + Length of the parallel line. kwargs Additional parameters to be passed to the class. + Returns + ------- + :class:`Line3D` + Line parallel to ``line``. + Examples -------- .. manim:: ParallelLineExample @@ -981,7 +1034,7 @@ def construct(self): @classmethod def perpendicular_to( cls, line: Line3D, point: Sequence[float] = ORIGIN, length: float = 5, **kwargs - ): + ) -> Line3D: """Returns a line perpendicular to another line going through a given point. @@ -991,9 +1044,16 @@ def perpendicular_to( The line to be perpendicular to. point The point to pass through. + length + Length of the perpendicular line. kwargs Additional parameters to be passed to the class. + Returns + ------- + :class:`Line3D` + Line perpendicular to ``line``. + Examples -------- .. manim:: PerpLineExample @@ -1064,9 +1124,9 @@ def __init__( thickness: float = 0.02, height: float = 0.3, base_radius: float = 0.08, - color=WHITE, + color: Color = WHITE, **kwargs, - ): + ) -> None: super().__init__( start=start, end=end, thickness=thickness, color=color, **kwargs ) @@ -1120,11 +1180,11 @@ def __init__( self, major_radius: float = 3, minor_radius: float = 1, - u_range=(0, TAU), - v_range=(0, TAU), - resolution=None, + u_range: Sequence[float] = (0, TAU), + v_range: Sequence[float] = (0, TAU), + resolution: Sequence[int] = None, **kwargs, - ): + ) -> None: if config.renderer == RendererType.OPENGL: res_value = (101, 101) elif config.renderer == RendererType.CAIRO: @@ -1142,6 +1202,13 @@ def __init__( **kwargs, ) - def func(self, u, v): + def func(self, u: float, v: float) -> np.ndarray: + """The z values defining the :class:`Torus` being plotted. + + Returns + ------- + :class:`numpy.ndarray` + The z values defining the :class:`Torus`. + """ 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 1425c9add7f4af153a37711c4731d509240995c6 Mon Sep 17 00:00:00 2001 From: Elyanah Aco Date: Fri, 20 Jan 2023 19:13:13 +0800 Subject: [PATCH 192/555] Change links redirecting to dead troubleshooting page (#3126) * docs: change links redirecting to dead troubleshooting page * Fix typo in FAQ link Co-authored-by: elyanah --- .github/ISSUE_TEMPLATE/installation_issue.md | 2 +- manim/utils/tex_file_writing.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/installation_issue.md b/.github/ISSUE_TEMPLATE/installation_issue.md index b3e6d423c7..02d16b78ea 100644 --- a/.github/ISSUE_TEMPLATE/installation_issue.md +++ b/.github/ISSUE_TEMPLATE/installation_issue.md @@ -11,7 +11,7 @@ assignees: '' - [ ] I have followed the latest version of the [installation instructions](https://docs.manim.community/en/stable/installation.html). -- [ ] I have checked the [troubleshooting page](https://docs.manim.community/en/stable/installation/troubleshooting.html) and my problem is either not mentioned there, +- [ ] I have checked the [installation FAQ](https://docs.manim.community/en/stable/faq/installation.html) and my problem is either not mentioned there, or the solution given there does not help. ## Description of error diff --git a/manim/utils/tex_file_writing.py b/manim/utils/tex_file_writing.py index 6afa7ed5b4..0f419bb9e9 100644 --- a/manim/utils/tex_file_writing.py +++ b/manim/utils/tex_file_writing.py @@ -244,7 +244,8 @@ def convert_to_svg(dvi_file: Path, extension: str, page: int = 1): f"Your installation does not support converting {dvi_file.suffix} files to SVG." f" Consider updating dvisvgm to at least version 2.4." f" If this does not solve the problem, please refer to our troubleshooting guide at:" - f" https://docs.manim.community/en/stable/installation/troubleshooting.html", + f" https://docs.manim.community/en/stable/faq/general.html#my-installation-" + f"does-not-support-converting-pdf-to-svg-help", ) return result From 87e6a0aa95d28552c94d85190942ea8c2e551abc Mon Sep 17 00:00:00 2001 From: "M. A. Ali" <73258591+MightyStud@users.noreply.github.com> Date: Fri, 27 Jan 2023 12:43:59 +0200 Subject: [PATCH 193/555] Fixed example using reverse with `Write` (#3137) --- manim/animation/creation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/animation/creation.py b/manim/animation/creation.py index 541a2afafa..c599708bd6 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -301,7 +301,7 @@ def construct(self): class ShowWriteReversed(Scene): def construct(self): - self.play(Write(Text("Hello", font_size=144), reverse=True)) + self.play(Write(Text("Hello", font_size=144), reverse=True, remover=False)) Tests ----- From 8610c98714905251d8960faba6754fdc1139efbc Mon Sep 17 00:00:00 2001 From: NotWearingPants <26556598+NotWearingPants@users.noreply.github.com> Date: Fri, 27 Jan 2023 12:48:58 +0200 Subject: [PATCH 194/555] Convert docstring param type to type-hint in three_dimensions.py (#3105) * Convert docstring param type to type-hint in three_dimensions.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Tristan Schulz Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/three_d/three_dimensions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 6ee0371a07..57f0939c36 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -691,7 +691,7 @@ def set_direction(self, direction: np.ndarray) -> None: Parameters ---------- - direction : :class:`numpy.array` + direction The direction of the apex. """ self.direction = direction From 262300c696724c2d848a1dc79108df6eb8792a16 Mon Sep 17 00:00:00 2001 From: Papierkorb2292 <104673791+Papierkorb2292@users.noreply.github.com> Date: Fri, 27 Jan 2023 11:49:59 +0100 Subject: [PATCH 195/555] Added the fix (#3106) Co-authored-by: Tristan Schulz --- manim/mobject/opengl/opengl_vectorized_mobject.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 8dc174e12d..8858a422f6 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -1518,6 +1518,7 @@ def update_fill_shader_wrapper(self): self.fill_shader_wrapper.vert_data = self.get_fill_shader_data() self.fill_shader_wrapper.vert_indices = self.get_triangulation() self.fill_shader_wrapper.uniforms = self.get_fill_uniforms() + self.fill_shader_wrapper.depth_test = self.depth_test def get_stroke_shader_wrapper(self): self.update_stroke_shader_wrapper() @@ -1526,6 +1527,7 @@ def get_stroke_shader_wrapper(self): def update_stroke_shader_wrapper(self): self.stroke_shader_wrapper.vert_data = self.get_stroke_shader_data() self.stroke_shader_wrapper.uniforms = self.get_stroke_uniforms() + self.stroke_shader_wrapper.depth_test = self.depth_test def get_shader_wrapper_list(self): # Build up data lists From c22303ddbffc232ab7b552391e96ca034d3c56ae Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 27 Jan 2023 11:58:15 +0100 Subject: [PATCH 196/555] [pre-commit.ci] pre-commit autoupdate (#3125) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pygrep-hooks: v1.9.0 → v1.10.0](https://github.com/pre-commit/pygrep-hooks/compare/v1.9.0...v1.10.0) - [github.com/asottile/blacken-docs: v1.12.1 → 1.13.0](https://github.com/asottile/blacken-docs/compare/v1.12.1...1.13.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a985aa0c4d..51a08a417d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -30,7 +30,7 @@ repos: name: Update code to new python versions args: [--py37-plus] - repo: https://github.com/pre-commit/pygrep-hooks - rev: v1.9.0 + rev: v1.10.0 hooks: - id: python-check-blanket-noqa name: Precision flake ignores @@ -39,7 +39,7 @@ repos: hooks: - id: black - repo: https://github.com/asottile/blacken-docs - rev: v1.12.1 + rev: 1.13.0 hooks: - id: blacken-docs additional_dependencies: [black==22.3.0] From b54743e81d780931e7fb57c14676bbcee958c99f Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Fri, 27 Jan 2023 06:23:33 -0500 Subject: [PATCH 197/555] Add scene.replace() and use in ReplacementTransform (#3042) * Add scene.replace() and use in ReplacementTransform This replace method allows one mobject to take the place (that is, the draw order) of another mobject. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Address Feedback * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update visual Replacement test and fix extract_frames.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * allow flake8 to be unhappy Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/animation/transform.py | 3 +- manim/scene/scene.py | 44 ++++++++++++++++++ scripts/extract_frames.py | 3 +- tests/module/scene/test_scene.py | 34 +++++++++++++- .../transform/ReplacementTransform.npz | Bin 3480 -> 23941 bytes tests/test_graphical_units/test_transform.py | 28 +++++++++-- 6 files changed, 104 insertions(+), 8 deletions(-) diff --git a/manim/animation/transform.py b/manim/animation/transform.py index 20e5192fe0..7607199d99 100644 --- a/manim/animation/transform.py +++ b/manim/animation/transform.py @@ -211,8 +211,7 @@ def create_target(self) -> Mobject: def clean_up_from_scene(self, scene: Scene) -> None: super().clean_up_from_scene(scene) if self.replace_mobject_with_target_in_scene: - scene.remove(self.mobject) - scene.add(self.target_mobject) + scene.replace(self.mobject, self.target_mobject) def get_all_mobjects(self) -> Sequence[Mobject]: return [ diff --git a/manim/scene/scene.py b/manim/scene/scene.py index bf5753750e..cbecfe3edb 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -519,6 +519,50 @@ def remove(self, *mobjects: Mobject): self.restructure_mobjects(mobjects, list_name, False) return self + def replace(self, old_mobject: Mobject, new_mobject: Mobject) -> None: + """Replace one Mobject in the scene with another, preserving draw order. + + If old_mobject is a submobject of some other Mobject (e.g. a Group), + the new_mobject will replace it inside the group, without otherwise + changing the parent mobject. + + Parameters + ---------- + old_mobject - A Mobject which must be in the scene. This method asserts if + old_mobject is not in the scene + new_mobject - A Mobject which must not already be in the scene. + + """ + assert old_mobject is not None + assert new_mobject is not None + + def replace_in_list( + mobj_list: list[Mobject], old_m: Mobject, new_m: Mobject + ) -> bool: + # We use breadth-first search because some Mobjects get very deep and + # we expect top-level elements to be the most common targets for replace. + for i in range(0, len(mobj_list)): + # Is this the old mobject? + if mobj_list[i] == old_m: + # If so, write the new object to the same spot and stop looking. + mobj_list[i] = new_m + return True + # Now check all the children of all these mobs. + for mob in mobj_list: # noqa: SIM110 + if replace_in_list(mob.submobjects, old_m, new_m): + # If we found it in a submobject, stop looking. + return True + # If we did not find the mobject in the mobject list or any submobjects, + # (or the list was empty), indicate we did not make the replacement. + return False + + # Make use of short-circuiting conditionals to check mobjects and then + # foreground_mobjects + replaced = replace_in_list( + self.mobjects, old_mobject, new_mobject + ) or replace_in_list(self.foreground_mobjects, old_mobject, new_mobject) + assert replaced, "Could not find old_mobject in Scene" + def add_updater(self, func: Callable[[float], None]) -> None: """Add an update function to the scene. diff --git a/scripts/extract_frames.py b/scripts/extract_frames.py index 7bebbb4b5e..d3c7691895 100644 --- a/scripts/extract_frames.py +++ b/scripts/extract_frames.py @@ -1,3 +1,4 @@ +import pathlib import sys import numpy as np @@ -9,7 +10,7 @@ def main(): print_usage() sys.exit(1) npz_file = sys.argv[1] - output_folder = Path(sys.argv[2]) + output_folder = pathlib.Path(sys.argv[2]) if not output_folder.exists(): output_folder.mkdir(parents=True) diff --git a/tests/module/scene/test_scene.py b/tests/module/scene/test_scene.py index b62f0cd24c..0790b7ece6 100644 --- a/tests/module/scene/test_scene.py +++ b/tests/module/scene/test_scene.py @@ -4,7 +4,7 @@ import pytest -from manim import Circle, FadeIn, Mobject, Scene, Square, tempconfig +from manim import Circle, FadeIn, Group, Mobject, Scene, Square, tempconfig from manim.animation.animation import Wait @@ -73,3 +73,35 @@ def test_subcaption(): assert subcaptions[1].start == datetime.timedelta(seconds=1.5) assert subcaptions[1].end == datetime.timedelta(seconds=3) assert subcaptions[1].content == "Testing Scene.play subcaption interface" + + +def test_replace(): + def assert_names(mobjs, names): + assert len(mobjs) == len(names) + for i in range(0, len(mobjs)): + assert mobjs[i].name == names[i] + + with tempconfig({"dry_run": True}): + scene = Scene() + + first = Mobject(name="first") + second = Mobject(name="second") + third = Mobject(name="third") + fourth = Mobject(name="fourth") + + scene.add(first) + scene.add(Group(second, third, name="group")) + scene.add(fourth) + assert_names(scene.mobjects, ["first", "group", "fourth"]) + assert_names(scene.mobjects[1], ["second", "third"]) + + alpha = Mobject(name="alpha") + beta = Mobject(name="beta") + + scene.replace(first, alpha) + assert_names(scene.mobjects, ["alpha", "group", "fourth"]) + assert_names(scene.mobjects[1], ["second", "third"]) + + scene.replace(second, beta) + assert_names(scene.mobjects, ["alpha", "group", "fourth"]) + assert_names(scene.mobjects[1], ["beta", "third"]) diff --git a/tests/test_graphical_units/control_data/transform/ReplacementTransform.npz b/tests/test_graphical_units/control_data/transform/ReplacementTransform.npz index 0edf7f2f67213a17a1941e1c2832f1a1e4f5ea37..7d5ffe8e56395c944b0fcb4372cfb9f5a3984078 100644 GIT binary patch literal 23941 zcmeIad011~mNt%hExR1ArGSD!Sz4kXP{=%2X#pw%A|?!BP!JgcM1&B=U}>Sqs3L=m zDgr_Xks*X3A$ny{<}qPR6ofD)hCl*@knfy>_4Td$bw9sfci*RO|54PV<;mIEd!M!U zUhjI}wGJ08w)|zkgoMPu0e=olIGpIj@SG$hUSG74*e$VN;`+_2ejcvZt_EFI^}i9i zN#d{29iXWM*b4la8~r+KbeyuxJ?gGJkkOeEjMV7_Y9YTf{2 zfJ0;!yJFb1DrY|L$WYcG#hJ|-wMO>lJF~?cGF=cn?9YkhkNDL^@)>FZle)Po=iK>q zRCAMMhUV8BkMsxqePtdFhf7IHN`9{>iz(|glGtVI;v%0Pa&26dU$gD$Rby`$FDv$& zE+?D>?Nn~1Qn>G>%`L?3S5)#~5-+T95@)mFn;z)nH-C$E-1_58<@Q^B-jWhUy-E_7 z3jYfYE*?)wNwINucD|vdr4@yO@$H?j?3uVA-YoC)tGIxgpd*WM&+44hmlW1)zIbwQ z_CuzEYP_e^ng{-&NYH_(HI%nsb~*R1DZ{zY&BRV3_WST%Z7$*{q1Qd48K0R+xl1}= zf;)Q6yN>BU#kXv+n{OYKyepA17&hYVq zdi4{>PKKEj=j0@3!S_{ef7&I3gV|Zl?adDf%F;yOB(|4yBecrV4IlF8k%PL#?N4nq z!*E~8Np(jhp0V|RM-vq2x<#u3^ z{`WL>=F2Qk-rK>WD7|=(GPHSw51UK)ex+)E4>`Y;xc#^{up?IJZ%*TiicY+TdyMUAtk}esR2S^J?wsifF zTUi`xW%{*ODNF+S#M&{%Nc+U53CFFkQoH|)r~coK{vY^_<1g6Gb!JOMI<}>8%U2Di zA|V}T*O}AJo2!^bTP4Zw#la`CQhNEh{Z;Q)I8mRIv(AXwPqQdu|IVy=lfBHg=?5C$ zu~xHYe(w8(fZ5va>+kR1Y6q<0BJ1lP)s0pfeoYthEx2#WvLv`B1QgN2w zb25SexR>@Y*c{ZmaPCF5XVc5&(YJERz2b)&iuO*Ms)J zHb>hQ8Y@I)Vcomy`Yv{ML|wp1oNsG8*gLkT*L*+aC-A&3g`#N|0nL?HO;HcP^Bpj*zXJVFpGTZZ)jN{U zhjGep9j`S@G~%d})*KCY{a;Xaa6-OM7w&JNZy$8)M#4p?qI;uzDSwIN_uYW*Kv%b;zHKZ!v4SDHy^JQ@ke#w zk!t~OIFVl&W33*KbqDnL0ykc5*`xbyYSiM@apK<}{U7s|xrgsH^z30E$?#qJC!dSu zXX|~l9Jh8IPc$5h35j|?46e@m)#+~Y<~oilXw0*;&Ljg>h70*3=xrSo4@E_s3=7Wz zSFPO2r(a2`ekB9CaI}Lr-8QWt0tSDCULas4dD4_(&|{a_S{dt2Qq(P=4*ab3zMrgL zkA=Q7MDmjjbcs3#-6g z==4Cm+>kZYog^D+u(4&wI7z*z_~C+` z4t|TgJ8pe}c9RJqlRXFcm&N46$yixC>p9Ah2LP&g@exlS;DPsFNGmQ*U;H%A{o9Vt zPnNmbdXr@Sj1NZzizKGBrka-6ci;GaptzY~{|IGqxE)ao#7M^X610boYY+QYkWpA( zrcIfMkDDj5asv7unx|gF`S|!OIG?C&X=!=x8h8tB85$aTu1e`k;Pp?9s2yx%&Fm$ZE zXO{fDvT~kf+`jSUT#+U=xZz{Kz?*HRJkGpa-CVW%9I-jdtdFLB38xfTyw5fn1+%oY zyliJD?c~9Bk`{(;dJt==&CvCcZj1Bom5*l?jO?>jH2G|O-6~YmC1W8iT|@LfT}M=8 zzu2>*EQD6Me1+dyc9W466V0>3IqNFIRkQXgOIgKEphgsw88Wg&&dyl-o7jeJu)P)t zvy%p=+*XYDDwEz(h6waqa9A@CmyQ1t%}M#yx5R-ED;kkF+sLk)%R=?%3l?KGVK71` z)w)7YC$wwsfrSqow@*jX8V0C4V-4h~s_f94KO3&LRfo((i|dK2r{bF6Tx!S(iF=u+}27SJxG87 z=PY2v#(aYPupo+U6^R{nzgUWTt5C1&pMAq}M5pN3F=LGRg;p)UHznM%YaKgka@yC2 zMML)#yd;18dKT+=FI@|Ldaq;u4_g3JYfPE|ROS1*j7_5PmG=TE%DLQ$8u~FGplSGr zs!U$)3CTM14IG|-axQ@0aM+ad5Ogli!0vKu9MMxBduS2MI08Da+RMIme%PGR6hRJR zQ69p*iO&l1hb&yf^QTlGxV64VOHpSvo-;*3okXfm_Zk#fhQ9i8yEFR;>K#GSW=;zF zHf!Y`C(gt~ul%>$2sNww0pkRvusF~q&Xm7dooz1O8t6Xo769z;pgH(b+qIF67!d1& zRyq+Uf?m_r*zA#q8*Ny zpl&n#%wT|KKj*Vfp}04$=>>G>)!Vx{F-0%kmuv8|2B6PKFC@?GVs}eSElWEJxAY3q(33 zJJ7mOZeQs}4|QstG3rUX`k?MwLId3zj-)}&yn8LR-xIdli(Ydee5&l1LVQAKP1PGi z^B!67sIID&W~K3xQu1Z0Uw>?n^Q{ z#z6*}sh0x@+K9i)IKAjMN$ai#hW?eM46>R^j zb2!&jJ#zI-z;td06d?2f7R_Z+l`2ALi|JZ^rwvV37$J*K0)Uh8Onu>@h1&-T1&nKA zeZ~n9-v={2Si0<&dCw8|_yO&=)&s=V>fD(Z_siVaSrN^~S)%h~?fLiVYa@~B+!cfI zPV2;YM3d`29m61-Y!#5xE|&uVXd{2vH<`&Qj`Z+w8WE0EyEnWFVLuCZ@2-4rQ+LIs z-lLV(-a()nBWHe1H=L*sxjthAErETMXvu9DPfFZUFBW+PjFhb`Z6%OD->z1~xE6pW zC|_7uc;wsfjyn0Cl>cB-#Tg(q2~RJBgdv%8{uvB_N>Rq<66ARzY_K{mlD*06!2eY1 z_&w{v`}e=2?Y)!ava$JzEi>?xfoA}-N-8fefBEv|alMUk{~*Zx7YuXj*gpg${}Ki2 z!EJZ`sA4JmhR@FB{&U^JUtP@v<5;QrB*T-AauHXuR$a|a$rZX|<8m_3cBJU_-!FPk zDlRBER*b{#Ceta?LTgyqrkW(VFZ}2EKHA=jJ#itZ;h3TF&cWiDbW%{L;j7OS0P3`6VPyop z*F)FtEYadvUpc3u`XtY&7SUg4$=-FACnX%%FQD&CR5ag{kmgS@X4C}!T1>!w2XzeR!4@c^zlms#RkW zjx4>p&kWX#BkhVyTECb~-PX#c`gk5v;If0kj@} z0#NNA($TZ8>;vfO_77*_ZEF)uredFx#0-sq#@TDKo2q@L@)H=vT1>Twr;|e=vxy&9 zg!rLoYow%v_*x;pWqf?NxnceYVfB&$u|WOpwx%%$H6P&Kr)TS|=EW#=4yX0hN+XN7 z{g(C0#2$WJJ}Dvg*;}mZq7|S|B7JC;-sF(c*C7#$51#9s$Hj^xB+lBj-q{ngCs1(t z4ne%e%m>}H*GZ4|j7E!oy9p`*F=q@xa{hw(wniZ-F&0@WzR7wCLXPIoe7*kGGlWEL zUa4|eCWOp48(hL0%7@LPo@t4}4`h1fSo|32Z&r*`01y2-qiV#rVr{k3-Tyf7H)!4H zE>?qU(^}b)SjJJ%^VVMD^|2BTJaSd88nA>yht|V&Q98!8eiyKQJU1PXQ$1C^GnD&{ z+A;mY)4(&VNgS^#u*_^4+1tNjw43T>U3w_Yd*p}fXYB1JN=m^nvY5$&xGJA_mUn>2I5GJ;Qu4&f@^6dlj=DUIHm)KjtZko37i0)2j~{&us@E;HXEqxE^C+`DStk zG~E87Mn$`(_{|+KI*4(V+_c3wZr*m1H3dYh!+1Nmlmg?FlE0ifC{uiUE*$2ofMd(p zb%~-tIN4q#dU&sKP5tc-+6l1t({+`Wv+3{;S`yIR=?;d``1|hYOgoSTU-Ysqt@)0v z_BxCRnl{1XeRW1P{#M{dTW=l#t3|Eq*|pUX0a>w&KlpLDY%H-%{nf26@a!%SV#!AA zrrW{iK|4QCiVC`T@{qx4aB2>6iH3$QvXL8MM6H~#H(jgvhj1wR(7ao(xQ=N%gogk& z4jXyt0;J3iJmnWQSh(+~^T$JvD_6lW=B}$~tq_sh_E0WBPi){@V`^ydxhDkaWEn5# zl1@woH_moH@a$U*RVGeg5)=sSfi1CY}sV_SjHQDD2XOetM_RavH`^N8 zW^itU^X_g7Q?u@KpML>wozuTT&mO0_cs4E=G&RlYB*izce{_LVjqefuRSsFpCl%J57uC612J0s5P#$=1q!>hsR+R7lzzNY z*%=@^BJbhhVFUc!+!*&?fTVxake1H@D=R4}oww3vyXA&U$P|#thUdBOnw;kX_x$)a zqNjLLPxAYx5S0ex@cona0udy?|gCxwR|}GM}5RW7yB5(J1<48 z3>)E^)!vFgYQ?qj&hF@zteJ+sPxlaiF99RBzfxUUy(??hd1iO)#2wZ9FjjD)pmX*c zjnym#HNo`0sQGaJlZFKIlkY{ojWw{c8J%qR6_i0!tSojfanHQ0Iwme=s6hN2)~}A5 zUI@AJF&qF^Bn{{0YIh6$(@H^RLyGy@apSqc6O5Tbm7KXqn|QXy(b9Q?a`_`;1@&jf za*Vf(Pcyc-{Zx8YIh-|wzS?ZB#eVrRGBh)+7M2~g3#E>Q0|~8Sn1pLvfozFFnta%e zh#)Iin_i*$TAAQ!bt%I*vg&FiD#nC0v~-Eda|@;6v2xG(>!KsZ1NOLYs%a9)Jl8q$ znKn+(VW~-W-g+0SxU;`-)rpA-G3*mAgj8@G%AQ*n+M`)XM;M}F_@=IJ2Pu6C&Fe=o zYW;f07VCA3g^9<#3TcZb6hiD)R`x#S!1mZs3;?sa-gFf9h>PBMpM4jvAjUtA)FzhL!3+b~rl#I~ z;*0{AMBm4B&gF(?*5$^xlqlCe5Twz1K|((_hf>?5V_hfko3B_J`0`O@%O$<;Zk(}t z4oK)Orun+8#>ovg#Jfa}4VmR6gQDl>(4C^`k7chs1qU2otYATBlshpcSC!;J(QmFc zrb|&Q!OxH_3?X7*sWN>)IQAT~0j5;p$30_9Iis?XqYwmlx@Qt1wNi6>Pq0-#>u;d+ zspXev#tEz}+u!)T*snZbJ*T)UJRGEX`&*(-MocF8hPW?`-NK=_pzNu|y^vR(6JI#L z^KK?K(>}}!hE-#nUi?(cL&e+JjWCY8Q0CT_iRF>H8)d=$7(l! zfkemosz5R$5BZY;sP$evYs6e)e%Ni~`KaJv)_sSI9r zaw~Zu+z}q+@Rw%ABU%hi(rKK;H>r_Sp9z$Hb9#OM#(Zl1JPZegkgjnJJrFJksqjp@ zja9G*`h5DJzW(D~?$u7K08B0p;;`t(k0$YYTSugS2Jd&3>q#kO+e(UUpN1=gFw%76 z{j+V2vqp91Xy#t9|8qk@cb42;SbS~>CvIahyzJnZq%c@xdt@nu+qBQ_iSf}!bk?LN)*%_yC(QG_Z{Hl`x&c5E)WGHwxL7#Q) z*F;O>x9dYL6q1p(e(^Y$e_P@}9@j)sGY zHo(i4p6Ca1w;QDd|5R1=(mw>IG$kAY=5`NIZ;gI0`uS6;x{1C`GI7>M6&-wJ^8T-mv=kJEun_CGmeZrooy;juSr)X+!KUx6r?|At7K zlO*ayn)slGHGDV>6(5CBbsyJ}@5bgWzw?pp`GUyi{|_P$zAACZs&2;Q1S|!m#R}|;zR0Y`s^9p7xw-2u#%TPdzH6|bbUBX zJ-0XXS#KD+?eD5WmWl`Hl2@Ex33b+0O7(6qLpYD6$|{{b+Di2ePhE_P3WVe(=GRT%uwr(BG+{F}g1dc!~`gX2%kUstm@&$Q4oC$MxG>k(R-RMoy;s9}Rz@dC z!TB)=s!QIY?D_HWVEh=@N_3M_UE>At9f_Hqt8_VDb}f}RVe0o7E-9{&c<>x<;49ra zl>IpOp39t>H;kLRN1{kCq!l&6S~cohDSs{iUCtFt1gboMJUZEs9yGbt6qOA4hSwRO zqu8Sm_%n7_tXpSZ7eM!3TBMC)?hA(ClXRAHa2n|EXq6L9uJ;Ajeh=HSOhAXEwaetw ztq^=<^HHX-w|LCNL?U*+E;G_7m4uWeq2(_92Do?6VE;-8dij4P@Wv+D397}?J=HsL zUlj1H3Kqs4TUYg)%3V;Ut4iI5D%%jb(|oN=tHf)Tqh?Yiif6(`zH$F*Wc0WTHrVPP zz;}wDTi1{kJijB1V;lHU{O{=dxmmm#U^rZa8n66)#`qm=9T9OpZrL{Nr-a_(pYEA1 zGTpxr=SFQ1P=`oL%R^BRJ}!*ot77&H=Uo0=69#?oXx`d{G+zV(-%N$TpLsP!cB?R>rvYJ3|;dDh^Bw(V~)`gAO{wG0IbD-^ITM z;my1d-_8r)&==JJ`vB(vMAdH{(l}yD$Vz1gG!OkCAeQj1 zOWwZv1e7g)JnUyrJIOGbXjl$RgLvNi+SS*Q?(lnm!|#Cb%BwDFoatsNgsayM{~I*4 zQP|u=_52@^TR>%5^X?YXvS1B^-yVPhqlPYfws`R4R)~saa&$HZ zPm1@LcWm6^tO}|PXW=-xs#d{_xOV*!xI@#5-j*6nhM_MR_N{CHGO=ycHL|bN!w@~W zvMU1xi3mHl`El_fxc2*8`fg7%OOouyVExBro9~zye3x2@kKd;6>cTNf1!tzN)jmxg z?%=K$skm7Qd&d$>p%~`eklT2|*s8*OF4N)~{GJsT*r!lGkMW1owUiO&H?VcK?rtz@ zwP+0ituRkqUv9HF5J*pt7%M9)Z$1dF#5n^mR`&V-2XGu zG@o}LHk}_eXf8$sC&6^)mvm~V9oSTHcn$MCR^Weye9?lASf@kcNIvb|8G6P?1Xs51U=% zT%!sD1nz-R!OWMDZkaKA=!CrghyfFw0n!sNSA}SlGe5LnAv+?1JX!#2n;SSH&kk}J z83_$>V){AloDQD#Y{9Z7Rp0WWu1`*nj^F8ZoDdS-KD@CJ&cXNMGD`hn{J&57Qg^jx zmjxmv7f zlDKF1kb-p(`G>pcx|(hoV!<49scG302xG%Ur!Z}8LUzKMbjl{!n}Z2N1V;+4utYY~A!t+(mH zBj0*g?WFIbI}0IHeHYTirFgO$el_Ko_xA=q>h-w|0>tc|A)Nvu$E7PgH?u?R{(p1He~I!7but{8E^qSw zJ>TUf?9zdDuMXxQLl-X-WdF0+i1wvec210McON{V*swI(1VO_z-N0XZhgIpxWhWyL zpH5E`n^n0jC*&aC+mFf}bvLV1f{<&MZ@t}x*&C2|FE58%q6i@7md+Wye&S~Ub=Eqv z9RQbXy;=#Mnc~E{;xGB;`Fje7Z1oqxu<0zVY}jAYVkqmt+qy(BHGK9GaI&~9_nR9U zG*+Q0;6|+^!7Y7&Hh&!)>nMoOE=a&sp{vmlhOagTBbs}(6&uo3HzZcHI7+1J;*Gf; z@sNXn*0;bth`*X*~BOC^avyLOG23$(HT+*3^N@1D}=*fj0f)K zlRmZwbm@+)f#fsxro98lRFCcy6#+2d^KkO)Aj3`*9X73(DWDS(H&{+ zDt9c?Jgzs`c&rU7OmzyKzR`a86Ph$qIMQip?A@DF71}|W)?tmXvRGKqgeUW73Gy`} zi-6}5@k`e_G44pF|HkL&pItI^@=g&%S2_i5;mkYWBMy4|_{O6mCX>0R!x7}}eisJ< z*RE9u6oalQ;-mVt>-G2yZ7r+dQOP@zP+EF$)xI}33Ttn>ht65{UU%K z#@zD9q3a($lAY_Z|GYH-S5ah+OVnxX`iOL&;@($Z%$yx>%aI*x>v->(Vq)!ziy)9K zhxk3t$5Z{D!=x!^YV&0xUZ>Eje1JU3f+F6ZowO0VQZD41}W;V+z`GFH3r)F zwMNr?zpuhbFzncuGEXX;YU z%x~_oh>c~J!VM`QmWJfD!U_Id&9zKbKkF5YUyNrstsygRXdK_~r@mO1db2_s*y(Ri zA;-|%o6T*yjx#Y^ENG2Y_0F)V-spU0_IeYyQ7&LokmMyPA+5!oNovR=S;y_m*9&+R z?&s^Q_k&x4zUwN2FfUF9Ain;3T2lU3RBZzn`)W-rBV6o(>eRn$! zKLZ0W+Ymw!1J${xmTCZt&!!k48Bo*B-|Ea3j@avQ(ptHX;r;7cn;s-Mnaxq%-b_TA@xT69?9(~ zLZRH81A+%tn>n4WbzPm!Pizf~f++RJ^Rw1+J}BHsE19MOB6IbFN-HhVbppZsMIriZ6T-O&MXf%FMt{7 zA7R(=TGGJ8*^#kv_sp@y+j{C&lm~2W-sRPMU z`Qnnbb-Z0&EG!oX3I8h0oW&a5$}43c7FE$kgU%RY1UEsW`QlO8hdNKXKnYlUU$Lh& zxO$(Iv$sTGKSEs3_Xz?hu&L4TbjC^Cq|Z2B!Eb(-6@C(+gJ%F1jvDc5F*KY=Eg%v6Rm3?~=cDteW-oSZSr>SeKcU6Ea_*+E9F&Ak? zi$GvM?S`JnD6F|sH%QR4{4E`V>-ZO6+ePUn26x1YEZAUF@D8po9a5~RBkx!S;V{C) zR}`@`Re$V_uO1pD%t!0l^p?Cuy$0YGx9&J~=o#q=u9++Tbt z>$rlu(I9VhV2Ff(KKGV;m^Rt|vJGi6z@rQ>1W!S024~2~j?3n*TqAceq)B?hWkRwurtykv5@dg4n&z?E!iZ<8h^1v@vyxv?0pP3fz$SWHQ&Xdg z=w~urr_U25;~Fze3MK3^!u((|7`(tp;w?~9{olaF{|s5{0`WuL2LqVdcJ-RTn^y;5 z9mL`edB?3kgzeuR?d9!VWUztLe>jZ&VFSK~{XR7K!LYr(-6knXlkLa}m$=Isg%eYW zeZRl~<9IOqV5=c8IWHhzWdo#s|BJE7f3^ltbR+IA9=B8vS{^zO7U8y2G`Xrjni8L$FidX-CorlAgDU*SL2t&uxhEWs@jFn)ghB`edXa7eoRNLytN9Q=B_u~ zy^2jvPhqm-Daoj2_b9QQ^I3OGO7RkJ`wv5sGBR$!`RBG0E+p7G2aYZEtcBEvTh1YZ zQ9DZpq!4g+qNQ?FfQ@(NFATqw+|YVY*dg)c+IcF&Aqu(ENK19>!rK~nzW5`LuTZ+f zy9D4?Vp)V&yeXa3@G;a6^efhCF8lVViM?x#!c_+gEQW2@on^-cbF{dV&-o!pG-9Wy zG=HST62P)oZ5biXi1t+$dzFlCo{Cp<9x)967Otg`rI)W z;*R8Z4D{DgCPA{xP|g+%Ylz||tR&q%IUN~5MV5~^L*iZg>Iofqhj8MiVLpr)WhwFL zXuH6Icl>5Z6iBE)L;&EZsV16>pbn8hzxN@+Th+7{Tb#=40X-GNT3>)E2fX6cs15HJ z=;E?CXQEF}tYf!@(`aOhvdIhi;G2js%gX}=x|AzcI~V`v40V;=qZCc!cS~^a8%MnV)~}G5mtEl|eiRO_TX{;y)*PkwgnMvb z5b560_8?3Y?&K$i+-QVyqbIerH5*e%2&gZ|m6?WsfXcw&iB;UTRW=yPy}MMq zKJ##xx?i!S+1{ETp;N`52WzX}U2-)4lpm_0#2ebfk5H=;7=fDlgY1H)rsXD2kl932JH8t!A|SIz`(xoBMEghq5Q3n z0I9@#sGy&Mf$|d!BE{GRwk-o>o4~uY|4mZ=k81$R0;5rtGa%g396V5`aG0sSNtcHzB!Iwtl)bl%YI$E^7he`1Ew2bf}*bdS9)!AC^i93LEg_ij3H{?`_iZO1RuvqC7ECOI6J zeZtgH*)7UdjQ{~~?`?5)x;%9KDF!j&nZt3AY^Lf_dk7dBQ|63yLY!{zjZ)Zj)G}Fg zZ}zkdSlldbl9F-nUQ!7NaY2B71qjR=-nK?L`gi77R89BrA4k#ehE#c4l51WXF&syw z&QOsjbdUfs{NW@RdaGgD;`8zo0r%tVJ39=EHg>jO9i2uUavj<0i517dH{Gz=M_4~= z7$&ULwaM7Gt&ZLVc%~z?m%M!H($KmIz*ITN;1zqH&&Z1L=xB>^7DeD%Wk#X9?k2y4 zNvx$c-MzaUFq;ri9C4BuH7&p`VjqM46a8Xk9~h*+xnw@)Tvl^Ep{IC=DkX9AvHsG4 zTrc2?G=i7>3896+0t?QwMEnb4w;J2Vfx)_pNvP>DiJKMJmV^`@w&swvH*DT@pM>5y zo~Xw#_7Ec%baT3{wOFNg3ljq-f$z8RL59V{(%j++au7%~1j!wu?33*Y+rlt?}lM+=q; z&2BpH0sGwZ9iAm*H6nc&(7Px*YOed*dW^1A%&yStA)sMpii^11q)X znku*VUQU=^j_!ilN%45=;1lt$fXnz*#TJ$5DTObdDeLUutm)5iyG5T|fwS@#a-X^e zU!@Ln&5@X=F;;Iti0}qp)BWK)W8}&se6rM>62jX~MH!SndA zVCY4z`X0U4ENNBHDDP5hBmuW=5J)3#{}zKU-3mm&Z8gn+EFAyUJyv^6q(u}|B!q8I z(fSDvfeY>ko;aXoQd~oWlDArsmEIS!j*m+2QDbg2y;mQB1eB5l2xzZgI3V48ejW(t z(!lG~?Ynjbyrih?KIs6x=7g^^8UDr`2)ob|x1jsLc^F5@X^ihNLPB&<3(!#lfXFC# zi4Cd%?`U~IKz0VBmayk01*%Rzn{i|5-nbX5WPtif9^#<+fxi@<4;+6c301e3FTJI8 zHeV?^BJWfN<(@4PcI^Vy5#38lO&yGE2&T{T26~<1j_imP_i~|LCmx5TBoe-=o7^Q7 zL3LBDD%pG1Y-T^TM8s9_wx}6zNWt)W{Q##!^I6U{>odR93!xc5E~SQj;;S{@Ur?td z8!;2`ksG?eW7^(OZ$^9znSaNK88;uf2eM{iQJH!@_lb4Wj(I<>nO(RCrO8!g!;smP z>#*VF$${|UKHWjI-A?`z#KC9XE#04ow@A+b8CGg=Nl&Uz7~rdbO|&^9Gjp~a21srx zrI!(9_9ZKU+i&C-(c$@!H2Q<#KSzoE&1oCZi{-NS3PwXWgbZx^>2e zlnN0ZIOW_zf~cafq8w0o@i2`RlkmWua)%TG+}gG}64imUK(HZS5Y->8N$bNonh+%N zoS!{A44!}LT1%g9zm}qlT6+?!j^0r3A!vFX>jw}3_CV!=v~)_L zvntyxjcItoGlm$>h-nn1N^A{KP+^9%ajMMP z&|JvXk3Gww98ntHhO?Bm1$w6^zwFsz>`0hPA zcD|(!d6mU{!q!`d@~w=50mbanOuRE?7|8&Nhd)qyLa9c*RD1Si^k`fTJ< zKZsrgMgcT+^UBk&Jsc8H4^LyK32FMOvmz15JnkyvP0%kX z_?v1xM-up=%ZJlF`uDv>MGu|mAbI(4=j`mtdMGy|1G90r^x*Ji2h93hSUnMXWBB#T zWRy?DT3+AYesYcvZ-!Ea97UNoJS%ibR7@oAZ51!y44yOrT*i^Bt$mr}PfT&eVRIEc z18QPeM3Bjf9dK4QsR86EvXw3O1U^3%U(M-Ic9j9j&EjK{lKf(OcT6_?$f*Lzr?r1v zwP(+l$i3mQwUaDLHC+}^Fd(YZLpL!}cbQj$N0vgr-+~ws-oqN}y4?u+{y|4f?=J4h zXe;EriS_84h7}=12)i!fa-2cKJRk(^{=5?13ehnS|7bv??Z`p{VC0NL{sQ1;AiE6M zV0mvohHAJmdlWX5)j$u+2Px11GiQ-1!R<*tr9_Y-U9?p2li8j2mM-#{L^R79P&ZM0XYOnp`B%SRyA~AG6xa`5ZdMg=V2Mq+_rqC z(-A_yc0fnT0wN=4iUBm=r70jF>l(EfzvBdzG5zr9n3L$E?vS1`U#-R*SjKM=(@r0X z0I}Yy5t8zKMX#24>h?1++w6csL6GUWpE(1nBZ-e=%PKI15KQ+N@-^vW?{1HYgCf9r z-q6c;$sfnPDGhy#6+?>0O$*kRs6PFgQ_QiswbyZ-o?u@uQwUavq|FUH?EsK`%K0;e z`DY6A&lKjLDa=1pn17})|4d>2nZo?Nj`(K^^UoCKpDD~gQ<#6IF#k+p!X*AoVg7#> z&HispVSauilD%lLY4iRq|Jg51|98Fi)+X@ZzyB5L7cI7a1%A2-_|FjdzlJk-^?v~E C%KS|L literal 3480 zcmWIWW@Zs#U|`??Vnv2ar<7)}@iH(toYZFEV-R6TD@x2wjZaA|Nz}_LsAOai0LuWC zGJsTpz}s6Jy;aIZ*gu4BJZb+hDpy4OktWAR|LGH+b*<*x85|^YZ=;%~iKfejjRHHp za$LUb-w-e*c1^3RH|y3&Zq`)Rnc{m3CKx|gtuBAv^XB_vOoe zd;9Fuf9K8C+9NZ!B2cSlzW$$&(e(@U<0YzNe{D4}`uC^w<DJ@-kkDcMp z^KFwzNiBw`nUV?&k?Gr+8rE#y%s13SVyL^{L8`5-E$BTXgI#KN zwsv2Ce{x=)-mTlWgWt0=yt{ShPS5JqtIPfT{E`wA9n%;uOt^RNo`scF)~u?%a-NfF z7KE)n`sPi}tNVNh9xJS7$S6%~U`V<9?c2BAJ)i8k8rEzYjo^V#AX|1NZIqCem0kIr zk>Pt}e0+a%bMuT@vnE9{m@Em=a@`q|w`=p}%@+3d{ijc#UUB_(VMT?+RIjJ?w!8Q2 zne)q%ae`bVD?@#?J@cG7b4-|76ehn38+cERx`2VR;Zy~?_L&)CLh&aazHA4*SXG5nYSEPF@6U Date: Tue, 7 Feb 2023 09:51:55 +0900 Subject: [PATCH 198/555] Fix typo in stripUntranslatable.awk (#3144) Wether -> Whether --- docs/i18n/stripUntranslatable.awk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/i18n/stripUntranslatable.awk b/docs/i18n/stripUntranslatable.awk index 22f633d594..6c2a7a3641 100644 --- a/docs/i18n/stripUntranslatable.awk +++ b/docs/i18n/stripUntranslatable.awk @@ -25,7 +25,7 @@ BEGIN { # The file location of where to put everything # that has been stripped out untranslatablefile="./untranslatable.po" - # Wether we are still reading the licence text + # Whether we are still reading the licence text licencetext=1 } From b3e51e391ec1c9be3a1fe3e0dcb002e5b8845427 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 7 Feb 2023 01:52:17 +0100 Subject: [PATCH 199/555] [pre-commit.ci] pre-commit autoupdate (#3141) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/pycqa/isort: 5.11.4 → 5.12.0](https://github.com/pycqa/isort/compare/5.11.4...5.12.0) - [github.com/psf/black: 22.12.0 → 23.1.0](https://github.com/psf/black/compare/22.12.0...23.1.0) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- manim/animation/creation.py | 1 - manim/animation/speedmodifier.py | 1 - manim/animation/transform_matching_parts.py | 1 - manim/camera/mapping_camera.py | 1 + manim/camera/three_d_camera.py | 1 + manim/mobject/graphing/coordinate_systems.py | 2 -- manim/mobject/graphing/functions.py | 2 -- manim/mobject/graphing/number_line.py | 1 - manim/mobject/graphing/probability.py | 2 -- manim/mobject/text/numbers.py | 2 -- manim/mobject/text/tex_mobject.py | 2 -- manim/mobject/text/text_mobject.py | 2 -- manim/mobject/types/vectorized_mobject.py | 1 - manim/renderer/shader_wrapper.py | 2 +- manim/scene/vector_space_scene.py | 1 - scripts/dev_changelog.py | 1 - .../mobject/graphing/test_coordinate_system.py | 1 - tests/module/mobject/mobject/test_family.py | 12 ++++++++++-- tests/module/scene/test_auto_zoom.py | 1 - tests/opengl/test_coordinate_system_opengl.py | 1 - tests/opengl/test_family_opengl.py | 12 ++++++++++-- .../opengl/test_cli_flags_opengl.py | 2 +- tests/test_scene_rendering/test_cli_flags.py | 2 +- 24 files changed, 27 insertions(+), 31 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 51a08a417d..5ba88145db 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,7 @@ repos: - id: check-toml name: Validate Poetry - repo: https://github.com/pycqa/isort - rev: 5.11.4 + rev: 5.12.0 hooks: - id: isort name: isort (python) @@ -35,7 +35,7 @@ repos: - id: python-check-blanket-noqa name: Precision flake ignores - repo: https://github.com/psf/black - rev: 22.12.0 + rev: 23.1.0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs diff --git a/manim/animation/creation.py b/manim/animation/creation.py index c599708bd6..2c8cae1424 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -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/speedmodifier.py b/manim/animation/speedmodifier.py index f4218e0828..8aa71646b2 100644 --- a/manim/animation/speedmodifier.py +++ b/manim/animation/speedmodifier.py @@ -97,7 +97,6 @@ def __init__( affects_speed_updaters: bool = True, **kwargs, ) -> None: - if issubclass(type(anim), AnimationGroup): self.anim = type(anim)( *map(self.setup, anim.animations), diff --git a/manim/animation/transform_matching_parts.py b/manim/animation/transform_matching_parts.py index 8a400983b8..8c97643860 100644 --- a/manim/animation/transform_matching_parts.py +++ b/manim/animation/transform_matching_parts.py @@ -76,7 +76,6 @@ def __init__( key_map: dict | None = None, **kwargs, ): - if isinstance(mobject, OpenGLVMobject): group_type = OpenGLVGroup elif isinstance(mobject, OpenGLMobject): diff --git a/manim/camera/mapping_camera.py b/manim/camera/mapping_camera.py index 34561c3d9c..03f0afc3b4 100644 --- a/manim/camera/mapping_camera.py +++ b/manim/camera/mapping_camera.py @@ -64,6 +64,7 @@ def capture_mobjects(self, mobjects, **kwargs): # TODO: Add optional separator borders between cameras (or perhaps peel this off into a # CameraPlusOverlay class) + # TODO, the classes below should likely be deleted class OldMultiCamera(Camera): def __init__(self, *cameras_with_start_positions, **kwargs): diff --git a/manim/camera/three_d_camera.py b/manim/camera/three_d_camera.py index 87b48f9fa0..213cebb3bf 100644 --- a/manim/camera/three_d_camera.py +++ b/manim/camera/three_d_camera.py @@ -380,6 +380,7 @@ def add_fixed_orientation_mobjects( The function which returns the centerpoint with respect to which the mobject will be oriented, by default None """ + # This prevents the computation of mobject.get_center # every single time a projection happens def get_static_center_func(mobject): diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 03f96b838f..0873a976e6 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -2287,7 +2287,6 @@ def __init__( gloss=0.5, **kwargs, ): - super().__init__( x_range=x_range, x_length=x_length, @@ -2609,7 +2608,6 @@ def __init__( make_smooth_after_applying_functions: bool = True, **kwargs, ): - # configs self.axis_config = { "stroke_width": 2, diff --git a/manim/mobject/graphing/functions.py b/manim/mobject/graphing/functions.py index 4e40d463bb..c1f053d73a 100644 --- a/manim/mobject/graphing/functions.py +++ b/manim/mobject/graphing/functions.py @@ -128,7 +128,6 @@ def get_point_from_function(self, t): return self.function(t) def generate_points(self): - if self.discontinuities is not None: discontinuities = filter( lambda t: self.t_min <= t <= self.t_max, @@ -203,7 +202,6 @@ def construct(self): """ def __init__(self, function, x_range=None, color=YELLOW, **kwargs): - if x_range is None: x_range = np.array([-config["frame_x_radius"], config["frame_x_radius"]]) diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index db7a1afd89..ededabc8ef 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -568,7 +568,6 @@ def add_labels( labels = VGroup() for x, label in dict_values.items(): - # TODO: remove this check and ability to call # this method via CoordinateSystem.add_coordinates() # must be explicitly called diff --git a/manim/mobject/graphing/probability.py b/manim/mobject/graphing/probability.py index b0f85cdd14..b38027ddf1 100644 --- a/manim/mobject/graphing/probability.py +++ b/manim/mobject/graphing/probability.py @@ -254,7 +254,6 @@ def __init__( bar_stroke_width: float = 3, **kwargs, ): - if isinstance(bar_colors, str): logger.warning( "Passing a string to `bar_colors` has been deprecated since v0.15.2 and will be removed after v0.17.0, the parameter must be a list. " @@ -498,7 +497,6 @@ def construct(self): if chart_val != 0: quotient = value / chart_val if quotient < 0: - aligned_edge = UP if chart_val > 0 else DOWN # if the bar is already positive, then we now want to move it diff --git a/manim/mobject/text/numbers.py b/manim/mobject/text/numbers.py index f5a3b92209..b5b9f71c85 100644 --- a/manim/mobject/text/numbers.py +++ b/manim/mobject/text/numbers.py @@ -174,7 +174,6 @@ def _get_num_string(self, number): return num_string def _string_to_mob(self, string: str, mob_class: VMobject | None = None, **kwargs): - if mob_class is None: mob_class = self.mob_class @@ -405,7 +404,6 @@ def __init__( num_decimal_places: int = 2, **kwargs, ): - self.label = MathTex(label) if isinstance(label, str) else label equals = MathTex("=").next_to(self.label, RIGHT) self.label.add(equals) diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index 92a4bd2cc2..649b5f8c73 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -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 @@ -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/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 471e74c133..709a2fb271 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -426,7 +426,6 @@ def __init__( disable_ligatures: bool = False, **kwargs, ) -> None: - self.line_spacing = line_spacing self.font = font self._font_size = float(font_size) @@ -1097,7 +1096,6 @@ def __init__( disable_ligatures: bool = False, **kwargs, ) -> None: - self.text = text self.line_spacing = line_spacing self.font = font diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 36bf146263..b5cf76ec08 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -2410,7 +2410,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/renderer/shader_wrapper.py b/manim/renderer/shader_wrapper.py index 8eff1772c1..6b38b1b53a 100644 --- a/manim/renderer/shader_wrapper.py +++ b/manim/renderer/shader_wrapper.py @@ -125,7 +125,7 @@ def get_program_code(self): def replace_code(self, old, new): code_map = self.program_code - for (name, _code) in code_map.items(): + for name, _code in code_map.items(): if code_map[name] is None: continue code_map[name] = re.sub(old, new, code_map[name]) diff --git a/manim/scene/vector_space_scene.py b/manim/scene/vector_space_scene.py index f0bdd351b5..339beb1c05 100644 --- a/manim/scene/vector_space_scene.py +++ b/manim/scene/vector_space_scene.py @@ -585,7 +585,6 @@ def __init__( leave_ghost_vectors: bool = False, **kwargs, ): - super().__init__(**kwargs) self.include_background_plane = include_background_plane diff --git a/scripts/dev_changelog.py b/scripts/dev_changelog.py index f84dbb1ca3..5043a4f8cc 100755 --- a/scripts/dev_changelog.py +++ b/scripts/dev_changelog.py @@ -183,7 +183,6 @@ def get_summary(body): try: has_changelog_pattern = re.search(pattern, body) if has_changelog_pattern: - return has_changelog_pattern.group()[22:-21].strip() except Exception: print(f"Error parsing body for changelog: {body}") diff --git a/tests/module/mobject/graphing/test_coordinate_system.py b/tests/module/mobject/graphing/test_coordinate_system.py index c01946322a..fd86a9bd4d 100644 --- a/tests/module/mobject/graphing/test_coordinate_system.py +++ b/tests/module/mobject/graphing/test_coordinate_system.py @@ -63,7 +63,6 @@ def test_NumberPlane(): ] for test_data in testing_data: - x_range, y_range = test_data x_start, x_end = x_range diff --git a/tests/module/mobject/mobject/test_family.py b/tests/module/mobject/mobject/test_family.py index 90b55ebff1..08856b6533 100644 --- a/tests/module/mobject/mobject/test_family.py +++ b/tests/module/mobject/mobject/test_family.py @@ -40,7 +40,11 @@ def test_family(): def test_overlapping_family(): """Check that each member of the family is only gathered once.""" - mob, child1, child2, = ( + ( + mob, + child1, + child2, + ) = ( Mobject(), Mobject(), Mobject(), @@ -64,7 +68,11 @@ def test_shift_family(): """ # Note shift() needs the mobject to have a non-empty `points` attribute, so # we cannot use a plain Mobject or VMobject. We use Circle instead. - mob, child1, child2, = ( + ( + mob, + child1, + child2, + ) = ( Circle(), Circle(), Circle(), diff --git a/tests/module/scene/test_auto_zoom.py b/tests/module/scene/test_auto_zoom.py index ad5da943ba..76c17231fe 100644 --- a/tests/module/scene/test_auto_zoom.py +++ b/tests/module/scene/test_auto_zoom.py @@ -4,7 +4,6 @@ def test_zoom(): - s1 = Square() s1.set_x(-10) s2 = Square() diff --git a/tests/opengl/test_coordinate_system_opengl.py b/tests/opengl/test_coordinate_system_opengl.py index fb0a51748a..603f8eba54 100644 --- a/tests/opengl/test_coordinate_system_opengl.py +++ b/tests/opengl/test_coordinate_system_opengl.py @@ -69,7 +69,6 @@ def test_NumberPlane(using_opengl_renderer): ] for test_data in testing_data: - x_range, y_range, x_vals, y_vals = test_data x_start, x_end = x_range diff --git a/tests/opengl/test_family_opengl.py b/tests/opengl/test_family_opengl.py index 96a4814d76..f16d0e4756 100644 --- a/tests/opengl/test_family_opengl.py +++ b/tests/opengl/test_family_opengl.py @@ -41,7 +41,11 @@ def test_family(using_opengl_renderer): def test_overlapping_family(using_opengl_renderer): """Check that each member of the family is only gathered once.""" - mob, child1, child2, = ( + ( + mob, + child1, + child2, + ) = ( OpenGLMobject(), OpenGLMobject(), OpenGLMobject(), @@ -65,7 +69,11 @@ def test_shift_family(using_opengl_renderer): """ # Note shift() needs the OpenGLMobject to have a non-empty `points` attribute, so # we cannot use a plain OpenGLMobject or OpenGLVMobject. We use Circle instead. - mob, child1, child2, = ( + ( + mob, + child1, + child2, + ) = ( Circle(), Circle(), Circle(), diff --git a/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py b/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py index d3ecb1cf2c..e9a5d7e96d 100644 --- a/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py +++ b/tests/test_scene_rendering/opengl/test_cli_flags_opengl.py @@ -50,7 +50,7 @@ def test_resolution_flag(tmp_path, manim_cfg_file, simple_scenes_path): # (800, 600, ";"), ] - for (width, height, separator) in resolutions: + for width, height, separator in resolutions: command = [ sys.executable, "-m", diff --git a/tests/test_scene_rendering/test_cli_flags.py b/tests/test_scene_rendering/test_cli_flags.py index d8c76c0206..aaee0276a2 100644 --- a/tests/test_scene_rendering/test_cli_flags.py +++ b/tests/test_scene_rendering/test_cli_flags.py @@ -48,7 +48,7 @@ def test_resolution_flag(tmp_path, manim_cfg_file, simple_scenes_path): # (800, 600, ";"), ] - for (width, height, separator) in resolutions: + for width, height, separator in resolutions: command = [ sys.executable, "-m", From 1a439057ada45d5a4db1848b8b2305cd2cc65d3c Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Fri, 24 Feb 2023 02:47:34 -0800 Subject: [PATCH 200/555] Remove actions using self-hosted runners (#3156) see https://github.com/ManimCommunity/manim/discussions/3130 --- .github/workflows/ci.yml | 51 ---------------------------------------- 1 file changed, 51 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0cac97815c..58ebd5696a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,57 +13,6 @@ on: - main jobs: - test-arm: - runs-on: self-hosted - env: - DISPLAY: :0 - PYTEST_ADDOPTS: "--color=yes" # colors in pytest - strategy: - fail-fast: false - matrix: - python: ["3.8.16", "3.11.1"] - steps: - - name: Checkout the repository - uses: actions/checkout@v3 - - - name: Check Runner - run: | - which latex - which ffmpeg - latex --version - ffmpeg -version - which python - python --version - - - name: Activate Python ${{ matrix.python }} - run: | - echo "/root/.pyenv/versions/${{ matrix.python }}/bin:/root/.local/bin:$PATH" > $GITHUB_PATH - - - name: Show Python Version - run: | - python --version --version - - - name: Install Manim - run: | - poetry config virtualenvs.prefer-active-python true - poetry install - - - name: Run tests - run: | - poetry run pytest - - - name: Run module doctests - run: | - poetry run pytest --cov-append --doctest-modules --ignore-glob="*opengl*" manim - - - name: Run doctests in rst files - run: | - cd docs && poetry run make doctest O=-tskip-manim - - # upload coverage report - - name: Upload coverage - uses: codecov/codecov-action@v3 - test: runs-on: ${{ matrix.os }} env: From 409ffc6cb8682e40af5caa93a3e5a84e08e2b7e9 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 24 Feb 2023 11:48:16 +0100 Subject: [PATCH 201/555] Fixed behavior of `Wait` with specified `stop_condition` (#3152) * fixed behavior of stop_condition in Wait * updated documentation to reflect actual behavior of wait_until etc * added test for Wait with stop_condition and Scene.wait_until * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/animation/animation.py | 4 ++-- manim/scene/scene.py | 20 ++++++++----------- tests/test_scene_rendering/test_play_logic.py | 16 +++++++++++++++ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/manim/animation/animation.py b/manim/animation/animation.py index c77af0cbf6..5d4ab3c2df 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -528,8 +528,8 @@ class Wait(Animation): stop_condition A function without positional arguments that evaluates to a boolean. The function is evaluated after every new frame has been rendered. - Playing the animation only stops after the return value is truthy. - Overrides the specified ``run_time``. + Playing the animation stops after the return value is truthy, or + after the specified ``run_time`` has passed. frozen_frame Controls whether or not the wait animation is static, i.e., corresponds to a frozen frame. If ``False`` is passed, the render loop still diff --git a/manim/scene/scene.py b/manim/scene/scene.py index cbecfe3edb..a1b436ae0a 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -383,6 +383,7 @@ def should_update_mobjects(self) -> bool: should_update = ( self.always_update_mobjects or self.updaters + or wait_animation.stop_condition is not None or any( [ mob.has_time_based_updater() @@ -1018,10 +1019,7 @@ def get_run_time(self, animations: list[Animation]): """ if len(animations) == 1 and isinstance(animations[0], Wait): - if animations[0].stop_condition is not None: - return 0 - else: - return animations[0].duration + return animations[0].duration else: return np.max([animation.run_time for animation in animations]) @@ -1104,7 +1102,8 @@ def wait( stop_condition A function without positional arguments that is evaluated every time a frame is rendered. The animation only stops when the return value - of the function is truthy. Overrides any value passed to ``duration``. + of the function is truthy, or when the time specified in ``duration`` + passes. frozen_frame If True, updater functions are not evaluated, and the animation outputs a frozen frame. If False, updater functions are called and frames @@ -1141,18 +1140,15 @@ def pause(self, duration: float = DEFAULT_WAIT_TIME): self.wait(duration=duration, frozen_frame=True) def wait_until(self, stop_condition: Callable[[], bool], max_time: float = 60): - """ - Like a wrapper for wait(). - You pass a function that determines whether to continue waiting, - and a max wait time if that is never fulfilled. + """Wait until a condition is satisfied, up to a given maximum duration. Parameters ---------- stop_condition - The function whose boolean return value determines whether to continue waiting - + A function with no arguments that determines whether or not the + scene should keep waiting. max_time - The maximum wait time in seconds, if the stop_condition is never fulfilled. + The maximum wait time in seconds. """ self.wait(max_time, stop_condition=stop_condition) diff --git a/tests/test_scene_rendering/test_play_logic.py b/tests/test_scene_rendering/test_play_logic.py index 9a8e44bea1..a0d97920bd 100644 --- a/tests/test_scene_rendering/test_play_logic.py +++ b/tests/test_scene_rendering/test_play_logic.py @@ -73,6 +73,22 @@ def test_non_static_wait_detection(using_temp_config, disabling_caching): assert not scene.is_current_animation_frozen_frame() +def test_wait_with_stop_condition(using_temp_config, disabling_caching): + class TestScene(Scene): + def construct(self): + self.wait_until(lambda: self.renderer.time >= 1) + assert self.renderer.time >= 1 + d = Dot() + d.add_updater(lambda mobj, dt: self.add(Mobject())) + self.add(d) + self.play(Wait(run_time=5, stop_condition=lambda: len(self.mobjects) > 5)) + assert len(self.mobjects) > 5 + assert self.renderer.time < 2 + + scene = TestScene() + scene.render() + + def test_frozen_frame(using_temp_config, disabling_caching): scene = SceneForFrozenFrameTests() scene.render() From e20e446df684a9d9595cc53133b08074e6322b27 Mon Sep 17 00:00:00 2001 From: Elyanah Aco Date: Fri, 24 Feb 2023 18:52:08 +0800 Subject: [PATCH 202/555] Remove alignment_vect arg in align_to (#3165) --- manim/mobject/mobject.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 7b6515068c..e51efb1160 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -2094,17 +2094,12 @@ def align_to( self, mobject_or_point: Mobject | np.ndarray | list, direction=ORIGIN, - alignment_vect=UP, ): """Aligns mobject to another :class:`~.Mobject` in a certain direction. Examples: mob1.align_to(mob2, UP) moves mob1 vertically so that its top edge lines ups with mob2's top edge. - - mob1.align_to(mob2, alignment_vect = RIGHT) moves mob1 - horizontally so that it's center is directly above/below - the center of mob2 """ if isinstance(mobject_or_point, Mobject): point = mobject_or_point.get_critical_point(direction) From 671d202b11f95381feb9b8f42c184999bdfcbbe3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Feb 2023 11:59:09 +0100 Subject: [PATCH 203/555] Bump markdown-it-py from 2.1.0 to 2.2.0 (#3164) Bumps [markdown-it-py](https://github.com/executablebooks/markdown-it-py) from 2.1.0 to 2.2.0. - [Release notes](https://github.com/executablebooks/markdown-it-py/releases) - [Changelog](https://github.com/executablebooks/markdown-it-py/blob/master/CHANGELOG.md) - [Commits](https://github.com/executablebooks/markdown-it-py/compare/v2.1.0...v2.2.0) --- updated-dependencies: - dependency-name: markdown-it-py dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index 37cdd234fa..21b7f65f50 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1986,24 +1986,24 @@ test = ["pytest"] [[package]] name = "markdown-it-py" -version = "2.1.0" +version = "2.2.0" 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"}, + {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, + {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, ] [package.dependencies] mdurl = ">=0.1,<1.0" [package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] -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)"] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] From 87da1d5b9a9933aeba6d850116eb6e20594a888c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Feb 2023 12:02:04 +0100 Subject: [PATCH 204/555] Bump ipython from 8.7.0 to 8.10.0 (#3154) Bumps [ipython](https://github.com/ipython/ipython) from 8.7.0 to 8.10.0. - [Release notes](https://github.com/ipython/ipython/releases) - [Commits](https://github.com/ipython/ipython/compare/8.7.0...8.10.0) --- updated-dependencies: - dependency-name: ipython dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/poetry.lock b/poetry.lock index 21b7f65f50..081b043d8e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -38,7 +38,7 @@ name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, @@ -155,7 +155,7 @@ name = "asttokens" version = "2.2.1" description = "Annotate AST trees with source code positions" category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, @@ -206,7 +206,7 @@ name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, @@ -934,7 +934,7 @@ name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, @@ -1391,14 +1391,14 @@ typing = ["mypy (>=0.990)"] [[package]] name = "ipython" -version = "8.7.0" +version = "8.10.0" description = "IPython: Productive Interactive Computing" category = "main" -optional = true +optional = false 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"}, + {file = "ipython-8.10.0-py3-none-any.whl", hash = "sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345"}, + {file = "ipython-8.10.0.tar.gz", hash = "sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e"}, ] [package.dependencies] @@ -1410,13 +1410,13 @@ jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" -prompt-toolkit = ">=3.0.11,<3.1.0" +prompt-toolkit = ">=3.0.30,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5" [package.extras] -all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.20)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] black = ["black"] doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] @@ -1426,7 +1426,7 @@ 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.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] [[package]] name = "ipython_genutils" @@ -1493,7 +1493,7 @@ name = "jedi" version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." category = "main" -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, @@ -2126,7 +2126,7 @@ name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" category = "main" -optional = true +optional = false python-versions = ">=3.5" files = [ {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, @@ -2662,7 +2662,7 @@ name = "parso" version = "0.8.3" description = "A Python Parser" category = "main" -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, @@ -2690,7 +2690,7 @@ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, @@ -2705,7 +2705,7 @@ name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, @@ -2871,7 +2871,7 @@ name = "prompt-toolkit" version = "3.0.36" description = "Library for building powerful interactive command lines in Python" category = "main" -optional = true +optional = false python-versions = ">=3.6.2" files = [ {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, @@ -2939,7 +2939,7 @@ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, @@ -2951,7 +2951,7 @@ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, @@ -4097,7 +4097,7 @@ name = "stack-data" version = "0.6.2" description = "Extract data from python stack frames and tracebacks for informative displays" category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, @@ -4247,7 +4247,7 @@ name = "traitlets" version = "5.6.0" description = "Traitlets Python configuration system" category = "main" -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "traitlets-5.6.0-py3-none-any.whl", hash = "sha256:1410755385d778aed847d68deb99b3ba30fbbf489e17a1e8cbb753060d5cce73"}, @@ -4472,7 +4472,7 @@ name = "wcwidth" version = "0.2.5" description = "Measures the displayed width of unicode strings in a terminal" category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, From 7b5c593bc5881279532c148a7969542cce543054 Mon Sep 17 00:00:00 2001 From: Max Coplan Date: Fri, 24 Feb 2023 03:35:09 -0800 Subject: [PATCH 205/555] typo(docs): Fix grammar (#3160) * typo(docs): Fix grammar * fix typo in source code --- .../gettext/reference/manim.animation.animation.Animation.pot | 4 ++-- manim/animation/animation.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/i18n/gettext/reference/manim.animation.animation.Animation.pot b/docs/i18n/gettext/reference/manim.animation.animation.Animation.pot index ebd350ca77..6c94f8f840 100644 --- a/docs/i18n/gettext/reference/manim.animation.animation.Animation.pot +++ b/docs/i18n/gettext/reference/manim.animation.animation.Animation.pot @@ -171,12 +171,12 @@ msgstr "" #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.begin:1::1 #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.is_introducer:1 -msgid "Test if a the animation is an introducer." +msgid "Test if the animation is an introducer." msgstr "" #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.begin:1::1 #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.is_remover:1 -msgid "Test if a the animation is a remover." +msgid "Test if the animation is a remover." msgstr "" #: ../../../manim/animation/animation.py:docstring of manim.animation.animation.Animation.begin:1::1 diff --git a/manim/animation/animation.py b/manim/animation/animation.py index 5d4ab3c2df..ddacb37c6c 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -457,7 +457,7 @@ def set_name(self, name: str) -> Animation: return self def is_remover(self) -> bool: - """Test if a the animation is a remover. + """Test if the animation is a remover. Returns ------- @@ -467,7 +467,7 @@ def is_remover(self) -> bool: return self.remover def is_introducer(self) -> bool: - """Test if a the animation is an introducer. + """Test if the animation is an introducer. Returns ------- From e884b8b1bb098d76d1aaa3e705785719fb6d9956 Mon Sep 17 00:00:00 2001 From: davidot Date: Fri, 24 Feb 2023 12:38:25 +0100 Subject: [PATCH 206/555] Fix docstring of ThreeDCamera get_value_trackers (#3124) Without this unpacking values returned from get_value_trackers could have one too many. --- manim/camera/three_d_camera.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manim/camera/three_d_camera.py b/manim/camera/three_d_camera.py index 213cebb3bf..f45854e810 100644 --- a/manim/camera/three_d_camera.py +++ b/manim/camera/three_d_camera.py @@ -85,7 +85,8 @@ def capture_mobjects(self, mobjects, **kwargs): super().capture_mobjects(mobjects, **kwargs) def get_value_trackers(self): - """Returns list of ValueTrackers of phi, theta, focal_distance and gamma + """A list of :class:`ValueTrackers <.ValueTracker>` of phi, theta, focal_distance, + gamma and zoom. Returns ------- From c2492cea12712a86175d02ac2dd1e0e63688e34b Mon Sep 17 00:00:00 2001 From: DegrangeM <53106394+DegrangeM@users.noreply.github.com> Date: Fri, 24 Feb 2023 12:41:33 +0100 Subject: [PATCH 207/555] Allow to use call_updater=True with a function without dt (#3149) * Allow to use call_updater=True with a function without dt * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/mobject.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index e51efb1160..8e40cc8c65 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -971,7 +971,11 @@ def construct(self): else: self.updaters.insert(index, update_function) if call_updater: - update_function(self, 0) + parameters = get_parameters(update_function) + if "dt" in parameters: + update_function(self, 0) + else: + update_function(self) return self def remove_updater(self, update_function: Updater): From d5b65b844b8ce8ff5151a2f56f9dc98cebbc1db4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 24 Feb 2023 12:42:33 +0100 Subject: [PATCH 208/555] [pre-commit.ci] pre-commit autoupdate (#3158) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-mypy: v0.991 → v1.0.1](https://github.com/pre-commit/mirrors-mypy/compare/v0.991...v1.0.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5ba88145db..7cb9c50783 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: v0.991 + rev: v1.0.1 hooks: - id: mypy additional_dependencies: From d8e3802838a2fe4c9c096e1da54ee7e2b2b8a10c Mon Sep 17 00:00:00 2001 From: KingAndCross <91031772+KingAndCross@users.noreply.github.com> Date: Tue, 7 Mar 2023 15:24:32 -0300 Subject: [PATCH 209/555] fix: BraceLabel not passing **kwargs to Brace (#3163) * fix: BraceLabel not passing **kwargs to Brace * create an empty dict if brace_config is None * added typehints and included comments made * added missing type hints in BraceLabel.__init__ * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed docstring indentation * remove superfluous import --------- Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/svg/brace.py | 43 +++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/manim/mobject/svg/brace.py b/manim/mobject/svg/brace.py index 63267a5e05..a595f05a2a 100644 --- a/manim/mobject/svg/brace.py +++ b/manim/mobject/svg/brace.py @@ -156,24 +156,47 @@ def get_direction(self): class BraceLabel(VMobject, metaclass=ConvertToOpenGL): + """Create a brace with a label attached. + + Parameters + ---------- + obj + The mobject adjacent to which the brace is placed. + text + The label text. + brace_direction + The direction of the brace. By default ``DOWN``. + label_constructor + A class or function used to construct a mobject representing + the label. By default :class:`~.MathTex`. + font_size + The font size of the label, passed to the ``label_constructor``. + buff + The buffer between the mobject and the brace. + brace_config + Arguments to be passed to :class:`.Brace`. + kwargs + Additional arguments to be passed to :class:`~.VMobject`. + """ + def __init__( self, - obj, - text, - brace_direction=DOWN, - label_constructor=MathTex, - font_size=DEFAULT_FONT_SIZE, - buff=0.2, + obj: Mobject, + text: str, + brace_direction: np.ndarray = DOWN, + label_constructor: type = MathTex, + font_size: float = DEFAULT_FONT_SIZE, + buff: float = 0.2, + brace_config: dict | None = None, **kwargs, ): self.label_constructor = label_constructor super().__init__(**kwargs) self.brace_direction = brace_direction - self.buff = buff - if isinstance(obj, list): - obj = self.get_group_class()(*obj) - self.brace = Brace(obj, brace_direction, buff, **kwargs) + if brace_config is None: + brace_config = {} + self.brace = Brace(obj, brace_direction, buff, **brace_config) if isinstance(text, (tuple, list)): self.label = self.label_constructor(font_size=font_size, *text, **kwargs) From 92b01ebbc603565b8a91a996fb0165e0d8f002a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Lundstr=C3=B6m?= <86777324+Flundrahn@users.noreply.github.com> Date: Wed, 8 Mar 2023 05:58:46 +0100 Subject: [PATCH 210/555] Fix deprecation warning from numpy (#3179) --- manim/mobject/graphing/functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/graphing/functions.py b/manim/mobject/graphing/functions.py index c1f053d73a..970ddb0ce6 100644 --- a/manim/mobject/graphing/functions.py +++ b/manim/mobject/graphing/functions.py @@ -158,7 +158,7 @@ def generate_points(self): x, y, z = self.function(t_range) if not isinstance(z, np.ndarray): z = np.zeros_like(x) - points = np.stack(zip(x, y, z), axis=0) + points = np.stack([x, y, z], axis=1) else: points = np.array([self.function(t) for t in t_range]) From 27011d648f8a0fe0d79fd9187b21083a4009a940 Mon Sep 17 00:00:00 2001 From: ciobaca Date: Wed, 15 Mar 2023 00:21:39 +0200 Subject: [PATCH 211/555] Fixed extlinks in docs to work with latest version of Sphinx. (#3186) --- docs/source/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 5e1961b818..649f991e76 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -138,8 +138,8 @@ # external links extlinks = { - "issue": ("https://github.com/ManimCommunity/manim/issues/%s", "#"), - "pr": ("https://github.com/ManimCommunity/manim/pull/%s", "#"), + "issue": ("https://github.com/ManimCommunity/manim/issues/%s", "#%s"), + "pr": ("https://github.com/ManimCommunity/manim/pull/%s", "#%s"), } # opengraph settings From 2aae32fd7edf49d4176c55294831bc8295ddfdc3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 01:27:20 +0200 Subject: [PATCH 212/555] [pre-commit.ci] pre-commit autoupdate (#3184) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/pre-commit/mirrors-mypy: v1.0.1 → v1.1.1](https://github.com/pre-commit/mirrors-mypy/compare/v1.0.1...v1.1.1) - [github.com/codespell-project/codespell: v2.2.2 → v2.2.4](https://github.com/codespell-project/codespell/compare/v2.2.2...v2.2.4) * ignore poetry.lock when running codespell * explicitly only spellcheck py/md/rst files * try again, different syntax --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- .pre-commit-config.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7cb9c50783..c1e25b7e09 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.0.1 + rev: v1.1.1 hooks: - id: mypy additional_dependencies: @@ -71,7 +71,8 @@ repos: ] - repo: https://github.com/codespell-project/codespell - rev: v2.2.2 + rev: v2.2.4 hooks: - id: codespell + files: ^.*\.(py|md|rst)$ args: ["-L", "medias,nam"] From f6a379ccfd8b0465577eb290997f044b1649a1e0 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Tue, 28 Mar 2023 21:15:34 +0530 Subject: [PATCH 213/555] CI: update PATH for recent changed in TinyTex (#3196) `win32` -> `windows` due to 64-bit binaries --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 58ebd5696a..fa25d8870f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -133,7 +133,7 @@ jobs: echo "Install Tinytex" Invoke-WebRequest "https://github.com/yihui/tinytex-releases/releases/download/daily/TinyTeX-1.zip" -O "$($env:TMP)\TinyTex.zip" Expand-Archive -LiteralPath "$($env:TMP)\TinyTex.zip" -DestinationPath "$($PWD)\ManimCache\LatexWindows" - $env:Path = "$($PWD)\ManimCache\LatexWindows\TinyTeX\bin\win32;$($env:PATH)" + $env:Path = "$($PWD)\ManimCache\LatexWindows\TinyTeX\bin\windows;$($env:PATH)" tlmgr update --self foreach ($c in $tinyTexPackages){ $c=$c.Trim() @@ -145,7 +145,7 @@ jobs: - name: Add Windows dependencies to PATH if: runner.os == 'Windows' run: | - $env:Path += ";" + "$($PWD)\ManimCache\LatexWindows\TinyTeX\bin\win32" + $env:Path += ";" + "$($PWD)\ManimCache\LatexWindows\TinyTeX\bin\windows" $env:Path = "$env:USERPROFILE\.poetry\bin;$($env:PATH)" echo "$env:Path" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append From 479e7b62e6c22659449fd502d5bc6a1cb1ad8ff3 Mon Sep 17 00:00:00 2001 From: JinchuLi2002 <63861808+JinchuLi2002@users.noreply.github.com> Date: Tue, 28 Mar 2023 14:19:03 -0400 Subject: [PATCH 214/555] scales x&y before calling ImplicitFunction() (#3195) --- manim/mobject/graphing/coordinate_systems.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 0873a976e6..46eda68db3 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -715,8 +715,10 @@ def construct(self): ) self.add(ax, a) """ + x_scale = self.get_x_axis().scaling + y_scale = self.get_y_axis().scaling graph = ImplicitFunction( - func=func, + func=(lambda x, y: func(x_scale.function(x), y_scale.function(y))), x_range=self.x_range[:2], y_range=self.y_range[:2], min_depth=min_depth, From ca8a77d09178c35a985ddc8fbe14ab33b269e662 Mon Sep 17 00:00:00 2001 From: karpfediem <11753414+karpfediem@users.noreply.github.com> Date: Tue, 28 Mar 2023 20:40:52 +0200 Subject: [PATCH 215/555] fix(3183): render in named threads, limit condition (#3191) Limit condition to interactive OpenGL mode Co-authored-by: Benjamin Hackl --- manim/scene/scene.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/manim/scene/scene.py b/manim/scene/scene.py index a1b436ae0a..dc519b9ebd 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -1053,8 +1053,12 @@ def play( All other keywords are passed to the renderer. """ - # Make sure this is running on the main thread - if threading.current_thread().name != "MainThread": + # If we are in interactive embedded mode, make sure this is running on the main thread (required for OpenGL) + if ( + self.interactive_mode + and config.renderer == RendererType.OPENGL + and threading.current_thread().name != "MainThread" + ): kwargs.update( { "subcaption": subcaption, From f2f428f8761b46ec21ce2e594aa1489e22f0c935 Mon Sep 17 00:00:00 2001 From: Phoenix2157 <69739582+rayyan21d@users.noreply.github.com> Date: Wed, 29 Mar 2023 00:15:45 +0530 Subject: [PATCH 216/555] Corrected the hinted return type for :func:`angle_between_vectors` (#3189) * Update space_ops.py * Apply suggestions from code review --------- Co-authored-by: Benjamin Hackl --- manim/utils/space_ops.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 203462057a..1d8fba6d3c 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -324,7 +324,7 @@ def angle_of_vector(vector: Sequence[float] | np.ndarray) -> float: return np.angle(complex(*vector[:2])) -def angle_between_vectors(v1: np.ndarray, v2: np.ndarray) -> np.ndarray: +def angle_between_vectors(v1: np.ndarray, v2: np.ndarray) -> float: """Returns the angle between two vectors. This angle will always be between 0 and pi @@ -337,7 +337,7 @@ def angle_between_vectors(v1: np.ndarray, v2: np.ndarray) -> np.ndarray: Returns ------- - np.ndarray + float The angle between the vectors. """ From 1e8b349e007e96ab6644ec08ff3eea2abe35d2a0 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Tue, 28 Mar 2023 14:48:29 -0400 Subject: [PATCH 217/555] Reduce memory allocations when building SVGMobject (#3182) * Reduce memory allocations when building SVGMobject * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * split two quads * fix shape * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * assign * Fix lines * Add some tests and fix extra lineto * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Appease assertion CQ check --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/svg/svg_mobject.py | 115 ++++++++++++++---- tests/module/mobject/svg/test_svg_mobject.py | 80 ++++++++++++ .../img_svg_resources/dash.svg | 10 ++ 3 files changed, 182 insertions(+), 23 deletions(-) create mode 100644 tests/test_graphical_units/img_svg_resources/dash.svg diff --git a/manim/mobject/svg/svg_mobject.py b/manim/mobject/svg/svg_mobject.py index e92f1baa45..579bbebf26 100644 --- a/manim/mobject/svg/svg_mobject.py +++ b/manim/mobject/svg/svg_mobject.py @@ -12,6 +12,7 @@ from manim import config, logger from ...constants import RIGHT +from ...utils.bezier import get_quadratic_approximation_of_cubic from ...utils.images import get_full_vector_image_path from ...utils.iterables import hash_obj from ..geometry.arc import Circle @@ -497,28 +498,96 @@ def init_points(self) -> None: generate_points = init_points def handle_commands(self) -> None: - segment_class_to_func_map = { - se.Move: (self.start_new_path, ("end",)), - se.Close: (self.close_path, ()), - se.Line: (self.add_line_to, ("end",)), - se.QuadraticBezier: ( - self.add_quadratic_bezier_curve_to, - ("control", "end"), - ), - se.CubicBezier: ( - self.add_cubic_bezier_curve_to, - ("control1", "control2", "end"), - ), - } + all_points: list[np.ndarray] = [] + last_move = None + curve_start = None + + # These lambdas behave the same as similar functions in + # vectorized_mobject, except they add to a list of points instead + # of updating this Mobject's numpy array of points. This way, + # we don't observe O(n^2) behavior for complex paths due to + # numpy's need to re-allocate memory on every append. + def move_pen(pt): + nonlocal last_move, curve_start + last_move = pt + if curve_start is None: + curve_start = last_move + + if self.n_points_per_curve == 4: + + def add_cubic(start, cp1, cp2, end): + nonlocal all_points + assert len(all_points) % 4 == 0, len(all_points) + all_points += [start, cp1, cp2, end] + move_pen(end) + + def add_quad(start, cp, end): + add_cubic(start, (start + cp + cp) / 3, (cp + cp + end) / 3, end) + move_pen(end) + + def add_line(start, end): + add_cubic( + start, (start + start + end) / 3, (start + end + end) / 3, end + ) + move_pen(end) + + else: + + def add_cubic(start, cp1, cp2, end): + nonlocal all_points + assert len(all_points) % 3 == 0, len(all_points) + two_quads = get_quadratic_approximation_of_cubic( + start, + cp1, + cp2, + end, + ) + all_points += two_quads[:3].tolist() + all_points += two_quads[3:].tolist() + move_pen(end) + + def add_quad(start, cp, end): + nonlocal all_points + assert len(all_points) % 3 == 0, len(all_points) + all_points += [start, cp, end] + move_pen(end) + + def add_line(start, end): + add_quad(start, (start + end) / 2, end) + move_pen(end) + for segment in self.path_obj: segment_class = segment.__class__ - func, attr_names = segment_class_to_func_map[segment_class] - points = [ - _convert_point_to_3d(*segment.__getattribute__(attr_name)) - for attr_name in attr_names - ] - func(*points) - - # Get rid of the side effect of trailing "Z M" commands. - if self.has_new_path_started(): - self.resize_points(self.get_num_points() - 1) + if segment_class == se.Move: + move_pen(_convert_point_to_3d(*segment.end)) + elif segment_class == se.Line: + add_line(last_move, _convert_point_to_3d(*segment.end)) + elif segment_class == se.QuadraticBezier: + add_quad( + last_move, + _convert_point_to_3d(*segment.control), + _convert_point_to_3d(*segment.end), + ) + elif segment_class == se.CubicBezier: + add_cubic( + last_move, + _convert_point_to_3d(*segment.control1), + _convert_point_to_3d(*segment.control2), + _convert_point_to_3d(*segment.end), + ) + elif segment_class == se.Close: + # If the SVG path naturally ends at the beginning of the curve, + # we do *not* need to draw a closing line. To account for floating + # point precision, we use a small value to compare the two points. + if abs(np.linalg.norm(last_move - curve_start)) > 0.0001: + add_line(last_move, curve_start) + curve_start = None + else: + raise AssertionError(f"Not implemented: {segment_class}") + + self.points = np.array(all_points, ndmin=2, dtype="float64") + # If we have no points, make sure the array is shaped properly + # (0 rows tall by 3 columns wide) so future operations can + # add or remove points correctly. + if len(all_points) == 0: + self.points = np.reshape(self.points, (0, 3)) diff --git a/tests/module/mobject/svg/test_svg_mobject.py b/tests/module/mobject/svg/test_svg_mobject.py index 116feb9e32..4568b51b2d 100644 --- a/tests/module/mobject/svg/test_svg_mobject.py +++ b/tests/module/mobject/svg/test_svg_mobject.py @@ -56,3 +56,83 @@ def test_stroke_overrides_color(): stroke_color=expected_color, ) assert svg.stroke_color == Color(expected_color) + + +def test_single_path_turns_into_sequence_of_points(): + svg = SVGMobject( + get_svg_resource("cubic_and_lineto.svg"), + ) + assert len(svg.points) == 0, svg.points + assert len(svg.submobjects) == 1, svg.submobjects + path = svg.submobjects[0] + np.testing.assert_almost_equal( + path.points, + np.array( + [ + [-0.166666666666666, 0.66666666666666, 0.0], + [-0.166666666666666, 0.0, 0.0], + [0.5, 0.66666666666666, 0.0], + [0.5, 0.0, 0.0], + [0.5, 0.0, 0.0], + [-0.16666666666666666, 0.0, 0.0], + [0.5, -0.6666666666666666, 0.0], + [-0.166666666666666, -0.66666666666666, 0.0], + [-0.166666666666666, -0.66666666666666, 0.0], + [-0.27777777777777, -0.77777777777777, 0.0], + [-0.38888888888888, -0.88888888888888, 0.0], + [-0.5, -1.0, 0.0], + [-0.5, -1.0, 0.0], + [-0.5, -0.333333333333, 0.0], + [-0.5, 0.3333333333333, 0.0], + [-0.5, 1.0, 0.0], + [-0.5, 1.0, 0.0], + [-0.38888888888888, 0.8888888888888, 0.0], + [-0.27777777777777, 0.7777777777777, 0.0], + [-0.16666666666666, 0.6666666666666, 0.0], + ] + ), + decimal=5, + ) + + +def test_closed_path_does_not_have_extra_point(): + # This dash.svg is the output of a "-" as generated from LaTex. + # It ends back where it starts, so we shouldn't see a final line. + svg = SVGMobject( + get_svg_resource("dash.svg"), + ) + assert len(svg.points) == 0, svg.points + assert len(svg.submobjects) == 1, svg.submobjects + dash = svg.submobjects[0] + np.testing.assert_almost_equal( + dash.points, + np.array( + [ + [13.524988331417841, -1.0, 0], + [14.374988080480586, -1.0, 0], + [15.274984567359079, -1.0, 0], + [15.274984567359079, 0.0, 0.0], + [15.274984567359079, 0.0, 0.0], + [15.274984567359079, 1.0, 0.0], + [14.374988080480586, 1.0, 0.0], + [13.524988331417841, 1.0, 0.0], + [13.524988331417841, 1.0, 0.0], + [4.508331116720995, 1.0, 0], + [-4.508326097975995, 1.0, 0.0], + [-13.524983312672841, 1.0, 0.0], + [-13.524983312672841, 1.0, 0.0], + [-14.374983061735586, 1.0, 0.0], + [-15.274984567359079, 1.0, 0.0], + [-15.274984567359079, 0.0, 0.0], + [-15.274984567359079, 0.0, 0.0], + [-15.274984567359079, -1.0, 0], + [-14.374983061735586, -1.0, 0], + [-13.524983312672841, -1.0, 0], + [-13.524983312672841, -1.0, 0], + [-4.508326097975995, -1.0, 0], + [4.508331116720995, -1.0, 0], + [13.524988331417841, -1.0, 0], + ] + ), + decimal=5, + ) diff --git a/tests/test_graphical_units/img_svg_resources/dash.svg b/tests/test_graphical_units/img_svg_resources/dash.svg new file mode 100644 index 0000000000..529ab2b093 --- /dev/null +++ b/tests/test_graphical_units/img_svg_resources/dash.svg @@ -0,0 +1,10 @@ + + + + + + + + + + From 1edcd99250f57ffecf41cce50724737927ffbe96 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Tue, 28 Mar 2023 15:03:03 -0400 Subject: [PATCH 218/555] Speed up width/height/depth by reducing copying (#3180) * Speed up width/height/depth by reducing copying * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix test * fix example and improve tests * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * imports * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * typo * np.max/min is 2x slower than max/min --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/mobject.py | 50 ++++++--- tests/module/mobject/mobject/test_mobject.py | 110 ++++++++++++++++++- 2 files changed, 145 insertions(+), 15 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 8e40cc8c65..b9ef39af88 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1842,16 +1842,29 @@ def restore(self): self.become(self.saved_state) return self - ## - - def reduce_across_dimension(self, points_func, reduce_func, dim): - points = self.get_all_points() - if points is None or len(points) == 0: - # Note, this default means things like empty VGroups - # will appear to have a center at [0, 0, 0] + def reduce_across_dimension(self, reduce_func, dim: int) -> float: + """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: + # If we have no points and no submobjects, return 0 (e.g. center) return 0 - values = points_func(points[:, dim]) - return reduce_func(values) + + # If we do not have points (but do have submobjects) + # use only the points from those. + if len(self.points) == 0: + rv = None + else: + # Otherwise, be sure to include our own points + rv = reduce_func(self.points[:, dim]) + # Recursively ask submobjects (if any) for the biggest/ + # smallest dimension they have and compare it to the return value. + for mobj in self.submobjects: + value = mobj.reduce_across_dimension(reduce_func, dim) + if rv is None: + rv = value + else: + rv = reduce_func([value, rv]) + return rv def nonempty_submobjects(self): return [ @@ -1860,13 +1873,23 @@ def nonempty_submobjects(self): if len(submob.submobjects) != 0 or len(submob.points) != 0 ] - def get_merged_array(self, array_attr): + def get_merged_array(self, array_attr) -> np.ndarray: + """Return all of a given attribute from this mobject and all submobjects. + + May contain duplicates; the order is in a depth-first (pre-order) + traversal of the submobjects. + """ 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) -> np.ndarray: + """Return all points from this mobject and all submobjects. + + May contain duplicates; the order is in a depth-first (pre-order) + traversal of the submobjects. + """ return self.get_merged_array("points") # Getters @@ -1987,10 +2010,9 @@ def get_nadir(self) -> np.ndarray: def length_over_dim(self, dim): """Measure the length of an :class:`~.Mobject` in a certain direction.""" return self.reduce_across_dimension( - np.max, - np.max, + max, dim, - ) - self.reduce_across_dimension(np.min, np.min, dim) + ) - self.reduce_across_dimension(min, dim) def get_coord(self, dim, direction=ORIGIN): """Meant to generalize ``get_x``, ``get_y`` and ``get_z``""" diff --git a/tests/module/mobject/mobject/test_mobject.py b/tests/module/mobject/mobject/test_mobject.py index 7ce936c029..bb228eb798 100644 --- a/tests/module/mobject/mobject/test_mobject.py +++ b/tests/module/mobject/mobject/test_mobject.py @@ -1,8 +1,9 @@ from __future__ import annotations +import numpy as np import pytest -from manim import Mobject +from manim import DL, UR, Circle, Mobject, Rectangle, Square, VGroup def test_mobject_add(): @@ -49,3 +50,110 @@ def test_mobject_remove(): assert len(obj.submobjects) == 10 assert obj.remove(Mobject()) is obj + + +def test_mobject_dimensions_single_mobject(): + # A Mobject with no points and no submobjects has no dimensions + empty = Mobject() + assert empty.width == 0 + assert empty.height == 0 + assert empty.depth == 0 + + has_points = Mobject() + has_points.points = np.array([[-1, -2, -3], [1, 3, 5]]) + assert has_points.width == 2 + assert has_points.height == 5 + assert has_points.depth == 8 + + rect = Rectangle(width=3, height=5) + + assert rect.width == 3 + assert rect.height == 5 + assert rect.depth == 0 + + # Dimensions should be recalculated after scaling + rect.scale(2.0) + assert rect.width == 6 + assert rect.height == 10 + assert rect.depth == 0 + + # Dimensions should not be dependent on location + rect.move_to([-3, -4, -5]) + assert rect.width == 6 + assert rect.height == 10 + assert rect.depth == 0 + + circ = Circle(radius=2) + + assert circ.width == 4 + assert circ.height == 4 + assert circ.depth == 0 + + +def is_close(x, y): + return abs(x - y) < 0.00001 + + +def test_mobject_dimensions_nested_mobjects(): + vg = VGroup() + + for x in range(-5, 8, 1): + row = VGroup() + vg += row + for y in range(-17, 2, 1): + for z in range(0, 10, 1): + s = Square().move_to([x, y, z / 10]) + row += s + + assert vg.width == 14.0, vg.width + assert vg.height == 20.0, vg.height + assert is_close(vg.depth, 0.9), vg.depth + + # Dimensions should be recalculated after scaling + vg.scale(0.5) + assert vg.width == 7.0, vg.width + assert vg.height == 10.0, vg.height + assert is_close(vg.depth, 0.45), vg.depth + + # Adding a mobject changes the bounds/dimensions + rect = Rectangle(width=3, height=5) + rect.move_to([9, 3, 1]) + vg += rect + assert vg.width == 13.0, vg.width + assert is_close(vg.height, 18.5), vg.height + assert is_close(vg.depth, 0.775), vg.depth + + +def test_mobject_dimensions_mobjects_with_no_points_are_at_origin(): + rect = Rectangle(width=2, height=3) + rect.move_to([-4, -5, 0]) + outer_group = VGroup(rect) + + # This is as one would expect + assert outer_group.width == 2 + assert outer_group.height == 3 + + # Adding a mobject with no points has a quirk of adding a "point" + # to [0, 0, 0] (the origin). This changes the size of the outer + # group because now the bottom left corner is at [-5, -6.5, 0] + # but the upper right corner is [0, 0, 0] instead of [-3, -3.5, 0] + outer_group.add(VGroup()) + assert outer_group.width == 5 + assert outer_group.height == 6.5 + + +def test_mobject_dimensions_has_points_and_children(): + outer_rect = Rectangle(width=3, height=6) + inner_rect = Rectangle(width=2, height=1) + inner_rect.align_to(outer_rect.get_corner(UR), DL) + outer_rect.add(inner_rect) + + # The width of a mobject should depend both on its points and + # the points of all children mobjects. + assert outer_rect.width == 5 # 3 from outer_rect, 2 from inner_rect + assert outer_rect.height == 7 # 6 from outer_rect, 1 from inner_rect + assert outer_rect.depth == 0 + + assert inner_rect.width == 2 + assert inner_rect.height == 1 + assert inner_rect.depth == 0 From 80795d8361431608a1408dfbecbc1d843a3cb130 Mon Sep 17 00:00:00 2001 From: coreyp1 Date: Tue, 28 Mar 2023 15:13:12 -0500 Subject: [PATCH 219/555] Added support for individualized radius values in :meth:`.Polygram.round_corners` (#3155) * feat(Polygram.round_corners): add support for individualized radius values * Update manim/mobject/geometry/polygram.py Remove type hints from the docstring of round_corners() Co-authored-by: Benjamin Hackl * Update rounded_corners() so that integer values are accepted --------- Co-authored-by: Benjamin Hackl --- manim/mobject/geometry/polygram.py | 79 ++++++++++++++++-- .../geometry/RoundedRectangle.npz | Bin 4296 -> 4422 bytes 2 files changed, 70 insertions(+), 9 deletions(-) diff --git a/manim/mobject/geometry/polygram.py b/manim/mobject/geometry/polygram.py index f96557525e..daaa67534d 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -15,6 +15,7 @@ "Cutout", ] +from math import ceil from typing import Iterable, Sequence import numpy as np @@ -133,18 +134,52 @@ 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 | list[float] = 0.5, + evenly_distribute_anchors: bool = False, + components_per_rounded_corner: int = 2, + ): """Rounds off the corners of the :class:`Polygram`. Parameters ---------- radius The curvature of the corners of the :class:`Polygram`. + evenly_distribute_anchors + Break long line segments into proportionally-sized segments. + components_per_rounded_corner + The number of points used to represent the rounded corner curve. .. seealso:: :class:`.~RoundedRectangle` + .. note:: + If `radius` is supplied as a single value, then the same radius + will be applied to all corners. If `radius` is a list, then the + individual values will be applied sequentially, with the first + corner receiving `radius[0]`, the second corner receiving + `radius[1]`, etc. The radius list will be repeated as necessary. + + The `components_per_rounded_corner` value is provided so that the + fidelity of the rounded corner may be fine-tuned as needed. 2 is + an appropriate value for most shapes, however a larger value may be + need if the rounded corner is particularly large. 2 is the minimum + number allowed, representing the start and end of the curve. 3 will + result in a start, middle, and end point, meaning 2 curves will be + generated. + + The option to `evenly_distribute_anchors` is provided so that the + line segments (the part part of each line remaining after rounding + off the corners) can be subdivided to a density similar to that of + the average density of the rounded corners. This may be desirable + in situations in which an even distribution of curves is desired + for use in later transformation animations. Be aware, though, that + enabling this option can result in an an object containing + significantly more points than the original, especially when the + rounded corner curves are small. + Examples -------- .. manim:: PolygramRoundCorners @@ -169,7 +204,17 @@ def construct(self): for vertices in self.get_vertex_groups(): arcs = [] - for v1, v2, v3 in adjacent_n_tuples(vertices, 3): + + # Repeat the radius list as necessary in order to provide a radius + # for each vertex. + if isinstance(radius, (int, float)): + radius_list = [radius] * len(vertices) + else: + radius_list = radius * ceil(len(vertices) / len(radius)) + + for currentRadius, (v1, v2, v3) in zip( + radius_list, adjacent_n_tuples(vertices, 3) + ): vect1 = v2 - v1 vect2 = v3 - v2 unit_vect1 = normalize(vect1) @@ -177,10 +222,10 @@ def construct(self): angle = angle_between_vectors(vect1, vect2) # Negative radius gives concave curves - angle *= np.sign(radius) + angle *= np.sign(currentRadius) # Distance between vertex and start of the arc - cut_off_length = radius * np.tan(angle / 2) + cut_off_length = currentRadius * np.tan(angle / 2) # Determines counterclockwise vs. clockwise sign = np.sign(np.cross(vect1, vect2)[2]) @@ -189,9 +234,24 @@ def construct(self): v2 - unit_vect1 * cut_off_length, v2 + unit_vect2 * cut_off_length, angle=sign * angle, + num_components=components_per_rounded_corner, ) arcs.append(arc) + if evenly_distribute_anchors: + # Determine the average length of each curve + nonZeroLengthArcs = [arc for arc in arcs if len(arc.points) > 4] + if len(nonZeroLengthArcs): + totalArcLength = sum( + [arc.get_arc_length() for arc in nonZeroLengthArcs] + ) + totalCurveCount = ( + sum([len(arc.points) for arc in nonZeroLengthArcs]) / 4 + ) + averageLengthPerCurve = totalArcLength / totalCurveCount + else: + averageLengthPerCurve = 1 + # To ensure that we loop through starting with last arcs = [arcs[-1], *arcs[:-1]] from manim.mobject.geometry.line import Line @@ -201,10 +261,11 @@ def construct(self): line = Line(arc1.get_end(), arc2.get_start()) - # Make sure anchors are evenly distributed - len_ratio = line.get_length() / arc1.get_arc_length() - - line.insert_n_curves(int(arc1.get_num_curves() * len_ratio)) + # Make sure anchors are evenly distributed, if necessary + if evenly_distribute_anchors: + line.insert_n_curves( + ceil(line.get_length() / averageLengthPerCurve) + ) new_points.extend(line.points) @@ -633,7 +694,7 @@ def construct(self): self.add(rect_group) """ - def __init__(self, corner_radius: float = 0.5, **kwargs): + def __init__(self, corner_radius: float | list[float] = 0.5, **kwargs): super().__init__(**kwargs) self.corner_radius = corner_radius self.round_corners(self.corner_radius) diff --git a/tests/test_graphical_units/control_data/geometry/RoundedRectangle.npz b/tests/test_graphical_units/control_data/geometry/RoundedRectangle.npz index f77b8822122effe98dbca98a25c9694cab7d392d..98083a27cb91a21adb801a2b04b2f788c8cf3265 100644 GIT binary patch literal 4422 zcmeHLX;jl!7JrCJ6@_+G5P?LiV3k!-f`kw(rPLw>29YA5Wh77vVH1N1t7BbIfrl5K)92`ng0-vt0KvAHOQha#h zgj;9vEh?c0kLf)O)4yD0s@vKe^S!lIM^L`&l3#x8&^JF2D#H`TPxJ7EEZ<81eJ;n^ z&R@3)?KHG~y6s-$a!Tf@v(7&{KgPeyP1$@d*2Sf~@RD!R?RiVy*})T+V zZlugi9MhcViCwjZ~Z3EHu0MI~BCCy|a_j_TI3!MI~m zX&##;xbnWYNL{)na6M>k@kd^cTy_&X(7zVIkq`85Yj}sl%4g%|ew2AEsxt82brDrd!dM_X7p9m?8opY#*XT5_O%X(Z5R>SaP+b+tJesRX`ADk*QY?4)4O(NfW1 zMPb=AdyYF)vA;9(cn9M<0K9tI?(Kgu@;vZGk!xZ1aLPd(Wt(Sp(3U%zCTd1TMw65% z{wX=j=fw>>Ia6aTGbPZnw)%dcRqX&Pda>)-<@tdsW&fO~`vV6`x73UiJ%!8-;AeHz zc!cXvRY2bf`Ug($6Q9{P`95R6hUMXMtb5JAJl)^lKiRm-SM5kMa-fGTNhYqTwKv>r$>vB~%&s$Hj_P=F1D^Mnr1> zVzH5|n8@YHo5)Jzt`K4kn3|?YH;NzGk=If5B{sq9Jsxu9)7{GSerULk&-F zI&nM0dNpWC%PpMMwkBD$C6P$NAm^{ry@?(pMLP~U`C>2VWiOz&g81&D%F3e+nop(B zVbo-1AT@!aYI!Zs_T~*}1us3<6dS`CruhrK09Yeaf1SE5to7r~j7PE@D0x4Iy=73#_%IsMpptmm%AqsBsQ zg;o%&KxFK)Pu=Lq$jFxp@U5D)cJ12b!)lBPutxBV1_=Ogsx;1BVv~)Ii&bS z%nIj;2hRTP?$6d&&(Vp5x_+X7ncYY~OhimXkJBU7qn5a*=yhb#9ESve#l`m%zs+K_ z+cS>hzlB>|cg(gt&YNq$f6$gdASjNJWeyc03Ux8$w`N)UW>O;e>7a>*JZ@)(8T1HD zRIxE`?H+Xz0Yby(R}Ipo(E$IN5EcTX3V?S@?#XMFs}q6-F%zEdPSnIzl}e_*Zc?@i z$bIVwiG73{Snf^Tc1tGPpfOFCY>{7}*K;vpHm7V4!NBq;smq!@dWv2F}HY4Gd^etkxu5ZH#(PSYl$LN1Vao!;hgOU$`l6-quDOhSd)JvJ4h-dOhM+ z#R4Qm(xwPTyMyRqYYQV|)2f$Ez@AFKxUM7;iH40GWIAYQZbcQAHc@M5x@-erU-RDl zD!&N;$@l3e!)8r@jr9=T+3Tao{{t>>`}^_q(!9KVWJK7yE3<`teA)7Ja=@Q?h<}6%ar$>z@XKnL-_lom?U8nj4ZwL$!`SO#Fs;n9 z=4-}=h%wCz(f5co&z~PBYe3tmu&I|3kFu>uN6)ys+cT8CyqaRAEs*Qp@SPr-LJt%& zKlJ2snc}eN-|e8l*z$*I8dFWj!c@^B>weNj6Q8aI4OilOX+X0kTCz|@yAUhEE6O#? z9P(bo6WBbC3Hjq_GGd}7MKF)R##-^XkZcrnH&F!}9QS-;K|ulZOf@h#xSO8<+j)Yb zLz)egdfX3wj)_|Oi9b$< z(D4vDk+;>&&8^q$aLA4oQJS%H5eg{^G=?ckpZpuXWc;OTB83#(eF; z_3Ftuz>oySeQg(BO&Han)-Sx~)Iu0V2UuI8s28N*j_(2*~Hh>dHMs>t)$;$0?9YvC&h{*sek9FC&B1Fa32xs1-Q zGl+@|4PWAoY9dJNdp!+NV$N{xC$MlnLqu^ap2f*!rS_~id4t$h38X%RQNC$+M+46= zbm*pFqFUY-x!UGf$2^|7W>rk3s&#dBDN<+NaX}KYP#Xe+B#Z{&<&o&+_s`$}7rJzU z$o=lhOm<|8RLl~1_@&mfGcu=Jlhr%YP1IYHk=R0mcJ$PZ?b;fONlaq;kC(TeK_2BY zOP20OQyy3i20=RVSrN|WRa6|gyXW}f23%8PBf>I~o#{m7vG?GpB6cQ@Dy3oj2=eG3 z`-|Ns2RuU(nVtYF6v1({GwXy|5UUYmk#y-@w5Z?R=l8o>c?AXfWSnA5^~Eacv8uZI zMlx1ru_o-pDTdWGD$Wi{8+I!HuUn7*02QyK`2XK`AkGe(HY?sL N!7rRQfpGmEIxqkL literal 4296 zcmeHLYgALm79K>P_`nC2C=qk-g@Q_pRs<}G!Rl&hd4+<2KtlwTC>TIf0^yNRy*?>u zr4+o9pv4Cd1BR5K1PD-|Qc8lzBLPBq3PMOCi3A9cPHfk@?T`Df|E}k(lbm(-%I&1efS1DinP*>KVc!twC0!X0Abs0LvD8w+d- z^sV&Qw1j{Q7(Ztmx6*X?6-0OQIRm5WI9o~X7iOk$U%T{%wcQQ8@N3uIo6lQpoXBZ{ zUq6|ybE#Xo!{)mVT$*hnUL8W}=>1Q7Bh9Gfg3{#`qqbFsx0?EzoH>hcT}sX(bR@n0 zQfVU`h%T!rT~uA5Cn*TCor}1(d&lUD$`Lwpf47t-d#=NtdDuylNp*V{2nDFcasKit z^)*y8oj!g(9YvpO<r$r^{*qsA?s!N3BDU`>wu5TH^waFst}knnoTd)Q4jwvmXeMk0xK8)>_6|RJ za{HHj+Wv=SWe=F#%&Zb~^akDr^hVx|sxkmZJ)@(eAE(TpO;k@jBZuw@D+mb*S>@>H z7=HY?O`aPan}LeD`Ua6_6V(ILK)rbbAGA@_NG$W+G?ure2kb%FMoBOmX ztBMc6-L8&~jW1rjXn>F7tus{WN7`xs{+r1fxi{0?@2b^h{AI>vN#a7IywS|c^{eev z9{^~CGj`3B!>ZM48=(o+0!BHb)@)#V78DfRsjbCQu>geC6u4iz*jE`F zG&|Vc9hjS!w}wO_wQxTEwo%Y1KOGwzwD8qbH>>^Gvu`m-0Llb|gM*Geg)#k)Hw@6U z)1yyrKlQlh_n4}Ryce`?8|EFNkm=1_4bpNH9rrwkUXA=LmZuA^*CxJ-nDJ6pi8w@D zcaeyd7||0k?l-;y431q^%+#D6^BCi)wHn1Gb2}d!p;1{umK`qA%06FIBdYIw0>E6K zm$!F-^8f>#&`^KgB#U^iCs=kw*84o4N4!TQ{z8Bjk>#m7gQ^q z9Qx_f9S+BlY6}3xLh5NLz2i@l=MxVf2w|Te8(-O+@N<*q>;u6{P?zuG>KgLo!AQY1 ztOwJiu!UJ4hPAe~ZczcCjJRZGwaQJmNajk0lRZYz@i10qwX}FqJ~$U6hYLD-6Hbjp zCX>Z6eZ9S_?)mMYZW|0@XZ7{<1-lc8#H?`xFi2&wSm9){W8dkltSmUL(4Jp_rZ`cY zaB^}wp*h{CYC;ffgof3k#l@5{Y>7zH zNd+J=;^fJ~nTKp9lQ~LFL!?`MkY8V4KdQG3FT9=-e;OJV=EF1+1FMb$8~}XH zEs@Bd78a7Y&md%Oj2lp#u~=q2g+%&b@7}%81Mr>pVYmj&dw&rd8#{xk6D(-8_BB?U zH-E-70k?abq7T1%`0(Ms7Zw(vOGZ;^v!F__23%j)Q;KipiaR>|X5O!pHwl_Kj~-pe ztOf@vcnOLyZW~rBNF>>K3mrOs+fj`g0seuK?b+_I zWCWg?@YY=Qq#J;ldWZAF9R!e;@~HLpl#d`Z z)1tZt2ExQAh=M#=SfZK)X=-JM)Y?7s4N_QUTle{jPmBu~o_eEdTo|-~r7$e4)yd)|n#)k>z z00EO;go&07H>JZNoPrUpc9gw(rd_VCN!I9vlBgxY{XyQoGykI67Dn3Pn7>wS7P3Ms z4?;Pg@d7|5n|M|*1QkS_$)oFN`x2E$XS{qf29l;&%8_esk@ytl;KwIpV{v+S66Dsc zYp$W(1hf5mZTmyKHlh(c1Wq=btfB!;8+sk@x+0`zD%yACPft(pc5-^x428|ZAUAz3 z^OE_qEEc!-_vc~k z060~_@kyN-IYIW!bUy){rxvvTCRdp7)~NhKl$M0zOIxAy9gI!6BAD9UAa8~^F8hD z>y3?#%cWR6+&8A^mNePK&(MM?T3}#cL#334w6L&f5Q&a-Ul3jCtXT#>c}dF| zXIQz>F!KuT;EAh>trHUyPnVl(TH(sPz20WvZ_2=J*Cmv%r@@L%hX3o_;lGa34D|1R WJ%#Y~G&0tIHGntdVL*9v67d`9R}VY@ From b9784a090013da901c27ba497f1a3a5c7174687f Mon Sep 17 00:00:00 2001 From: icedcoffeeee <83535735+icedcoffeeee@users.noreply.github.com> Date: Wed, 29 Mar 2023 05:51:01 +0800 Subject: [PATCH 220/555] store color data (#3134) Co-authored-by: Benjamin Hackl --- manim/mobject/opengl/opengl_surface.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manim/mobject/opengl/opengl_surface.py b/manim/mobject/opengl/opengl_surface.py index dec54c98ee..6a1672b59b 100644 --- a/manim/mobject/opengl/opengl_surface.py +++ b/manim/mobject/opengl/opengl_surface.py @@ -261,7 +261,9 @@ def get_shader_data(self): shader_data["du_point"] = du_points shader_data["dv_point"] = dv_points if self.colorscale: - shader_data["color"] = self._get_color_by_value(s_points) + if not hasattr(self, "color_by_val"): + self.color_by_val = self._get_color_by_value(s_points) + shader_data["color"] = self.color_by_val else: self.fill_in_shader_color_info(shader_data) return shader_data From 117563e1f01adafe675f011ad425a257753ec9f4 Mon Sep 17 00:00:00 2001 From: Matthew Lee Date: Wed, 29 Mar 2023 16:33:13 +1000 Subject: [PATCH 221/555] Added :meth:`.set_opacity_by_tex` method for setting the opacity of parts of Tex mobjects (#3159) * Added MathTex.set_opacity_by_tex and MathTex.fade_all_but_tex * Completed unittests for set_opacity_by_tex and fade_all_but_tex * Added control_data for `fade_all_but_tex` and `set_opacity_by_tex` * Removed ade_all_but_tex and integrated functionality into set_opacity_by_tex. Included a second parameter 'remaining_opacity' to define the opacity value of the remaining tex * Added type hints for `set_opacity_by_tex`. Removed type information in docstring. Improved logic of `set_opacity_by_tex` to reduce redundant calls for tex parts --------- Co-authored-by: Benjamin Hackl --- manim/mobject/text/tex_mobject.py | 23 ++++++++++++++++++ .../tex_mobject/set_opacity_by_tex.npz | Bin 0 -> 3526 bytes .../test_graphical_units/test_tex_mobject.py | 8 ++++++ 3 files changed, 31 insertions(+) create mode 100644 tests/test_graphical_units/control_data/tex_mobject/set_opacity_by_tex.npz diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index 649b5f8c73..7c3bc53787 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -381,6 +381,29 @@ def set_color_by_tex(self, tex, color, **kwargs): part.set_color(color) return self + def set_opacity_by_tex( + self, tex: str, opacity: float = 0.5, remaining_opacity: float = None, **kwargs + ): + """ + Sets the opacity of the tex specified. If 'remaining_opacity' is specified, + then the remaining tex will be set to that opacity. + + Parameters + ---------- + tex + The tex to set the opacity of. + opacity + Default 0.5. The opacity to set the tex to + remaining_opacity + Default None. The opacity to set the remaining tex to. + If None, then the remaining tex will not be changed + """ + if remaining_opacity is not None: + self.set_opacity(opacity=remaining_opacity) + for part in self.get_parts_by_tex(tex): + part.set_opacity(opacity) + return self + def set_color_by_tex_to_color_map(self, texs_to_color_map, **kwargs): for texs, color in list(texs_to_color_map.items()): try: diff --git a/tests/test_graphical_units/control_data/tex_mobject/set_opacity_by_tex.npz b/tests/test_graphical_units/control_data/tex_mobject/set_opacity_by_tex.npz new file mode 100644 index 0000000000000000000000000000000000000000..0d1164611aca0ba4f22877db59dcbda5497ffbe4 GIT binary patch literal 3526 zcmeH~`%{wn9>*WM+00s=nWLHIWvY`|UMSP`9=oUQqNJvQimQ-$YeZ2YBvGJp&w7q! zR^B2t+T$%CBsDS>aQBBml5|TzOOaVGkRn*3q9Aad_MDkBbLRX7JAJ?NJl|*L`OGt) z&+GZTKi}`?JZ$q82LJ%JgV#RbQK5Cse+K|u+v*JL1RQ`&TxxCxIz9DDsxLOb$Oib+ z?{7d;;Iq}|p;Z|29LAluT_hdj6OYPvpM&)Nb^DgH{)cU1w{F_BW#k9kfwTKVHtg3+ z5AhCEaJ>h2jbF`KN}jtr)>v5R3;j4>q7Jp1HLv@V`NzrcsjcMQSN%3riyYhNW&4s1 z!%x?LvRrSY3M`|VGuE|nI)`qjHt8!-d}qt5xn5mq3Et4^btg}n&sc+kq*hT!lhWc3 zJ}~-4R%2^aef+<@{Br+7;Ezt=*FHzD_-dg^u=nd6PovS8Z6$*tE0Q|XBRUGEg_pGN zxi1@n@x8s7EAz6K&vVBq;;WfM4akK_eqZ8?{8a7YHUM~3<@5dXYUfPdM9=KRh=6P= zf7g}O&G!h-$d82qQ?n9}Rg0+voE$QF3 zz^J4s+|c#SwjRyVc`_yv5y^4!Zwe(}v3uLQZJ9d!S}>-s>BB$lDZZ1_5BvPQiVpFZMwsH3DoRSZ9<9GeW< z5C)Q%>CK=aksM`&+u7Nj`w&#sw$n8PF5e%o`VdAIx^U>cw|@R>j9$Hh-lt+ zRMXH)jweO`#lB_uRC|h`WPPAx*+D`<2G@pP3tb_^EdGL0$vx_qo1moS%OLoQDG&%$ zQRlVjt;Z=cQvl%N)WMSnMa^`y%mksQnT;#C`lulV7n6`M9C2d22cJc2x#x&eF1tza ze(LJ9bze+dC(6qNpXJdN5K&xdP%L@7XdGnp%21~)Se)cffj`NIy7*~Ybd!Vb-_;gF zZzoFt;G1G`s2D+m%&RtL=ncx;b}{L(%FOP3==ILiY|GlH4Q5RQDv9sYf_ieE6(cjS zx*2iR^nT~3by-=KISK9f0lItG)$^Hc%iO#ZhM~sL*$$yw1pxd!1D~aFF{6b9%BtPa zdQbaEk2r_sgt43;+u|$11iDp{uyP*VjZG1mJT9!nm5q6FiGg{OE>7y9M$O#2O1JPm zNT=Gcb)BMbYNRbD!zX>ZNL-Vr6!?HR{q`06g80*_LU`#7@pun5ym%Y2idwiZ_6Emc zNKLbDusUDYk^347kv~9st{LT2mJCfGR84*mSqXOjD1PDPO($;UUI6&utv@05)EeRb zpG8n)nU}FbAC4cnkm2*@mr~neQf8NQm&zEua-%9j7(&!d+#T-5Dvoqr$lg;w99}T> zU6D5)L-_om%aD~U#Be#5!@wa}Mgg|DKc(G$&<#$rt>f$F;a=ATOsq|6Ex4JoS8jPzZ4Hr+nIT|=QZ)wtA8R0p$E zX%!e&XDwUTu?gH$Gb-R5XGWdCkqyT*C9&DrqiBAts`vDG_tettAa{lRIGIo4N)U{) zoD=bEHp#M4q@_Z^ZF`7Gh@4~mstw?;BJ-*z;M#8|vU3ruc37?l>s_Mp$)Q21EQ^0H zoOQ3UGXbaX$j+64urO8==2>URv#Anp|(oLG2ALNW)@YU`E?t>#XsI%Ga(&o+mFP6C11o&+(+pnyfvuk>Mf@pB16Jxu42OF$K6i37xlCUzjqWB!>io7Yl!j0{OyDPD7J zw!Mgx{kUUqw)RQa|Zq7P#z2K&_qXr7uzAx7Hl^0^@Z@n5>yQVpOE1V6yQoB-PvS+9h$dG!ko) z_3v}eXL48}WaE`j%X1@(lrw%Z5Nx?&Q5iEg`3ZEq52h0*$B;g@P#`pBfgs&GZoHPv z6h3(KK7ySpR3?W8%4W>alC`G`-_oIZlf0gV??0`5nm()ubOQhjx*2-PxUX46RMCX` zNg6DYEwnz#Mx~kfu!oliZ{1NwLupL%+9G zgu(vjFbS6GFXIb=KQe)9;%Vx6n9U{!u)F&IUDto3zXn!i;D36s^RTVpF%1B0z!?Uv JSALhyzX1F27nT43 literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/test_tex_mobject.py b/tests/test_graphical_units/test_tex_mobject.py index 82eb72b066..d92162b379 100644 --- a/tests/test_graphical_units/test_tex_mobject.py +++ b/tests/test_graphical_units/test_tex_mobject.py @@ -18,3 +18,11 @@ def test_color_inheritance(scene): VMobject.set_default() scene.add(vgr) + + +@frames_comparison +def test_set_opacity_by_tex(scene): + """Test that set_opacity_by_tex works correctly.""" + tex = MathTex("f(x) = y", substrings_to_isolate=["f(x)"]) + tex.set_opacity_by_tex("f(x)", 0.2, 0.5) + scene.add(tex) From 1b4049a01a89dffdb48b7d6d68f2b72a9b086d4a Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Thu, 30 Mar 2023 07:47:53 -0400 Subject: [PATCH 222/555] Add warning if font is not found for Text, Code, and MarkupText (#3046) * Add assertion if font is not found for Text, Code, and MarkupText This adds tests for this behavior and makes sure that if a font is registered via register_font, the assertions work correctly. If a font is not specified, we do not assert, as this will cause Manim to use a default font. Some tests needed to be updated to use cross-platform font names. Monospace and Sans are found on both my Windows and Linux environment, so that seems like a reasonable thing to try. * Reformat * Testing register_font fails for unknown reasons on CI - remove it * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Make assertion a warning * Fix missing warn * Don't warn on default font * let Code use test_mobject logic for missing font warning * Update manim/mobject/text/code_mobject.py --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/mobject/text/code_mobject.py | 14 ++++++++++++-- manim/mobject/text/text_mobject.py | 23 +++++++++++++++++++++-- tests/test_graphical_units/test_text.py | 4 ++-- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/manim/mobject/text/code_mobject.py b/manim/mobject/text/code_mobject.py index 41742a18ef..9da5624d51 100644 --- a/manim/mobject/text/code_mobject.py +++ b/manim/mobject/text/code_mobject.py @@ -17,6 +17,7 @@ from pygments.lexers import get_lexer_by_name, guess_lexer_for_filename from pygments.styles import get_all_styles +from manim import logger from manim.constants import * from manim.mobject.geometry.arc import Dot from manim.mobject.geometry.polygram import RoundedRectangle @@ -101,7 +102,9 @@ def construct(self): font_size A number which scales displayed code. Defaults to 24. font - The name of the text font to be used. Defaults to ``"Monospac821 BT"``. + The name of the text font to be used. Defaults to ``"Monospace"``. + This is either a system font or one loaded with `text.register_font()`. Note + that font family names may be different across operating systems. stroke_width Stroke width for text. 0 is recommended, and the default. margin @@ -131,6 +134,9 @@ def construct(self): 'aliases or short names'. generate_html_file Defines whether to generate highlighted html code to the folder `assets/codes/generated_html_files`. Defaults to `False`. + warn_missing_font + If True (default), Manim will issue a warning if the font does not exist in the + (case-sensitive) list of fonts returned from `manimpango.list_fonts()`. Attributes ---------- @@ -159,7 +165,7 @@ def __init__( tab_width: int = 3, line_spacing: float = 0.3, font_size: float = 24, - font: str = "Monospac821 BT", + font: str = "Monospace", # This should be in the font list on all platforms. stroke_width: float = 0, margin: float = 0.3, indentation_chars: str = " ", @@ -173,6 +179,7 @@ def __init__( style: str = "vim", language: str | None = None, generate_html_file: bool = False, + warn_missing_font: bool = True, **kwargs, ): super().__init__( @@ -183,6 +190,7 @@ def __init__( self.background_stroke_width = background_stroke_width self.tab_width = tab_width self.line_spacing = line_spacing + self.warn_missing_font = warn_missing_font self.font = font self.font_size = font_size self.margin = margin @@ -317,6 +325,7 @@ def _gen_line_numbers(self): font=self.font, disable_ligatures=True, stroke_width=self.stroke_width, + warn_missing_font=self.warn_missing_font, ) for i in line_numbers: i.set_color(self.default_color) @@ -344,6 +353,7 @@ def _gen_colored_lines(self): font=self.font, disable_ligatures=True, stroke_width=self.stroke_width, + warn_missing_font=self.warn_missing_font, ) for line_no in range(code.__len__()): line = code.chars[line_no] diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 709a2fb271..084b9ec7ac 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -6,7 +6,7 @@ .. important:: - See the corresponding tutorial :ref:`rendering-with-latex` + See the corresponding tutorial :ref:`using-text-objects`, especially for information about fonts. The simplest way to add text to your animations is to use the :class:`~.Text` class. It uses the Pango library to render text. @@ -301,6 +301,13 @@ class Text(SVGMobject): ---------- text The text that needs to be created as a mobject. + font + The font family to be used to render the text. This is either a system font or + one loaded with `register_font()`. Note that font family names may be different + across operating systems. + warn_missing_font + If True (default), Manim will issue a warning if the font does not exist in the + (case-sensitive) list of fonts returned from `manimpango.list_fonts()`. Returns ------- @@ -419,6 +426,7 @@ def __init__( t2w: dict[str, str] = None, gradient: tuple = None, tab_width: int = 4, + warn_missing_font: bool = True, # Mobject height: float = None, width: float = None, @@ -427,6 +435,10 @@ def __init__( **kwargs, ) -> None: self.line_spacing = line_spacing + if font and warn_missing_font: + fonts_list = manimpango.list_fonts() + if font not in fonts_list: + logger.warning(f"Font {font} not in {fonts_list}.") self.font = font self._font_size = float(font_size) # needs to be a float or else size is inflated when font_size = 24 @@ -910,7 +922,9 @@ def construct(self): Global weight setting, e.g. `NORMAL` or `BOLD`. Local overrides are possible. gradient Global gradient setting. Local overrides are possible. - + warn_missing_font + If True (default), Manim will issue a warning if the font does not exist in the + (case-sensitive) list of fonts returned from `manimpango.list_fonts()`. Returns ------- @@ -1094,10 +1108,15 @@ def __init__( width: int = None, should_center: bool = True, disable_ligatures: bool = False, + warn_missing_font: bool = True, **kwargs, ) -> None: self.text = text self.line_spacing = line_spacing + if font and warn_missing_font: + fonts_list = manimpango.list_fonts() + if font not in fonts_list: + logger.warning(f"Font {font} not in {fonts_list}.") self.font = font self._font_size = float(font_size) self.slant = slant diff --git a/tests/test_graphical_units/test_text.py b/tests/test_graphical_units/test_text.py index 606ff4251f..d7939fc0f9 100644 --- a/tests/test_graphical_units/test_text.py +++ b/tests/test_graphical_units/test_text.py @@ -24,8 +24,8 @@ def test_text_color_inheritance(): their parent class.""" VMobject.set_default(color=RED) # set both to a singular font so that the tests agree. - text = Text("test_color_inheritance", font="Dejavu Sans") - markup_text = MarkupText("test_color_inheritance", font="Dejavu Sans") + text = Text("test_color_inheritance", font="Sans") + markup_text = MarkupText("test_color_inheritance", font="Sans") assert all(char.fill_color == Color(RED) for char in text) assert all(char.fill_color == Color(RED) for char in markup_text) From c62c5a3abafcf3ad868b113068772782189068d0 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Fri, 31 Mar 2023 15:37:15 -0400 Subject: [PATCH 223/555] Improve creation time for large Text Mobjects (#3181) * Improve creation time for large Text Mobjects * space * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Check before last point * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * markup text also * handle quads for open GL * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update comments --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/mobject/svg/svg_mobject.py | 25 ++++--- manim/mobject/text/text_mobject.py | 103 +++++++++++++++++++++++++---- 2 files changed, 108 insertions(+), 20 deletions(-) diff --git a/manim/mobject/svg/svg_mobject.py b/manim/mobject/svg/svg_mobject.py index 579bbebf26..8793275b6d 100644 --- a/manim/mobject/svg/svg_mobject.py +++ b/manim/mobject/svg/svg_mobject.py @@ -82,6 +82,12 @@ class SVGMobject(VMobject, metaclass=ConvertToOpenGL): A dictionary with keyword arguments passed to :class:`.VMobjectFromSVGPath` used for importing path elements. If ``None`` (the default), no additional arguments are passed. + use_svg_cache + If True (default), the svg inputs (e.g. file_name, settings) + will be used as a key and a copy of the created mobject will + be saved using that key to be quickly retrieved if the same + inputs need be processed later. For large SVGs which are used + only once, this can be omitted to improve performance. kwargs Further arguments passed to the parent class. """ @@ -101,6 +107,7 @@ def __init__( stroke_width: float | None = None, svg_default: dict | None = None, path_string_config: dict | None = None, + use_svg_cache: bool = True, **kwargs, ): super().__init__(color=None, stroke_color=None, fill_color=None, **kwargs) @@ -135,7 +142,7 @@ def __init__( path_string_config = {} self.path_string_config = path_string_config - self.init_svg_mobject() + self.init_svg_mobject(use_svg_cache=use_svg_cache) self.set_style( fill_color=fill_color, @@ -146,7 +153,7 @@ def __init__( ) self.move_into_position() - def init_svg_mobject(self) -> None: + def init_svg_mobject(self, use_svg_cache: bool) -> None: """Checks whether the SVG has already been imported and generates it if not. @@ -154,14 +161,16 @@ def init_svg_mobject(self) -> None: -------- :meth:`.SVGMobject.generate_mobject` """ - hash_val = hash_obj(self.hash_seed) - if hash_val in SVG_HASH_TO_MOB_MAP: - mob = SVG_HASH_TO_MOB_MAP[hash_val].copy() - self.add(*mob) - return + if use_svg_cache: + hash_val = hash_obj(self.hash_seed) + if hash_val in SVG_HASH_TO_MOB_MAP: + mob = SVG_HASH_TO_MOB_MAP[hash_val].copy() + self.add(*mob) + return self.generate_mobject() - SVG_HASH_TO_MOB_MAP[hash_val] = self.copy() + if use_svg_cache: + SVG_HASH_TO_MOB_MAP[hash_val] = self.copy() @property def hash_seed(self) -> tuple: diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 084b9ec7ac..a39400f31c 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -492,6 +492,7 @@ def __init__( height=height, width=width, should_center=should_center, + use_svg_cache=False, **kwargs, ) self.text = text @@ -504,18 +505,58 @@ def __init__( if len(each.points) == 0: continue points = each.points - last = points[0] - each.clear_points() + curve_start = points[0] + assert len(curve_start) == self.dim, curve_start + # Some of the glyphs in this text might not be closed, + # so we close them by identifying when one curve ends + # but it is not where the next curve starts. + # It is more efficient to temporarily create a list + # of points and add them one at a time, then turn them + # into a numpy array at the end, rather than creating + # new numpy arrays every time a point or fixing line + # is added (which is O(n^2) for numpy arrays). + closed_curve_points = [] + # OpenGL has points be part of quadratic Bezier curves; + # Cairo uses cubic Bezier curves. + if nppc == 3: # RendererType.OPENGL + + def add_line_to(end): + nonlocal closed_curve_points + start = closed_curve_points[-1] + closed_curve_points += [ + start, + (start + end) / 2, + end, + ] + + else: # RendererType.CAIRO + + def add_line_to(end): + nonlocal closed_curve_points + start = closed_curve_points[-1] + closed_curve_points += [ + start, + (start + start + end) / 3, + (start + end + end) / 3, + end, + ] + for index, point in enumerate(points): - each.append_points([point]) + closed_curve_points.append(point) if ( index != len(points) - 1 and (index + 1) % nppc == 0 and any(point != points[index + 1]) ): - each.add_line_to(last) - last = points[index + 1] - each.add_line_to(last) + # Add straight line from last point on this curve to the + # start point on the next curve. We represent the line + # as a cubic bezier curve where the two control points + # are half-way between the start and stop point. + add_line_to(curve_start) + curve_start = points[index + 1] + # Make sure last curve is closed + add_line_to(curve_start) + each.points = np.array(closed_curve_points, ndmin=2) # anti-aliasing if height is None and width is None: self.scale(TEXT_MOB_SCALE_FACTOR) @@ -1170,18 +1211,56 @@ def __init__( if len(each.points) == 0: continue points = each.points - last = points[0] - each.clear_points() + curve_start = points[0] + assert len(curve_start) == self.dim, curve_start + # Some of the glyphs in this text might not be closed, + # so we close them by identifying when one curve ends + # but it is not where the next curve starts. + # It is more efficient to temporarily create a list + # of points and add them one at a time, then turn them + # into a numpy array at the end, rather than creating + # new numpy arrays every time a point or fixing line + # is added (which is O(n^2) for numpy arrays). + closed_curve_points = [] + # OpenGL has points be part of quadratic Bezier curves; + # Cairo uses cubic Bezier curves. + if nppc == 3: # RendererType.OPENGL + + def add_line_to(end): + nonlocal closed_curve_points + start = closed_curve_points[-1] + closed_curve_points += [ + start, + (start + end) / 2, + end, + ] + + else: # RendererType.CAIRO + + def add_line_to(end): + nonlocal closed_curve_points + start = closed_curve_points[-1] + closed_curve_points += [ + start, + (start + start + end) / 3, + (start + end + end) / 3, + end, + ] + for index, point in enumerate(points): - each.append_points([point]) + closed_curve_points.append(point) if ( index != len(points) - 1 and (index + 1) % nppc == 0 and any(point != points[index + 1]) ): - each.add_line_to(last) - last = points[index + 1] - each.add_line_to(last) + # Add straight line from last point on this curve to the + # start point on the next curve. + add_line_to(curve_start) + curve_start = points[index + 1] + # Make sure last curve is closed + add_line_to(curve_start) + each.points = np.array(closed_curve_points, ndmin=2) if self.gradient: self.set_color_by_gradient(*self.gradient) From 04e41a2e16526c306753221be1b22501c3bac230 Mon Sep 17 00:00:00 2001 From: ItIsJoeyG Date: Fri, 31 Mar 2023 15:55:48 -0500 Subject: [PATCH 224/555] Changed winget install MiKTeX command (#3199) In the docs the winget command to install MiKTeX was changed from `winget install ChristianSchenk.MiKTeX` to `winget install MiKTeX.MiKTeX`. I have changed the docs to reflect this change. Here is the link to the manifest on the winget repo. I have also attached an image that shows the original command not working and an image of the new command working. Winget Repo Link: https://github.com/microsoft/winget-pkgs/tree/master/manifests/m/MiKTeX/MiKTeX New command working: https://imgur.com/D7qp6kU Image of old command not working: https://imgur.com/k7Pvpp0 --- docs/source/installation/windows.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/installation/windows.rst b/docs/source/installation/windows.rst index a17cc6f947..810d8e968a 100644 --- a/docs/source/installation/windows.rst +++ b/docs/source/installation/windows.rst @@ -137,7 +137,7 @@ For Windows, the recommended LaTeX distribution is `MiKTeX `__. You can install it by using the installer from the linked MiKTeX site, or by using the package manager of your choice (Chocolatey: ``choco install miktex.install``, -Scoop: ``scoop install latex``, Winget: ``winget install ChristianSchenk.MiKTeX``). +Scoop: ``scoop install latex``, Winget: ``winget install MiKTeX.MiKTeX``). If you are concerned about disk space, there are some alternative, smaller distributions of LaTeX. From 84e07eaf77f1297e6be45ca9ff38778c6e3b2f5c Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Sat, 1 Apr 2023 00:19:15 +0200 Subject: [PATCH 225/555] fixed moderngl import issue (#3200) Co-authored-by: Benjamin Hackl --- manim/renderer/shader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/renderer/shader.py b/manim/renderer/shader.py index dc28222489..892ccb5892 100644 --- a/manim/renderer/shader.py +++ b/manim/renderer/shader.py @@ -312,7 +312,7 @@ def render(self): else: self.shader.context.disable(moderngl.DEPTH_TEST) - from moderngl.program_members import Attribute + from moderngl import Attribute shader_attributes = [] for k, v in self.shader.shader_program._members.items(): From c78bd8a22bab710aae68743718755c8f894477ee Mon Sep 17 00:00:00 2001 From: vahndi Date: Fri, 31 Mar 2023 18:41:54 -0400 Subject: [PATCH 226/555] fix bug in setting self.label_constructor in NumberLine.add_labels (#3015) * fix bug in setting self.label_constructor in NumberLine.add_labels * fix label_constructor in NumberLine.add_labels() * fix label_constructor in NumberLine.add_labels() * improved docstring + type hints --------- Co-authored-by: Benjamin Hackl Co-authored-by: Tristan Schulz --- manim/mobject/graphing/number_line.py | 31 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index ededabc8ef..4b5c00ad61 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -4,7 +4,7 @@ __all__ = ["NumberLine", "UnitInterval"] -from typing import Iterable, Sequence +from typing import Callable, Iterable, Sequence import numpy as np @@ -562,19 +562,18 @@ def add_labels( direction = self.label_direction if direction is None else direction buff = self.line_to_number_buff if buff is None else buff font_size = self.font_size if font_size is None else font_size - label_constructor = ( - self.label_constructor if label_constructor is None else label_constructor - ) + if label_constructor is None: + label_constructor = self.label_constructor labels = VGroup() for x, label in dict_values.items(): # TODO: remove this check and ability to call # this method via CoordinateSystem.add_coordinates() # must be explicitly called - if isinstance(label, str) and self.label_constructor is MathTex: + if isinstance(label, str) and label_constructor is MathTex: label = Tex(label) else: - label = self._create_label_tex(label) + label = self._create_label_tex(label, label_constructor) if hasattr(label, "font_size"): label.font_size = font_size @@ -588,26 +587,36 @@ def add_labels( return self def _create_label_tex( - self, label_tex: str | float | VMobject, **kwargs + self, + label_tex: str | float | VMobject, + label_constructor: Callable | None = None, + **kwargs, ) -> VMobject: """Checks if the label is a :class:`~.VMobject`, otherwise, creates a - label according to :attr:`label_constructor`. + label by passing ``label_tex`` to ``label_constructor``. Parameters ---------- label_tex - The label to be compared against the above types. + The label for which a mobject should be created. If the label already + is a mobject, no new mobject is created. + label_constructor + Optional. A class or function returning a mobject when + passing ``label_tex`` as an argument. If ``None`` is passed + (the default), the label constructor from the :attr:`.label_constructor` + attribute is used. Returns ------- :class:`~.VMobject` The label. """ - + if label_constructor is None: + label_constructor = self.label_constructor if isinstance(label_tex, VMobject): return label_tex else: - return self.label_constructor(label_tex, **kwargs) + return label_constructor(label_tex, **kwargs) @staticmethod def _decimal_places_from_step(step) -> int: From 659f6affa635ad13d089c42b6cb72cb86975d2f7 Mon Sep 17 00:00:00 2001 From: Elyanah Aco Date: Mon, 3 Apr 2023 17:37:04 +0800 Subject: [PATCH 227/555] Made :class:`.ArrowTriangleTip`, :class:`.ArrowTriangleFilledTip` available to module namespace (#3166) * Make triangle arrow tips accessible * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- manim/mobject/geometry/tips.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manim/mobject/geometry/tips.py b/manim/mobject/geometry/tips.py index b25a5a5380..0c82697fdc 100644 --- a/manim/mobject/geometry/tips.py +++ b/manim/mobject/geometry/tips.py @@ -8,6 +8,8 @@ "ArrowCircleTip", "ArrowSquareTip", "ArrowSquareFilledTip", + "ArrowTriangleTip", + "ArrowTriangleFilledTip", ] import numpy as np From f247408d99f120645c6ac761a4fc00e2a6244580 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 22:21:36 +0200 Subject: [PATCH 228/555] [pre-commit.ci] pre-commit autoupdate (#3203) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 23.1.0 → 23.3.0](https://github.com/psf/black/compare/23.1.0...23.3.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c1e25b7e09..83383d10e9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -35,7 +35,7 @@ repos: - id: python-check-blanket-noqa name: Precision flake ignores - repo: https://github.com/psf/black - rev: 23.1.0 + rev: 23.3.0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs From a6651bee940cd709feaa0d7bfa913165a4862308 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Wed, 5 Apr 2023 20:05:48 +0200 Subject: [PATCH 229/555] New tip shape :class:`.StealthTip`, allow specifying tip shape of :class:`.NumberLine` (#3201) * added new tip class: StealthTip * let NumberLine propagate tip_shape properly * documentation, tests * black * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed type hint, added some more documentation. * black * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove unused import --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/geometry/tips.py | 43 ++++++++++++++++++ manim/mobject/graphing/coordinate_systems.py | 11 +++++ manim/mobject/graphing/number_line.py | 17 ++++++- .../control_data/plot/axes.npz | Bin 4454 -> 4665 bytes tests/test_graphical_units/test_axes.py | 1 + 5 files changed, 70 insertions(+), 2 deletions(-) diff --git a/manim/mobject/geometry/tips.py b/manim/mobject/geometry/tips.py index 0c82697fdc..39d802b474 100644 --- a/manim/mobject/geometry/tips.py +++ b/manim/mobject/geometry/tips.py @@ -10,6 +10,7 @@ "ArrowSquareFilledTip", "ArrowTriangleTip", "ArrowTriangleFilledTip", + "StealthTip", ] import numpy as np @@ -32,6 +33,7 @@ class ArrowTip(VMobject, metaclass=ConvertToOpenGL): :class:`ArrowCircleFilledTip` :class:`ArrowSquareTip` :class:`ArrowSquareFilledTip` + :class:`StealthTip` Examples -------- @@ -179,6 +181,47 @@ def length(self): return np.linalg.norm(self.vector) +class StealthTip(ArrowTip): + r"""'Stealth' fighter / kite arrow shape. + + Naming is inspired by the corresponding + `TikZ arrow shape `__. + """ + + def __init__( + self, + fill_opacity=1, + stroke_width=3, + length=DEFAULT_ARROW_TIP_LENGTH / 2, + start_angle=PI, + **kwargs, + ): + self.start_angle = start_angle + VMobject.__init__( + self, fill_opacity=fill_opacity, stroke_width=stroke_width, **kwargs + ) + self.set_points_as_corners( + [ + [2, 0, 0], # tip + [-1.2, 1.6, 0], + [0, 0, 0], # base + [-1.2, -1.6, 0], + [2, 0, 0], # close path, back to tip + ] + ) + self.scale(length / self.length) + + @property + def length(self): + """The length of the arrow tip. + + In this case, the length is computed as the height of + the triangle encompassing the stealth tip (otherwise, + the tip is scaled too large). + """ + return np.linalg.norm(self.vector) * 1.6 + + class ArrowTriangleTip(ArrowTip, Triangle): r"""Triangular arrow tip.""" diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 46eda68db3..4150d22866 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -1783,6 +1783,17 @@ def construct(self): # x_min must be > 0 because log is undefined at 0. graph = ax.plot(lambda x: x ** 2, x_range=[0.001, 10], use_smoothing=False) self.add(ax, graph) + + Styling arguments can be passed to the underlying :class:`.NumberLine` + mobjects that represent the axes: + + .. manim:: AxesWithDifferentTips + :save_last_frame: + + class AxesWithDifferentTips(Scene): + def construct(self): + ax = Axes(axis_config={'tip_shape': StealthTip}) + self.add(ax) """ def __init__( diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index 4b5c00ad61..5c70e526c1 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -4,7 +4,11 @@ __all__ = ["NumberLine", "UnitInterval"] -from typing import Callable, Iterable, Sequence + +from typing import TYPE_CHECKING, Callable, Iterable, Sequence + +if TYPE_CHECKING: + from manim.mobject.geometry.tips import ArrowTip import numpy as np @@ -49,6 +53,10 @@ class NumberLine(Line): The width of the tip. tip_height The height of the tip. + tip_shape + The mobject class used to construct the tip, or ``None`` (the + default) for the default arrow tip. Passed classes have to inherit + from :class:`.ArrowTip`. include_numbers Whether to add numbers to the tick marks. The number of decimal places is determined by the step size, this default can be overridden by ``decimal_number_config``. @@ -140,6 +148,7 @@ def __init__( include_tip: bool = False, tip_width: float = DEFAULT_ARROW_TIP_LENGTH, tip_height: float = DEFAULT_ARROW_TIP_LENGTH, + tip_shape: type[ArrowTip] | None = None, # numbers/labels include_numbers: bool = False, font_size: float = 36, @@ -217,7 +226,11 @@ def __init__( self.center() if self.include_tip: - self.add_tip(tip_length=self.tip_height, tip_width=self.tip_width) + self.add_tip( + tip_length=self.tip_height, + tip_width=self.tip_width, + tip_shape=tip_shape, + ) self.tip.set_stroke(self.stroke_color, self.stroke_width) if self.include_ticks: diff --git a/tests/test_graphical_units/control_data/plot/axes.npz b/tests/test_graphical_units/control_data/plot/axes.npz index 0895662cf86f0cc19f0d71939262c6579fee8e1f..1024168f80cc3956e196eae637b466f8800396ff 100644 GIT binary patch literal 4665 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 R^9n&m;N=EB#fC>e{{r7T-faK? literal 4454 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 diff --git a/tests/test_graphical_units/test_axes.py b/tests/test_graphical_units/test_axes.py index 3faea3f466..8e450511d2 100644 --- a/tests/test_graphical_units/test_axes.py +++ b/tests/test_graphical_units/test_axes.py @@ -14,6 +14,7 @@ def test_axes(scene): x_length=6, y_length=6, color=WHITE, + y_axis_config={"tip_shape": StealthTip}, ) labels = graph.get_axis_labels() scene.add(graph, labels) From c98f3c786ca228158f07be047c61b83b55d68ec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Crozatier?= <48696601+fcrozatier@users.noreply.github.com> Date: Thu, 6 Apr 2023 13:40:23 +0200 Subject: [PATCH 230/555] Added :class:`.DiGraph`, a mobject representing directed graphs (#2974) * Directed graphs * use type instead of isinstance * respect object boundary * refactor graph with GenericGraph * update tests * fix doc string * custom tips override default, and more documentation * improve docstring situation, move examples to concrete classes * further improve docstrings * refactor: remove graph_type, simplify handling of tip_config * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * removed superfluous import * fixed two tests --------- Co-authored-by: Benjamin Hackl Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/mobject/graph.py | 817 ++++++++++++++++++++--------- tests/module/mobject/test_graph.py | 32 +- tests/opengl/test_graph_opengl.py | 2 +- 3 files changed, 590 insertions(+), 261 deletions(-) diff --git a/manim/mobject/graph.py b/manim/mobject/graph.py index d6ce2756a9..45ada61936 100644 --- a/manim/mobject/graph.py +++ b/manim/mobject/graph.py @@ -4,6 +4,7 @@ __all__ = [ "Graph", + "DiGraph", ] import itertools as it @@ -13,21 +14,20 @@ import networkx as nx import numpy as np +from manim.animation.composition import AnimationGroup +from manim.animation.creation import Create, Uncreate from manim.mobject.geometry.arc import Dot, LabeledDot from manim.mobject.geometry.line import Line +from manim.mobject.mobject import Mobject, override_animate from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.opengl.opengl_mobject import OpenGLMobject from manim.mobject.text.tex_mobject import MathTex - -from ..animation.composition import AnimationGroup -from ..animation.creation import Create, Uncreate -from ..utils.color import BLACK -from .mobject import Mobject, override_animate -from .types.vectorized_mobject import VMobject +from manim.mobject.types.vectorized_mobject import VMobject +from manim.utils.color import BLACK def _determine_graph_layout( - nx_graph: nx.classes.graph.Graph, + nx_graph: nx.classes.graph.Graph | nx.classes.digraph.DiGraph, layout: str | dict = "spring", layout_scale: float = 2, layout_config: dict | None = None, @@ -106,7 +106,7 @@ def _determine_graph_layout( def _tree_layout( - T: nx.classes.graph.Graph, + T: nx.classes.graph.Graph | nx.classes.digraph.DiGraph, root_vertex: Hashable | None, scale: float | tuple | None = 2, vertex_spacing: tuple | None = None, @@ -213,18 +213,27 @@ def slide(v, dx): return {v: (np.array([x, y, 0]) - center) * sf for v, (x, y) in pos.items()} -class Graph(VMobject, metaclass=ConvertToOpenGL): - """An undirected graph (that is, a collection of vertices connected with edges). +class GenericGraph(VMobject, metaclass=ConvertToOpenGL): + """Abstract base class for graphs (that is, a collection of vertices + connected with edges). Graphs can be instantiated by passing both a list of (distinct, hashable) vertex names, together with list of edges (as tuples of vertex names). See - the examples below for details. + the examples for concrete implementations of this class for details. .. note:: This implementation uses updaters to make the edges move with the vertices. + + See also + -------- + + :class:`.Graph` + :class:`.DiGraph` + + Parameters ---------- @@ -285,211 +294,6 @@ class Graph(VMobject, metaclass=ConvertToOpenGL): to the class specified via ``edge_type``, or a dictionary whose keys are the edges, and whose values are dictionaries containing keyword arguments for the mobject related to the corresponding edge. - - Examples - -------- - - First, we create a small graph and demonstrate that the edges move - together with the vertices. - - .. manim:: MovingVertices - - class MovingVertices(Scene): - def construct(self): - vertices = [1, 2, 3, 4] - edges = [(1, 2), (2, 3), (3, 4), (1, 3), (1, 4)] - g = Graph(vertices, edges) - self.play(Create(g)) - self.wait() - self.play(g[1].animate.move_to([1, 1, 0]), - g[2].animate.move_to([-1, 1, 0]), - g[3].animate.move_to([1, -1, 0]), - g[4].animate.move_to([-1, -1, 0])) - self.wait() - - There are several automatic positioning algorithms to choose from: - - .. manim:: GraphAutoPosition - :save_last_frame: - - class GraphAutoPosition(Scene): - def construct(self): - vertices = [1, 2, 3, 4, 5, 6, 7, 8] - edges = [(1, 7), (1, 8), (2, 3), (2, 4), (2, 5), - (2, 8), (3, 4), (6, 1), (6, 2), - (6, 3), (7, 2), (7, 4)] - autolayouts = ["spring", "circular", "kamada_kawai", - "planar", "random", "shell", - "spectral", "spiral"] - graphs = [Graph(vertices, edges, layout=lt).scale(0.5) - for lt in autolayouts] - r1 = VGroup(*graphs[:3]).arrange() - r2 = VGroup(*graphs[3:6]).arrange() - r3 = VGroup(*graphs[6:]).arrange() - self.add(VGroup(r1, r2, r3).arrange(direction=DOWN)) - - Vertices can also be positioned manually: - - .. manim:: GraphManualPosition - :save_last_frame: - - class GraphManualPosition(Scene): - def construct(self): - vertices = [1, 2, 3, 4] - edges = [(1, 2), (2, 3), (3, 4), (4, 1)] - lt = {1: [0, 0, 0], 2: [1, 1, 0], 3: [1, -1, 0], 4: [-1, 0, 0]} - G = Graph(vertices, edges, layout=lt) - self.add(G) - - The vertices in graphs can be labeled, and configurations for vertices - and edges can be modified both by default and for specific vertices and - edges. - - .. note:: - - In ``edge_config``, edges can be passed in both directions: if - ``(u, v)`` is an edge in the graph, both ``(u, v)`` as well - as ``(v, u)`` can be used as keys in the dictionary. - - .. manim:: LabeledModifiedGraph - :save_last_frame: - - class LabeledModifiedGraph(Scene): - def construct(self): - vertices = [1, 2, 3, 4, 5, 6, 7, 8] - edges = [(1, 7), (1, 8), (2, 3), (2, 4), (2, 5), - (2, 8), (3, 4), (6, 1), (6, 2), - (6, 3), (7, 2), (7, 4)] - g = Graph(vertices, edges, layout="circular", layout_scale=3, - labels=True, vertex_config={7: {"fill_color": RED}}, - edge_config={(1, 7): {"stroke_color": RED}, - (2, 7): {"stroke_color": RED}, - (4, 7): {"stroke_color": RED}}) - self.add(g) - - You can also lay out a partite graph on columns by specifying - a list of the vertices on each side and choosing the partite layout. - - .. note:: - - All vertices in your graph which are not listed in any of the partitions - are collected in their own partition and rendered in the rightmost column. - - .. manim:: PartiteGraph - :save_last_frame: - - import networkx as nx - - class PartiteGraph(Scene): - def construct(self): - G = nx.Graph() - G.add_nodes_from([0, 1, 2, 3]) - G.add_edges_from([(0, 2), (0,3), (1, 2)]) - graph = Graph(list(G.nodes), list(G.edges), layout="partite", partitions=[[0, 1]]) - self.play(Create(graph)) - - The representation of a linear artificial neural network is facilitated - by the use of the partite layout and defining partitions for each layer. - - .. manim:: LinearNN - :save_last_frame: - - class LinearNN(Scene): - def construct(self): - edges = [] - partitions = [] - c = 0 - layers = [2, 3, 3, 2] # the number of neurons in each layer - - for i in layers: - partitions.append(list(range(c + 1, c + i + 1))) - c += i - for i, v in enumerate(layers[1:]): - last = sum(layers[:i+1]) - for j in range(v): - for k in range(last - layers[i], last): - edges.append((k + 1, j + last + 1)) - - vertices = np.arange(1, sum(layers) + 1) - - graph = Graph( - vertices, - edges, - layout='partite', - partitions=partitions, - layout_scale=3, - vertex_config={'radius': 0.20}, - ) - self.add(graph) - - The custom tree layout can be used to show the graph - by distance from the root vertex. You must pass the root vertex - of the tree. - - .. manim:: Tree - - import networkx as nx - - class Tree(Scene): - def construct(self): - G = nx.Graph() - - G.add_node("ROOT") - - for i in range(5): - G.add_node("Child_%i" % i) - G.add_node("Grandchild_%i" % i) - G.add_node("Greatgrandchild_%i" % i) - - G.add_edge("ROOT", "Child_%i" % i) - G.add_edge("Child_%i" % i, "Grandchild_%i" % i) - G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i) - - self.play(Create( - Graph(list(G.nodes), list(G.edges), layout="tree", root_vertex="ROOT"))) - - The following code sample illustrates the use of the ``vertex_spacing`` - layout parameter specific to the ``"tree"`` layout. As mentioned - above, setting ``vertex_spacing`` overrides the specified value - for ``layout_scale``, and as such it is harder to control the size - of the mobject. However, we can adjust the captured frame and - zoom out by using a :class:`.MovingCameraScene`:: - - class LargeTreeGeneration(MovingCameraScene): - DEPTH = 4 - CHILDREN_PER_VERTEX = 3 - LAYOUT_CONFIG = {"vertex_spacing": (0.5, 1)} - VERTEX_CONF = {"radius": 0.25, "color": BLUE_B, "fill_opacity": 1} - - def expand_vertex(self, g, vertex_id: str, depth: int): - new_vertices = [f"{vertex_id}/{i}" for i in range(self.CHILDREN_PER_VERTEX)] - new_edges = [(vertex_id, child_id) for child_id in new_vertices] - g.add_edges( - *new_edges, - vertex_config=self.VERTEX_CONF, - positions={ - k: g.vertices[vertex_id].get_center() + 0.1 * DOWN for k in new_vertices - }, - ) - if depth < self.DEPTH: - for child_id in new_vertices: - self.expand_vertex(g, child_id, depth + 1) - - return g - - def construct(self): - g = Graph(["ROOT"], [], vertex_config=self.VERTEX_CONF) - g = self.expand_vertex(g, "ROOT", 1) - self.add(g) - - self.play( - g.animate.change_layout( - "tree", - root_vertex="ROOT", - layout_config=self.LAYOUT_CONFIG, - ) - ) - self.play(self.camera.auto_zoom(g, margin=1), run_time=0.5) """ def __init__( @@ -511,7 +315,7 @@ def __init__( ) -> None: super().__init__() - nx_graph = nx.Graph() + nx_graph = self._empty_networkx_graph() nx_graph.add_nodes_from(vertices) nx_graph.add_edges_from(edges) self._graph = nx_graph @@ -564,48 +368,51 @@ def __init__( # build edge_config if edge_config is None: edge_config = {} + default_tip_config = {} default_edge_config = {} if edge_config: + default_tip_config = edge_config.pop("tip_config", {}) default_edge_config = { k: v for k, v in edge_config.items() - if k not in edges and k[::-1] not in edges + if not isinstance( + k, tuple + ) # everything that is not an edge is an option } self._edge_config = {} + self._tip_config = {} for e in edges: if e in edge_config: + self._tip_config[e] = edge_config[e].pop( + "tip_config", copy(default_tip_config) + ) self._edge_config[e] = edge_config[e] - elif e[::-1] in edge_config: - self._edge_config[e] = edge_config[e[::-1]] else: + self._tip_config[e] = copy(default_tip_config) self._edge_config[e] = copy(default_edge_config) self.default_edge_config = default_edge_config - self.edges = { - (u, v): edge_type( - self[u].get_center(), - self[v].get_center(), - z_index=-1, - **self._edge_config[(u, v)], - ) - for (u, v) in edges - } + self._populate_edge_dict(edges, edge_type) self.add(*self.vertices.values()) self.add(*self.edges.values()) - def update_edges(graph): - for (u, v), edge in graph.edges.items(): - edge.put_start_and_end_on(graph[u].get_center(), graph[v].get_center()) + self.add_updater(self.update_edges) + + @staticmethod + def _empty_networkx_graph(): + """Return an empty networkx graph for the given graph type.""" + raise NotImplementedError("To be implemented in concrete subclasses") - self.add_updater(update_edges) + def _populate_edge_dict( + self, edges: list[tuple[Hashable, Hashable]], edge_type: type[Mobject] + ): + """Helper method for populating the edges of the graph.""" + raise NotImplementedError("To be implemented in concrete subclasses") def __getitem__(self: Graph, v: Hashable) -> Mobject: return self.vertices[v] - def __repr__(self: Graph) -> str: - return f"Graph on {len(self.vertices)} vertices and {len(self.edges)} edges" - def _create_vertex( self, vertex: Hashable, @@ -903,7 +710,7 @@ def remove_vertices(self, *vertices): >>> removed = G.remove_vertices(2, 3); removed VGroup(Line, Line, Dot, Dot) >>> G - Graph on 1 vertices and 0 edges + Undirected graph on 1 vertices and 0 edges """ mobjects = [] @@ -1063,9 +870,7 @@ def _remove_edge(self, edge: tuple[Hashable]): """ if edge not in self.edges: - edge = edge[::-1] - if edge not in self.edges: - raise ValueError(f"The graph does not contain a edge '{edge}'") + raise ValueError(f"The graph does not contain a edge '{edge}'") edge_mobject = self.edges.pop(edge) @@ -1102,15 +907,18 @@ def _remove_edges_animation(self, *edges, anim_args=None): mobjects = self.remove_edges(*edges) return AnimationGroup(*(animation(mobj, **anim_args) for mobj in mobjects)) - @staticmethod - def from_networkx(nxgraph: nx.classes.graph.Graph, **kwargs) -> Graph: - """Build a :class:`~.Graph` from a given ``networkx`` graph. + @classmethod + def from_networkx( + cls, nxgraph: nx.classes.graph.Graph | nx.classes.digraph.DiGraph, **kwargs + ): + """Build a :class:`~.Graph` or :class:`~.DiGraph` from a + given ``networkx`` graph. Parameters ---------- nxgraph - A ``networkx`` graph. + A ``networkx`` graph or digraph. **kwargs Keywords to be passed to the constructor of :class:`~.Graph`. @@ -1133,7 +941,7 @@ def construct(self): self.play(Uncreate(G)) """ - return Graph(list(nxgraph.nodes), list(nxgraph.edges), **kwargs) + return cls(list(nxgraph.nodes), list(nxgraph.edges), **kwargs) def change_layout( self, @@ -1174,3 +982,522 @@ def construct(self): for v in self.vertices: self[v].move_to(self._layout[v]) return self + + +class Graph(GenericGraph): + """An undirected graph (vertices connected with edges). + + The graph comes with an updater which makes the edges stick to + the vertices when moved around. See :class:`.DiGraph` for + a version with directed edges. + + See also + -------- + + :class:`.GenericGraph` + + Parameters + ---------- + + vertices + A list of vertices. Must be hashable elements. + edges + A list of edges, specified as tuples ``(u, v)`` where both ``u`` + and ``v`` are vertices. The vertex order is irrelevant. + labels + Controls whether or not vertices are labeled. If ``False`` (the default), + the vertices are not labeled; if ``True`` they are labeled using their + names (as specified in ``vertices``) via :class:`~.MathTex`. Alternatively, + custom labels can be specified by passing a dictionary whose keys are + the vertices, and whose values are the corresponding vertex labels + (rendered via, e.g., :class:`~.Text` or :class:`~.Tex`). + label_fill_color + Sets the fill color of the default labels generated when ``labels`` + is set to ``True``. Has no effect for other values of ``labels``. + layout + Either one of ``"spring"`` (the default), ``"circular"``, ``"kamada_kawai"``, + ``"planar"``, ``"random"``, ``"shell"``, ``"spectral"``, ``"spiral"``, ``"tree"``, and ``"partite"`` + for automatic vertex positioning using ``networkx`` + (see `their documentation `_ + for more details), or a dictionary specifying a coordinate (value) + for each vertex (key) for manual positioning. + layout_config + Only for automatically generated layouts. A dictionary whose entries + are passed as keyword arguments to the automatic layout algorithm + specified via ``layout`` of ``networkx``. + The ``tree`` layout also accepts a special parameter ``vertex_spacing`` + passed as a keyword argument inside the ``layout_config`` dictionary. + Passing a tuple ``(space_x, space_y)`` as this argument overrides + the value of ``layout_scale`` and ensures that vertices are arranged + in a way such that the centers of siblings in the same layer are + at least ``space_x`` units apart horizontally, and neighboring layers + are spaced ``space_y`` units vertically. + layout_scale + The scale of automatically generated layouts: the vertices will + be arranged such that the coordinates are located within the + interval ``[-scale, scale]``. Some layouts accept a tuple ``(scale_x, scale_y)`` + causing the first coordinate to be in the interval ``[-scale_x, scale_x]``, + and the second in ``[-scale_y, scale_y]``. Default: 2. + vertex_type + The mobject class used for displaying vertices in the scene. + vertex_config + Either a dictionary containing keyword arguments to be passed to + the class specified via ``vertex_type``, or a dictionary whose keys + are the vertices, and whose values are dictionaries containing keyword + arguments for the mobject related to the corresponding vertex. + vertex_mobjects + A dictionary whose keys are the vertices, and whose values are + mobjects to be used as vertices. Passing vertices here overrides + all other configuration options for a vertex. + edge_type + The mobject class used for displaying edges in the scene. + edge_config + Either a dictionary containing keyword arguments to be passed + to the class specified via ``edge_type``, or a dictionary whose + keys are the edges, and whose values are dictionaries containing + keyword arguments for the mobject related to the corresponding edge. + + + Examples + -------- + + First, we create a small graph and demonstrate that the edges move + together with the vertices. + + .. manim:: MovingVertices + + class MovingVertices(Scene): + def construct(self): + vertices = [1, 2, 3, 4] + edges = [(1, 2), (2, 3), (3, 4), (1, 3), (1, 4)] + g = Graph(vertices, edges) + self.play(Create(g)) + self.wait() + self.play(g[1].animate.move_to([1, 1, 0]), + g[2].animate.move_to([-1, 1, 0]), + g[3].animate.move_to([1, -1, 0]), + g[4].animate.move_to([-1, -1, 0])) + self.wait() + + There are several automatic positioning algorithms to choose from: + + .. manim:: GraphAutoPosition + :save_last_frame: + + class GraphAutoPosition(Scene): + def construct(self): + vertices = [1, 2, 3, 4, 5, 6, 7, 8] + edges = [(1, 7), (1, 8), (2, 3), (2, 4), (2, 5), + (2, 8), (3, 4), (6, 1), (6, 2), + (6, 3), (7, 2), (7, 4)] + autolayouts = ["spring", "circular", "kamada_kawai", + "planar", "random", "shell", + "spectral", "spiral"] + graphs = [Graph(vertices, edges, layout=lt).scale(0.5) + for lt in autolayouts] + r1 = VGroup(*graphs[:3]).arrange() + r2 = VGroup(*graphs[3:6]).arrange() + r3 = VGroup(*graphs[6:]).arrange() + self.add(VGroup(r1, r2, r3).arrange(direction=DOWN)) + + Vertices can also be positioned manually: + + .. manim:: GraphManualPosition + :save_last_frame: + + class GraphManualPosition(Scene): + def construct(self): + vertices = [1, 2, 3, 4] + edges = [(1, 2), (2, 3), (3, 4), (4, 1)] + lt = {1: [0, 0, 0], 2: [1, 1, 0], 3: [1, -1, 0], 4: [-1, 0, 0]} + G = Graph(vertices, edges, layout=lt) + self.add(G) + + The vertices in graphs can be labeled, and configurations for vertices + and edges can be modified both by default and for specific vertices and + edges. + + .. note:: + + In ``edge_config``, edges can be passed in both directions: if + ``(u, v)`` is an edge in the graph, both ``(u, v)`` as well + as ``(v, u)`` can be used as keys in the dictionary. + + .. manim:: LabeledModifiedGraph + :save_last_frame: + + class LabeledModifiedGraph(Scene): + def construct(self): + vertices = [1, 2, 3, 4, 5, 6, 7, 8] + edges = [(1, 7), (1, 8), (2, 3), (2, 4), (2, 5), + (2, 8), (3, 4), (6, 1), (6, 2), + (6, 3), (7, 2), (7, 4)] + g = Graph(vertices, edges, layout="circular", layout_scale=3, + labels=True, vertex_config={7: {"fill_color": RED}}, + edge_config={(1, 7): {"stroke_color": RED}, + (2, 7): {"stroke_color": RED}, + (4, 7): {"stroke_color": RED}}) + self.add(g) + + You can also lay out a partite graph on columns by specifying + a list of the vertices on each side and choosing the partite layout. + + .. note:: + + All vertices in your graph which are not listed in any of the partitions + are collected in their own partition and rendered in the rightmost column. + + .. manim:: PartiteGraph + :save_last_frame: + + import networkx as nx + + class PartiteGraph(Scene): + def construct(self): + G = nx.Graph() + G.add_nodes_from([0, 1, 2, 3]) + G.add_edges_from([(0, 2), (0,3), (1, 2)]) + graph = Graph(list(G.nodes), list(G.edges), layout="partite", partitions=[[0, 1]]) + self.play(Create(graph)) + + The representation of a linear artificial neural network is facilitated + by the use of the partite layout and defining partitions for each layer. + + .. manim:: LinearNN + :save_last_frame: + + class LinearNN(Scene): + def construct(self): + edges = [] + partitions = [] + c = 0 + layers = [2, 3, 3, 2] # the number of neurons in each layer + + for i in layers: + partitions.append(list(range(c + 1, c + i + 1))) + c += i + for i, v in enumerate(layers[1:]): + last = sum(layers[:i+1]) + for j in range(v): + for k in range(last - layers[i], last): + edges.append((k + 1, j + last + 1)) + + vertices = np.arange(1, sum(layers) + 1) + + graph = Graph( + vertices, + edges, + layout='partite', + partitions=partitions, + layout_scale=3, + vertex_config={'radius': 0.20}, + ) + self.add(graph) + + The custom tree layout can be used to show the graph + by distance from the root vertex. You must pass the root vertex + of the tree. + + .. manim:: Tree + + import networkx as nx + + class Tree(Scene): + def construct(self): + G = nx.Graph() + + G.add_node("ROOT") + + for i in range(5): + G.add_node("Child_%i" % i) + G.add_node("Grandchild_%i" % i) + G.add_node("Greatgrandchild_%i" % i) + + G.add_edge("ROOT", "Child_%i" % i) + G.add_edge("Child_%i" % i, "Grandchild_%i" % i) + G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i) + + self.play(Create( + Graph(list(G.nodes), list(G.edges), layout="tree", root_vertex="ROOT"))) + + The following code sample illustrates the use of the ``vertex_spacing`` + layout parameter specific to the ``"tree"`` layout. As mentioned + above, setting ``vertex_spacing`` overrides the specified value + for ``layout_scale``, and as such it is harder to control the size + of the mobject. However, we can adjust the captured frame and + zoom out by using a :class:`.MovingCameraScene`:: + + class LargeTreeGeneration(MovingCameraScene): + DEPTH = 4 + CHILDREN_PER_VERTEX = 3 + LAYOUT_CONFIG = {"vertex_spacing": (0.5, 1)} + VERTEX_CONF = {"radius": 0.25, "color": BLUE_B, "fill_opacity": 1} + + def expand_vertex(self, g, vertex_id: str, depth: int): + new_vertices = [f"{vertex_id}/{i}" for i in range(self.CHILDREN_PER_VERTEX)] + new_edges = [(vertex_id, child_id) for child_id in new_vertices] + g.add_edges( + *new_edges, + vertex_config=self.VERTEX_CONF, + positions={ + k: g.vertices[vertex_id].get_center() + 0.1 * DOWN for k in new_vertices + }, + ) + if depth < self.DEPTH: + for child_id in new_vertices: + self.expand_vertex(g, child_id, depth + 1) + + return g + + def construct(self): + g = Graph(["ROOT"], [], vertex_config=self.VERTEX_CONF) + g = self.expand_vertex(g, "ROOT", 1) + self.add(g) + + self.play( + g.animate.change_layout( + "tree", + root_vertex="ROOT", + layout_config=self.LAYOUT_CONFIG, + ) + ) + self.play(self.camera.auto_zoom(g, margin=1), run_time=0.5) + """ + + @staticmethod + def _empty_networkx_graph() -> nx.Graph: + return nx.Graph() + + def _populate_edge_dict( + self, edges: list[tuple[Hashable, Hashable]], edge_type: type[Mobject] + ): + self.edges = { + (u, v): edge_type( + self[u].get_center(), + self[v].get_center(), + z_index=-1, + **self._edge_config[(u, v)], + ) + for (u, v) in edges + } + + def update_edges(self, graph): + for (u, v), edge in graph.edges.items(): + # Undirected graph has a Line edge + edge.put_start_and_end_on(graph[u].get_center(), graph[v].get_center()) + + def __repr__(self: Graph) -> str: + return f"Undirected graph on {len(self.vertices)} vertices and {len(self.edges)} edges" + + +class DiGraph(GenericGraph): + """A directed graph. + + .. note:: + + In contrast to undirected graphs, the order in which vertices in a given + edge are specified is relevant here. + + See also + -------- + + :class:`.GenericGraph` + + Parameters + ---------- + + vertices + A list of vertices. Must be hashable elements. + edges + A list of edges, specified as tuples ``(u, v)`` where both ``u`` + and ``v`` are vertices. The edge is directed from ``u`` to ``v``. + labels + Controls whether or not vertices are labeled. If ``False`` (the default), + the vertices are not labeled; if ``True`` they are labeled using their + names (as specified in ``vertices``) via :class:`~.MathTex`. Alternatively, + custom labels can be specified by passing a dictionary whose keys are + the vertices, and whose values are the corresponding vertex labels + (rendered via, e.g., :class:`~.Text` or :class:`~.Tex`). + label_fill_color + Sets the fill color of the default labels generated when ``labels`` + is set to ``True``. Has no effect for other values of ``labels``. + layout + Either one of ``"spring"`` (the default), ``"circular"``, ``"kamada_kawai"``, + ``"planar"``, ``"random"``, ``"shell"``, ``"spectral"``, ``"spiral"``, ``"tree"``, and ``"partite"`` + for automatic vertex positioning using ``networkx`` + (see `their documentation `_ + for more details), or a dictionary specifying a coordinate (value) + for each vertex (key) for manual positioning. + layout_config + Only for automatically generated layouts. A dictionary whose entries + are passed as keyword arguments to the automatic layout algorithm + specified via ``layout`` of ``networkx``. + The ``tree`` layout also accepts a special parameter ``vertex_spacing`` + passed as a keyword argument inside the ``layout_config`` dictionary. + Passing a tuple ``(space_x, space_y)`` as this argument overrides + the value of ``layout_scale`` and ensures that vertices are arranged + in a way such that the centers of siblings in the same layer are + at least ``space_x`` units apart horizontally, and neighboring layers + are spaced ``space_y`` units vertically. + layout_scale + The scale of automatically generated layouts: the vertices will + be arranged such that the coordinates are located within the + interval ``[-scale, scale]``. Some layouts accept a tuple ``(scale_x, scale_y)`` + causing the first coordinate to be in the interval ``[-scale_x, scale_x]``, + and the second in ``[-scale_y, scale_y]``. Default: 2. + vertex_type + The mobject class used for displaying vertices in the scene. + vertex_config + Either a dictionary containing keyword arguments to be passed to + the class specified via ``vertex_type``, or a dictionary whose keys + are the vertices, and whose values are dictionaries containing keyword + arguments for the mobject related to the corresponding vertex. + vertex_mobjects + A dictionary whose keys are the vertices, and whose values are + mobjects to be used as vertices. Passing vertices here overrides + all other configuration options for a vertex. + edge_type + The mobject class used for displaying edges in the scene. + edge_config + Either a dictionary containing keyword arguments to be passed + to the class specified via ``edge_type``, or a dictionary whose + keys are the edges, and whose values are dictionaries containing + keyword arguments for the mobject related to the corresponding edge. + You can further customize the tip by adding a ``tip_config`` dictionary + for global styling, or by adding the dict to a specific ``edge_config``. + + Examples + -------- + + .. manim:: MovingDiGraph + + class MovingDiGraph(Scene): + def construct(self): + vertices = [1, 2, 3, 4] + edges = [(1, 2), (2, 3), (3, 4), (1, 3), (1, 4)] + + g = DiGraph(vertices, edges) + + self.add(g) + self.play( + g[1].animate.move_to([1, 1, 1]), + g[2].animate.move_to([-1, 1, 2]), + g[3].animate.move_to([1, -1, -1]), + g[4].animate.move_to([-1, -1, 0]), + ) + self.wait() + + You can customize the edges and arrow tips globally or locally. + + .. manim:: CustomDiGraph + + class CustomDiGraph(Scene): + def construct(self): + vertices = [i for i in range(5)] + edges = [ + (0, 1), + (1, 2), + (3, 2), + (3, 4), + ] + + edge_config = { + "stroke_width": 2, + "tip_config": { + "tip_shape": ArrowSquareTip, + "tip_length": 0.15, + }, + (3, 4): { + "color": RED, + "tip_config": {"tip_length": 0.25, "tip_width": 0.25} + }, + } + + g = DiGraph( + vertices, + edges, + labels=True, + layout="circular", + edge_config=edge_config, + ).scale(1.4) + + self.play(Create(g)) + self.wait() + + Since this implementation respects the labels boundary you can also use + it for an undirected moving graph with labels. + + .. manim:: UndirectedMovingDiGraph + + class UndirectedMovingDiGraph(Scene): + def construct(self): + vertices = [i for i in range(5)] + edges = [ + (0, 1), + (1, 2), + (3, 2), + (3, 4), + ] + + edge_config = { + "stroke_width": 2, + "tip_config": {"tip_length": 0, "tip_width": 0}, + (3, 4): {"color": RED}, + } + + g = DiGraph( + vertices, + edges, + labels=True, + layout="circular", + edge_config=edge_config, + ).scale(1.4) + + self.play(Create(g)) + self.wait() + + self.play( + g[1].animate.move_to([1, 1, 1]), + g[2].animate.move_to([-1, 1, 2]), + g[3].animate.move_to([-1.5, -1.5, -1]), + g[4].animate.move_to([1, -2, -1]), + ) + self.wait() + + """ + + @staticmethod + def _empty_networkx_graph() -> nx.DiGraph: + return nx.DiGraph() + + def _populate_edge_dict( + self, edges: list[tuple[Hashable, Hashable]], edge_type: type[Mobject] + ): + self.edges = { + (u, v): edge_type( + self[u], + self[v], + z_index=-1, + **self._edge_config[(u, v)], + ) + for (u, v) in edges + } + + for (u, v), edge in self.edges.items(): + edge.add_tip(**self._tip_config[(u, v)]) + + def update_edges(self, graph): + """Updates the edges to stick at their corresponding vertices. + + Arrow tips need to be repositioned since otherwise they can be + deformed. + """ + for (u, v), edge in graph.edges.items(): + edge_type = type(edge) + tip = edge.pop_tips()[0] + new_edge = edge_type(self[u], self[v], **self._edge_config[(u, v)]) + edge.become(new_edge) + edge.add_tip(tip) + + def __repr__(self: DiGraph) -> str: + return f"Directed graph on {len(self.vertices)} vertices and {len(self.edges)} edges" diff --git a/tests/module/mobject/test_graph.py b/tests/module/mobject/test_graph.py index 91b291b016..5ae3eda4fb 100644 --- a/tests/module/mobject/test_graph.py +++ b/tests/module/mobject/test_graph.py @@ -1,6 +1,6 @@ from __future__ import annotations -from manim import Graph, Scene, Text, tempconfig +from manim import DiGraph, Graph, Scene, Text, tempconfig def test_graph_creation(): @@ -8,17 +8,19 @@ def test_graph_creation(): edges = [(1, 2), (2, 3), (3, 4), (4, 1)] layout = {1: [0, 0, 0], 2: [1, 1, 0], 3: [1, -1, 0], 4: [-1, 0, 0]} G_manual = Graph(vertices=vertices, edges=edges, layout=layout) - assert str(G_manual) == "Graph on 4 vertices and 4 edges" + assert str(G_manual) == "Undirected graph on 4 vertices and 4 edges" G_spring = Graph(vertices=vertices, edges=edges) - assert str(G_spring) == "Graph on 4 vertices and 4 edges" + assert str(G_spring) == "Undirected graph on 4 vertices and 4 edges" + G_directed = DiGraph(vertices=vertices, edges=edges) + assert str(G_directed) == "Directed graph on 4 vertices and 4 edges" def test_graph_add_vertices(): G = Graph([1, 2, 3], [(1, 2), (2, 3)]) G.add_vertices(4) - assert str(G) == "Graph on 4 vertices and 2 edges" + assert str(G) == "Undirected graph on 4 vertices and 2 edges" G.add_vertices(5, labels={5: Text("5")}) - assert str(G) == "Graph on 5 vertices and 2 edges" + assert str(G) == "Undirected graph on 5 vertices and 2 edges" assert 5 in G._labels assert 5 in G._vertex_config G.add_vertices(6, 7, 8) @@ -30,12 +32,12 @@ def test_graph_remove_vertices(): G = Graph([1, 2, 3, 4, 5], [(1, 2), (2, 3), (3, 4), (4, 5)]) removed_mobjects = G.remove_vertices(3) assert len(removed_mobjects) == 3 - assert str(G) == "Graph on 4 vertices and 2 edges" + assert str(G) == "Undirected graph on 4 vertices and 2 edges" assert list(G.vertices.keys()) == [1, 2, 4, 5] assert list(G.edges.keys()) == [(1, 2), (4, 5)] removed_mobjects = G.remove_vertices(4, 5) assert len(removed_mobjects) == 3 - assert str(G) == "Graph on 2 vertices and 1 edges" + assert str(G) == "Undirected graph on 2 vertices and 1 edges" assert list(G.vertices.keys()) == [1, 2] assert list(G.edges.keys()) == [(1, 2)] @@ -44,19 +46,19 @@ def test_graph_add_edges(): G = Graph([1, 2, 3, 4, 5], [(1, 2), (2, 3)]) added_mobjects = G.add_edges((1, 3)) assert str(added_mobjects.submobjects) == "[Line]" - assert str(G) == "Graph on 5 vertices and 3 edges" + assert str(G) == "Undirected graph on 5 vertices and 3 edges" assert set(G.vertices.keys()) == {1, 2, 3, 4, 5} assert set(G.edges.keys()) == {(1, 2), (2, 3), (1, 3)} added_mobjects = G.add_edges((1, 42)) assert str(added_mobjects.submobjects) == "[Dot, Line]" - assert str(G) == "Graph on 6 vertices and 4 edges" + assert str(G) == "Undirected graph on 6 vertices and 4 edges" assert set(G.vertices.keys()) == {1, 2, 3, 4, 5, 42} assert set(G.edges.keys()) == {(1, 2), (2, 3), (1, 3), (1, 42)} added_mobjects = G.add_edges((4, 5), (5, 6), (6, 7)) assert len(added_mobjects) == 5 - assert str(G) == "Graph on 8 vertices and 7 edges" + assert str(G) == "Undirected graph on 8 vertices and 7 edges" assert set(G.vertices.keys()) == {1, 2, 3, 4, 5, 42, 6, 7} assert set(G._graph.nodes()) == set(G.vertices.keys()) assert set(G.edges.keys()) == { @@ -75,13 +77,13 @@ def test_graph_remove_edges(): G = Graph([1, 2, 3, 4, 5], [(1, 2), (2, 3), (3, 4), (4, 5), (1, 5)]) removed_mobjects = G.remove_edges((1, 2)) assert str(removed_mobjects.submobjects) == "[Line]" - assert str(G) == "Graph on 5 vertices and 4 edges" + assert str(G) == "Undirected graph on 5 vertices and 4 edges" assert set(G.edges.keys()) == {(2, 3), (3, 4), (4, 5), (1, 5)} assert set(G._graph.edges()) == set(G.edges.keys()) - removed_mobjects = G.remove_edges((2, 3), (3, 4), (4, 5), (5, 1)) + removed_mobjects = G.remove_edges((2, 3), (3, 4), (4, 5), (1, 5)) assert len(removed_mobjects) == 4 - assert str(G) == "Graph on 5 vertices and 0 edges" + assert str(G) == "Undirected graph on 5 vertices and 0 edges" assert set(G._graph.edges()) == set() assert set(G.edges.keys()) == set() @@ -93,8 +95,8 @@ def test_custom_animation_mobject_list(): assert scene.mobjects == [G] with tempconfig({"dry_run": True, "quality": "low_quality"}): scene.play(G.animate.add_vertices(4)) - assert str(G) == "Graph on 4 vertices and 2 edges" + assert str(G) == "Undirected graph on 4 vertices and 2 edges" assert scene.mobjects == [G] scene.play(G.animate.remove_vertices(2)) - assert str(G) == "Graph on 3 vertices and 0 edges" + assert str(G) == "Undirected graph on 3 vertices and 0 edges" assert scene.mobjects == [G] diff --git a/tests/opengl/test_graph_opengl.py b/tests/opengl/test_graph_opengl.py index 4c246eaca1..eb56935b9c 100644 --- a/tests/opengl/test_graph_opengl.py +++ b/tests/opengl/test_graph_opengl.py @@ -92,7 +92,7 @@ def test_graph_remove_edges(using_opengl_renderer): assert set(G.edges.keys()) == {(2, 3), (3, 4), (4, 5), (1, 5)} assert set(G._graph.edges()) == set(G.edges.keys()) - removed_mobjects = G.remove_edges((2, 3), (3, 4), (4, 5), (5, 1)) + removed_mobjects = G.remove_edges((2, 3), (3, 4), (4, 5), (1, 5)) assert len(removed_mobjects) == 4 assert len(G.vertices) == 5 assert len(G.edges) == 0 From 828497b0a2d5acf1342f5967d383cdbeda0e7adc Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 6 Apr 2023 15:22:35 +0200 Subject: [PATCH 231/555] Fixed docstring formatting of :meth:`.Scene.replace` and improved its error handling (#3204) * fix and improve formatting of replace docstring * replace assert statements by ValueError * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed ValueError message --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/scene/scene.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/manim/scene/scene.py b/manim/scene/scene.py index dc519b9ebd..b7cfb1c2b3 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -521,21 +521,22 @@ def remove(self, *mobjects: Mobject): return self def replace(self, old_mobject: Mobject, new_mobject: Mobject) -> None: - """Replace one Mobject in the scene with another, preserving draw order. + """Replace one mobject in the scene with another, preserving draw order. - If old_mobject is a submobject of some other Mobject (e.g. a Group), - the new_mobject will replace it inside the group, without otherwise - changing the parent mobject. + If ``old_mobject`` is a submobject of some other Mobject (e.g. a + :class:`.Group`), the new_mobject will replace it inside the group, + without otherwise changing the parent mobject. Parameters ---------- - old_mobject - A Mobject which must be in the scene. This method asserts if - old_mobject is not in the scene - new_mobject - A Mobject which must not already be in the scene. + old_mobject + The mobject to be replaced. Must be present in the scene. + new_mobject + A mobject which must not already be in the scene. """ - assert old_mobject is not None - assert new_mobject is not None + if old_mobject is None or new_mobject is None: + raise ValueError("Specified mobjects cannot be None") def replace_in_list( mobj_list: list[Mobject], old_m: Mobject, new_m: Mobject @@ -562,7 +563,9 @@ def replace_in_list( replaced = replace_in_list( self.mobjects, old_mobject, new_mobject ) or replace_in_list(self.foreground_mobjects, old_mobject, new_mobject) - assert replaced, "Could not find old_mobject in Scene" + + if not replaced: + raise ValueError(f"Could not find {old_mobject} in scene") def add_updater(self, func: Callable[[float], None]) -> None: """Add an update function to the scene. From b4bab0e3360239ae0fa8ab3620ec7f2d4d078d3b Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 6 Apr 2023 18:59:43 +0200 Subject: [PATCH 232/555] Prepare new release: v0.17.3 (#3198) * generated changelog for v0.17.3, first pass * bump version number * fixed python version in classifier list * regenerated changelog, second pass * changelog generation, final pass * fixed docbuild warning * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CITATION.cff | 4 +- docs/source/changelog.rst | 1 + docs/source/changelog/0.17.3-changelog.rst | 207 +++++++++++++++++++ manim/mobject/graphing/coordinate_systems.py | 19 +- pyproject.toml | 4 +- 5 files changed, 223 insertions(+), 12 deletions(-) create mode 100644 docs/source/changelog/0.17.3-changelog.rst diff --git a/CITATION.cff b/CITATION.cff index d449bb13f5..d7a2e0f6a5 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -4,10 +4,10 @@ authors: - name: "The Manim Community Developers" cff-version: "1.2.0" -date-released: 2022-12-26 +date-released: 2023-04-06 license: MIT message: "We acknowledge the importance of good software to support research, and we note that research becomes more valuable when it is communicated effectively. To demonstrate the value of Manim, we ask that you cite Manim in your work." title: Manim – Mathematical Animation Framework url: "https://www.manim.community/" -version: "v0.17.2" +version: "v0.17.3" ... diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index c98396caef..689240c78e 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -5,6 +5,7 @@ Changelog .. toctree:: + changelog/0.17.3-changelog changelog/0.17.2-changelog changelog/0.17.1-changelog changelog/0.17.0-changelog diff --git a/docs/source/changelog/0.17.3-changelog.rst b/docs/source/changelog/0.17.3-changelog.rst new file mode 100644 index 0000000000..b8e971a70e --- /dev/null +++ b/docs/source/changelog/0.17.3-changelog.rst @@ -0,0 +1,207 @@ +******* +v0.17.3 +******* + +:Date: April 06, 2023 + +Contributors +============ + +A total of 35 people contributed to this +release. People with a '+' by their names authored a patch for the first +time. + +* Alex Lembcke +* Benjamin Hackl +* DegrangeM + +* Elyanah Aco + +* Francisco Manríquez Novoa +* Fredrik Lundström + +* Frédéric Crozatier +* Ikko Eltociear Ashimine + +* ItIsJoeyG + +* JinchuLi2002 + +* Kevin Lubick +* KingAndCross + +* M. A. Ali + +* Matthew Lee + +* Max Coplan + +* Naveen M K +* NotWearingPants +* Oscar Rangel + +* Papierkorb2292 + +* Phoenix2157 + +* Tristan Schulz +* ciobaca + +* coreyp1 + +* davidot + +* icedcoffeeee +* karpfediem + +* vahndi + + +The patches included in this release have been reviewed by +the following contributors. + +* Benjamin Hackl +* Fredrik Lundström +* Frédéric Crozatier +* Hugues Devimeux +* Kevin Lubick +* KingAndCross +* Matthew Lee +* Naveen M K +* Tristan Schulz +* coreyp1 +* davidot +* strager + +Pull requests merged +==================== + +A total of 42 pull requests were merged for this release. + +Deprecated classes and functions +-------------------------------- + +* :pr:`3103`: Removed deprecated function ``OpenGLSurface.set_fill_by_value`` + + +New features +------------ + +* :pr:`2974`: Added :class:`.DiGraph`, a mobject representing directed graphs + + +* :pr:`3042`: Added :meth:`.Scene.replace` and use in :class:`.ReplacementTransform` + +* :pr:`3155`: Added support for individualized radius values in :meth:`.Polygram.round_corners` + + +* :pr:`3159`: Added :meth:`.set_opacity_by_tex` method for setting the opacity of parts of Tex mobjects + + +* :pr:`3201`: New tip shape :class:`.StealthTip`, allow specifying tip shape of :class:`.NumberLine` + + +Enhancements +------------ + +* :pr:`3046`: Add warning if font is not found for Text, Code, and MarkupText + + +* :pr:`3083`: Minor performance improvement in :mod:`.bezier` with preallocating array + + +* :pr:`3092`: Improved :meth:`.Mobject.add` performance by checking for redundancy only once + + +* :pr:`3134`: Performance: Store color data of ``OpenGLSurface`` to prevent OpenGL embed lag + + +* :pr:`3180`: Performance: Speed up width/height/depth calculations by reducing copying + + +* :pr:`3181`: Improved creation time for large :class:`.Text` mobjects + + +* :pr:`3182`: Reduce memory allocations when building :class:`.SVGMobject` + + +* :pr:`3191`: Fixed OpenGL rendering in named threads + + +Fixed bugs +---------- + +* :pr:`3015`: Fixed bug with ``label_constructor`` in :meth:`.NumberLine.add_labels` + + +* :pr:`3095`: Fixed ``get_axis_labels`` for :class:`.Axes` and :class:`.ThreeDAxes` + + +* :pr:`3106`: Fixed ignored ``depth_test`` argument for ``OpenGLVMobjects`` + + +* :pr:`3149`: Allow to use ``call_updater=True`` in :meth:`.Mobject.add_updater` with non-timebased updaters too + + +* :pr:`3152`: Fixed behavior of :class:`.Wait` and :meth:`.Scene.wait` with specified ``stop_condition`` + + +* :pr:`3163`: Fixed :class:`.BraceLabel` not passing additional keyword arguments to :class:`.Brace` + + +* :pr:`3195`: Fixed :class:`.Axes` scaling for :meth:`.plot_implicit_curve` + + +Documentation-related changes +----------------------------- + +* :pr:`3105`: Converted types specified in docstrings to proper type hints in :mod:`.three_dimensions` + + +* :pr:`3108`: Clarified documentation for ``--resolution`` command line flag + + +* :pr:`3109`: Clean-up, type-hints and documentation for :mod:`.three_dimensions` + + +* :pr:`3124`: Fixed docstring of :meth:`.ThreeDCamera.get_value_trackers` + + +* :pr:`3126`: Fixed dead links to troubleshooting page + + +* :pr:`3137`: Fixed example using ``reverse=True`` with :class:`.Write` + + +* :pr:`3160`: Fixed a typo + + +* :pr:`3189`: Corrected the hinted return type for :func:`angle_between_vectors` + + +* :pr:`3199`: Updated ``winget`` command for installing MiKTeX in documentation + + +* :pr:`3204`: Fixed docstring formatting of :meth:`.Scene.replace` and improved its error handling + + +Code quality improvements and similar refactors +----------------------------------------------- + +* :pr:`3144`: Fixed typo in ``stripUntranslatable.awk`` + + +* :pr:`3154`: Bump ipython from 8.7.0 to 8.10.0 + + +* :pr:`3156`: CI: Remove actions using self-hosted runners + + +* :pr:`3164`: Bump markdown-it-py from 2.1.0 to 2.2.0 + + +* :pr:`3165`: Removed deprecated keyword argument in :meth:`.Mobject.align_to` + + +* :pr:`3166`: Made :class:`.ArrowTriangleTip`, :class:`.ArrowTriangleFilledTip` available to module namespace + + +* :pr:`3179`: Fixed deprecation warning in :class:`.ParametricFunction` with ``use_vectorized=True`` + + +* :pr:`3186`: Updated extlinks to work with latest version of Sphinx + + +* :pr:`3196`: CI: updated PATH for recent changed in TinyTex + + +* :pr:`3200`: Made import from ``moderngl`` compatible with more recent versions + + +New releases +------------ + +* :pr:`3198`: Prepare new release: v0.17.3 diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 4150d22866..1a55c644ba 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -2098,10 +2098,11 @@ def get_axis_labels( x_label: float | str | Mobject = "x", y_label: float | str | Mobject = "y", ) -> VGroup: - """Defines labels for the x_axis and y_axis of the graph. + """Defines labels for the x-axis and y-axis of the graph. For increased control over the position of the labels, - use :meth:`get_x_axis_label` and :meth:`get_y_axis_label`. + use :meth:`~.CoordinateSystem.get_x_axis_label` and + :meth:`~.CoordinateSystem.get_y_axis_label`. Parameters ---------- @@ -2117,8 +2118,8 @@ def get_axis_labels( .. seealso:: - :meth:`.get_x_axis_label` - :meth:`.get_y_axis_label` + :meth:`~.CoordinateSystem.get_x_axis_label` + :meth:`~.CoordinateSystem.get_y_axis_label` Examples -------- @@ -2487,7 +2488,9 @@ def get_axis_labels( """Defines labels for the x_axis and y_axis of the graph. For increased control over the position of the labels, - use :meth:`.get_x_axis_label` and :meth:`.get_y_axis_label`. + use :meth:`~.CoordinateSystem.get_x_axis_label`, + :meth:`~.ThreeDAxes.get_y_axis_label`, and + :meth:`~.ThreeDAxes.get_z_axis_label`. Parameters ---------- @@ -2505,9 +2508,9 @@ def get_axis_labels( .. seealso:: - :meth:`.get_x_axis_label` - :meth:`.get_y_axis_label` - :meth:`.get_z_axis_label` + :meth:`~.CoordinateSystem.get_x_axis_label` + :meth:`~.ThreeDAxes.get_y_axis_label` + :meth:`~.ThreeDAxes.get_z_axis_label` Examples -------- diff --git a/pyproject.toml b/pyproject.toml index d8e4491d87..5b8dd9e776 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "manim" -version = "0.17.2" +version = "0.17.3" description = "Animation engine for explanatory math videos." authors = ["The Manim Community Developers ", "3b1b "] license="MIT" @@ -14,10 +14,10 @@ classifiers= [ "Topic :: Scientific/Engineering", "Topic :: Multimedia :: Video", "Topic :: Multimedia :: Graphics", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Natural Language :: English", ] exclude = ["scripts/","logo/","readme-assets/"] From 06f60f6021aba8eab202dde397758e1d3c566696 Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Wed, 19 Apr 2023 23:35:02 -0700 Subject: [PATCH 233/555] Small grammar change to deep_dive doc (#3218) In manim/docs/source/guides/deep_dive.rst line 388, changed "there is an playground" to "there is a playground". --- docs/source/guides/deep_dive.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/guides/deep_dive.rst b/docs/source/guides/deep_dive.rst index b46a22ccc4..feef87d2e3 100644 --- a/docs/source/guides/deep_dive.rst +++ b/docs/source/guides/deep_dive.rst @@ -385,7 +385,7 @@ describing the control points in between ("handles"). .. hint:: To learn more about Bézier curves, take a look at the excellent online textbook `A Primer on Bézier curves `__ - by `Pomax `__ -- there is an playground representing + by `Pomax `__ -- there is a playground representing cubic Bézier curves `in §1 `__, the red and yellow points are "anchors", and the green and blue points are "handles". From a7a972bf6616ef165a415a90312d3b03431ff375 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Tue, 25 Apr 2023 04:26:35 -0700 Subject: [PATCH 234/555] docs: enable social cards (#3219) This is new feature of `sphinxext-opengraph` which will automatically generate social cards for the documentation. This is a new feature and it is not enabled is there is a custom `ogp_image` defined, which we do. Remove it and also make sure it adds our logo to the social cards. --- docs/source/_static/logo.png | Bin 0 -> 11653 bytes docs/source/conf.py | 4 ++- poetry.lock | 48 ++++++++++++++++++----------------- pyproject.toml | 2 +- 4 files changed, 29 insertions(+), 25 deletions(-) create mode 100644 docs/source/_static/logo.png diff --git a/docs/source/_static/logo.png b/docs/source/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..96f6490bcb3075c8bc989bc17a1b7f2147772376 GIT binary patch literal 11653 zcmeHN_dA$=C2`<(l8&iS14oFt>i59nz)X+R(l{X<=_2?#_I_V1yl z1V-2kGu{F}SA2D?0ze>!u73|npHG?lfNqn0)a@ndwT{rJNddw z`uMx$ZmV*FK>VPGU@fzdPg{$jpRWDMq1r*4E(Uz3<1c(kB~H4u%g^lA>gL5D(|w1A zQkvhMBjwqmoH5kuQ;Kn5eXp0n-BwOH5;~z@m7db~3v)JkCtVEQaN@~~m|4@cIo2^@ zhiN%3EL*T`_~te&YUAiUV(&pn#Zs6{0{XzLjeshK@e2wDSVggGg2C}Ug(8Bo+;REP zeqXvULBTE=OcIo?@Bat?uPcQ85E)}@;Qd^&7qKO!x%LDUeqxuF?9FN=)j2xd(9l4% zGZ1_3<)y0lB`gWXds8zDO>h~bUuGql6Zi0VUv1k`*M)xxU4X)fcG?zC$1(1tXPlb- zcx(T+R|l0{g97$BJ7}-e{TRnQ;W}1}(TbXRC&3!}^tk=>ezufD{vMJ|P~>I+?tYA? zk+lFLNT6{`xFeZbnd?|yPkN0+)68(L)!j4>9mLckmQzS2{T)xL`nns7OCunmg&(h` z@RBZbci=FztiNXPoX~|#ld%pggv8!T(DK+$+bAg6HtFZ-qbtU1$r7n}sRxkiCrUT@wFcw!=^cF;O3&Cr ziB8p>nk4E4tL{9YrC0r2#Y7kkZk1u6{wXaCN>lD)vFPI8d%QcPA|c-U+LecKIplzR zd$)h9>AfU0BI=R;pof&)-Me?+P*-?^jNU&xCiJ@a{}nW!A6yXr$dPh!y;J5FuMf$p z#m%eL2ZYu~f)@Hhd-@b31A&#G(O;dT+K9Gi)m!rg_7`XSd68}E#;YlxR9_$|B1Sw54ZNO*P{TG#c+Aefe{}IL$qs#Vr@XdS>jhFNJ7ACXp!WGe zF6ja$_zmfm!8*9Z;=;nu865LTmCN>ccrEsa2-+r3_Y4e z9Wv%o-B!=sDnV=wqIH~|S2;-F5T!4)ovfZ2Kkg@}=6uH#;^SDFyq3>t}^83=>U zl(q`7vvn?{ZhW?M5NfK(hVx3#I#7k6_h&^vr#yd&R`jii{r*lC4;bWu!5AQ-Mj% z=dbZ)m91e{VqP$G?T>J1w9kcGmAvRRevqZTc2xsjC0M_VdUl!SX>F6|gJjN;^+1SVFNxb{AigG$8lHP#co z4Be4v!{OoKYSNG)r{mctcR7CqjhM{L@0TtS_|vIq{I=|n!6_6*+tO#@@HCMO8O->; z30;^qe`$bjz}=5Hu1pY!f*XHgt=VyER#3i?c5raV+5+mCX!fAh_Gt5-ZHA~Q$3fd< zXbIiqYSsIUaQoD-u9dJ216alU=pd>@lr5QlJCXz2PZ=dzZl<-Jk?c`5@qsj##_v&a zq2t(*b*_OtS%|>m2asu7WwgT=5A8L{#1&bUYpseiO8OR%BOTC!1=rR+MccRY@}NS= zK_zn+&my?~HF7$l{apRpcfWI$TQ~{(^+sjoZL+a^Z-W^9zBE3E1HxL*w9wNlZ#VHi z?y9^H>vwZ*;=coKX-_iBU^Kp6Z6Ra8p-F5vT}Rf}*EL8&WVZ@+yVepC zDs2ewKRzT7K2v4e*Majpe`Rrsvr6{br%QwhP@h>m*CT0}|+b3y02jQlT zFxyY3v?m>8FcZ%`J#jCgrlQ&ND?9P_>yP5^K}ax**!luv z&)TzyTkT7eGUYd|M^J^M?+F(RI*z$9!7EXGo$x?s8e8cg>?BFcNRELpgw&S^R&jB2 zEh)92)iN@*i(~-J91hOy7v@4=ztSrBwwk8V&eM4{aYf4x2^l?<^%MDST<>eA zlKs8Vlf6G;Bo~8D&6QluqBBb8f{Tmnq`u+Oi>#EN=Jc41Nq`*<|KKFxU(n@irPpnG znJbyjM~2Z=5%sqc^O6%4d`TDig8bMOKi>;BbD<-0zcRyz_@)=uO1>n1&i` zWvIgx*!}jiLj==r>B)c(#GE>4MYS|YeG|H7Swa3wx82P>aV#vK$K^q*6LbZtEk!FI z%x~WwU03#zG5F`%2Z<30T^IGDJt1atYpDY#7 zzV4YMTN3JJV3RmlxEEj#d&l?2@_a*{Dy4 zr&w>{xzTx^rgr#bj_oSgjGHcu@h*2eW9N3DbFngH?$wpXmXQ|k#nxbosNd4IJe2Ee z%5FvGue$12+RY1LFy{(4!GG|l+6{@|ib>>7@KhccR3miMnv|<7*T5ct+c_JmD0K+3 zM`UZeazEAvb;J{)+~neldP#GKjNE-@9dk&8sz`;6jRNSns_RQ4Vsh%yNYKc=oY^rW z#%1!EIImoN@g&k1Exa+{=&pkdmFW1Glkan(h9qDk=RWs}mTxrFle5|5#-Y8}@f@o^GB-NZ7RyK3#UAw|^2<&Ay{c3QXd^w`Y*=%ho zaenS6B7tA<5;##e7Sqh$nGb*`EXv1d{YzC<6)o(shUS2&t1J74a;ar-_^E2M4{I5s ze-Vf)(7L|D(F}7#HG%;6leZ0BgNm}M+)W&!5()aUXk-&Jm|Qzm2!+0O!FujL4+sb# z&Rc@lBmi-ePIK!l0cB47{JAF?eDPNe)Z#&xbRTX7@$j<3~XG0vNAPqldYppR1@wS~MU9rEP z)A83CY!KM;(w`TOH;Nq{$Jk%KKwshCs-mNi%#(j%tphjhUENJ1QC*h)8)}}GJ7Dx& z*etP?r>lxI>1CRh0|>Al2dbUsuALn<6-eu$Kjd9qr3&czoK{*zm~8(+@l3|9i|kgH zn;;DXWn|H{!plcMpsb*&)C*T~9Qu*oFC?}9^-fFsg%D_UG1WMGN)vpIn~q58?)4&) zyfc@fD~RQ@@zJ>j4^+Q-y&edaq4VEwQ^!Z8SL2wCSEMntF6l7(sqjy|I#UyRIZmhB zxMMPK?8JWUl%uwGmv31??%M;_N61H^qc=-E%FX4oC>e4MMj3ipMS zqMQ+#WNOdTEc?a@me#$xOR%rj0{8S3N=Y;O;i3a{0DkHa7oyru(dnPK z;)KEOwNE*U2eHX|u|D^!&@6uUy-=!VYIqn2IvaNi2@JTa+%t$0+>6Yvtw0T30lh1K z6xZ)LK0Q5Uzadim+j)#V7P|1~?t0_pF!ud>4Ol-P5E2U}$97t5H$E+l`I5)n2P}iY zaM&myew&Uc$War1bQQ!`!o{*on{PSL+(3D_N7ij|F22x2v#?07`T>UmuSroxGOI33 zBWymA{iK;koOT&fnKw2vl7yh0j#0J<&NpB|InXnJJ-H=;1-BS)3DQVXMyAh}XF8vf zQb_LAnLPV5ki|o@upw>hl-QNS`R@EtOTQ|p(Yp`YpB7M_27MW;&3-Vw~x+G?G~?r5?gq>+U3C|$yyFz?FVl{I65g4S4JPft1m0FLl>tTJ=rug z?*=&J4tF(qpPP@wGaK_uW0K37BELl|rBw9)v0t|XC>KrVAVXKiQv%_EQl839PBkW& zgKt|5c5$#Ex_v_b1$a#Zkd%Os(&hRnE?Zwz+?Isd&Og3r@fu{4 z8zXa;D6q6=b$6Ilagnl|nv6Xpr%9in4pNy&Ny09;vj|6c=nOZwPl#XpupwU!>PYQd z^$9Oe`llQ`ncsXSnD83N1)C$kKbFWb*fvYQ$#OOF ze>jhwI-1MofOaaocFJz&DimN{mzZ|Q6f38iVkCZg$zg~FnlbD%!WqN%9skJl*B`Gey#H`(3$j; zvJxi`fObC{5BK@#OERGe#*DlyAfwnfA!DYXjaw4g4LNgWJt^<15nXmK6$Pxq2lSZH zaP&>jQz`=dZ%)1wjLK5|WQ{>ej>))28WZVq;0|*vU(vxsR>020X?4Ov8yJ{>ggNd9DH$3M_Tyb_z?o-65(=Tho`ld$Uur`MN?YD9frl|FOhYlx+s|rI>TIzc}hG zc5zXVmLxOM-$3W9!ri-P0sq)s%SeSFn#H^{OKmeS*yjBzW1h)g+ylO%1oa@ zwHHKj-z{iS>IOdOxzeE$k&j)mM42@lQBvb(LxWt>cj{BIo8332iHNLJ{OWwZ1d>0s zOBCZcAQ6CRn4|}4F+y$SoqONd{Bwv=B4Sj@W?M<)n0SyiiJ6OXyBTrrZqW~zZmM@o z!sA#EIuj-Pn3`fYxBUngzcO2CN4zxUU!LBvCCi!C;Q86z#|pvT*zX7hc&n_H-hYe%+GgleYi9<2Lh1$2GR@?7i-BAFMQ;Ar!r=3mCA31@{;QlYwTsdQGOe4TthqZYnv3&e{Mf=Y>r+Oo_4FNcXeffLByh zm<$q8T|0<6tVbzZU#1qIgugp9+@VYSZ*nZ+NKSWBpGWB~_QnU?X~Y)ZlE#pIX(~N4 zNpvzEY#qWaWEG8N7kxZT`to|=a@IL*Yfl-XZcYaqI=&@P29Ehgm9+v5@Q^ud;G|o~ zjxC@e@fjZ|r3_+&6-y;Y^CGW-8>GTzc)>$K{tZ`AMOiO-getAoz=$F^?F!3jR^=f-T#B6)g$rVW*IP)H*sNAU4!@5XKtk z{qU9z!?HZcJZjR&i|mMg6}s67pkV=TqW5+v!gB>xhBnU>2h6Flu`x)@w_uf|B?8t| zDY3E>#I`(Q>+pRbv1eFcJ^3|UBj-$P>0z0zZ+~X2qRUUsCj}lMT9VytZ9I=24c%fq z&So=mRrAE=eN4^^*AtSJo#0N_{c=B+mODY^J7Vjs>x-thyOlr1EqD5E>kvMA9?R6O zQO;L;BxfQY;#OxMD5V*^pdNF_ASo8|V@;TX*N;O|Kgsrkd#ZnWD2P&tP6}Y?gve2f zuo}gd1M98LpwZDf5G*m#_n6(&Sn1W#R{hPFx#(u^_KBmrN&uE~_qDB-C4eLyLT9iU z`gv^Y#ayx4E4$jKI+*pfcgVsgww0dmU+;0!CKlMm#YX%Pw>f=MG(r)@ZtMY|7a^Zx zOW*0fx!ONBFffrflA`l@0;JgX@bus#_;-2xbao1#D)D&_?liEPDeI)C*y5_%uSX zpLB&x_Gd2nQtl^$6wxcbHfGVE@I-ZYzo)-?m~QR)Z|CPBCoWo`{I;9tI-iZ=19$`f zQiC;`I>fj{Il`^!@BR6k^Y$BaR|0;ezTnnDav_!POI%sMTe4ZA2oUw$K$QU;@T!{1 z4vO%c{vOaz1$CB_Ex@PF>^rPnB1>Fy+UbqOsPSRtgepiR!*2>C476V_}W@Jtd-Ew z!VP*h^nrO`XWC1P@4I}Jos7|KD~7b&^k%H{@?X%x4Pj5v?;l$-a{UcSi=OX2dW*$w zPn^X|y96p7s>586^6Z0ez0*3>4n=yYB0Wa)TR^f)3t7G)kC_K{D`AL3cF-sFFkZRZ zq9VV+uaDeFeX)B-_nifIpF6>D#>`k0%j+&w{^d7X-1vzfv5$)EkoR|sB&g=Qz~mc_ z_rXKkk5}3@Xo$(FZd8+&pTiXSMp`ol(HAqJ4^HiL-d^W900<^sx$lc96_ z_B0E)?Jtt_@Vs6fLIJ;jKf6BR)n^jjMlvxOOMixvQ6ZEW12>odZ(1 zI*aq1bA+(BZ5iIT(3K`$JM8(vpNU2I93i3nca$+z+uOLpk6X8MtOFq$ia;RkjEZa4hX9HFENR{l3-{muyiqX)=0g|hM(XL|Y#@v+Q7B~pW5b)oz3 zu0P;m?N_h+SIiKt`Po&@SQUmXXWX|pk`j|TWd!B(L0^OtZljK&6ZR6F{i}V1O|8EU z=8Rl#R#rb9RflXaO8w4yP(a;HYgW*JcM~`2$ybDf{~%`It*;s7eo9MXa>11k)BEL$ ziA<=oqw@SF*Z#NDN$LIRC)IE~xLZH%<4ZzgOG%Iwxsl)F zKdr6F(&MS_bSWEor8^S4DoD31XhSFl^i$xKj)wMI)5qs;N7_uW0~G4X-LPyBdU!oV zY`OG=ao%$z`5CI2q3%2Ftw zjr|fP1o+Ot#dUSmQ5#nva~u;XeO6=4q3S{I@qj_QY@tKs^QmE3@AQm{adRK`W;JDv zH@R;*I-dOD!^q--$=TV$@<}r&H>Km9m@n1T30(a_p%~~{bv_+)-8Q5=T?iK1zhJZ)2Bb&UmPp5fi z2`j;U^LHK}s_!{wGKvmmHzC_tatp$5Z|sA~v$Q>ocDG-) zw>)DMC-_qD!BB!u`BW3A7p6I)?0hA3N_Fx3|ErBfM z6f_i|azD0b7hEhfQnwCt7f}A|1>kQ(vNzpQViaVI#C}{9JKO!1b-dHqMCZ?8Ie}>gKL=uz%$FLu&7SvQ9Vg zu9d;pp;}D}uHhxO=G!YYv)P$X?zhH18f~AhzQ+qfpim?>_H#xJICBODr|R)oTMjlM zk*dq}1*sD|uu&#>Y`(}yi&uC(3w!+3UNYYRab?G|j|?1D+uGR3zZsy9duPh3i@f&i zwD-Vs$!{_rSX&&{fJRU35|h)W z5O}de9iY69eu?!uxJ7Xu4pC50U|+*~`uT4%#VdO|HKUKajEyHcmVQ^3@x(CqU5j=@ z7Oft88wr!1_Yx`g8GssbM^^XV08qhj!%miq1R>By1|G*DWKD(3On5B;1hu3y8U+0pLcAY0)r z%E2b`9!}=_4jp8aX36_2X^RVaCV2zDSA$*Wn|;|E=Y#6FnP&Pv^Idb0_P3q9ApHj< z)E9BPQ7#ycrS=~Q6bq>!g}X?H#mf0#N5Y{-`46MwqPkwT^l6Rb<*`OnN;virrE$FS9w60qu~%Ar5uxXtNjIB5 zN3X|0pEPNAmzA2F@6tYO`7J^;sk!060+>HaN^It zujv2AoCib99dHollkdPq!PVWvRAQRW;c=hD*8a4Q?2a^U;HAbq_l(n+ug!QJPk)L# zm%PFE4_d4TO1fpflaC1}xCtJHOO+TDyhq9}tES54TvG7A6~>g2Z?m%83)j6kz8cteo z|3RgoQI79GZfi*1i7V2sUEf0|&fqsJfqP04kHSLe4;1DlzOQ5{6--^Dowxp2U_hpI za9V8_Wd8767{Jq~SNEn(Kw=#@eoY-d> z`|qU?rCyjgW&yoAAjS^67q-&jQ1OdKrauQFqzg3{T>FOvWU7}8M$C=Pw*xK5WN*im z*CsiWF)4m3A5%n8R@zbCIN%$H)^SPJGE`D=3HU_=sy?xM5dC#5`oSoY-fF&i=lc!N zkd%SWdD=axU(L%eSpZ4607-rwY)+UK@7V#JKz&Qw+}0PGBW_lQN1#{x4v#xr%j5Cc z-w|OhG((dCnxNtB~7|!C4Mbd)w>Xb@k*# zG|+css5+C*8G2TnVYq#WWD>uP3et|O<5%9F0rBo4Q=>X9Y}W6r{Qy8fuo8b&O*;Dr z!XwPm-$u*nroIBKy}GFPh7IC%J)f7ILK{bV@wMA`KKRzg_9z{T&^d!{Y@)?`M(+#ihs}%ai}T1F%>F&&5&rPe+6SPmCOcqyZny7*RP6t zU`R1@aIiSVill;rq=)g=q%g9#zh-pY_AJ<0$>Z{07rSrG`Nk8r(*(kb(2e9n4?O1G zB%iBltUv@@0PV15EWCRXRzW&*Y^ST~bxr@PosGu6R22KYXRB&q;=*n6$~YX25?AMg zDE8HQ^Wf5mQ~|?(k*3&&DenYlM%_o4NNiX%x*G&`$ZPfeIdpU;nLwmkY861AEssBt z2&O;ASWv^snU3k-?>oko$>HV_q^kCjOjrkwgEeH&j}j40KarSGK(N?AEx%IMxqx#8 ztkl9LL}n8B0w~7xam>YBsLz(Jr-Q7FfXr9*VAF>$w}tGn#O0Iz`Pw~t{}q#m3C0%m zCu(LjuboROczG;CD%e~zE6CjA{>vlJhd}q$Y=QmVGM2Zx}sueVg$T> ztR1;s8V>n2J@s@@mHKcO$xDTx{`dm(f>y9Tnk?qBOw@?u!0f6; Date: Tue, 25 Apr 2023 13:27:35 +0200 Subject: [PATCH 235/555] [pre-commit.ci] pre-commit autoupdate (#3212) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-mypy: v1.1.1 → v1.2.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.1.1...v1.2.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 83383d10e9..d2e5f3b414 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.1.1 + rev: v1.2.0 hooks: - id: mypy additional_dependencies: From 4059bc1102e9a0bb59d24809cf6bedffcb8fee83 Mon Sep 17 00:00:00 2001 From: JinchuLi2002 <63861808+JinchuLi2002@users.noreply.github.com> Date: Tue, 25 Apr 2023 07:42:47 -0400 Subject: [PATCH 236/555] added condition for OpenGLVMobject (#3211) --- manim/mobject/graphing/number_line.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index 5c70e526c1..08f6ef48fa 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -2,6 +2,8 @@ from __future__ import annotations +from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject + __all__ = ["NumberLine", "UnitInterval"] @@ -626,7 +628,7 @@ def _create_label_tex( """ if label_constructor is None: label_constructor = self.label_constructor - if isinstance(label_tex, VMobject): + if isinstance(label_tex, (VMobject, OpenGLVMobject)): return label_tex else: return label_constructor(label_tex, **kwargs) From 524b27a2982758fb9646956a13d61fe06bda6405 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Tue, 25 Apr 2023 04:43:38 -0700 Subject: [PATCH 237/555] DecimalNumber: Don't set `stroke_width` attribute directly (#3210) Instead set it through super object init method. For some reason, on OpenGL renderer `stroke_width` is needed as a different type, rather than an integer as in Cairo renderer. To avoid problems, set `stroke_width` while calling super's init method. --- manim/mobject/text/numbers.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/manim/mobject/text/numbers.py b/manim/mobject/text/numbers.py index b5b9f71c85..f5eff7fada 100644 --- a/manim/mobject/text/numbers.py +++ b/manim/mobject/text/numbers.py @@ -66,7 +66,7 @@ def __init__( fill_opacity: float = 1.0, **kwargs, ): - super().__init__(**kwargs) + super().__init__(**kwargs, stroke_width=stroke_width) self.number = number self.num_decimal_places = num_decimal_places self.include_sign = include_sign @@ -78,7 +78,6 @@ def __init__( self.include_background_rectangle = include_background_rectangle self.edge_to_fix = edge_to_fix self._font_size = font_size - self.stroke_width = stroke_width self.fill_opacity = fill_opacity self.initial_config = kwargs.copy() From 0902eef61f79eb49efd7a2dbe764428aaec34f55 Mon Sep 17 00:00:00 2001 From: JinchuLi2002 <63861808+JinchuLi2002@users.noreply.github.com> Date: Tue, 25 Apr 2023 08:22:27 -0400 Subject: [PATCH 238/555] Enables Use of input_to_graph_point() by CurvesAsSubmobjects Instances (#3190) * CurvesAsSubmobjects preserve points. * Override point_from_proportion() instead * fixed typo * added test * added underscore for helper method --------- Co-authored-by: Benjamin Hackl --- manim/mobject/types/vectorized_mobject.py | 63 +++++++++++++++++++ .../test_vectorized_mobject.py | 33 ++++++++++ 2 files changed, 96 insertions(+) diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index b5cf76ec08..12b6a85b6e 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -2345,6 +2345,69 @@ def __init__(self, vmobject, **kwargs): part.match_style(vmobject) self.add(part) + def point_from_proportion(self, alpha: float) -> np.ndarray: + """Gets the point at a proportion along the path of the :class:`CurvesAsSubmobjects`. + + Parameters + ---------- + alpha + The proportion along the the path of the :class:`CurvesAsSubmobjects`. + + Returns + ------- + :class:`numpy.ndarray` + The point on the :class:`CurvesAsSubmobjects`. + + Raises + ------ + :exc:`ValueError` + If ``alpha`` is not between 0 and 1. + :exc:`Exception` + If the :class:`CurvesAsSubmobjects` has no submobjects, or no submobject has points. + """ + if alpha < 0 or alpha > 1: + raise ValueError(f"Alpha {alpha} not between 0 and 1.") + + self._throw_error_if_no_submobjects() + submobjs_with_pts = self._get_submobjects_with_points() + + if alpha == 1: + return submobjs_with_pts[-1].points[-1] + + submobjs_arc_lengths = tuple( + part.get_arc_length() for part in submobjs_with_pts + ) + + total_length = sum(submobjs_arc_lengths) + target_length = alpha * total_length + current_length = 0 + + for i, part in enumerate(submobjs_with_pts): + part_length = submobjs_arc_lengths[i] + if current_length + part_length >= target_length: + residue = (target_length - current_length) / part_length + return part.point_from_proportion(residue) + + current_length += part_length + + def _throw_error_if_no_submobjects(self): + if len(self.submobjects) == 0: + caller_name = sys._getframe(1).f_code.co_name + raise Exception( + f"Cannot call CurvesAsSubmobjects.{caller_name} for a CurvesAsSubmobject with no submobjects" + ) + + def _get_submobjects_with_points(self): + submobjs_with_pts = tuple( + part for part in self.submobjects if len(part.points) > 0 + ) + if len(submobjs_with_pts) == 0: + caller_name = sys._getframe(1).f_code.co_name + raise Exception( + f"Cannot call CurvesAsSubmobjects.{caller_name} for a CurvesAsSubmobject whose submobjects have no points" + ) + return submobjs_with_pts + class DashedVMobject(VMobject, metaclass=ConvertToOpenGL): """A :class:`VMobject` composed of dashes instead of lines. diff --git a/tests/module/mobject/types/vectorized_mobject/test_vectorized_mobject.py b/tests/module/mobject/types/vectorized_mobject/test_vectorized_mobject.py index 5e87c820ca..a17383fd98 100644 --- a/tests/module/mobject/types/vectorized_mobject/test_vectorized_mobject.py +++ b/tests/module/mobject/types/vectorized_mobject/test_vectorized_mobject.py @@ -5,6 +5,7 @@ from manim import ( Circle, + CurvesAsSubmobjects, Line, Mobject, Polygon, @@ -41,6 +42,38 @@ def test_vmobject_point_from_propotion(): obj.point_from_proportion(0) +def test_curves_as_submobjects_point_from_proportion(): + obj = CurvesAsSubmobjects(VGroup()) + + with pytest.raises(ValueError, match="between 0 and 1"): + obj.point_from_proportion(2) + with pytest.raises(Exception, match="with no submobjects"): + obj.point_from_proportion(0) + + obj.add(VMobject()) + with pytest.raises(Exception, match="have no points"): + obj.point_from_proportion(0) + + # submobject[0] is a line of length 4 + obj.submobjects[0].set_points_as_corners( + [ + np.array([0, 0, 0]), + np.array([4, 0, 0]), + ], + ) + obj.add(VMobject()) + # submobject[1] is a line of length 2 + obj.submobjects[1].set_points_as_corners( + [ + np.array([4, 0, 0]), + np.array([4, 2, 0]), + ], + ) + + # point at proportion 0.5 should be at length 3, point [3, 0, 0] + np.testing.assert_array_equal(obj.point_from_proportion(0.5), np.array([3, 0, 0])) + + def test_vgroup_init(): """Test the VGroup instantiation.""" VGroup() From 820bfc7bf0d4b1e3ce14b7c3562e610ec3f4e0ec Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 5 May 2023 07:14:27 +0200 Subject: [PATCH 239/555] Fixed errors reported by ``flake8`` (#3231) * rewrite some list comprehensions as generator expressions * fixed flake's docstring warnings * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * one more generator expression in tests/ --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/_config/utils.py | 2 +- manim/camera/camera.py | 30 +++++--- manim/mobject/geometry/arc.py | 10 ++- manim/mobject/graphing/probability.py | 3 +- manim/mobject/graphing/scale.py | 14 ++-- manim/mobject/matrix.py | 70 ++++++++--------- manim/mobject/opengl/opengl_mobject.py | 2 +- .../opengl/opengl_point_cloud_mobject.py | 2 +- .../opengl/opengl_vectorized_mobject.py | 2 +- manim/mobject/table.py | 76 +++++++++---------- manim/mobject/text/tex_mobject.py | 6 +- manim/mobject/types/point_cloud_mobject.py | 10 ++- manim/plugins/plugins_flags.py | 7 +- manim/scene/scene.py | 6 +- manim/scene/three_d_scene.py | 2 +- manim/utils/iterables.py | 2 +- tests/module/mobject/text/test_numbers.py | 2 +- 17 files changed, 125 insertions(+), 121 deletions(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index cdbd62fce4..67522906fa 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -1172,7 +1172,7 @@ def quality(self): keys = ["pixel_width", "pixel_height", "frame_rate"] q = {k: self[k] for k in keys} for qual in constants.QUALITIES: - if all([q[k] == constants.QUALITIES[qual][k] for k in keys]): + if all(q[k] == constants.QUALITIES[qual][k] for k in keys): return qual return None diff --git a/manim/camera/camera.py b/manim/camera/camera.py index 84e7060e38..d5ebdc30a1 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -886,8 +886,10 @@ def display_point_cloud( thickness: float, pixel_array: np.ndarray, ): - """Displays a PMobject by modifying the Pixel array suitably.. + """Displays a PMobject by modifying the pixel array suitably. + TODO: Write a description for the rgbas argument. + Parameters ---------- pmobject @@ -1122,17 +1124,19 @@ def on_screen_pixels(self, pixel_coords: np.ndarray): ], ) - def adjusted_thickness(self, thickness: float): - """ + def adjusted_thickness(self, thickness: float) -> float: + """Computes the adjusted stroke width for a zoomed camera. Parameters ---------- thickness + The stroke width of a mobject. Returns ------- float - + The adjusted stroke width that reflects zooming in with + the camera. """ # TODO: This seems...unsystematic big_sum = op.add(config["pixel_height"], config["pixel_width"]) @@ -1141,7 +1145,8 @@ def adjusted_thickness(self, thickness: float): return 1 + (thickness - 1) * factor def get_thickening_nudges(self, thickness: float): - """ + """Determine a list of vectors used to nudge + two-dimensional pixel coordinates. Parameters ---------- @@ -1215,13 +1220,16 @@ def get_coords_of_all_pixels(self): # NOTE: The methods of the following class have not been mentioned outside of their definitions. # Their DocStrings are not as detailed as preferred. class BackgroundColoredVMobjectDisplayer: + """Auxiliary class that handles displaying vectorized mobjects with + a set background image. + + Parameters + ---------- + camera + Camera object to use. + """ + def __init__(self, camera: Camera): - """ - Parameters - ---------- - camera - Camera object to use. - """ self.camera = camera self.file_name_to_pixel_array_map = {} self.pixel_array = np.array(camera.pixel_array) diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index 894ca3d02b..3b8e228597 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -777,7 +777,9 @@ def __init__(self, width: float = 2, height: float = 1, **kwargs): class AnnularSector(Arc): - """ + """A sector of an annulus. + + Parameters ---------- inner_radius @@ -862,7 +864,8 @@ def generate_points(self): class Sector(AnnularSector): - """ + """A sector of a circle. + Examples -------- .. manim:: ExampleSector @@ -935,7 +938,8 @@ def generate_points(self): class CubicBezier(VMobject, metaclass=ConvertToOpenGL): - """ + """A cubic Bézier curve. + Example ------- .. manim:: BezierSplineExample diff --git a/manim/mobject/graphing/probability.py b/manim/mobject/graphing/probability.py index b38027ddf1..f0e3a2c3f3 100644 --- a/manim/mobject/graphing/probability.py +++ b/manim/mobject/graphing/probability.py @@ -34,7 +34,8 @@ class SampleSpace(Rectangle): - """ + """A mobject representing a twodimensional rectangular + sampling space. Examples -------- diff --git a/manim/mobject/graphing/scale.py b/manim/mobject/graphing/scale.py index a0797f7e9c..e1f88398a1 100644 --- a/manim/mobject/graphing/scale.py +++ b/manim/mobject/graphing/scale.py @@ -14,15 +14,15 @@ class _ScaleBase: - """Scale baseclass for graphing/functions.""" + """Scale baseclass for graphing/functions. + + Parameters + ---------- + custom_labels + Whether to create custom labels when plotted on a :class:`~.NumberLine`. + """ def __init__(self, custom_labels: bool = False): - """ - Parameters - ---------- - custom_labels - Whether to create custom labels when plotted on a :class:`~.NumberLine`. - """ self.custom_labels = custom_labels def function(self, value: float) -> float: diff --git a/manim/mobject/matrix.py b/manim/mobject/matrix.py index f8cc6b0af2..25eb9e580b 100644 --- a/manim/mobject/matrix.py +++ b/manim/mobject/matrix.py @@ -74,6 +74,39 @@ def matrix_to_mobject(matrix): class Matrix(VMobject, metaclass=ConvertToOpenGL): """A mobject that displays a matrix on the screen. + Parameters + ---------- + matrix + A numpy 2d array or list of lists. + v_buff + Vertical distance between elements, by default 0.8. + h_buff + Horizontal distance between elements, by default 1.3. + bracket_h_buff + Distance of the brackets from the matrix, by default ``MED_SMALL_BUFF``. + bracket_v_buff + Height of the brackets, by default ``MED_SMALL_BUFF``. + add_background_rectangles_to_entries + ``True`` if should add backgraound rectangles to entries, by default ``False``. + include_background_rectangle + ``True`` if should include background rectangle, by default ``False``. + element_to_mobject + The mobject class used to construct the elements, by default :class:`~.MathTex`. + element_to_mobject_config + Additional arguments to be passed to the constructor in ``element_to_mobject``, + by default ``{}``. + element_alignment_corner + The corner to which elements are aligned, by default ``DR``. + left_bracket + The left bracket type, by default ``"["``. + right_bracket + The right bracket type, by default ``"]"``. + stretch_brackets + ``True`` if should stretch the brackets to fit the height of matrix contents, by default ``True``. + bracket_config + Additional arguments to be passed to :class:`~.MathTex` when constructing + the brackets. + Examples -------- The first example shows a variety of uses of this module while the second example @@ -146,43 +179,6 @@ def __init__( bracket_config: dict = {}, **kwargs, ): - """ - - Parameters - ---------- - matrix - A numpy 2d array or list of lists. - v_buff - Vertical distance between elements, by default 0.8. - h_buff - Horizontal distance between elements, by default 1.3. - bracket_h_buff - Distance of the brackets from the matrix, by default ``MED_SMALL_BUFF``. - bracket_v_buff - Height of the brackets, by default ``MED_SMALL_BUFF``. - add_background_rectangles_to_entries - ``True`` if should add backgraound rectangles to entries, by default ``False``. - include_background_rectangle - ``True`` if should include background rectangle, by default ``False``. - element_to_mobject - The mobject class used to construct the elements, by default :class:`~.MathTex`. - element_to_mobject_config - Additional arguments to be passed to the constructor in ``element_to_mobject``, - by default ``{}``. - element_alignment_corner - The corner to which elements are aligned, by default ``DR``. - left_bracket - The left bracket type, by default ``"["``. - right_bracket - The right bracket type, by default ``"]"``. - stretch_brackets - ``True`` if should stretch the brackets to fit the height of matrix contents, by default ``True``. - bracket_config - Additional arguments to be passed to :class:`~.MathTex` when constructing - the brackets. - - """ - self.v_buff = v_buff self.h_buff = h_buff self.bracket_h_buff = bracket_h_buff diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 25159ab23c..583dd4ef7e 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -2725,7 +2725,7 @@ def throw_error_if_no_points(self): class OpenGLGroup(OpenGLMobject): def __init__(self, *mobjects, **kwargs): - if not all([isinstance(m, OpenGLMobject) for m in mobjects]): + if not all(isinstance(m, OpenGLMobject) for m in mobjects): raise Exception("All submobjects must be of type OpenGLMobject") super().__init__(**kwargs) self.add(*mobjects) diff --git a/manim/mobject/opengl/opengl_point_cloud_mobject.py b/manim/mobject/opengl/opengl_point_cloud_mobject.py index 531423be58..6f1d879ae7 100644 --- a/manim/mobject/opengl/opengl_point_cloud_mobject.py +++ b/manim/mobject/opengl/opengl_point_cloud_mobject.py @@ -162,7 +162,7 @@ def get_mobject_type_class(): class OpenGLPGroup(OpenGLPMobject): def __init__(self, *pmobs, **kwargs): - if not all([isinstance(m, OpenGLPMobject) for m in pmobs]): + if not all(isinstance(m, OpenGLPMobject) for m in pmobs): raise Exception("All submobjects must be of type OpenglPMObject") super().__init__(**kwargs) self.add(*pmobs) diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 8858a422f6..d270ec6d40 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -1676,7 +1676,7 @@ def construct(self): """ def __init__(self, *vmobjects, **kwargs): - if not all([isinstance(m, OpenGLVMobject) for m in vmobjects]): + if not all(isinstance(m, OpenGLVMobject) for m in vmobjects): raise Exception("All submobjects must be of type OpenGLVMobject") super().__init__(**kwargs) self.add(*vmobjects) diff --git a/manim/mobject/table.py b/manim/mobject/table.py index 7e8e45fca3..04e47b6663 100644 --- a/manim/mobject/table.py +++ b/manim/mobject/table.py @@ -89,6 +89,43 @@ def construct(self): class Table(VGroup): """A mobject that displays a table on the screen. + Parameters + ---------- + table + A 2D array or list of lists. Content of the table has to be a valid input + for the callable set in ``element_to_mobject``. + row_labels + List of :class:`~.VMobject` representing the labels of each row. + col_labels + List of :class:`~.VMobject` representing the labels of each column. + top_left_entry + The top-left entry of the table, can only be specified if row and + column labels are given. + v_buff + Vertical buffer passed to :meth:`~.Mobject.arrange_in_grid`, by default 0.8. + h_buff + Horizontal buffer passed to :meth:`~.Mobject.arrange_in_grid`, by default 1.3. + include_outer_lines + ``True`` if the table should include outer lines, by default False. + add_background_rectangles_to_entries + ``True`` if background rectangles should be added to entries, by default ``False``. + entries_background_color + Background color of entries if ``add_background_rectangles_to_entries`` is ``True``. + include_background_rectangle + ``True`` if the table should have a background rectangle, by default ``False``. + background_rectangle_color + Background color of table if ``include_background_rectangle`` is ``True``. + element_to_mobject + The :class:`~.Mobject` class applied to the table entries. by default :class:`~.Paragraph`. For common choices, see :mod:`~.text_mobject`/:mod:`~.tex_mobject`. + element_to_mobject_config + Custom configuration passed to :attr:`element_to_mobject`, by default {}. + arrange_in_grid_config + Dict passed to :meth:`~.Mobject.arrange_in_grid`, customizes the arrangement of the table. + line_config + Dict passed to :class:`~.Line`, customizes the lines of the table. + kwargs + Additional arguments to be passed to :class:`~.VGroup`. + Examples -------- @@ -172,45 +209,6 @@ def __init__( line_config: dict = {}, **kwargs, ): - """ - Parameters - ---------- - table - A 2D array or list of lists. Content of the table has to be a valid input - for the callable set in ``element_to_mobject``. - row_labels - List of :class:`~.VMobject` representing the labels of each row. - col_labels - List of :class:`~.VMobject` representing the labels of each column. - top_left_entry - The top-left entry of the table, can only be specified if row and - column labels are given. - v_buff - Vertical buffer passed to :meth:`~.Mobject.arrange_in_grid`, by default 0.8. - h_buff - Horizontal buffer passed to :meth:`~.Mobject.arrange_in_grid`, by default 1.3. - include_outer_lines - ``True`` if the table should include outer lines, by default False. - add_background_rectangles_to_entries - ``True`` if background rectangles should be added to entries, by default ``False``. - entries_background_color - Background color of entries if ``add_background_rectangles_to_entries`` is ``True``. - include_background_rectangle - ``True`` if the table should have a background rectangle, by default ``False``. - background_rectangle_color - Background color of table if ``include_background_rectangle`` is ``True``. - element_to_mobject - The :class:`~.Mobject` class applied to the table entries. by default :class:`~.Paragraph`. For common choices, see :mod:`~.text_mobject`/:mod:`~.tex_mobject`. - element_to_mobject_config - Custom configuration passed to :attr:`element_to_mobject`, by default {}. - arrange_in_grid_config - Dict passed to :meth:`~.Mobject.arrange_in_grid`, customizes the arrangement of the table. - line_config - Dict passed to :class:`~.Line`, customizes the lines of the table. - kwargs - Additional arguments to be passed to :class:`~.VGroup`. - """ - self.row_labels = row_labels self.col_labels = col_labels self.top_left_entry = top_left_entry diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index 7c3bc53787..b92b5459e5 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -455,7 +455,8 @@ def __init__( class BulletedList(Tex): - """ + """A bulleted list. + Examples -------- @@ -508,7 +509,8 @@ def fade_all_but(self, index_or_string, opacity=0.5): class Title(Tex): - """ + """A mobject representing an underlined title. + Examples -------- .. manim:: TitleExample diff --git a/manim/mobject/types/point_cloud_mobject.py b/manim/mobject/types/point_cloud_mobject.py index 4a6b5302ac..354dff2e59 100644 --- a/manim/mobject/types/point_cloud_mobject.py +++ b/manim/mobject/types/point_cloud_mobject.py @@ -244,7 +244,8 @@ def __init__(self, density=DEFAULT_POINT_DENSITY_2D, **kwargs): class PGroup(PMobject): - """ + """A group for several point mobjects. + Examples -------- @@ -266,7 +267,7 @@ def construct(self): """ def __init__(self, *pmobs, **kwargs): - if not all([isinstance(m, (PMobject, OpenGLPMobject)) for m in pmobs]): + if not all(isinstance(m, (PMobject, OpenGLPMobject)) for m in pmobs): raise ValueError( "All submobjects must be of type PMobject or OpenGLPMObject" " if using the opengl renderer", @@ -281,7 +282,8 @@ def fade_to(self, color, alpha, family=True): class PointCloudDot(Mobject1D): - """A disc made of a cloud of Dots + """A disc made of a cloud of dots. + Examples -------- .. manim:: PointCloudDotExample @@ -347,7 +349,7 @@ def generate_points(self): class Point(PMobject): - """ + """A mobject representing a point. Examples -------- diff --git a/manim/plugins/plugins_flags.py b/manim/plugins/plugins_flags.py index 44b0dce7fc..a1487e5774 100644 --- a/manim/plugins/plugins_flags.py +++ b/manim/plugins/plugins_flags.py @@ -1,9 +1,4 @@ -""" -plugins_flags.py ------------- - -Plugin Managing Utility. -""" +"""Plugin Managing Utility""" from __future__ import annotations diff --git a/manim/scene/scene.py b/manim/scene/scene.py index b7cfb1c2b3..69f0f95848 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -385,10 +385,8 @@ def should_update_mobjects(self) -> bool: or self.updaters or wait_animation.stop_condition is not None or any( - [ - mob.has_time_based_updater() - for mob in self.get_mobject_family_members() - ], + mob.has_time_based_updater() + for mob in self.get_mobject_family_members() ) ) wait_animation.is_static_wait = not should_update diff --git a/manim/scene/three_d_scene.py b/manim/scene/three_d_scene.py index 4e619b7ffd..6f9e7a651b 100644 --- a/manim/scene/three_d_scene.py +++ b/manim/scene/three_d_scene.py @@ -329,7 +329,7 @@ def get_moving_mobjects(self, *animations: Animation): camera_mobjects = self.renderer.camera.get_value_trackers() + [ self.renderer.camera._frame_center, ] - if any([cm in moving_mobjects for cm in camera_mobjects]): + if any(cm in moving_mobjects for cm in camera_mobjects): return self.mobjects return moving_mobjects diff --git a/manim/utils/iterables.py b/manim/utils/iterables.py index cc432d9e06..4b20cfe704 100644 --- a/manim/utils/iterables.py +++ b/manim/utils/iterables.py @@ -65,7 +65,7 @@ def all_elements_are_instances(iterable: Iterable, Class) -> bool: """Returns ``True`` if all elements of iterable are instances of Class. False otherwise. """ - return all([isinstance(e, Class) for e in iterable]) + return all(isinstance(e, Class) for e in iterable) def batch_by_property( diff --git a/tests/module/mobject/text/test_numbers.py b/tests/module/mobject/text/test_numbers.py index 350a527b3b..a9f16fde1b 100644 --- a/tests/module/mobject/text/test_numbers.py +++ b/tests/module/mobject/text/test_numbers.py @@ -44,4 +44,4 @@ 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 == Color(RED) for submob in mob.submobjects) From 33669643b59456bc3eefe5913ea8a11a374c29a1 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 5 May 2023 07:38:29 +0200 Subject: [PATCH 240/555] Upgrade ReadTheDocs build environment to use newer image (#3232) * documentation: require urllib3<2.0 for now * moved version requirement to main library in pyproject.toml * constraint needed in both? * try upgrading to docbuild with python 3.10, remove restriction on urllib3 * change image -> os * fixed rtd config * explicitly added graphviz --------- Co-authored-by: Naveen M K --- .readthedocs.yml | 9 +- poetry.lock | 2691 ++++++++++++++++++++++++++-------------------- 2 files changed, 1516 insertions(+), 1184 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 87f178a53b..836b4eb423 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,11 +1,16 @@ version: 2 build: - image: latest + os: ubuntu-22.04 + + tools: + python: "3.10" + apt_packages: - libpango1.0-dev - ffmpeg + - graphviz + python: - version: 3.8 install: - requirements: docs/rtd-requirements.txt - requirements: docs/requirements.txt diff --git a/poetry.lock b/poetry.lock index ef9215934d..acd03586c4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,15 +1,43 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 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 = [ + {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, + {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, +] + +[[package]] +name = "aiosqlite" +version = "0.19.0" +description = "asyncio bridge to the standard sqlite3 module" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, + {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, +] + +[package.extras] +dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] +docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] [[package]] name = "alabaster" -version = "0.7.12" +version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, ] [[package]] @@ -132,19 +160,19 @@ files = [ [[package]] name = "astroid" -version = "2.12.13" +version = "2.15.4" 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"}, + {file = "astroid-2.15.4-py3-none-any.whl", hash = "sha256:a1b8543ef9d36ea777194bc9b17f5f8678d2c56ee6a45b2c2f17eec96f242347"}, + {file = "astroid-2.15.4.tar.gz", hash = "sha256:c81e1c7fbac615037744d067a9bb5f9aeb655edf59b63ee8b59585475d6f80d8"}, ] [package.dependencies] lazy-object-proxy = ">=1.4.0" -typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} wrapt = [ {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, @@ -170,36 +198,37 @@ test = ["astroid", "pytest"] [[package]] name = "attrs" -version = "22.1.0" +version = "23.1.0" description = "Classes Without Boilerplate" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" files = [ - {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, - {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, ] [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[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] [[package]] -name = "Babel" -version = "2.11.0" +name = "babel" +version = "2.12.1" description = "Internationalization utilities" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, - {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, ] [package.dependencies] -pytz = ">=2015.7" +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} [[package]] name = "backcall" @@ -215,14 +244,14 @@ files = [ [[package]] name = "beautifulsoup4" -version = "4.11.1" +version = "4.12.2" 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"}, + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, ] [package.dependencies] @@ -234,41 +263,46 @@ lxml = ["lxml"] [[package]] name = "black" -version = "22.10.0" +version = "23.3.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.7" files = [ - {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"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, ] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" +packaging = ">=22.0" 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] @@ -279,14 +313,14 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bleach" -version = "5.0.1" +version = "6.0.0" 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"}, + {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, + {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, ] [package.dependencies] @@ -295,7 +329,6 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] [[package]] name = "certifi" @@ -400,19 +433,89 @@ files = [ [[package]] name = "charset-normalizer" -version = "2.1.1" +version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.6.0" +python-versions = ">=3.7.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"}, + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, ] -[package.extras] -unicode-backport = ["unicodedata2"] - [[package]] name = "click" version = "8.1.3" @@ -487,27 +590,29 @@ test = ["nose"] [[package]] name = "comm" -version = "0.1.2" +version = "0.1.3" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." 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"}, + {file = "comm-0.1.3-py3-none-any.whl", hash = "sha256:16613c6211e20223f215fc6d3b266a247b6e2641bf4e0a3ad34cb1aff2aa3f37"}, + {file = "comm-0.1.3.tar.gz", hash = "sha256:a61efa9daffcfbe66fd643ba966f846a624e4e6d6767eda9cf6e993aadaab93e"}, ] [package.dependencies] traitlets = ">=5.3" [package.extras] +lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] test = ["pytest"] +typing = ["mypy (>=0.990)"] [[package]] name = "commonmark" version = "0.9.1" description = "Python parser for the CommonMark Markdown spec" -category = "main" +category = "dev" optional = false python-versions = "*" files = [ @@ -520,151 +625,138 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "contourpy" -version = "1.0.6" +version = "1.0.7" description = "Python library for calculating contours of 2D quadrilateral grids" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" 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"}, + {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:95c3acddf921944f241b6773b767f1cbce71d03307270e2d769fd584d5d1092d"}, + {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc1464c97579da9f3ab16763c32e5c5d5bb5fa1ec7ce509a4ca6108b61b84fab"}, + {file = "contourpy-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8acf74b5d383414401926c1598ed77825cd530ac7b463ebc2e4f46638f56cce6"}, + {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c71fdd8f1c0f84ffd58fca37d00ca4ebaa9e502fb49825484da075ac0b0b803"}, + {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99e9486bf1bb979d95d5cffed40689cb595abb2b841f2991fc894b3452290e8"}, + {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f4d8941a9564cda3f7fa6a6cd9b32ec575830780677932abdec7bcb61717b0"}, + {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e20e5a1908e18aaa60d9077a6d8753090e3f85ca25da6e25d30dc0a9e84c2c6"}, + {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a877ada905f7d69b2a31796c4b66e31a8068b37aa9b78832d41c82fc3e056ddd"}, + {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6381fa66866b0ea35e15d197fc06ac3840a9b2643a6475c8fff267db8b9f1e69"}, + {file = "contourpy-1.0.7-cp310-cp310-win32.whl", hash = "sha256:3c184ad2433635f216645fdf0493011a4667e8d46b34082f5a3de702b6ec42e3"}, + {file = "contourpy-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:3caea6365b13119626ee996711ab63e0c9d7496f65641f4459c60a009a1f3e80"}, + {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed33433fc3820263a6368e532f19ddb4c5990855e4886088ad84fd7c4e561c71"}, + {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38e2e577f0f092b8e6774459317c05a69935a1755ecfb621c0a98f0e3c09c9a5"}, + {file = "contourpy-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ae90d5a8590e5310c32a7630b4b8618cef7563cebf649011da80874d0aa8f414"}, + {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130230b7e49825c98edf0b428b7aa1125503d91732735ef897786fe5452b1ec2"}, + {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58569c491e7f7e874f11519ef46737cea1d6eda1b514e4eb5ac7dab6aa864d02"}, + {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d43960d809c4c12508a60b66cb936e7ed57d51fb5e30b513934a4a23874fae"}, + {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:152fd8f730c31fd67fe0ffebe1df38ab6a669403da93df218801a893645c6ccc"}, + {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9056c5310eb1daa33fc234ef39ebfb8c8e2533f088bbf0bc7350f70a29bde1ac"}, + {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a9d7587d2fdc820cc9177139b56795c39fb8560f540bba9ceea215f1f66e1566"}, + {file = "contourpy-1.0.7-cp311-cp311-win32.whl", hash = "sha256:4ee3ee247f795a69e53cd91d927146fb16c4e803c7ac86c84104940c7d2cabf0"}, + {file = "contourpy-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:5caeacc68642e5f19d707471890f037a13007feba8427eb7f2a60811a1fc1350"}, + {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd7dc0e6812b799a34f6d12fcb1000539098c249c8da54f3566c6a6461d0dbad"}, + {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0f9d350b639db6c2c233d92c7f213d94d2e444d8e8fc5ca44c9706cf72193772"}, + {file = "contourpy-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e96a08b62bb8de960d3a6afbc5ed8421bf1a2d9c85cc4ea73f4bc81b4910500f"}, + {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:031154ed61f7328ad7f97662e48660a150ef84ee1bc8876b6472af88bf5a9b98"}, + {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e9ebb4425fc1b658e13bace354c48a933b842d53c458f02c86f371cecbedecc"}, + {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efb8f6d08ca7998cf59eaf50c9d60717f29a1a0a09caa46460d33b2924839dbd"}, + {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6c180d89a28787e4b73b07e9b0e2dac7741261dbdca95f2b489c4f8f887dd810"}, + {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b8d587cc39057d0afd4166083d289bdeff221ac6d3ee5046aef2d480dc4b503c"}, + {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:769eef00437edf115e24d87f8926955f00f7704bede656ce605097584f9966dc"}, + {file = "contourpy-1.0.7-cp38-cp38-win32.whl", hash = "sha256:62398c80ef57589bdbe1eb8537127321c1abcfdf8c5f14f479dbbe27d0322e66"}, + {file = "contourpy-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:57119b0116e3f408acbdccf9eb6ef19d7fe7baf0d1e9aaa5381489bc1aa56556"}, + {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:30676ca45084ee61e9c3da589042c24a57592e375d4b138bd84d8709893a1ba4"}, + {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e927b3868bd1e12acee7cc8f3747d815b4ab3e445a28d2e5373a7f4a6e76ba1"}, + {file = "contourpy-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:366a0cf0fc079af5204801786ad7a1c007714ee3909e364dbac1729f5b0849e5"}, + {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ba9bb365446a22411f0673abf6ee1fea3b2cf47b37533b970904880ceb72f3"}, + {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b0bf0c30d432278793d2141362ac853859e87de0a7dee24a1cea35231f0d50"}, + {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7281244c99fd7c6f27c1c6bfafba878517b0b62925a09b586d88ce750a016d2"}, + {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6d0f9e1d39dbfb3977f9dd79f156c86eb03e57a7face96f199e02b18e58d32a"}, + {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f6979d20ee5693a1057ab53e043adffa1e7418d734c1532e2d9e915b08d8ec2"}, + {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5dd34c1ae752515318224cba7fc62b53130c45ac6a1040c8b7c1a223c46e8967"}, + {file = "contourpy-1.0.7-cp39-cp39-win32.whl", hash = "sha256:c5210e5d5117e9aec8c47d9156d1d3835570dd909a899171b9535cb4a3f32693"}, + {file = "contourpy-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:60835badb5ed5f4e194a6f21c09283dd6e007664a86101431bf870d9e86266c4"}, + {file = "contourpy-1.0.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce41676b3d0dd16dbcfabcc1dc46090aaf4688fd6e819ef343dbda5a57ef0161"}, + {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a011cf354107b47c58ea932d13b04d93c6d1d69b8b6dce885e642531f847566"}, + {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31a55dccc8426e71817e3fe09b37d6d48ae40aae4ecbc8c7ad59d6893569c436"}, + {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69f8ff4db108815addd900a74df665e135dbbd6547a8a69333a68e1f6e368ac2"}, + {file = "contourpy-1.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efe99298ba37e37787f6a2ea868265465410822f7bea163edcc1bd3903354ea9"}, + {file = "contourpy-1.0.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a1e97b86f73715e8670ef45292d7cc033548266f07d54e2183ecb3c87598888f"}, + {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc331c13902d0f50845099434cd936d49d7a2ca76cb654b39691974cb1e4812d"}, + {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24847601071f740837aefb730e01bd169fbcaa610209779a78db7ebb6e6a7051"}, + {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abf298af1e7ad44eeb93501e40eb5a67abbf93b5d90e468d01fc0c4451971afa"}, + {file = "contourpy-1.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:64757f6460fc55d7e16ed4f1de193f362104285c667c112b50a804d482777edd"}, + {file = "contourpy-1.0.7.tar.gz", hash = "sha256:d8165a088d31798b59e91117d1f5fc3df8168d8b48c4acc10fc0df0d0bdbcc5e"}, ] [package.dependencies] numpy = ">=1.16" [package.extras] -bokeh = ["bokeh", "selenium"] -docs = ["docutils (<0.18)", "sphinx (<=5.2.0)", "sphinx-rtd-theme"] -test = ["Pillow", "flake8", "isort", "matplotlib", "pytest"] -test-minimal = ["pytest"] -test-no-codebase = ["Pillow", "matplotlib", "pytest"] +bokeh = ["bokeh", "chromedriver", "selenium"] +docs = ["furo", "sphinx-copybutton"] +mypy = ["contourpy[bokeh]", "docutils-stubs", "mypy (==0.991)", "types-Pillow"] +test = ["Pillow", "matplotlib", "pytest"] +test-no-images = ["pytest"] [[package]] name = "coverage" -version = "6.5.0" +version = "7.2.5" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {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"}, + {file = "coverage-7.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:883123d0bbe1c136f76b56276074b0c79b5817dd4238097ffa64ac67257f4b6c"}, + {file = "coverage-7.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2fbc2a127e857d2f8898aaabcc34c37771bf78a4d5e17d3e1f5c30cd0cbc62a"}, + {file = "coverage-7.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f3671662dc4b422b15776cdca89c041a6349b4864a43aa2350b6b0b03bbcc7f"}, + {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780551e47d62095e088f251f5db428473c26db7829884323e56d9c0c3118791a"}, + {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:066b44897c493e0dcbc9e6a6d9f8bbb6607ef82367cf6810d387c09f0cd4fe9a"}, + {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9a4ee55174b04f6af539218f9f8083140f61a46eabcaa4234f3c2a452c4ed11"}, + {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:706ec567267c96717ab9363904d846ec009a48d5f832140b6ad08aad3791b1f5"}, + {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ae453f655640157d76209f42c62c64c4d4f2c7f97256d3567e3b439bd5c9b06c"}, + {file = "coverage-7.2.5-cp310-cp310-win32.whl", hash = "sha256:f81c9b4bd8aa747d417407a7f6f0b1469a43b36a85748145e144ac4e8d303cb5"}, + {file = "coverage-7.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:dc945064a8783b86fcce9a0a705abd7db2117d95e340df8a4333f00be5efb64c"}, + {file = "coverage-7.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40cc0f91c6cde033da493227797be2826cbf8f388eaa36a0271a97a332bfd7ce"}, + {file = "coverage-7.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a66e055254a26c82aead7ff420d9fa8dc2da10c82679ea850d8feebf11074d88"}, + {file = "coverage-7.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c10fbc8a64aa0f3ed136b0b086b6b577bc64d67d5581acd7cc129af52654384e"}, + {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a22cbb5ede6fade0482111fa7f01115ff04039795d7092ed0db43522431b4f2"}, + {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:292300f76440651529b8ceec283a9370532f4ecba9ad67d120617021bb5ef139"}, + {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7ff8f3fb38233035028dbc93715551d81eadc110199e14bbbfa01c5c4a43f8d8"}, + {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a08c7401d0b24e8c2982f4e307124b671c6736d40d1c39e09d7a8687bddf83ed"}, + {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef9659d1cda9ce9ac9585c045aaa1e59223b143f2407db0eaee0b61a4f266fb6"}, + {file = "coverage-7.2.5-cp311-cp311-win32.whl", hash = "sha256:30dcaf05adfa69c2a7b9f7dfd9f60bc8e36b282d7ed25c308ef9e114de7fc23b"}, + {file = "coverage-7.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:97072cc90f1009386c8a5b7de9d4fc1a9f91ba5ef2146c55c1f005e7b5c5e068"}, + {file = "coverage-7.2.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bebea5f5ed41f618797ce3ffb4606c64a5de92e9c3f26d26c2e0aae292f015c1"}, + {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828189fcdda99aae0d6bf718ea766b2e715eabc1868670a0a07bf8404bf58c33"}, + {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e8a95f243d01ba572341c52f89f3acb98a3b6d1d5d830efba86033dd3687ade"}, + {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8834e5f17d89e05697c3c043d3e58a8b19682bf365048837383abfe39adaed5"}, + {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d1f25ee9de21a39b3a8516f2c5feb8de248f17da7eead089c2e04aa097936b47"}, + {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1637253b11a18f453e34013c665d8bf15904c9e3c44fbda34c643fbdc9d452cd"}, + {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8e575a59315a91ccd00c7757127f6b2488c2f914096077c745c2f1ba5b8c0969"}, + {file = "coverage-7.2.5-cp37-cp37m-win32.whl", hash = "sha256:509ecd8334c380000d259dc66feb191dd0a93b21f2453faa75f7f9cdcefc0718"}, + {file = "coverage-7.2.5-cp37-cp37m-win_amd64.whl", hash = "sha256:12580845917b1e59f8a1c2ffa6af6d0908cb39220f3019e36c110c943dc875b0"}, + {file = "coverage-7.2.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5016e331b75310610c2cf955d9f58a9749943ed5f7b8cfc0bb89c6134ab0a84"}, + {file = "coverage-7.2.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:373ea34dca98f2fdb3e5cb33d83b6d801007a8074f992b80311fc589d3e6b790"}, + {file = "coverage-7.2.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a063aad9f7b4c9f9da7b2550eae0a582ffc7623dca1c925e50c3fbde7a579771"}, + {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c0a497a000d50491055805313ed83ddba069353d102ece8aef5d11b5faf045"}, + {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b3b05e22a77bb0ae1a3125126a4e08535961c946b62f30985535ed40e26614"}, + {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0342a28617e63ad15d96dca0f7ae9479a37b7d8a295f749c14f3436ea59fdcb3"}, + {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf97ed82ca986e5c637ea286ba2793c85325b30f869bf64d3009ccc1a31ae3fd"}, + {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c2c41c1b1866b670573657d584de413df701f482574bad7e28214a2362cb1fd1"}, + {file = "coverage-7.2.5-cp38-cp38-win32.whl", hash = "sha256:10b15394c13544fce02382360cab54e51a9e0fd1bd61ae9ce012c0d1e103c813"}, + {file = "coverage-7.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:a0b273fe6dc655b110e8dc89b8ec7f1a778d78c9fd9b4bda7c384c8906072212"}, + {file = "coverage-7.2.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c587f52c81211d4530fa6857884d37f514bcf9453bdeee0ff93eaaf906a5c1b"}, + {file = "coverage-7.2.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4436cc9ba5414c2c998eaedee5343f49c02ca93b21769c5fdfa4f9d799e84200"}, + {file = "coverage-7.2.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6599bf92f33ab041e36e06d25890afbdf12078aacfe1f1d08c713906e49a3fe5"}, + {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:857abe2fa6a4973f8663e039ead8d22215d31db613ace76e4a98f52ec919068e"}, + {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f5cab2d7f0c12f8187a376cc6582c477d2df91d63f75341307fcdcb5d60303"}, + {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa387bd7489f3e1787ff82068b295bcaafbf6f79c3dad3cbc82ef88ce3f48ad3"}, + {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:156192e5fd3dbbcb11cd777cc469cf010a294f4c736a2b2c891c77618cb1379a"}, + {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd3b4b8175c1db502adf209d06136c000df4d245105c8839e9d0be71c94aefe1"}, + {file = "coverage-7.2.5-cp39-cp39-win32.whl", hash = "sha256:ddc5a54edb653e9e215f75de377354e2455376f416c4378e1d43b08ec50acc31"}, + {file = "coverage-7.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:338aa9d9883aaaad53695cb14ccdeb36d4060485bb9388446330bef9c361c252"}, + {file = "coverage-7.2.5-pp37.pp38.pp39-none-any.whl", hash = "sha256:8877d9b437b35a85c18e3c6499b23674684bf690f5d96c1006a1ef61f9fdf0f3"}, + {file = "coverage-7.2.5.tar.gz", hash = "sha256:f99ef080288f09ffc687423b8d60978cf3a465d3f404a18d1a05474bd8575a47"}, ] [package.dependencies] @@ -673,6 +765,48 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] +[[package]] +name = "cryptography" +version = "40.0.2" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b"}, + {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b"}, + {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9"}, + {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c"}, + {file = "cryptography-40.0.2-cp36-abi3-win32.whl", hash = "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9"}, + {file = "cryptography-40.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404"}, + {file = "cryptography-40.0.2.tar.gz", hash = "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99"}, +] + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +pep8test = ["black", "check-manifest", "mypy", "ruff"] +sdist = ["setuptools-rust (>=0.11.4)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] +tox = ["tox"] + [[package]] name = "cycler" version = "0.11.0" @@ -686,53 +820,53 @@ files = [ ] [[package]] -name = "Cython" -version = "0.29.32" +name = "cython" +version = "0.29.34" 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.*" 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"}, + {file = "Cython-0.29.34-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742544024ddb74314e2d597accdb747ed76bd126e61fcf49940a5b5be0a8f381"}, + {file = "Cython-0.29.34-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:03daae07f8cbf797506446adae512c3dd86e7f27a62a541fa1ee254baf43e32c"}, + {file = "Cython-0.29.34-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5a8de3e793a576e40ca9b4f5518610cd416273c7dc5e254115656b6e4ec70663"}, + {file = "Cython-0.29.34-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:60969d38e6a456a67e7ef8ae20668eff54e32ba439d4068ccf2854a44275a30f"}, + {file = "Cython-0.29.34-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:21b88200620d80cfe193d199b259cdad2b9af56f916f0f7f474b5a3631ca0caa"}, + {file = "Cython-0.29.34-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:308c8f1e58bf5e6e8a1c4dcf8abbd2d13d0f9b1e582f4d9ae8b89857342d8bb5"}, + {file = "Cython-0.29.34-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:d8f822fb6ecd5d88c42136561f82960612421154fc5bf23c57103a367bb91356"}, + {file = "Cython-0.29.34-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56866323f1660cecb4d5ff3a1fba92a56b91b7cfae0a8253777aa4bdb3bdf9a8"}, + {file = "Cython-0.29.34-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e971db8aeb12e7c0697cefafe65eefcc33ff1224ae3d8c7f83346cbc42c6c270"}, + {file = "Cython-0.29.34-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4401270b0dc464c23671e2e9d52a60985f988318febaf51b047190e855bbe7d"}, + {file = "Cython-0.29.34-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:dce0a36d163c05ae8b21200059511217d79b47baf2b7b0f926e8367bd7a3cc24"}, + {file = "Cython-0.29.34-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dbd79221869ee9a6ccc4953b2c8838bb6ae08ab4d50ea4b60d7894f03739417b"}, + {file = "Cython-0.29.34-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a0f4229df10bc4545ebbeaaf96ebb706011d8b333e54ed202beb03f2bee0a50e"}, + {file = "Cython-0.29.34-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd1ea21f1cebf33ae288caa0f3e9b5563a709f4df8925d53bad99be693fc0d9b"}, + {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d7ef5f68f4c5baa93349ea54a352f8716d18bee9a37f3e93eff38a5d4e9b7262"}, + {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:459994d1de0f99bb18fad9f2325f760c4b392b1324aef37bcc1cd94922dfce41"}, + {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:1d6c809e2f9ce5950bbc52a1d2352ef3d4fc56186b64cb0d50c8c5a3c1d17661"}, + {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f674ceb5f722d364395f180fbac273072fc1a266aab924acc9cfd5afc645aae1"}, + {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9489de5b2044dcdfd9d6ca8242a02d560137b3c41b1f5ae1c4f6707d66d6e44d"}, + {file = "Cython-0.29.34-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5c121dc185040f4333bfded68963b4529698e1b6d994da56be32c97a90c896b6"}, + {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:b6149f7cc5b31bccb158c5b968e5a8d374fdc629792e7b928a9b66e08b03fca5"}, + {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0ab3cbf3d62b0354631a45dc93cfcdf79098663b1c65a6033af4a452b52217a7"}, + {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:4a2723447d1334484681d5aede34184f2da66317891f94b80e693a2f96a8f1a7"}, + {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e40cf86aadc29ecd1cb6de67b0d9488705865deea4fc185c7ad56d7a6fc78703"}, + {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8c3cd8bb8e880a3346f5685601004d96e0a2221e73edcaeea57ea848618b4ac6"}, + {file = "Cython-0.29.34-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9032cd650b0cb1d2c2ef2623f5714c14d14c28d7647d589c3eeed0baf7428e"}, + {file = "Cython-0.29.34-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bdb3285660e3068438791ace7dd7b1efd6b442a10b5c8d7a4f0c9d184d08c8ed"}, + {file = "Cython-0.29.34-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a8ad755f9364e720f10a36734a1c7a5ced5c679446718b589259261438a517c9"}, + {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:7595d29eaee95633dd8060f50f0e54b27472d01587659557ebcfe39da3ea946b"}, + {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6ef7879668214d80ea3914c17e7d4e1ebf4242e0dd4dabe95ca5ccbe75589a5"}, + {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ccb223b5f0fd95d8d27561efc0c14502c0945f1a32274835831efa5d5baddfc1"}, + {file = "Cython-0.29.34-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:11b1b278b8edef215caaa5250ad65a10023bfa0b5a93c776552248fc6f60098d"}, + {file = "Cython-0.29.34-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5718319a01489688fdd22ddebb8e2fcbbd60be5f30de4336ea7063c3ae29fbe5"}, + {file = "Cython-0.29.34-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:cfb2302ef617d647ee590a4c0a00ba3c2da05f301dcefe7721125565d2e51351"}, + {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:67b850cf46b861bc27226d31e1d87c0e69869a02f8d3cc5d5bef549764029879"}, + {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0963266dad685812c1dbb758fcd4de78290e3adc7db271c8664dcde27380b13e"}, + {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7879992487d9060a61393eeefe00d299210256928dce44d887b6be313d342bac"}, + {file = "Cython-0.29.34-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:44733366f1604b0c327613b6918469284878d2f5084297d10d26072fc6948d51"}, + {file = "Cython-0.29.34-py2.py3-none-any.whl", hash = "sha256:be4f6b7be75a201c290c8611c0978549c60353890204573078e865423dbe3c83"}, + {file = "Cython-0.29.34.tar.gz", hash = "sha256:1909688f5d7b521a60c396d20bba9e47a1b2d2784bfb085401e1e1e7d29a29a8"}, ] [[package]] @@ -752,58 +886,58 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", [[package]] name = "dearpygui" -version = "1.8.0" +version = "1.9.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"}, + {file = "dearpygui-1.9.0-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:0634cc8edbed199a1b76a6b8b92fe20c848649d14a13561c9043fb845f07cb13"}, + {file = "dearpygui-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:85bbccf1e55e75d78783ce85a00937f95a974b1fb2a6522dd8217b9926ab7bf8"}, + {file = "dearpygui-1.9.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:99ad6c07dc8243152d65bbfab4d1afa7e4157b76f70134e7c515990a5718bb2d"}, + {file = "dearpygui-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:5c1e89cda2c34a3bb75caa4b36c3318c307af9592ea341b231260d739cc838a7"}, + {file = "dearpygui-1.9.0-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:eae0e458d49570f00da52e2e08511a37af81e4cc72736ae92ae335ba9cf779c4"}, + {file = "dearpygui-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:253fbc867faceebee907ee66685079a69043fb14c4878e1df4916e9fc2e53fe3"}, + {file = "dearpygui-1.9.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:a9e99b87f60d19a59c2eac8bf910fb6418ff0eed0242a88f47839c17e1f064fb"}, + {file = "dearpygui-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:2a32cc4b688950b9295cb2c867824d5514a5cf9a87a19981c2cd386881deaf34"}, + {file = "dearpygui-1.9.0-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:9586f8905f645744c034538f851abeb53a7311048d9daf9734228d95f8d75ce5"}, + {file = "dearpygui-1.9.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:532a16aed78d7151b93d849d3587c28e1c6bc592c0831b25ea77f52637e54a41"}, + {file = "dearpygui-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:70e717976d58ff961608c2e926a3eb05feb8716d2e7320084935b824bc87635e"}, + {file = "dearpygui-1.9.0-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:6f51153f044fbbaa17645647c79725c3f3f5b11ea982e9cf00773ebed56d26c8"}, + {file = "dearpygui-1.9.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:94b62a219e6b73f0ac8625f30c1635d3c24823e83c4449ee50862ab860c0ba04"}, + {file = "dearpygui-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:1daad9f62cba3835bbd2cd87a5d5c3bf062b21aee575f34666e21071ef74e934"}, + {file = "dearpygui-1.9.0-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:3faa1a34f82a792afbe998b9bf7f21378c774b84a8945072ffdcaad9bf3867f8"}, + {file = "dearpygui-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc36060b330970346bfcc2a019640e827c62877bab3a119078f78b416c52b3fb"}, + {file = "dearpygui-1.9.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3fea90197da90fa44af26a82a462556079ae1171a4a2e3406c6da8892f01ad34"}, + {file = "dearpygui-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:73111349e1eceac8cd647fca68921ef3804e8517818a657d6ed71013799efdee"}, ] [[package]] name = "debugpy" -version = "1.6.4" +version = "1.6.7" 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"}, + {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, + {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, + {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, + {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, + {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, + {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, + {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, + {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, + {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, + {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, + {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, + {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, + {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, + {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, + {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, + {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, + {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, + {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, ] [[package]] @@ -831,7 +965,7 @@ files = [ ] [[package]] -name = "Deprecated" +name = "deprecated" version = "1.2.13" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." category = "dev" @@ -887,28 +1021,16 @@ 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.0.4" +version = "1.1.1" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.0.4-py3-none-any.whl", hash = "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828"}, - {file = "exceptiongroup-1.0.4.tar.gz", hash = "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec"}, + {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, + {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, ] [package.extras] @@ -946,14 +1068,14 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] [[package]] name = "fastjsonschema" -version = "2.16.2" +version = "2.16.3" 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"}, + {file = "fastjsonschema-2.16.3-py3-none-any.whl", hash = "sha256:04fbecc94300436f628517b05741b7ea009506ce8f946d40996567c669318490"}, + {file = "fastjsonschema-2.16.3.tar.gz", hash = "sha256:4a30d6315a68c253cfa8f963b9697246315aa3db89f98b97235e345dedfb0b8e"}, ] [package.extras] @@ -961,19 +1083,19 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.8.2" +version = "3.12.0" 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"}, + {file = "filelock-3.12.0-py3-none-any.whl", hash = "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9"}, + {file = "filelock-3.12.0.tar.gz", hash = "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"}, ] [package.extras] -docs = ["furo (>=2022.9.29)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -testing = ["covdefaults (>=2.2.2)", "coverage (>=6.5)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] [[package]] name = "flake8" @@ -1031,14 +1153,14 @@ test = ["coverage", "coveralls", "mock", "pytest", "pytest-cov"] [[package]] name = "flake8-comprehensions" -version = "3.10.1" +version = "3.12.0" description = "A flake8 plugin to help you write better list/set/dict comprehensions." 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"}, + {file = "flake8_comprehensions-3.12.0-py3-none-any.whl", hash = "sha256:013234637ec7dfcb7cd2900578fb53c512f81db909cefe371c019232695c362d"}, + {file = "flake8_comprehensions-3.12.0.tar.gz", hash = "sha256:419ef1a6e8de929203791a5e8ff5e3906caeba13eb3290eebdbf88a9078d502e"}, ] [package.dependencies] @@ -1046,14 +1168,14 @@ flake8 = ">=3.0,<3.2.0 || >3.2.0" [[package]] name = "flake8-docstrings" -version = "1.6.0" +version = "1.7.0" description = "Extension for flake8 which uses pydocstyle to check docstrings" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.7" 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"}, + {file = "flake8_docstrings-1.7.0-py2.py3-none-any.whl", hash = "sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75"}, + {file = "flake8_docstrings-1.7.0.tar.gz", hash = "sha256:4c8cc748dc16e6869728699e5d0d685da9a10b0ea718e090b1ba088e67a941af"}, ] [package.dependencies] @@ -1074,14 +1196,14 @@ files = [ [[package]] name = "flake8-pytest-style" -version = "1.6.0" +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.6.2,<4.0.0" +python-versions = ">=3.7.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"}, + {file = "flake8_pytest_style-1.7.2-py3-none-any.whl", hash = "sha256:f5d2aa3219163a052dd92226589d45fab8ea027a3269922f0c4029f548ea5cd1"}, + {file = "flake8_pytest_style-1.7.2.tar.gz", hash = "sha256:b924197c99b951315949920b0e5547f34900b1844348432e67a44ab191582109"}, ] [package.dependencies] @@ -1122,18 +1244,18 @@ flake8 = ">=3.7" [[package]] name = "fonttools" -version = "4.38.0" +version = "4.39.3" description = "Tools to manipulate font files" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "fonttools-4.38.0-py3-none-any.whl", hash = "sha256:820466f43c8be8c3009aef8b87e785014133508f0de64ec469e4efb643ae54fb"}, - {file = "fonttools-4.38.0.zip", hash = "sha256:2bb244009f9bf3fa100fc3ead6aeb99febe5985fa20afbfbaa2f8946c2fbdaf1"}, + {file = "fonttools-4.39.3-py3-none-any.whl", hash = "sha256:64c0c05c337f826183637570ac5ab49ee220eec66cf50248e8df527edfa95aeb"}, + {file = "fonttools-4.39.3.zip", hash = "sha256:9234b9f57b74e31b192c3fc32ef1a40750a8fbc1cd9837a7b7bfc4ca4a5c51d7"}, ] [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)"] +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 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres", "scipy"] lxml = ["lxml (>=4.0,<5)"] @@ -1143,7 +1265,7 @@ repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=14.0.0)"] +unicode = ["unicodedata2 (>=15.0.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] @@ -1192,15 +1314,15 @@ files = [ smmap = ">=3.0.1,<6" [[package]] -name = "GitPython" -version = "3.1.29" -description = "GitPython is a python library used to interact with Git repositories" +name = "gitpython" +version = "3.1.31" +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"}, + {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, + {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, ] [package.dependencies] @@ -1268,14 +1390,14 @@ files = [ [[package]] name = "identify" -version = "2.5.9" +version = "2.5.24" description = "File identification library for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "identify-2.5.9-py2.py3-none-any.whl", hash = "sha256:a390fb696e164dbddb047a0db26e57972ae52fbd037ae68797e5ae2f4492485d"}, - {file = "identify-2.5.9.tar.gz", hash = "sha256:906036344ca769539610436e40a684e170c3648b552194980bb7b617a8daeb9f"}, + {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, + {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, ] [package.extras] @@ -1307,98 +1429,99 @@ files = [ [[package]] name = "importlib-metadata" -version = "5.1.0" +version = "6.6.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_metadata-5.1.0-py3-none-any.whl", hash = "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"}, - {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"}, + {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, + {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, ] [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)"] [[package]] name = "importlib-resources" -version = "5.10.1" +version = "5.12.0" description = "Read resources from Python packages" category = "main" -optional = true +optional = false 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"}, + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [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"] testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [[package]] name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] [[package]] name = "ipykernel" -version = "6.19.1" +version = "6.22.0" description = "IPython Kernel for Jupyter" category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "ipykernel-6.19.1-py3-none-any.whl", hash = "sha256:8b358a5aaa77c7e4b6cec22b03a910ab6c2968a449dced12082b6a6c56404083"}, - {file = "ipykernel-6.19.1.tar.gz", hash = "sha256:d472029d14408273265a7b0ec6d1923f1b1f51d8643f125c6a6881e5e6e56a39"}, + {file = "ipykernel-6.22.0-py3-none-any.whl", hash = "sha256:1ae6047c1277508933078163721bbb479c3e7292778a04b4bacf0874550977d6"}, + {file = "ipykernel-6.22.0.tar.gz", hash = "sha256:302558b81f1bc22dc259fb2a0c5c7cf2f4c0bdb21b50484348f7bafe7fb71421"}, ] [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} comm = ">=0.1.1" -debugpy = ">=1.0" +debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" psutil = "*" -pyzmq = ">=17" +pyzmq = ">=20" tornado = ">=6.1" 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)"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] -typing = ["mypy (>=0.990)"] [[package]] name = "ipython" -version = "8.10.0" +version = "8.12.2" description = "IPython: Productive Interactive Computing" category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "ipython-8.10.0-py3-none-any.whl", hash = "sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345"}, - {file = "ipython-8.10.0.tar.gz", hash = "sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e"}, + {file = "ipython-8.12.2-py3-none-any.whl", hash = "sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc"}, + {file = "ipython-8.12.2.tar.gz", hash = "sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea"}, ] [package.dependencies] @@ -1410,10 +1533,11 @@ jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" -prompt-toolkit = ">=3.0.30,<3.1.0" +prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] @@ -1429,7 +1553,7 @@ test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "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" @@ -1457,19 +1581,19 @@ arrow = ">=0.15.0" [[package]] name = "isort" -version = "5.10.1" +version = "5.12.0" description = "A Python utility / library to sort Python imports." category = "dev" optional = false -python-versions = ">=3.6.1,<4.0" +python-versions = ">=3.8.0" files = [ - {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, - {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, ] [package.extras] -colors = ["colorama (>=0.4.3,<0.5.0)"] -pipfile-deprecated-finder = ["pipreqs", "requirementslib"] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] plugins = ["setuptools"] requirements-deprecated-finder = ["pip-api", "pipreqs"] @@ -1509,7 +1633,7 @@ 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" @@ -1528,14 +1652,14 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.9.10" +version = "0.9.11" 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"}, + {file = "json5-0.9.11-py2.py3-none-any.whl", hash = "sha256:1aa54b80b5e507dfe31d12b7743a642e2ffa6f70bf73b8e3d7d1d5fba83d99bd"}, + {file = "json5-0.9.11.tar.gz", hash = "sha256:4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b"}, ] [package.extras] @@ -1585,86 +1709,88 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jupyter-client" -version = "7.4.8" +version = "8.2.0" 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.8-py3-none-any.whl", hash = "sha256:d4a67ae86ee014bcb96bd8190714f6af921f2b0f52f4208b086aa5acfd9f8d65"}, - {file = "jupyter_client-7.4.8.tar.gz", hash = "sha256:109a3c33b62a9cf65aa8325850a0999a795fac155d9de4f7555aef5f310ee35a"}, + {file = "jupyter_client-8.2.0-py3-none-any.whl", hash = "sha256:b18219aa695d39e2ad570533e0d71fb7881d35a873051054a84ee2a17c4b7389"}, + {file = "jupyter_client-8.2.0.tar.gz", hash = "sha256:9fe233834edd0e6c0aa5f05ca2ab4bdea1842bfd2d8a932878212fc5301ddaf0"}, ] [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.0 || >=5.1.0" 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.1.0" +version = "5.3.0" 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.0-py3-none-any.whl", hash = "sha256:f5740d99606958544396914b08e67b668f45e7eff99ab47a7f4bcead419c02f4"}, - {file = "jupyter_core-5.1.0.tar.gz", hash = "sha256:a5ae7c09c55c0b26f692ec69323ba2b62e8d7295354d20f6cd57b749de4a05bf"}, + {file = "jupyter_core-5.3.0-py3-none-any.whl", hash = "sha256:d4201af84559bc8c70cead287e1ab94aeef3c512848dde077b7684b54d67730d"}, + {file = "jupyter_core-5.3.0.tar.gz", hash = "sha256:6db75be0c83edbf1b7c9f91ec266a9a24ef945da630f3120e1a0046dc13713fc"}, ] [package.dependencies] platformdirs = ">=2.5" -pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} traitlets = ">=5.3" [package.extras] -docs = ["myst-parser", "sphinxcontrib-github-alt", "traitlets"] +docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.5.0" +version = "0.6.3" 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"}, + {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, + {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, ] [package.dependencies] -jsonschema = {version = ">=4.3.0", extras = ["format-nongpl"]} -python-json-logger = "*" -pyyaml = "*" -traitlets = "*" +jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" [package.extras] cli = ["click", "rich"] -test = ["click", "coverage", "pre-commit", "pytest (>=6.1.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] [[package]] name = "jupyter-server" -version = "2.0.1" +version = "2.5.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.0.1-py3-none-any.whl", hash = "sha256:3bc09974a5290249de6924a614933e6f4f3d6d11f3061423a9f4e0271064a8b3"}, - {file = "jupyter_server-2.0.1.tar.gz", hash = "sha256:6e71268380ad7e4f2d9dda2f3e51a4fd4d1997b5390d5acdb74c7a195cfe4c00"}, + {file = "jupyter_server-2.5.0-py3-none-any.whl", hash = "sha256:e6bc1e9e96d7c55b9ce9699ff6cb9a910581fe7349e27c40389acb67632e24c0"}, + {file = "jupyter_server-2.5.0.tar.gz", hash = "sha256:9fde612791f716fd34d610cd939704a9639643744751ba66e7ee8fdc9cead07e"}, ] [package.dependencies] -anyio = ">=3.1.0,<4" +anyio = ">=3.1.0" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" @@ -1684,21 +1810,39 @@ traitlets = ">=5.6.0" 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)"] +docs = ["docutils (<0.20)", "ipykernel", "jinja2", "jupyter-client", "jupyter-server", "mistune (<1.0.0)", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] 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-fileid" +version = "0.9.0" +description = "" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "jupyter_server_fileid-0.9.0-py3-none-any.whl", hash = "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0"}, + {file = "jupyter_server_fileid-0.9.0.tar.gz", hash = "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8"}, +] + +[package.dependencies] +jupyter-events = ">=0.5.0" +jupyter-server = ">=1.15,<3" + +[package.extras] +cli = ["click"] +test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] [[package]] name = "jupyter-server-terminals" -version = "0.4.2" +version = "0.4.4" description = "A Jupyter Server Extension Providing Terminals." category = "main" optional = true python-versions = ">=3.8" files = [ - {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"}, + {file = "jupyter_server_terminals-0.4.4-py3-none-any.whl", hash = "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36"}, + {file = "jupyter_server_terminals-0.4.4.tar.gz", hash = "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d"}, ] [package.dependencies] @@ -1706,19 +1850,59 @@ 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", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +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 = [ + {file = "jupyter_server_ydoc-0.8.0-py3-none-any.whl", hash = "sha256:969a3a1a77ed4e99487d60a74048dc9fa7d3b0dcd32e60885d835bbf7ba7be11"}, + {file = "jupyter_server_ydoc-0.8.0.tar.gz", hash = "sha256:a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c"}, +] + +[package.dependencies] +jupyter-server-fileid = ">=0.6.0,<1" +jupyter-ydoc = ">=0.2.0,<0.4.0" +ypy-websocket = ">=0.8.2,<0.9.0" + +[package.extras] +test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytest-cov", "pytest-timeout", "pytest-tornasync"] + +[[package]] +name = "jupyter-ydoc" +version = "0.2.4" +description = "Document structures for collaborative editing using Ypy" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "jupyter_ydoc-0.2.4-py3-none-any.whl", hash = "sha256:d1a51c73ead6f6417bec0450f53c577a66abe8d43e9c2d8a1acaf7a17259f843"}, + {file = "jupyter_ydoc-0.2.4.tar.gz", hash = "sha256:a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +y-py = ">=0.5.3,<0.6.0" + +[package.extras] +dev = ["click", "jupyter-releaser"] +test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] [[package]] name = "jupyterlab" -version = "3.5.1" +version = "3.6.3" description = "JupyterLab computational environment" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.5.1-py3-none-any.whl", hash = "sha256:c6748b4f21850c0095ed2187ce86d7e06edd9d1180cc4e6a572c4013163c0c74"}, - {file = "jupyterlab-3.5.1.tar.gz", hash = "sha256:59a1b2d79d4b3ebee4d997c8bed8cf450f460c7c35f46b613a93f0b7712b47fc"}, + {file = "jupyterlab-3.6.3-py3-none-any.whl", hash = "sha256:6aba0caa771697d02fbf409f9767b2fdb4ee32ce935940e3b9a0d5d48d994d0f"}, + {file = "jupyterlab-3.6.3.tar.gz", hash = "sha256:373e9cfb8a72edd294be14f16662563a220cecf0fb26de7aab1af9a29b689b82"}, ] [package.dependencies] @@ -1726,16 +1910,17 @@ ipython = "*" jinja2 = ">=2.1" jupyter-core = "*" jupyter-server = ">=1.16.0,<3" -jupyterlab-server = ">=2.10,<3.0" +jupyter-server-ydoc = ">=0.8.0,<0.9.0" +jupyter-ydoc = ">=0.2.3,<0.3.0" +jupyterlab-server = ">=2.19,<3.0" nbclassic = "*" notebook = "<7" packaging = "*" -tomli = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} 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.5.3)", "requests", "requests-cache", "virtualenv"] [[package]] name = "jupyterlab-pygments" @@ -1751,30 +1936,30 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.16.3" +version = "2.22.1" 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.3-py3-none-any.whl", hash = "sha256:d18eb623428b4ee732c2258afaa365eedd70f38b609981ea040027914df32bc6"}, - {file = "jupyterlab_server-2.16.3.tar.gz", hash = "sha256:635a0b176a901f19351c02221a124e59317c476f511200409b7d867e8b2905c3"}, + {file = "jupyterlab_server-2.22.1-py3-none-any.whl", hash = "sha256:1c8eb55c7cd70a50a51fef42a7b4e26ef2f7fc48728f0290604bd89b1dd156e6"}, + {file = "jupyterlab_server-2.22.1.tar.gz", hash = "sha256:dfaaf898af84b9d01ae9583b813f378b96ee90c3a66f24c5186ea5d1bbdb2089"}, ] [package.dependencies] -babel = "*" +babel = ">=2.10" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jinja2 = ">=3.0.3" -json5 = "*" -jsonschema = ">=3.0.1" -jupyter-server = ">=1.8,<3" -packaging = "*" -requests = "*" +json5 = ">=0.9.0" +jsonschema = ">=4.17.3" +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"] -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"] +docs = ["autodoc-traits", "docutils (<0.20)", "jinja2 (<3.2.0)", "mistune (<3)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] +openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "kiwisolver" @@ -1856,35 +2041,52 @@ files = [ [[package]] name = "lazy-object-proxy" -version = "1.8.0" +version = "1.9.0" 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" + {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, +] + +[[package]] +name = "manimpango" version = "0.4.3" description = "Bindings for Pango for using with Manim." category = "main" @@ -1988,7 +2190,7 @@ test = ["pytest"] name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2010,115 +2212,126 @@ rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx- testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] -name = "MarkupSafe" -version = "2.1.1" +name = "markupsafe" +version = "2.1.2" 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"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, + {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, ] [[package]] name = "matplotlib" -version = "3.6.2" +version = "3.7.1" 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"}, + {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:95cbc13c1fc6844ab8812a525bbc237fa1470863ff3dace7352e910519e194b1"}, + {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:08308bae9e91aca1ec6fd6dda66237eef9f6294ddb17f0d0b3c863169bf82353"}, + {file = "matplotlib-3.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:544764ba51900da4639c0f983b323d288f94f65f4024dc40ecb1542d74dc0500"}, + {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d94989191de3fcc4e002f93f7f1be5da476385dde410ddafbb70686acf00ea"}, + {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99bc9e65901bb9a7ce5e7bb24af03675cbd7c70b30ac670aa263240635999a4"}, + {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb7d248c34a341cd4c31a06fd34d64306624c8cd8d0def7abb08792a5abfd556"}, + {file = "matplotlib-3.7.1-cp310-cp310-win32.whl", hash = "sha256:ce463ce590f3825b52e9fe5c19a3c6a69fd7675a39d589e8b5fbe772272b3a24"}, + {file = "matplotlib-3.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:3d7bc90727351fb841e4d8ae620d2d86d8ed92b50473cd2b42ce9186104ecbba"}, + {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:770a205966d641627fd5cf9d3cb4b6280a716522cd36b8b284a8eb1581310f61"}, + {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f67bfdb83a8232cb7a92b869f9355d677bce24485c460b19d01970b64b2ed476"}, + {file = "matplotlib-3.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2bf092f9210e105f414a043b92af583c98f50050559616930d884387d0772aba"}, + {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89768d84187f31717349c6bfadc0e0d8c321e8eb34522acec8a67b1236a66332"}, + {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83111e6388dec67822e2534e13b243cc644c7494a4bb60584edbff91585a83c6"}, + {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a867bf73a7eb808ef2afbca03bcdb785dae09595fbe550e1bab0cd023eba3de0"}, + {file = "matplotlib-3.7.1-cp311-cp311-win32.whl", hash = "sha256:fbdeeb58c0cf0595efe89c05c224e0a502d1aa6a8696e68a73c3efc6bc354304"}, + {file = "matplotlib-3.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:c0bd19c72ae53e6ab979f0ac6a3fafceb02d2ecafa023c5cca47acd934d10be7"}, + {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:6eb88d87cb2c49af00d3bbc33a003f89fd9f78d318848da029383bfc08ecfbfb"}, + {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:cf0e4f727534b7b1457898c4f4ae838af1ef87c359b76dcd5330fa31893a3ac7"}, + {file = "matplotlib-3.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:46a561d23b91f30bccfd25429c3c706afe7d73a5cc64ef2dfaf2b2ac47c1a5dc"}, + {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8704726d33e9aa8a6d5215044b8d00804561971163563e6e6591f9dcf64340cc"}, + {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4cf327e98ecf08fcbb82685acaf1939d3338548620ab8dfa02828706402c34de"}, + {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:617f14ae9d53292ece33f45cba8503494ee199a75b44de7717964f70637a36aa"}, + {file = "matplotlib-3.7.1-cp38-cp38-win32.whl", hash = "sha256:7c9a4b2da6fac77bcc41b1ea95fadb314e92508bf5493ceff058e727e7ecf5b0"}, + {file = "matplotlib-3.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:14645aad967684e92fc349493fa10c08a6da514b3d03a5931a1bac26e6792bd1"}, + {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:81a6b377ea444336538638d31fdb39af6be1a043ca5e343fe18d0f17e098770b"}, + {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:28506a03bd7f3fe59cd3cd4ceb2a8d8a2b1db41afede01f66c42561b9be7b4b7"}, + {file = "matplotlib-3.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8c587963b85ce41e0a8af53b9b2de8dddbf5ece4c34553f7bd9d066148dc719c"}, + {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8bf26ade3ff0f27668989d98c8435ce9327d24cffb7f07d24ef609e33d582439"}, + {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:def58098f96a05f90af7e92fd127d21a287068202aa43b2a93476170ebd99e87"}, + {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f883a22a56a84dba3b588696a2b8a1ab0d2c3d41be53264115c71b0a942d8fdb"}, + {file = "matplotlib-3.7.1-cp39-cp39-win32.whl", hash = "sha256:4f99e1b234c30c1e9714610eb0c6d2f11809c9c78c984a613ae539ea2ad2eb4b"}, + {file = "matplotlib-3.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:3ba2af245e36990facf67fde840a760128ddd71210b2ab6406e640188d69d136"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3032884084f541163f295db8a6536e0abb0db464008fadca6c98aaf84ccf4717"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a2cb34336110e0ed8bb4f650e817eed61fa064acbefeb3591f1b33e3a84fd96"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b867e2f952ed592237a1828f027d332d8ee219ad722345b79a001f49df0936eb"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:57bfb8c8ea253be947ccb2bc2d1bb3862c2bccc662ad1b4626e1f5e004557042"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:438196cdf5dc8d39b50a45cb6e3f6274edbcf2254f85fa9b895bf85851c3a613"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21e9cff1a58d42e74d01153360de92b326708fb205250150018a52c70f43c290"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d4725d70b7c03e082bbb8a34639ede17f333d7247f56caceb3801cb6ff703d"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:97cc368a7268141afb5690760921765ed34867ffb9655dd325ed207af85c7529"}, + {file = "matplotlib-3.7.1.tar.gz", hash = "sha256:7b73305f25eab4541bd7ee0b96d87e53ae9c9f1823be5659b806cd85786fe882"}, ] [package.dependencies] contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" +importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} kiwisolver = ">=1.0.1" -numpy = ">=1.19" +numpy = ">=1.20" packaging = ">=20.0" pillow = ">=6.2.0" -pyparsing = ">=2.2.1" +pyparsing = ">=2.3.1" python-dateutil = ">=2.7" [[package]] @@ -2150,14 +2363,14 @@ files = [ [[package]] name = "mdit-py-plugins" -version = "0.3.3" +version = "0.3.5" 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"}, + {file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"}, + {file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"}, ] [package.dependencies] @@ -2172,7 +2385,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2182,74 +2395,74 @@ files = [ [[package]] name = "mistune" -version = "2.0.4" +version = "2.0.5" 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"}, + {file = "mistune-2.0.5-py2.py3-none-any.whl", hash = "sha256:bad7f5d431886fcbaf5f758118ecff70d31f75231b34024a1341120340a65ce8"}, + {file = "mistune-2.0.5.tar.gz", hash = "sha256:0246113cb2492db875c6be56974a7c893333bf26cd92891c85f63151cee09d34"}, ] [[package]] name = "moderngl" -version = "5.7.3" +version = "5.8.2" description = "ModernGL: High performance rendering for Python 3" category = "main" optional = false python-versions = "*" files = [ - {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"}, + {file = "moderngl-5.8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3012c38b882985aa1140196ba157b8d5a625add0ee0761c3c2937505b1365675"}, + {file = "moderngl-5.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f140f9d9f5f11fc2a7b41324dd7bcf88c1fc9576d5b21f78b42707d835583be9"}, + {file = "moderngl-5.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbb23f67bd1bb0babd67246330137bd4b9fd49557fa5ae402305685a48df3d6d"}, + {file = "moderngl-5.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5e92e1c8af12fdf3f5fb1923412632887aa3002bdb23d46a3ff564b93cc002c"}, + {file = "moderngl-5.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8227c2986e2ce9a76314fa6271d72749e37831fa3031d0db1eccb7fcfd027f08"}, + {file = "moderngl-5.8.2-cp310-cp310-win32.whl", hash = "sha256:df3c541ef9322fafebc113924a5034bb0fb3ac4afab9bd72cc6798795edbfd18"}, + {file = "moderngl-5.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:5d3fd68011186a30ab4bbcdeb5348a5bce579cbef0e849944ca875d0be70f0c2"}, + {file = "moderngl-5.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d51c2d31decab2f3a534c04d2dfda631d9a2efc79ddb36d75e4b50747fc134f2"}, + {file = "moderngl-5.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:affffa368aea60fd5df0edff10d6923f74cd3f9fd7893675fe7c7bfe73517b7b"}, + {file = "moderngl-5.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7e9220ce5447e050adaaea42abf2b48e3eae4cc4a2fc07a3827239c067c5c68"}, + {file = "moderngl-5.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:310db1cc52dbcc211d957f27ca9d14f3e474657eb2d5670f03adf9221c9b1647"}, + {file = "moderngl-5.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcd7de06efafa9e4cef63c942e886586fd25076867d46511aaf5aa478317c2f3"}, + {file = "moderngl-5.8.2-cp311-cp311-win32.whl", hash = "sha256:b5e7d98c5bd5e840c9667cf1817c01809b83beb8f8b83c6e76bf85f10dc99b63"}, + {file = "moderngl-5.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:279486e143eb849fcab126e3ef3a1a0353bbbdb1d27a13c76335cf4ae14b2827"}, + {file = "moderngl-5.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a37db97c20e942ec20281d320c50f8ea006d5ac4797998484a7f8fdfe9e0129b"}, + {file = "moderngl-5.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50313b30b744c59c07a01b63ecd4efd57488ad70ece4296d8669cac6ec1f634d"}, + {file = "moderngl-5.8.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60ad02423ecc434433aa63ec0d8adbef94432e88a87ebf0853336dc3677c645e"}, + {file = "moderngl-5.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:651f450ac4520cb24161096f0bcfaf10820743d48e231cf0a27a8ff4e036c450"}, + {file = "moderngl-5.8.2-cp37-cp37m-win32.whl", hash = "sha256:88e9500293f02220d9613beb852242507de34b29639427a3b113be38941458fe"}, + {file = "moderngl-5.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ab9d969cbed50d7f86c6da8252b4a7adc53d033a24a281cd4b00221b1b26faf2"}, + {file = "moderngl-5.8.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4a16916facea2351b70db73226cef1545c43f3431d9861a7b467208898b82a0f"}, + {file = "moderngl-5.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a994da9d8cf3f5d9f549b02f9b9bfaeb0ce20c17e5acaa8b9737795d1bf62a28"}, + {file = "moderngl-5.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8079fcf1a8e4df24ab2313165cc77721c7676a1c68b2e48a890d283525f6858"}, + {file = "moderngl-5.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f066d9b0e743bb60e3dfa540214b4fe19c5d25f3ab7dd4f61c36fb00854fa502"}, + {file = "moderngl-5.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b9b6efe0cecb182e07f0424b9d33a969f85e39f9e6eff2d5fb05e8e9ff67750"}, + {file = "moderngl-5.8.2-cp38-cp38-win32.whl", hash = "sha256:a135faa1be35346a258bd59daf5307b763e4f20e32ecdd69fc0d84e5bb48adfc"}, + {file = "moderngl-5.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:56b73042fb5593158b6935757c75c695673a46b74136c03c88c16af25628d998"}, + {file = "moderngl-5.8.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7400876b5ef3eb12f0e0374c48b881dd44f8aef4b3d901ffe508213949d62d0a"}, + {file = "moderngl-5.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e4fc84269d26731832303c1904bd33e4692a648b26e97661c8455e4fdfc6bd17"}, + {file = "moderngl-5.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f5b909dd73a30235989685bf83e8a5b2dad435ce576669a6731bf6659076f4b"}, + {file = "moderngl-5.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d8ffeb7b30d001f8495f7efbcdf39a07185ad94e7f843133ce991b459d47ba6"}, + {file = "moderngl-5.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ebc9016a0849edc4654e4d1935748ca2dc72427ea678aa7fc166d449e0c1db2"}, + {file = "moderngl-5.8.2-cp39-cp39-win32.whl", hash = "sha256:9f19b0c201c5c2739358a68c12f0502424ed76659edaba4ea20760fc9b71d2fa"}, + {file = "moderngl-5.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ff301371e91dd39486c8d52a27934cc04ca3da6da16613255d3a6b69e89e621"}, + {file = "moderngl-5.8.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:67918bbc43b2f7aa37d72ba1ed2dd506d993aed8d62d9771caaf541607bd7402"}, + {file = "moderngl-5.8.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841d8e056f188d03ab02268f96368f570c72a91ed01f8fa43e83ecbcaf80bf06"}, + {file = "moderngl-5.8.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ce40fb73f80c1f09f4a095adda341fdaf1b3043f219fbfe44a9da81577dde7e"}, + {file = "moderngl-5.8.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a850968d417fb62eb26922d2158a6748b90088db948c9499dc05cd616a845d9"}, + {file = "moderngl-5.8.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e2e6378212c18b82503c82555644a12bb9087215c8ae783b655a1f3ade403285"}, + {file = "moderngl-5.8.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:96433f592a6a113a2cd236f00a306f43059580ec5109553e0f0044decd61fe0c"}, + {file = "moderngl-5.8.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:670682ad734dacb501685c62d958a849a856d01ebb6cafb639d6549e7ca4d39a"}, + {file = "moderngl-5.8.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2205402a8d0792efc380e68cb1a11218c09454e6d8d1d95fda0becb2d36a5a"}, + {file = "moderngl-5.8.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7362808ab3ef32b95b534de6be20f09eee23f047954dd01d3d2433faf1f0725"}, + {file = "moderngl-5.8.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cc3ed59322867afbc9edf4d96deb619e1e13bb7ef8bfc778b10adbd117f8af9b"}, + {file = "moderngl-5.8.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d0d9fa90957c382ebbc7011ffc29807ae914e64f2d519d974b87e583d6c07188"}, + {file = "moderngl-5.8.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3366be15c5aaa841239091dfa2c86c6acb09b67fa2a86552f8b4f59c0e9dae55"}, + {file = "moderngl-5.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8094f14072e102272f31617b219b601dd15e5117047ba33508014f9a40b7188a"}, + {file = "moderngl-5.8.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5e25f34e3b6916f6394b3a7f10fa443a901662ecfb01c623ed9c7f87a660ed9"}, + {file = "moderngl-5.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2d572b3e8243e63efbb85bb6a90dfffe84a8d57233ff7e03cad44023a414678f"}, + {file = "moderngl-5.8.2.tar.gz", hash = "sha256:b66c18d7f4ab7a94be3f9eb9e4ca6836ead1da502d62e81b7f7a48150e2ed391"}, ] [package.dependencies] @@ -2257,14 +2470,14 @@ glcontext = ">=2.3.6,<3" [[package]] name = "moderngl-window" -version = "2.4.2" +version = "2.4.3" description = "A cross platform helper library for ModernGL making window creation and resource loading simple" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "moderngl-window-2.4.2.tar.gz", hash = "sha256:5a31d790beed76964b4d4037c9d93302ff403bb813e7ba506c834895dfc59bb4"}, - {file = "moderngl_window-2.4.2-py3-none-any.whl", hash = "sha256:19aca4048ca037bd9f2ca8b154ac15d07e90a05ad2d5fce32d746be8ffcc319d"}, + {file = "moderngl-window-2.4.3.tar.gz", hash = "sha256:6e80cbba4102ab8e33902603d9dda0bb52ac9e34d1f565edf61182003373c327"}, + {file = "moderngl_window-2.4.3-py3-none-any.whl", hash = "sha256:a52db1880522c48dcf696172defa97001c3839d6159613b552581d5baba45601"}, ] [package.dependencies] @@ -2341,14 +2554,14 @@ python2 = ["typed-ast (>=1.4.0,<2)"] [[package]] name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.5" 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"}, + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] [[package]] @@ -2380,14 +2593,14 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest [[package]] name = "nbclassic" -version = "0.4.8" -description = "A web-based notebook environment for interactive computing" +version = "1.0.0" +description = "Jupyter Notebook as a Jupyter Server extension." 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"}, + {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, + {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, ] [package.dependencies] @@ -2401,7 +2614,7 @@ jupyter-server = ">=1.8" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" -notebook-shim = ">=0.1.0" +notebook-shim = ">=0.2.3" prometheus-client = "*" pyzmq = ">=17" Send2Trash = ">=1.8.0" @@ -2412,18 +2625,18 @@ traitlets = ">=4.2.1" [package.extras] docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] [[package]] name = "nbclient" -version = "0.7.2" +version = "0.7.4" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." 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"}, + {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, + {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, ] [package.dependencies] @@ -2434,19 +2647,19 @@ traitlets = ">=5.3" [package.extras] dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme"] -test = ["ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.2.6" +version = "7.3.1" description = "Converting Jupyter Notebooks" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "nbconvert-7.2.6-py3-none-any.whl", hash = "sha256:f933e82fe48b9a421e4252249f6c0a9a9940dc555642b4729f3f1f526bb16779"}, - {file = "nbconvert-7.2.6.tar.gz", hash = "sha256:c9c0e4b26326f7658ebf4cda0acc591b9727c4e3ee3ede962f70c11833b71b40"}, + {file = "nbconvert-7.3.1-py3-none-any.whl", hash = "sha256:d2e95904666f1ff77d36105b9de4e0801726f93b862d5b28f69e93d99ad3b19c"}, + {file = "nbconvert-7.3.1.tar.gz", hash = "sha256:78685362b11d2e8058e70196fe83b09abed8df22d3e599cf271f4d39fdc48b9e"}, ] [package.dependencies] @@ -2469,23 +2682,23 @@ traitlets = ">=5.0" [package.extras] all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] -docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] 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.8.0" description = "The Jupyter Notebook format" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "nbformat-5.7.0-py3-none-any.whl", hash = "sha256:1b05ec2c552c2f1adc745f4eddce1eac8ca9ffd59bb9fd859e827eaa031319f9"}, - {file = "nbformat-5.7.0.tar.gz", hash = "sha256:1d4760c15c1a04269ef5caf375be8b98dd2f696e5eb9e603ec2bf091f9b0d3f3"}, + {file = "nbformat-5.8.0-py3-none-any.whl", hash = "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162"}, + {file = "nbformat-5.8.0.tar.gz", hash = "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f"}, ] [package.dependencies] @@ -2495,7 +2708,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", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" @@ -2545,14 +2759,14 @@ setuptools = "*" [[package]] name = "notebook" -version = "6.5.2" +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.2-py3-none-any.whl", hash = "sha256:e04f9018ceb86e4fa841e92ea8fb214f8d23c1cedfde530cc96f92446924f0e4"}, - {file = "notebook-6.5.2.tar.gz", hash = "sha256:c1897e5317e225fc78b45549a6ab4b668e4c996fd03a04e938fe5e7af2bfffd0"}, + {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, + {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, ] [package.dependencies] @@ -2580,70 +2794,70 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs [[package]] name = "notebook-shim" -version = "0.2.2" +version = "0.2.3" 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"}, + {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, + {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, ] [package.dependencies] jupyter-server = ">=1.8,<3" [package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-tornasync"] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] [[package]] name = "numpy" -version = "1.23.5" -description = "NumPy is the fundamental package for array computing with Python." +version = "1.24.3" +description = "Fundamental package for array computing in Python" category = "main" optional = false python-versions = ">=3.8" files = [ - {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"}, + {file = "numpy-1.24.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570"}, + {file = "numpy-1.24.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7"}, + {file = "numpy-1.24.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463"}, + {file = "numpy-1.24.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6"}, + {file = "numpy-1.24.3-cp310-cp310-win32.whl", hash = "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b"}, + {file = "numpy-1.24.3-cp310-cp310-win_amd64.whl", hash = "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7"}, + {file = "numpy-1.24.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3"}, + {file = "numpy-1.24.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf"}, + {file = "numpy-1.24.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385"}, + {file = "numpy-1.24.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950"}, + {file = "numpy-1.24.3-cp311-cp311-win32.whl", hash = "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096"}, + {file = "numpy-1.24.3-cp311-cp311-win_amd64.whl", hash = "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80"}, + {file = "numpy-1.24.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078"}, + {file = "numpy-1.24.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c"}, + {file = "numpy-1.24.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c"}, + {file = "numpy-1.24.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f"}, + {file = "numpy-1.24.3-cp38-cp38-win32.whl", hash = "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4"}, + {file = "numpy-1.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289"}, + {file = "numpy-1.24.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4"}, + {file = "numpy-1.24.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187"}, + {file = "numpy-1.24.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02"}, + {file = "numpy-1.24.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4"}, + {file = "numpy-1.24.3-cp39-cp39-win32.whl", hash = "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c"}, + {file = "numpy-1.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17"}, + {file = "numpy-1.24.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0"}, + {file = "numpy-1.24.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812"}, + {file = "numpy-1.24.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4"}, + {file = "numpy-1.24.3.tar.gz", hash = "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155"}, ] [[package]] name = "packaging" -version = "22.0" +version = "23.1" 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"}, + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] [[package]] @@ -2676,14 +2890,14 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.10.2" +version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, - {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, ] [[package]] @@ -2714,82 +2928,87 @@ files = [ ] [[package]] -name = "Pillow" -version = "9.3.0" +name = "pillow" +version = "9.5.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"}, + {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, + {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"}, + {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"}, + {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"}, + {file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"}, + {file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"}, + {file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"}, + {file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"}, + {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"}, + {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"}, + {file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"}, + {file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"}, + {file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"}, + {file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"}, + {file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"}, + {file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"}, + {file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"}, + {file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"}, + {file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"}, + {file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"}, + {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"}, + {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"}, + {file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"}, + {file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"}, + {file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"}, + {file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"}, + {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"}, + {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"}, + {file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"}, + {file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, + {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "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" @@ -2802,19 +3021,19 @@ files = [ [[package]] name = "platformdirs" -version = "2.6.0" +version = "3.5.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 = [ - {file = "platformdirs-2.6.0-py3-none-any.whl", hash = "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca"}, - {file = "platformdirs-2.6.0.tar.gz", hash = "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e"}, + {file = "platformdirs-3.5.0-py3-none-any.whl", hash = "sha256:47692bc24c1958e8b0f13dd727307cff1db103fca36399f457da8e05f222fdc4"}, + {file = "platformdirs-3.5.0.tar.gz", hash = "sha256:7954a68d0ba23558d753f73437c55f89027cf8f5108c19844d4b82e5af396335"}, ] [package.extras] -docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] -test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -2834,14 +3053,14 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "2.20.0" +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 = [ - {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"}, + {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, + {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, ] [package.dependencies] @@ -2849,19 +3068,18 @@ cfgv = ">=2.0.0" identify = ">=1.0.0" nodeenv = ">=0.11.1" pyyaml = ">=5.1" -toml = "*" -virtualenv = ">=20.0.8" +virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.15.0" +version = "0.16.0" 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"}, + {file = "prometheus_client-0.16.0-py3-none-any.whl", hash = "sha256:0836af6eb2c8f4fed712b2f279f6c0a8bbab29f9f4aa15276b91c7cb0d1616ab"}, + {file = "prometheus_client-0.16.0.tar.gz", hash = "sha256:a03e35b359f14dd1630898543e2120addfdeacd1a6069c1367ae90fd93ad3f48"}, ] [package.extras] @@ -2869,14 +3087,14 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.36" +version = "3.0.38" description = "Library for building powerful interactive command lines in Python" category = "main" optional = true -python-versions = ">=3.6.2" +python-versions = ">=3.7.0" 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"}, + {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, + {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, ] [package.dependencies] @@ -2884,26 +3102,26 @@ wcwidth = "*" [[package]] name = "psutil" -version = "5.9.4" +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 = [ - {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"}, + {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, + {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, ] [package.extras] @@ -2966,7 +3184,7 @@ tests = ["pytest"] name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3021,21 +3239,21 @@ files = [ [[package]] name = "pydocstyle" -version = "6.1.1" +version = "6.3.0" 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"}, + {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, + {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, ] [package.dependencies] -snowballstemmer = "*" +snowballstemmer = ">=2.2.0" [package.extras] -toml = ["toml"] +toml = ["tomli (>=1.2.3)"] [[package]] name = "pydub" @@ -3062,55 +3280,52 @@ files = [ ] [[package]] -name = "PyGithub" -version = "1.57" +name = "pygithub" +version = "1.58.1" 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"}, + {file = "PyGithub-1.58.1-py3-none-any.whl", hash = "sha256:4e7fe9c3ec30d5fde5b4fbb97f18821c9dbf372bf6df337fe66f6689a65e0a83"}, + {file = "PyGithub-1.58.1.tar.gz", hash = "sha256:7d528b4ad92bc13122129fafd444ce3d04c47d2d801f6446b6e6ee2d410235b3"}, ] [package.dependencies] deprecated = "*" -pyjwt = ">=2.4.0" +pyjwt = {version = ">=2.4.0", extras = ["crypto"]} pynacl = ">=1.4.0" requests = ">=2.14.0" -[package.extras] -integrations = ["cryptography"] - [[package]] name = "pyglet" -version = "2.0.1" +version = "2.0.6" description = "Cross-platform windowing and multimedia library" category = "main" optional = false python-versions = "*" files = [ - {file = "pyglet-2.0.1-py3-none-any.whl", hash = "sha256:6c0c0fe95fbc3b26c2f008e83bcc3dcbda1609dca6da7c3954bc4d1b529f2303"}, - {file = "pyglet-2.0.1.zip", hash = "sha256:ec36eba0c769bac25c5347acf14f8a7ac8f64fe469458a0a998ed1d507975e47"}, + {file = "pyglet-2.0.6-py3-none-any.whl", hash = "sha256:c4df16436c6656a5120e49162012314c29696dc0ede9b89b36072c57a2a9ff93"}, + {file = "pyglet-2.0.6.zip", hash = "sha256:6f93f2bde6df818087e1b5d91033086cb2fb689c1220b632c46d1fc4a6685a00"}, ] [[package]] -name = "Pygments" -version = "2.13.0" +name = "pygments" +version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, - {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, ] [package.extras] plugins = ["importlib-metadata"] [[package]] -name = "PyJWT" +name = "pyjwt" version = "2.6.0" description = "JSON Web Token implementation in Python" category = "dev" @@ -3121,6 +3336,9 @@ files = [ {file = "PyJWT-2.6.0.tar.gz", hash = "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd"}, ] +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + [package.extras] crypto = ["cryptography (>=3.4.0)"] dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] @@ -3129,20 +3347,23 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "2.15.8" +version = "2.17.3" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.15.8-py3-none-any.whl", hash = "sha256:ea82cd6a1e11062dc86d555d07c021b0fb65afe39becbe6fe692efd6c4a67443"}, - {file = "pylint-2.15.8.tar.gz", hash = "sha256:ec4a87c33da054ab86a6c79afa6771dc8765cb5631620053e727fcf3ef8cbed7"}, + {file = "pylint-2.17.3-py3-none-any.whl", hash = "sha256:a6cbb4c6e96eab4a3c7de7c6383c512478f58f88d95764507d84c899d656a89a"}, + {file = "pylint-2.17.3.tar.gz", hash = "sha256:761907349e699f8afdcd56c4fe02f3021ab5b3a0fc26d19a9bfdc66c7d0d5cd5"}, ] [package.dependencies] -astroid = ">=2.12.13,<=2.14.0-dev0" +astroid = ">=2.15.4,<=2.17.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" @@ -3155,7 +3376,7 @@ 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" @@ -3183,40 +3404,40 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] [[package]] name = "pyobjc-core" -version = "9.0" +version = "9.1.1" description = "Python<->ObjC Interoperability Module" category = "main" optional = false python-versions = ">=3.7" files = [ - {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"}, + {file = "pyobjc-core-9.1.1.tar.gz", hash = "sha256:4b6cb9053b5fcd3c0e76b8c8105a8110786b20f3403c5643a688c5ec51c55c6b"}, + {file = "pyobjc_core-9.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4bd07049fd9fe5b40e4b7c468af9cf942508387faf383a5acb043d20627bad2c"}, + {file = "pyobjc_core-9.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1a8307527621729ff2ab67860e7ed84f76ad0da881b248c2ef31e0da0088e4ba"}, + {file = "pyobjc_core-9.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:083004d28b92ccb483a41195c600728854843b0486566aba2d6e63eef51f80e6"}, + {file = "pyobjc_core-9.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d61e9517d451bc062a7fae8b3648f4deba4fa54a24926fa1cf581b90ef4ced5a"}, + {file = "pyobjc_core-9.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1626909916603a3b04c07c721cf1af0e0b892cec85bb3db98d05ba024f1786fc"}, + {file = "pyobjc_core-9.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2dde96462b52e952515d142e2afbb6913624a02c13582047e06211e6c3993728"}, ] [[package]] -name = "pyobjc-framework-Cocoa" -version = "9.0" +name = "pyobjc-framework-cocoa" +version = "9.1.1" description = "Wrappers for the Cocoa frameworks on macOS" category = "main" optional = false python-versions = ">=3.7" files = [ - {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"}, + {file = "pyobjc-framework-Cocoa-9.1.1.tar.gz", hash = "sha256:345c32b6d1f3db45f635e400f2d0d6c0f0f7349d45ec823f76fc1df43d13caeb"}, + {file = "pyobjc_framework_Cocoa-9.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9176a4276f3b4b4758e9b9ca10698be5341ceffaeaa4fa055133417179e6bc37"}, + {file = "pyobjc_framework_Cocoa-9.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5e1e96fb3461f46ff951413515f2029e21be268b0e033db6abee7b64ec8e93d3"}, + {file = "pyobjc_framework_Cocoa-9.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:083b195c496d30c6b9dd86126a6093c4b95e0138e9b052b13e54103fcc0b4872"}, + {file = "pyobjc_framework_Cocoa-9.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a1b3333b1aa045608848bd68bbab4c31171f36aeeaa2fabeb4527c6f6f1e33cd"}, + {file = "pyobjc_framework_Cocoa-9.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:54c017354671f0d955432986c42218e452ca69906a101c8e7acde8510432303a"}, + {file = "pyobjc_framework_Cocoa-9.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:10c0075688ce95b92caf59e368585fffdcc98c919bc345067af070222f5d01d2"}, ] [package.dependencies] -pyobjc-core = ">=9.0" +pyobjc-core = ">=9.1.1" [[package]] name = "pyparsing" @@ -3251,50 +3472,54 @@ numpy = "*" [[package]] name = "pyrsistent" -version = "0.19.2" +version = "0.19.3" 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"}, + {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, + {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, + {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, + {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, + {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, + {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, ] [[package]] name = "pytest" -version = "7.2.0" +version = "7.3.1" 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"}, + {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"}, + {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"}, ] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" @@ -3303,7 +3528,7 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] [[package]] name = "pytest-cov" @@ -3326,14 +3551,14 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale [[package]] name = "pytest-forked" -version = "1.4.0" +version = "1.6.0" description = "run tests in isolated forked subprocesses" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" 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"}, + {file = "pytest-forked-1.6.0.tar.gz", hash = "sha256:4dafd46a9a600f65d822b8f605133ecf5b3e1941ebb3588e943b4e3eb71a5a3f"}, + {file = "pytest_forked-1.6.0-py3-none-any.whl", hash = "sha256:810958f66a91afb1a1e2ae83089d8dc1cd2437ac96b12963042fbb9fb4d16af0"}, ] [package.dependencies] @@ -3379,70 +3604,70 @@ six = ">=1.5" [[package]] name = "python-json-logger" -version = "2.0.4" +version = "2.0.7" description = "A python library adding a json log formatter" category = "main" optional = true -python-versions = ">=3.5" +python-versions = ">=3.6" 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"}, + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, ] [[package]] name = "pytz" -version = "2022.6" +version = "2023.3" description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" files = [ - {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, - {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, ] [[package]] name = "pywin32" -version = "305" +version = "306" 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"}, + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] [[package]] name = "pywinpty" -version = "2.0.9" +version = "2.0.10" 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"}, + {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, + {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, + {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, + {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, + {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, + {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, ] [[package]] -name = "PyYAML" +name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" category = "main" @@ -3493,91 +3718,93 @@ files = [ [[package]] name = "pyzmq" -version = "24.0.1" +version = "25.0.2" 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.0.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ac178e666c097c8d3deb5097b58cd1316092fc43e8ef5b5fdb259b51da7e7315"}, + {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:659e62e1cbb063151c52f5b01a38e1df6b54feccfa3e2509d44c35ca6d7962ee"}, + {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8280ada89010735a12b968ec3ea9a468ac2e04fddcc1cede59cb7f5178783b9c"}, + {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b5eeb5278a8a636bb0abdd9ff5076bcbb836cd2302565df53ff1fa7d106d54"}, + {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a2e5fe42dfe6b73ca120b97ac9f34bfa8414feb15e00e37415dbd51cf227ef6"}, + {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:827bf60e749e78acb408a6c5af6688efbc9993e44ecc792b036ec2f4b4acf485"}, + {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7b504ae43d37e282301da586529e2ded8b36d4ee2cd5e6db4386724ddeaa6bbc"}, + {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb1f69a0a2a2b1aae8412979dd6293cc6bcddd4439bf07e4758d864ddb112354"}, + {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b9c9cc965cdf28381e36da525dcb89fc1571d9c54800fdcd73e3f73a2fc29bd"}, + {file = "pyzmq-25.0.2-cp310-cp310-win32.whl", hash = "sha256:24abbfdbb75ac5039205e72d6c75f10fc39d925f2df8ff21ebc74179488ebfca"}, + {file = "pyzmq-25.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6a821a506822fac55d2df2085a52530f68ab15ceed12d63539adc32bd4410f6e"}, + {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9af0bb0277e92f41af35e991c242c9c71920169d6aa53ade7e444f338f4c8128"}, + {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:54a96cf77684a3a537b76acfa7237b1e79a8f8d14e7f00e0171a94b346c5293e"}, + {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88649b19ede1cab03b96b66c364cbbf17c953615cdbc844f7f6e5f14c5e5261c"}, + {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:715cff7644a80a7795953c11b067a75f16eb9fc695a5a53316891ebee7f3c9d5"}, + {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:312b3f0f066b4f1d17383aae509bacf833ccaf591184a1f3c7a1661c085063ae"}, + {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d488c5c8630f7e782e800869f82744c3aca4aca62c63232e5d8c490d3d66956a"}, + {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:38d9f78d69bcdeec0c11e0feb3bc70f36f9b8c44fc06e5d06d91dc0a21b453c7"}, + {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3059a6a534c910e1d5d068df42f60d434f79e6cc6285aa469b384fa921f78cf8"}, + {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6526d097b75192f228c09d48420854d53dfbc7abbb41b0e26f363ccb26fbc177"}, + {file = "pyzmq-25.0.2-cp311-cp311-win32.whl", hash = "sha256:5c5fbb229e40a89a2fe73d0c1181916f31e30f253cb2d6d91bea7927c2e18413"}, + {file = "pyzmq-25.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:ed15e3a2c3c2398e6ae5ce86d6a31b452dfd6ad4cd5d312596b30929c4b6e182"}, + {file = "pyzmq-25.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:032f5c8483c85bf9c9ca0593a11c7c749d734ce68d435e38c3f72e759b98b3c9"}, + {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:374b55516393bfd4d7a7daa6c3b36d6dd6a31ff9d2adad0838cd6a203125e714"}, + {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:08bfcc21b5997a9be4fefa405341320d8e7f19b4d684fb9c0580255c5bd6d695"}, + {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1a843d26a8da1b752c74bc019c7b20e6791ee813cd6877449e6a1415589d22ff"}, + {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b48616a09d7df9dbae2f45a0256eee7b794b903ddc6d8657a9948669b345f220"}, + {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d4427b4a136e3b7f85516c76dd2e0756c22eec4026afb76ca1397152b0ca8145"}, + {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:26b0358e8933990502f4513c991c9935b6c06af01787a36d133b7c39b1df37fa"}, + {file = "pyzmq-25.0.2-cp36-cp36m-win32.whl", hash = "sha256:c8fedc3ccd62c6b77dfe6f43802057a803a411ee96f14e946f4a76ec4ed0e117"}, + {file = "pyzmq-25.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2da6813b7995b6b1d1307329c73d3e3be2fd2d78e19acfc4eff2e27262732388"}, + {file = "pyzmq-25.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a35960c8b2f63e4ef67fd6731851030df68e4b617a6715dd11b4b10312d19fef"}, + {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2a0b880ab40aca5a878933376cb6c1ec483fba72f7f34e015c0f675c90b20"}, + {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85762712b74c7bd18e340c3639d1bf2f23735a998d63f46bb6584d904b5e401d"}, + {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:64812f29d6eee565e129ca14b0c785744bfff679a4727137484101b34602d1a7"}, + {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:510d8e55b3a7cd13f8d3e9121edf0a8730b87d925d25298bace29a7e7bc82810"}, + {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b164cc3c8acb3d102e311f2eb6f3c305865ecb377e56adc015cb51f721f1dda6"}, + {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:28fdb9224a258134784a9cf009b59265a9dde79582fb750d4e88a6bcbc6fa3dc"}, + {file = "pyzmq-25.0.2-cp37-cp37m-win32.whl", hash = "sha256:dd771a440effa1c36d3523bc6ba4e54ff5d2e54b4adcc1e060d8f3ca3721d228"}, + {file = "pyzmq-25.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:9bdc40efb679b9dcc39c06d25629e55581e4c4f7870a5e88db4f1c51ce25e20d"}, + {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:1f82906a2d8e4ee310f30487b165e7cc8ed09c009e4502da67178b03083c4ce0"}, + {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:21ec0bf4831988af43c8d66ba3ccd81af2c5e793e1bf6790eb2d50e27b3c570a"}, + {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbce982a17c88d2312ec2cf7673985d444f1beaac6e8189424e0a0e0448dbb3"}, + {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9e1d2f2d86fc75ed7f8845a992c5f6f1ab5db99747fb0d78b5e4046d041164d2"}, + {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e92ff20ad5d13266bc999a29ed29a3b5b101c21fdf4b2cf420c09db9fb690e"}, + {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edbbf06cc2719889470a8d2bf5072bb00f423e12de0eb9ffec946c2c9748e149"}, + {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:77942243ff4d14d90c11b2afd8ee6c039b45a0be4e53fb6fa7f5e4fd0b59da39"}, + {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ab046e9cb902d1f62c9cc0eca055b1d11108bdc271caf7c2171487298f229b56"}, + {file = "pyzmq-25.0.2-cp38-cp38-win32.whl", hash = "sha256:ad761cfbe477236802a7ab2c080d268c95e784fe30cafa7e055aacd1ca877eb0"}, + {file = "pyzmq-25.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8560756318ec7c4c49d2c341012167e704b5a46d9034905853c3d1ade4f55bee"}, + {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:ab2c056ac503f25a63f6c8c6771373e2a711b98b304614151dfb552d3d6c81f6"}, + {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cca8524b61c0eaaa3505382dc9b9a3bc8165f1d6c010fdd1452c224225a26689"}, + {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb9f7eae02d3ac42fbedad30006b7407c984a0eb4189a1322241a20944d61e5"}, + {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5eaeae038c68748082137d6896d5c4db7927e9349237ded08ee1bbd94f7361c9"}, + {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a31992a8f8d51663ebf79df0df6a04ffb905063083d682d4380ab8d2c67257c"}, + {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6a979e59d2184a0c8f2ede4b0810cbdd86b64d99d9cc8a023929e40dce7c86cc"}, + {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1f124cb73f1aa6654d31b183810febc8505fd0c597afa127c4f40076be4574e0"}, + {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:65c19a63b4a83ae45d62178b70223adeee5f12f3032726b897431b6553aa25af"}, + {file = "pyzmq-25.0.2-cp39-cp39-win32.whl", hash = "sha256:83d822e8687621bed87404afc1c03d83fa2ce39733d54c2fd52d8829edb8a7ff"}, + {file = "pyzmq-25.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:24683285cc6b7bf18ad37d75b9db0e0fefe58404e7001f1d82bf9e721806daa7"}, + {file = "pyzmq-25.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a4b4261eb8f9ed71f63b9eb0198dd7c934aa3b3972dac586d0ef502ba9ab08b"}, + {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:62ec8d979f56c0053a92b2b6a10ff54b9ec8a4f187db2b6ec31ee3dd6d3ca6e2"}, + {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:affec1470351178e892121b3414c8ef7803269f207bf9bef85f9a6dd11cde264"}, + {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffc71111433bd6ec8607a37b9211f4ef42e3d3b271c6d76c813669834764b248"}, + {file = "pyzmq-25.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6fadc60970714d86eff27821f8fb01f8328dd36bebd496b0564a500fe4a9e354"}, + {file = "pyzmq-25.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:269968f2a76c0513490aeb3ba0dc3c77b7c7a11daa894f9d1da88d4a0db09835"}, + {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f7c8b8368e84381ae7c57f1f5283b029c888504aaf4949c32e6e6fb256ec9bf0"}, + {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25e6873a70ad5aa31e4a7c41e5e8c709296edef4a92313e1cd5fc87bbd1874e2"}, + {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b733076ff46e7db5504c5e7284f04a9852c63214c74688bdb6135808531755a3"}, + {file = "pyzmq-25.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a6f6ae12478fdc26a6d5fdb21f806b08fa5403cd02fd312e4cb5f72df078f96f"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:67da1c213fbd208906ab3470cfff1ee0048838365135a9bddc7b40b11e6d6c89"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531e36d9fcd66f18de27434a25b51d137eb546931033f392e85674c7a7cea853"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34a6fddd159ff38aa9497b2e342a559f142ab365576284bc8f77cb3ead1f79c5"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b491998ef886662c1f3d49ea2198055a9a536ddf7430b051b21054f2a5831800"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5d496815074e3e3d183fe2c7fcea2109ad67b74084c254481f87b64e04e9a471"}, + {file = "pyzmq-25.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:56a94ab1d12af982b55ca96c6853db6ac85505e820d9458ac76364c1998972f4"}, + {file = "pyzmq-25.0.2.tar.gz", hash = "sha256:6b8c1bbb70e868dc88801aa532cae6bd4e3b5233784692b786f17ad2962e5149"}, ] [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} -py = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "recommonmark" @@ -3598,21 +3825,21 @@ sphinx = ">=1.3.1" [[package]] name = "requests" -version = "2.28.1" +version = "2.30.0" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, + {file = "requests-2.30.0-py3-none-any.whl", hash = "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294"}, + {file = "requests-2.30.0.tar.gz", hash = "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" +charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -3661,62 +3888,62 @@ files = [ [[package]] name = "rich" -version = "12.6.0" +version = "13.3.5" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false -python-versions = ">=3.6.3,<4.0.0" +python-versions = ">=3.7.0" files = [ - {file = "rich-12.6.0-py3-none-any.whl", hash = "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e"}, - {file = "rich-12.6.0.tar.gz", hash = "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"}, + {file = "rich-13.3.5-py3-none-any.whl", hash = "sha256:69cdf53799e63f38b95b9bf9c875f8c90e78dd62b2f00c13a911c7a3b9fa4704"}, + {file = "rich-13.3.5.tar.gz", hash = "sha256:2d11b9b8dd03868f09b4fffadc84a6a8cda574e40dc90821bd845720ebb8e89c"}, ] [package.dependencies] -commonmark = ">=0.9.0,<0.10.0" -pygments = ">=2.6.0,<3.0.0" +markdown-it-py = ">=2.2.0,<3.0.0" +pygments = ">=2.13.0,<3.0.0" typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} [package.extras] -jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] +jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "scipy" -version = "1.9.3" +version = "1.10.1" description = "Fundamental algorithms for scientific computing in Python" category = "main" optional = false -python-versions = ">=3.8" -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"}, +python-versions = "<3.12,>=3.8" +files = [ + {file = "scipy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7354fd7527a4b0377ce55f286805b34e8c54b91be865bac273f527e1b839019"}, + {file = "scipy-1.10.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4b3f429188c66603a1a5c549fb414e4d3bdc2a24792e061ffbd607d3d75fd84e"}, + {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1553b5dcddd64ba9a0d95355e63fe6c3fc303a8fd77c7bc91e77d61363f7433f"}, + {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c0ff64b06b10e35215abce517252b375e580a6125fd5fdf6421b98efbefb2d2"}, + {file = "scipy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:fae8a7b898c42dffe3f7361c40d5952b6bf32d10c4569098d276b4c547905ee1"}, + {file = "scipy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f1564ea217e82c1bbe75ddf7285ba0709ecd503f048cb1236ae9995f64217bd"}, + {file = "scipy-1.10.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d925fa1c81b772882aa55bcc10bf88324dadb66ff85d548c71515f6689c6dac5"}, + {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaea0a6be54462ec027de54fca511540980d1e9eea68b2d5c1dbfe084797be35"}, + {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15a35c4242ec5f292c3dd364a7c71a61be87a3d4ddcc693372813c0b73c9af1d"}, + {file = "scipy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:43b8e0bcb877faf0abfb613d51026cd5cc78918e9530e375727bf0625c82788f"}, + {file = "scipy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5678f88c68ea866ed9ebe3a989091088553ba12c6090244fdae3e467b1139c35"}, + {file = "scipy-1.10.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:39becb03541f9e58243f4197584286e339029e8908c46f7221abeea4b749fa88"}, + {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bce5869c8d68cf383ce240e44c1d9ae7c06078a9396df68ce88a1230f93a30c1"}, + {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07c3457ce0b3ad5124f98a86533106b643dd811dd61b548e78cf4c8786652f6f"}, + {file = "scipy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:049a8bbf0ad95277ffba9b3b7d23e5369cc39e66406d60422c8cfef40ccc8415"}, + {file = "scipy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cd9f1027ff30d90618914a64ca9b1a77a431159df0e2a195d8a9e8a04c78abf9"}, + {file = "scipy-1.10.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:79c8e5a6c6ffaf3a2262ef1be1e108a035cf4f05c14df56057b64acc5bebffb6"}, + {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51af417a000d2dbe1ec6c372dfe688e041a7084da4fdd350aeb139bd3fb55353"}, + {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b4735d6c28aad3cdcf52117e0e91d6b39acd4272f3f5cd9907c24ee931ad601"}, + {file = "scipy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ff7f37b1bf4417baca958d254e8e2875d0cc23aaadbe65b3d5b3077b0eb23ea"}, + {file = "scipy-1.10.1.tar.gz", hash = "sha256:2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5"}, ] [package.dependencies] -numpy = ">=1.18.5,<1.26.0" +numpy = ">=1.19.5,<1.27.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"] +dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"] +doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "screeninfo" @@ -3735,15 +3962,15 @@ Cython = {version = "*", markers = "sys_platform == \"darwin\""} pyobjc-framework-Cocoa = {version = "*", markers = "sys_platform == \"darwin\""} [[package]] -name = "Send2Trash" -version = "1.8.0" -description = "Send file to trash natively under Mac OS X, Windows and Linux." +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 = "*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ - {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, - {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, + {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, + {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, ] [package.extras] @@ -3753,18 +3980,18 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "65.6.3" +version = "67.7.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" 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"}, + {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, + {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, ] [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"] +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 (<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"] @@ -3874,18 +4101,18 @@ files = [ [[package]] name = "soupsieve" -version = "2.3.2.post1" +version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" 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"}, + {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, + {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, ] [[package]] -name = "Sphinx" +name = "sphinx" version = "4.5.0" description = "Python documentation generator" category = "dev" @@ -3959,14 +4186,14 @@ rtd = ["ipython", "sphinx", "sphinx-book-theme"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.2" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" category = "dev" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" 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"}, + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, ] [package.extras] @@ -3991,14 +4218,14 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.0" +version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" 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"}, + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, ] [package.extras] @@ -4085,13 +4312,13 @@ sphinx = ">=4.0" [[package]] name = "srt" -version = "3.5.2" +version = "3.5.3" 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"}, + {file = "srt-3.5.3.tar.gz", hash = "sha256:4884315043a4f0740fd1f878ed6caa376ac06d70e135f306a6dc44632eed0cc0"}, ] [[package]] @@ -4116,14 +4343,14 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "svgelements" -version = "1.8.4" +version = "1.9.3" description = "Svg Elements Parsing" category = "main" optional = false python-versions = "*" files = [ - {file = "svgelements-1.8.4-py2.py3-none-any.whl", hash = "sha256:dc43ef603c650a2bf6380910bb9a28968e2474eb229295b9a36443f825c3a4f4"}, - {file = "svgelements-1.8.4.tar.gz", hash = "sha256:af0fa36d8d239c4df205e110cf531256359c6c4c93aa3cd13ae9599912f1335d"}, + {file = "svgelements-1.9.3-py2.py3-none-any.whl", hash = "sha256:43ef1a704c6daa444ae0670b46802db39afba6f5bdf260bdbafec838227ea82a"}, + {file = "svgelements-1.9.3.tar.gz", hash = "sha256:631220a228acc0c3e5f72e1f0e13c4b86786c93561dd326213ebed42c70f28ee"}, ] [[package]] @@ -4166,18 +4393,6 @@ webencodings = ">=0.4" doc = ["sphinx", "sphinx_rtd_theme"] test = ["flake8", "isort", "pytest"] -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -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" version = "2.0.1" @@ -4192,47 +4407,47 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.6" +version = "0.11.8" description = "Style preserving TOML library" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, - {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, + {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, + {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, ] [[package]] name = "tornado" -version = "6.2" +version = "6.3.1" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." category = "main" optional = true -python-versions = ">= 3.7" +python-versions = ">= 3.8" 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"}, + {file = "tornado-6.3.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:db181eb3df8738613ff0a26f49e1b394aade05034b01200a63e9662f347d4415"}, + {file = "tornado-6.3.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b4e7b956f9b5e6f9feb643ea04f07e7c6b49301e03e0023eedb01fa8cf52f579"}, + {file = "tornado-6.3.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9661aa8bc0e9d83d757cd95b6f6d1ece8ca9fd1ccdd34db2de381e25bf818233"}, + {file = "tornado-6.3.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81c17e0cc396908a5e25dc8e9c5e4936e6dfd544c9290be48bd054c79bcad51e"}, + {file = "tornado-6.3.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a27a1cfa9997923f80bdd962b3aab048ac486ad8cfb2f237964f8ab7f7eb824b"}, + {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d7117f3c7ba5d05813b17a1f04efc8e108a1b811ccfddd9134cc68553c414864"}, + {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:ffdce65a281fd708da5a9def3bfb8f364766847fa7ed806821a69094c9629e8a"}, + {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:90f569a35a8ec19bde53aa596952071f445da678ec8596af763b9b9ce07605e6"}, + {file = "tornado-6.3.1-cp38-abi3-win32.whl", hash = "sha256:3455133b9ff262fd0a75630af0a8ee13564f25fb4fd3d9ce239b8a7d3d027bf8"}, + {file = "tornado-6.3.1-cp38-abi3-win_amd64.whl", hash = "sha256:1285f0691143f7ab97150831455d4db17a267b59649f7bd9700282cba3d5e771"}, + {file = "tornado-6.3.1.tar.gz", hash = "sha256:5e2f49ad371595957c50e42dd7e5c14d64a6843a3cf27352b69c706d1b5918af"}, ] [[package]] name = "tqdm" -version = "4.64.1" +version = "4.65.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = ">=3.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"}, + {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, + {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, ] [package.dependencies] @@ -4246,19 +4461,19 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.6.0" +version = "5.9.0" description = "Traitlets Python configuration system" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "traitlets-5.6.0-py3-none-any.whl", hash = "sha256:1410755385d778aed847d68deb99b3ba30fbbf489e17a1e8cbb753060d5cce73"}, - {file = "traitlets-5.6.0.tar.gz", hash = "sha256:10b6ed1c9cedee83e795db70a8b9c2db157bb3778ec4587a349ecb7ef3b1033b"}, + {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, + {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, ] [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" @@ -4274,18 +4489,18 @@ files = [ [[package]] name = "types-docutils" -version = "0.19.1.1" +version = "0.19.1.9" 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"}, + {file = "types-docutils-0.19.1.9.tar.gz", hash = "sha256:1d029567e67c52992fd42aa968778bc10a5e445c8450fc751d672d6f50330a4a"}, + {file = "types_docutils-0.19.1.9-py3-none-any.whl", hash = "sha256:556fb7ee19248aa482caa142a830c940b776b0f8c7577a98abe0977574546a1d"}, ] [[package]] -name = "types-Pillow" +name = "types-pillow" version = "8.3.11" description = "Typing stubs for Pillow" category = "dev" @@ -4309,15 +4524,15 @@ files = [ ] [[package]] -name = "types-Pygments" -version = "2.13.1.1" +name = "types-pygments" +version = "2.15.0.0" 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"}, + {file = "types-Pygments-2.15.0.0.tar.gz", hash = "sha256:b5909267fe258dd00f3e65da8f098be30c0f7262805bef54e54eb69d75e2bc11"}, + {file = "types_Pygments-2.15.0.0-py3-none-any.whl", hash = "sha256:40b0cc6925cdbafbec46c5b2d994a1219e264e9d44ea6ab5c76cb8b87e8257e1"}, ] [package.dependencies] @@ -4326,14 +4541,14 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.28.11.5" +version = "2.29.0.0" description = "Typing stubs for requests" category = "dev" optional = false python-versions = "*" files = [ - {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"}, + {file = "types-requests-2.29.0.0.tar.gz", hash = "sha256:c86f4a955d943d2457120dbe719df24ef0924e11177164d10a0373cf311d7b4d"}, + {file = "types_requests-2.29.0.0-py3-none-any.whl", hash = "sha256:4cf6e323e856c779fbe8815bb977a5bf5d6c5034713e4c17ff2a9a20610f5b27"}, ] [package.dependencies] @@ -4353,26 +4568,26 @@ files = [ [[package]] name = "types-urllib3" -version = "1.26.25.4" +version = "1.26.25.12" 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"}, + {file = "types-urllib3-1.26.25.12.tar.gz", hash = "sha256:a1557355ce8d350a555d142589f3001903757d2d36c18a66f588d9659bbc917d"}, + {file = "types_urllib3-1.26.25.12-py3-none-any.whl", hash = "sha256:3ba3d3a8ee46e0d5512c6bd0594da4f10b2584b47a470f8422044a2ab462f1df"}, ] [[package]] name = "typing-extensions" -version = "4.4.0" +version = "4.5.0" 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"}, + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] [[package]] @@ -4392,78 +4607,79 @@ dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas [[package]] name = "urllib3" -version = "1.26.13" +version = "2.0.2" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7" files = [ - {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, - {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, + {file = "urllib3-2.0.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"}, + {file = "urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.17.1" +version = "20.23.0" description = "Virtual Python Environment builder" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "virtualenv-20.17.1-py3-none-any.whl", hash = "sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4"}, - {file = "virtualenv-20.17.1.tar.gz", hash = "sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058"}, + {file = "virtualenv-20.23.0-py3-none-any.whl", hash = "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e"}, + {file = "virtualenv-20.23.0.tar.gz", hash = "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924"}, ] [package.dependencies] distlib = ">=0.3.6,<1" -filelock = ">=3.4.1,<4" -platformdirs = ">=2.4,<3" +filelock = ">=3.11,<4" +platformdirs = ">=3.2,<4" [package.extras] -docs = ["proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-argparse (>=0.3.2)", "sphinx-rtd-theme (>=1)", "towncrier (>=22.8)"] -testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.7.1)", "time-machine (>=2.9)"] [[package]] name = "watchdog" -version = "2.2.0" +version = "2.3.1" description = "Filesystem events monitoring" category = "main" optional = false python-versions = ">=3.6" 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"}, - {file = "watchdog-2.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ceaa9268d81205876bedb1069f9feab3eccddd4b90d9a45d06a0df592a04cae9"}, - {file = "watchdog-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1893d425ef4fb4f129ee8ef72226836619c2950dd0559bba022b0818c63a7b60"}, - {file = "watchdog-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e99c1713e4436d2563f5828c8910e5ff25abd6ce999e75f15c15d81d41980b6"}, - {file = "watchdog-2.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a5bd9e8656d07cae89ac464ee4bcb6f1b9cecbedc3bf1334683bed3d5afd39ba"}, - {file = "watchdog-2.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a048865c828389cb06c0bebf8a883cec3ae58ad3e366bcc38c61d8455a3138f"}, - {file = "watchdog-2.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e722755d995035dd32177a9c633d158f2ec604f2a358b545bba5bed53ab25bca"}, - {file = "watchdog-2.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af4b5c7ba60206759a1d99811b5938ca666ea9562a1052b410637bb96ff97512"}, - {file = "watchdog-2.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:619d63fa5be69f89ff3a93e165e602c08ed8da402ca42b99cd59a8ec115673e1"}, - {file = "watchdog-2.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f2b0665c57358ce9786f06f5475bc083fea9d81ecc0efa4733fd0c320940a37"}, - {file = "watchdog-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:441024df19253bb108d3a8a5de7a186003d68564084576fecf7333a441271ef7"}, - {file = "watchdog-2.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a410dd4d0adcc86b4c71d1317ba2ea2c92babaf5b83321e4bde2514525544d5"}, - {file = "watchdog-2.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28704c71afdb79c3f215c90231e41c52b056ea880b6be6cee035c6149d658ed1"}, - {file = "watchdog-2.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2ac0bd7c206bb6df78ef9e8ad27cc1346f2b41b1fef610395607319cdab89bc1"}, - {file = "watchdog-2.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:27e49268735b3c27310883012ab3bd86ea0a96dcab90fe3feb682472e30c90f3"}, - {file = "watchdog-2.2.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:2af1a29fd14fc0a87fb6ed762d3e1ae5694dcde22372eebba50e9e5be47af03c"}, - {file = "watchdog-2.2.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:c7bd98813d34bfa9b464cf8122e7d4bec0a5a427399094d2c17dd5f70d59bc61"}, - {file = "watchdog-2.2.0-py3-none-manylinux2014_i686.whl", hash = "sha256:56fb3f40fc3deecf6e518303c7533f5e2a722e377b12507f6de891583f1b48aa"}, - {file = "watchdog-2.2.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:74535e955359d79d126885e642d3683616e6d9ab3aae0e7dcccd043bd5a3ff4f"}, - {file = "watchdog-2.2.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:cf05e6ff677b9655c6e9511d02e9cc55e730c4e430b7a54af9c28912294605a4"}, - {file = "watchdog-2.2.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:d6ae890798a3560688b441ef086bb66e87af6b400a92749a18b856a134fc0318"}, - {file = "watchdog-2.2.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5aed2a700a18c194c39c266900d41f3db0c1ebe6b8a0834b9995c835d2ca66e"}, - {file = "watchdog-2.2.0-py3-none-win32.whl", hash = "sha256:d0fb5f2b513556c2abb578c1066f5f467d729f2eb689bc2db0739daf81c6bb7e"}, - {file = "watchdog-2.2.0-py3-none-win_amd64.whl", hash = "sha256:1f8eca9d294a4f194ce9df0d97d19b5598f310950d3ac3dd6e8d25ae456d4c8a"}, - {file = "watchdog-2.2.0-py3-none-win_ia64.whl", hash = "sha256:ad0150536469fa4b693531e497ffe220d5b6cd76ad2eda474a5e641ee204bbb6"}, - {file = "watchdog-2.2.0.tar.gz", hash = "sha256:83cf8bc60d9c613b66a4c018051873d6273d9e45d040eed06d6a96241bd8ec01"}, + {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697"}, + {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42"}, + {file = "watchdog-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565"}, + {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16"}, + {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375"}, + {file = "watchdog-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab"}, + {file = "watchdog-2.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c"}, + {file = "watchdog-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f"}, + {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44"}, + {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131"}, + {file = "watchdog-2.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b"}, + {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc"}, + {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225"}, + {file = "watchdog-2.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43"}, + {file = "watchdog-2.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5"}, + {file = "watchdog-2.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd"}, + {file = "watchdog-2.3.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_i686.whl", hash = "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc"}, + {file = "watchdog-2.3.1-py3-none-win32.whl", hash = "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf"}, + {file = "watchdog-2.3.1-py3-none-win_amd64.whl", hash = "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb"}, + {file = "watchdog-2.3.1-py3-none-win_ia64.whl", hash = "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96"}, + {file = "watchdog-2.3.1.tar.gz", hash = "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906"}, ] [package.extras] @@ -4471,28 +4687,32 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcwidth" -version = "0.2.5" +version = "0.2.6" 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"}, + {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, + {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, ] [[package]] name = "webcolors" -version = "1.12" -description = "A library for working with color names and color values formats defined by HTML and CSS." +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 = [ - {file = "webcolors-1.12-py3-none-any.whl", hash = "sha256:d98743d81d498a2d3eaf165196e65481f0d2ea85281463d856b1e51b09f62dce"}, - {file = "webcolors-1.12.tar.gz", hash = "sha256:16d043d3a08fd6a1b1b7e3e9e62640d09790dce80d2bdd4792a175b35fe794a9"}, + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, ] +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + [[package]] name = "webencodings" version = "0.5.1" @@ -4507,14 +4727,14 @@ files = [ [[package]] name = "websocket-client" -version = "1.4.2" +version = "1.5.1" 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"}, + {file = "websocket-client-1.5.1.tar.gz", hash = "sha256:3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40"}, + {file = "websocket_client-1.5.1-py3-none-any.whl", hash = "sha256:cdf5877568b7e83aa7cf2244ab56a3213de587bbe0ce9d8b9600fc77b455d89e"}, ] [package.extras] @@ -4524,93 +4744,200 @@ test = ["websockets"] [[package]] name = "wrapt" -version = "1.14.1" +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 = [ - {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"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] + +[[package]] +name = "y-py" +version = "0.5.9" +description = "Python bindings for the Y-CRDT built from yrs (Rust)" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "y_py-0.5.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:afa9a11aa2880dd8689894f3269b653e6d3bd1956963d5329be9a5bf021dab62"}, + {file = "y_py-0.5.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e370ce076781adea161b04d2f666e8b4f89bc7e8927ef842fbb0283d3bfa73e0"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67dad339f9b6701f74ff7a6e901c7909eca4eea02cf955b28d87a42650bd1be"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae82a6d9cbaff8cb7505e81b5b7f9cd7756bb7e7110aef7914375fe56b012a90"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7ca64a2a97f708569dcabd55865915943e30267bf6d26c4d212d005951efe62"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55098440e32339c2dc3d652fb36bb77a4927dee5fd4ab0cb1fe12fdd163fd4f5"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9"}, + {file = "y_py-0.5.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95d13b38c9055d607565b77cbae12e2bf0c1671c5cb8f2ee2e1230d41d2d6d34"}, + {file = "y_py-0.5.9-cp310-none-win32.whl", hash = "sha256:5dbd8d177ec7b9fef4a7b6d22eb2f8d5606fd5aac31cf2eab0dc18f0b3504c7c"}, + {file = "y_py-0.5.9-cp310-none-win_amd64.whl", hash = "sha256:d373c6bb8e21d5f7ec0833b76fa1ab480086ada602ef5bbf4724a25a21a00b6a"}, + {file = "y_py-0.5.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f8f238144a302f17eb26b122cad9382fcff5ec6653b8a562130b9a5e44010098"}, + {file = "y_py-0.5.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:25637e3d011ca6f877a24f3083ff2549d1d619406d7e8a1455c445527205046c"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffebe5e62cbfee6e24593927dedba77dc13ac4cfb9c822074ab566b1fb63d59"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0ed760e6aa5316227a0ba2d5d29634a4ef2d72c8bc55169ac01664e17e4b536"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91be189fae8ba242528333e266e38d65cae3d9a09fe45867fab8578a3ddf2ea2"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3ae6d22b7cc599220a26b06da6ead9fd582eea5fdb6273b06fa3f060d0a26a7"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:065f90501cf008375d70be6ce72dd41745e09d088f0b545f5f914d2c3f04f7ae"}, + {file = "y_py-0.5.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742c486d5b792c4ad76e09426161302edddca85efe826fa01dcee50907326cd7"}, + {file = "y_py-0.5.9-cp311-none-win32.whl", hash = "sha256:2692c808bf28f797f8d693f45dc86563ac3b1626579f67ce9546dca69644d687"}, + {file = "y_py-0.5.9-cp311-none-win_amd64.whl", hash = "sha256:c1f5f287cc7ae127ed6a2fb1546e631b316a41d087d7d2db9caa3e5f59906dcf"}, + {file = "y_py-0.5.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9a59603cf42c20d02ee5add2e3d0ce48e89c480a2a02f642fb77f142c4f37958"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b44473bb32217c78e18db66f497f6c8be33e339bab5f52398bb2468c904d5140"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1906f13e8d5ebfbd9c7948f57bc6f6f53b451b19c99350f42a0f648147a8acfe"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:202b2a3e42e0a1eaedee26f8a3bc73cd9f994c4c2b15511ea56b9838178eb380"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13b9d2959d9a26536b6ad118fb026ff19bd79da52e4addf6f3a562e7c01d516e"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3ddedaa95284f4f22a92b362f658f3d92f272d8c0fa009051bd5490c4d5a04"}, + {file = "y_py-0.5.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85585e669d7679126e4a04e4bc0a063a641175a74eecfe47539e8da3e5b1da6e"}, + {file = "y_py-0.5.9-cp37-none-win32.whl", hash = "sha256:caf9b1feb69379d424a1d3d7c899b8e0389a3fb3131d39c3c03dcc3d4a93dbdc"}, + {file = "y_py-0.5.9-cp37-none-win_amd64.whl", hash = "sha256:7353af0e9c1f42fbf0ab340e253eeb333d58c890fa91d3eadb1b9adaf9336732"}, + {file = "y_py-0.5.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ed0fd5265905cc7e23709479bc152d69f4972dec32fa322d20cb77f749707e78"}, + {file = "y_py-0.5.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:db1ac7f2d1862eb4c448cf76183399d555a63dbe2452bafecb1c2f691e36d687"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa685f7e43ce490dfb1e392ac48f584b75cd21f05dc526c160d15308236ce8a0"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c42f3a6cd20153925b00c49af855a3277989d411bb8ea849095be943ee160821"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:753aaae817d658a1e9d271663439d8e83d9d8effa45590ecdcadc600c7cf77e3"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8e5f38842a4b043c9592bfa9a740147ddb8fac2d7a5b7bf6d52466c090ec23"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd3cb0d13ac92e7b9235d1024dba9af0788161246f12dcf1f635d634ccb206a"}, + {file = "y_py-0.5.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9983e99e3a61452b39ffce98206c7e4c6d260f4e917c8fe53fb54aaf25df89a3"}, + {file = "y_py-0.5.9-cp38-none-win32.whl", hash = "sha256:63ef8e5b76cd54578a7fd5f72d8c698d9ccd7c555c7900ebfd38a24d397c3b15"}, + {file = "y_py-0.5.9-cp38-none-win_amd64.whl", hash = "sha256:fe70d0134fe2115c08866f0cac0eb5c0788093872b5026eb438a74e1ebafd659"}, + {file = "y_py-0.5.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:05f805b58422d5d7c8e7e8e2141d1c3cac4daaa4557ae6a9b84b141fe8d6289e"}, + {file = "y_py-0.5.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a7977eeaceaeb0dfffcc5643c985c337ebc33a0b1d792ae0a9b1331cdd97366f"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:800e73d2110b97a74c52db2c8ce03a78e96f0d66a7e0c87d8254170a67c2db0e"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add793f5f5c7c7a3eb1b09ffc771bdaae10a0bd482a370bf696b83f8dee8d1b4"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8b67ae37af8aac6160fda66c0f73bcdf65c06da9022eb76192c3fc45cfab994"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2532ea5aefb223fd688c93860199d348a7601d814aac9e8784d816314588ddeb"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df78a0409dca11554a4b6442d7a8e61f762c3cfc78d55d98352392869a6b9ae0"}, + {file = "y_py-0.5.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2da2a9e28dceab4832945a745cad507579f52b4d0c9e2f54ae156eb56875861"}, + {file = "y_py-0.5.9-cp39-none-win32.whl", hash = "sha256:fdafb93bfd5532b13a53c4090675bcd31724160017ecc73e492dc1211bc0377a"}, + {file = "y_py-0.5.9-cp39-none-win_amd64.whl", hash = "sha256:73200c59bb253b880825466717941ac57267f2f685b053e183183cb6fe82874d"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af6df5ec1d66ee2d962026635d60e84ad35fc01b2a1e36b993360c0ce60ae349"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0c0e333c20b0a6ce4a5851203d45898ab93f16426c342420b931e190c5b71d3d"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7434c77cd23592973ed63341b8d337e6aebaba5ed40d7f22e2d43dfd0c3a56e"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e30fe2491d095c6d695a2c96257967fd3e2497f0f777030c8492d03c18d46e2a"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a57d81260e048caacf43a2f851766687f53e8a8356df6947fb0eee7336a7e2de"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4dfc276f988175baaa4ab321c3321a16ce33db3356c9bc5f4dea0db3de55aa"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb68445414940efe547291340e91604c7b8379b60822678ef29f4fc2a0e11c62"}, + {file = "y_py-0.5.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd6f373dbf592ad83aaf95c16abebc8678928e49bd509ebd593259e1908345ae"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76b3480e7037ac9390c450e2aff9e46e2c9e61520c0d88afe228110ec728adc5"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:9484a3fc33f812234e58a5ee834b42bb0a628054d61b5c06c323aa56c12e557d"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d87d0c2e87990bc00c049742d36a5dbbb1510949459af17198728890ee748a"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fce5feb57f6231376eb10d1fb68c60da106ffa0b520b3129471c466eff0304cc"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c1e9a866146d250e9e16d99fe22a40c82f5b592ab85da97e5679fc3841c7ce"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d722d6a27230c1f395535da5cee6a9a16497c6343afd262c846090075c083009"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f54625b9ed4e787872c45d3044dcfd04c0da4258d9914f3d32308830b35246c"}, + {file = "y_py-0.5.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9513ae81fcc805671ae134c4c7421ca322acf92ce8b33817e1775ea8c0176973"}, + {file = "y_py-0.5.9.tar.gz", hash = "sha256:50cfa0532bcee27edb8c64743b49570e28bb76a00cd384ead1d84b6f052d9368"}, +] + +[[package]] +name = "ypy-websocket" +version = "0.8.2" +description = "WebSocket connector for Ypy" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "ypy_websocket-0.8.2-py3-none-any.whl", hash = "sha256:9049d5a7d61c26c2b5a39757c9ffcbe2274bf3553adeea8de7fe1c04671d4145"}, + {file = "ypy_websocket-0.8.2.tar.gz", hash = "sha256:491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46"}, ] +[package.dependencies] +aiofiles = ">=22.1.0,<23" +aiosqlite = ">=0.17.0,<1" +y-py = ">=0.5.3,<0.6.0" + +[package.extras] +test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] + [[package]] name = "zipp" -version = "3.11.0" +version = "3.15.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"}, + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, ] [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)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "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"] From 05594eca5e7475f8026daa0bbcf6bd2c2d32c75b Mon Sep 17 00:00:00 2001 From: Adrien ANTON LUDWIG <42720099+Adrien-ANTON-LUDWIG@users.noreply.github.com> Date: Fri, 5 May 2023 08:57:15 +0000 Subject: [PATCH 241/555] Replace last `os.path` occurrencies by `pathlib` (#3224) This resolves [last comment](https://github.com/ManimCommunity/manim/issues/485#issuecomment-1523016291) of #485. Removes one line of dead code. Co-authored-by: Benjamin Hackl --- manim/scene/scene_file_writer.py | 3 +-- manim/utils/file_ops.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index 1891588675..d9e509de89 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -700,9 +700,8 @@ def clean_cache(self): ) oldest_files_to_delete = sorted( cached_partial_movies, - key=os.path.getatime, + key=lambda path: path.stat().st_atime, )[:number_files_to_delete] - # oldest_file_path = min(cached_partial_movies, key=os.path.getatime) for file_to_delete in oldest_files_to_delete: file_to_delete.unlink() logger.info( diff --git a/manim/utils/file_ops.py b/manim/utils/file_ops.py index 1bbb048214..ae06561991 100644 --- a/manim/utils/file_ops.py +++ b/manim/utils/file_ops.py @@ -183,7 +183,7 @@ def modify_atime(file_path: str) -> None: file_path The path of the file. """ - os.utime(file_path, times=(time.time(), os.path.getmtime(file_path))) + os.utime(file_path, times=(time.time(), Path(file_path).stat().st_mtime)) def open_file(file_path, in_browser=False): From b9367a2fb7593b42af18b2bd499035b24dffc002 Mon Sep 17 00:00:00 2001 From: Abulafia <44573666+abul4fia@users.noreply.github.com> Date: Fri, 5 May 2023 10:58:56 +0200 Subject: [PATCH 242/555] Small fix in the code of ArcBrace (#3226) Avoiding the creation of an Arc object at import time Co-authored-by: Benjamin Hackl --- manim/mobject/svg/brace.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manim/mobject/svg/brace.py b/manim/mobject/svg/brace.py index a595f05a2a..1e2b84ac6e 100644 --- a/manim/mobject/svg/brace.py +++ b/manim/mobject/svg/brace.py @@ -335,10 +335,12 @@ def construct(self): def __init__( self, - arc: Arc = Arc(start_angle=-1, angle=2, radius=1), + arc: Arc | None = None, direction: Sequence[float] = RIGHT, **kwargs, ): + if arc is None: + arc = Arc(start_angle=-1, angle=2, radius=1) arc_end_angle = arc.start_angle + arc.angle line = Line(UP * arc.start_angle, UP * arc_end_angle) scale_shift = RIGHT * np.log(arc.radius) From cbf6726f89972580cbb64e117da56f643919857d Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 5 May 2023 10:59:20 +0200 Subject: [PATCH 243/555] Made docbuild errors easier to debug + fixed error from changed exception class (#3229) * Make errors during docbuild somewhat easier to debug * fix an issue with docbuild under py3.10+ --- manim/utils/docbuild/manim_directive.py | 11 +++++++---- manim/utils/hashing.py | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/manim/utils/docbuild/manim_directive.py b/manim/utils/docbuild/manim_directive.py index fe43764ed3..e4df6dc531 100644 --- a/manim/utils/docbuild/manim_directive.py +++ b/manim/utils/docbuild/manim_directive.py @@ -272,10 +272,13 @@ def run(self): f"{clsname}().render()", ] - with tempconfig(example_config): - run_time = timeit(lambda: exec("\n".join(code), globals()), number=1) - video_dir = config.get_dir("video_dir") - images_dir = config.get_dir("images_dir") + try: + with tempconfig(example_config): + run_time = timeit(lambda: exec("\n".join(code), globals()), number=1) + video_dir = config.get_dir("video_dir") + images_dir = config.get_dir("images_dir") + except Exception as e: + raise RuntimeError(f"Error while rendering example {clsname}") from e _write_rendering_stats( clsname, diff --git a/manim/utils/hashing.py b/manim/utils/hashing.py index 60e4422f15..f8a259b06c 100644 --- a/manim/utils/hashing.py +++ b/manim/utils/hashing.py @@ -207,7 +207,7 @@ def default(self, obj: Any): del cvardict[i] try: code = inspect.getsource(obj) - except OSError: + except (OSError, TypeError): # This happens when rendering videos included in the documentation # within doctests and should be replaced by a solution avoiding # hash collision (due to the same, empty, code strings) at some point. From 96a83e544503ceaebc556af467c93ba5ce3e9db7 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Tue, 20 Jun 2023 12:34:19 +0530 Subject: [PATCH 244/555] CI: fix a config error from poetry (#3257) also, pin the version of poetry --- .github/workflows/ci.yml | 4 +- poetry.lock | 1014 ++++++++++++++++++++------------------ 2 files changed, 530 insertions(+), 488 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fa25d8870f..125be255cf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ jobs: - name: Install Poetry run: | - pipx install poetry + pipx install "poetry==1.5.*" poetry config virtualenvs.prefer-active-python true - name: Setup Python ${{ matrix.python }} @@ -151,7 +151,7 @@ jobs: - name: Install manim run: | - poetry config experimental.new-installer false + poetry config installer.modern-installation false poetry install - name: Run tests diff --git a/poetry.lock b/poetry.lock index acd03586c4..06535fb991 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "aiofiles" @@ -42,24 +42,25 @@ files = [ [[package]] name = "anyio" -version = "3.6.2" +version = "3.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" category = "main" optional = true -python-versions = ">=3.6.2" +python-versions = ">=3.7" files = [ - {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, - {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, + {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, + {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, ] [package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16,<0.22)"] +doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "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)"] [[package]] name = "appnope" @@ -160,14 +161,14 @@ files = [ [[package]] name = "astroid" -version = "2.15.4" +version = "2.15.5" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.15.4-py3-none-any.whl", hash = "sha256:a1b8543ef9d36ea777194bc9b17f5f8678d2c56ee6a45b2c2f17eec96f242347"}, - {file = "astroid-2.15.4.tar.gz", hash = "sha256:c81e1c7fbac615037744d067a9bb5f9aeb655edf59b63ee8b59585475d6f80d8"}, + {file = "astroid-2.15.5-py3-none-any.whl", hash = "sha256:078e5212f9885fa85fbb0cf0101978a336190aadea6e13305409d099f71b2324"}, + {file = "astroid-2.15.5.tar.gz", hash = "sha256:1039262575027b441137ab4a62a793a9b43defb42c32d5670f38686207cd780f"}, ] [package.dependencies] @@ -332,14 +333,14 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] [[package]] name = "certifi" -version = "2022.12.7" +version = "2023.5.7" 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"}, + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, ] [[package]] @@ -625,138 +626,131 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "contourpy" -version = "1.0.7" +version = "1.1.0" description = "Python library for calculating contours of 2D quadrilateral grids" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:95c3acddf921944f241b6773b767f1cbce71d03307270e2d769fd584d5d1092d"}, - {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc1464c97579da9f3ab16763c32e5c5d5bb5fa1ec7ce509a4ca6108b61b84fab"}, - {file = "contourpy-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8acf74b5d383414401926c1598ed77825cd530ac7b463ebc2e4f46638f56cce6"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c71fdd8f1c0f84ffd58fca37d00ca4ebaa9e502fb49825484da075ac0b0b803"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99e9486bf1bb979d95d5cffed40689cb595abb2b841f2991fc894b3452290e8"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f4d8941a9564cda3f7fa6a6cd9b32ec575830780677932abdec7bcb61717b0"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e20e5a1908e18aaa60d9077a6d8753090e3f85ca25da6e25d30dc0a9e84c2c6"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a877ada905f7d69b2a31796c4b66e31a8068b37aa9b78832d41c82fc3e056ddd"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6381fa66866b0ea35e15d197fc06ac3840a9b2643a6475c8fff267db8b9f1e69"}, - {file = "contourpy-1.0.7-cp310-cp310-win32.whl", hash = "sha256:3c184ad2433635f216645fdf0493011a4667e8d46b34082f5a3de702b6ec42e3"}, - {file = "contourpy-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:3caea6365b13119626ee996711ab63e0c9d7496f65641f4459c60a009a1f3e80"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed33433fc3820263a6368e532f19ddb4c5990855e4886088ad84fd7c4e561c71"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38e2e577f0f092b8e6774459317c05a69935a1755ecfb621c0a98f0e3c09c9a5"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ae90d5a8590e5310c32a7630b4b8618cef7563cebf649011da80874d0aa8f414"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130230b7e49825c98edf0b428b7aa1125503d91732735ef897786fe5452b1ec2"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58569c491e7f7e874f11519ef46737cea1d6eda1b514e4eb5ac7dab6aa864d02"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d43960d809c4c12508a60b66cb936e7ed57d51fb5e30b513934a4a23874fae"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:152fd8f730c31fd67fe0ffebe1df38ab6a669403da93df218801a893645c6ccc"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9056c5310eb1daa33fc234ef39ebfb8c8e2533f088bbf0bc7350f70a29bde1ac"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a9d7587d2fdc820cc9177139b56795c39fb8560f540bba9ceea215f1f66e1566"}, - {file = "contourpy-1.0.7-cp311-cp311-win32.whl", hash = "sha256:4ee3ee247f795a69e53cd91d927146fb16c4e803c7ac86c84104940c7d2cabf0"}, - {file = "contourpy-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:5caeacc68642e5f19d707471890f037a13007feba8427eb7f2a60811a1fc1350"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd7dc0e6812b799a34f6d12fcb1000539098c249c8da54f3566c6a6461d0dbad"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0f9d350b639db6c2c233d92c7f213d94d2e444d8e8fc5ca44c9706cf72193772"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e96a08b62bb8de960d3a6afbc5ed8421bf1a2d9c85cc4ea73f4bc81b4910500f"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:031154ed61f7328ad7f97662e48660a150ef84ee1bc8876b6472af88bf5a9b98"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e9ebb4425fc1b658e13bace354c48a933b842d53c458f02c86f371cecbedecc"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efb8f6d08ca7998cf59eaf50c9d60717f29a1a0a09caa46460d33b2924839dbd"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6c180d89a28787e4b73b07e9b0e2dac7741261dbdca95f2b489c4f8f887dd810"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b8d587cc39057d0afd4166083d289bdeff221ac6d3ee5046aef2d480dc4b503c"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:769eef00437edf115e24d87f8926955f00f7704bede656ce605097584f9966dc"}, - {file = "contourpy-1.0.7-cp38-cp38-win32.whl", hash = "sha256:62398c80ef57589bdbe1eb8537127321c1abcfdf8c5f14f479dbbe27d0322e66"}, - {file = "contourpy-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:57119b0116e3f408acbdccf9eb6ef19d7fe7baf0d1e9aaa5381489bc1aa56556"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:30676ca45084ee61e9c3da589042c24a57592e375d4b138bd84d8709893a1ba4"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e927b3868bd1e12acee7cc8f3747d815b4ab3e445a28d2e5373a7f4a6e76ba1"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:366a0cf0fc079af5204801786ad7a1c007714ee3909e364dbac1729f5b0849e5"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ba9bb365446a22411f0673abf6ee1fea3b2cf47b37533b970904880ceb72f3"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b0bf0c30d432278793d2141362ac853859e87de0a7dee24a1cea35231f0d50"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7281244c99fd7c6f27c1c6bfafba878517b0b62925a09b586d88ce750a016d2"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6d0f9e1d39dbfb3977f9dd79f156c86eb03e57a7face96f199e02b18e58d32a"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f6979d20ee5693a1057ab53e043adffa1e7418d734c1532e2d9e915b08d8ec2"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5dd34c1ae752515318224cba7fc62b53130c45ac6a1040c8b7c1a223c46e8967"}, - {file = "contourpy-1.0.7-cp39-cp39-win32.whl", hash = "sha256:c5210e5d5117e9aec8c47d9156d1d3835570dd909a899171b9535cb4a3f32693"}, - {file = "contourpy-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:60835badb5ed5f4e194a6f21c09283dd6e007664a86101431bf870d9e86266c4"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce41676b3d0dd16dbcfabcc1dc46090aaf4688fd6e819ef343dbda5a57ef0161"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a011cf354107b47c58ea932d13b04d93c6d1d69b8b6dce885e642531f847566"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31a55dccc8426e71817e3fe09b37d6d48ae40aae4ecbc8c7ad59d6893569c436"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69f8ff4db108815addd900a74df665e135dbbd6547a8a69333a68e1f6e368ac2"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efe99298ba37e37787f6a2ea868265465410822f7bea163edcc1bd3903354ea9"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a1e97b86f73715e8670ef45292d7cc033548266f07d54e2183ecb3c87598888f"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc331c13902d0f50845099434cd936d49d7a2ca76cb654b39691974cb1e4812d"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24847601071f740837aefb730e01bd169fbcaa610209779a78db7ebb6e6a7051"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abf298af1e7ad44eeb93501e40eb5a67abbf93b5d90e468d01fc0c4451971afa"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:64757f6460fc55d7e16ed4f1de193f362104285c667c112b50a804d482777edd"}, - {file = "contourpy-1.0.7.tar.gz", hash = "sha256:d8165a088d31798b59e91117d1f5fc3df8168d8b48c4acc10fc0df0d0bdbcc5e"}, + {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"}, ] [package.dependencies] numpy = ">=1.16" [package.extras] -bokeh = ["bokeh", "chromedriver", "selenium"] +bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh]", "docutils-stubs", "mypy (==0.991)", "types-Pillow"] -test = ["Pillow", "matplotlib", "pytest"] -test-no-images = ["pytest"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "wurlitzer"] [[package]] name = "coverage" -version = "7.2.5" +version = "7.2.7" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "coverage-7.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:883123d0bbe1c136f76b56276074b0c79b5817dd4238097ffa64ac67257f4b6c"}, - {file = "coverage-7.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2fbc2a127e857d2f8898aaabcc34c37771bf78a4d5e17d3e1f5c30cd0cbc62a"}, - {file = "coverage-7.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f3671662dc4b422b15776cdca89c041a6349b4864a43aa2350b6b0b03bbcc7f"}, - {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780551e47d62095e088f251f5db428473c26db7829884323e56d9c0c3118791a"}, - {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:066b44897c493e0dcbc9e6a6d9f8bbb6607ef82367cf6810d387c09f0cd4fe9a"}, - {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9a4ee55174b04f6af539218f9f8083140f61a46eabcaa4234f3c2a452c4ed11"}, - {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:706ec567267c96717ab9363904d846ec009a48d5f832140b6ad08aad3791b1f5"}, - {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ae453f655640157d76209f42c62c64c4d4f2c7f97256d3567e3b439bd5c9b06c"}, - {file = "coverage-7.2.5-cp310-cp310-win32.whl", hash = "sha256:f81c9b4bd8aa747d417407a7f6f0b1469a43b36a85748145e144ac4e8d303cb5"}, - {file = "coverage-7.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:dc945064a8783b86fcce9a0a705abd7db2117d95e340df8a4333f00be5efb64c"}, - {file = "coverage-7.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40cc0f91c6cde033da493227797be2826cbf8f388eaa36a0271a97a332bfd7ce"}, - {file = "coverage-7.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a66e055254a26c82aead7ff420d9fa8dc2da10c82679ea850d8feebf11074d88"}, - {file = "coverage-7.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c10fbc8a64aa0f3ed136b0b086b6b577bc64d67d5581acd7cc129af52654384e"}, - {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a22cbb5ede6fade0482111fa7f01115ff04039795d7092ed0db43522431b4f2"}, - {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:292300f76440651529b8ceec283a9370532f4ecba9ad67d120617021bb5ef139"}, - {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7ff8f3fb38233035028dbc93715551d81eadc110199e14bbbfa01c5c4a43f8d8"}, - {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a08c7401d0b24e8c2982f4e307124b671c6736d40d1c39e09d7a8687bddf83ed"}, - {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef9659d1cda9ce9ac9585c045aaa1e59223b143f2407db0eaee0b61a4f266fb6"}, - {file = "coverage-7.2.5-cp311-cp311-win32.whl", hash = "sha256:30dcaf05adfa69c2a7b9f7dfd9f60bc8e36b282d7ed25c308ef9e114de7fc23b"}, - {file = "coverage-7.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:97072cc90f1009386c8a5b7de9d4fc1a9f91ba5ef2146c55c1f005e7b5c5e068"}, - {file = "coverage-7.2.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bebea5f5ed41f618797ce3ffb4606c64a5de92e9c3f26d26c2e0aae292f015c1"}, - {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828189fcdda99aae0d6bf718ea766b2e715eabc1868670a0a07bf8404bf58c33"}, - {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e8a95f243d01ba572341c52f89f3acb98a3b6d1d5d830efba86033dd3687ade"}, - {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8834e5f17d89e05697c3c043d3e58a8b19682bf365048837383abfe39adaed5"}, - {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d1f25ee9de21a39b3a8516f2c5feb8de248f17da7eead089c2e04aa097936b47"}, - {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1637253b11a18f453e34013c665d8bf15904c9e3c44fbda34c643fbdc9d452cd"}, - {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8e575a59315a91ccd00c7757127f6b2488c2f914096077c745c2f1ba5b8c0969"}, - {file = "coverage-7.2.5-cp37-cp37m-win32.whl", hash = "sha256:509ecd8334c380000d259dc66feb191dd0a93b21f2453faa75f7f9cdcefc0718"}, - {file = "coverage-7.2.5-cp37-cp37m-win_amd64.whl", hash = "sha256:12580845917b1e59f8a1c2ffa6af6d0908cb39220f3019e36c110c943dc875b0"}, - {file = "coverage-7.2.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5016e331b75310610c2cf955d9f58a9749943ed5f7b8cfc0bb89c6134ab0a84"}, - {file = "coverage-7.2.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:373ea34dca98f2fdb3e5cb33d83b6d801007a8074f992b80311fc589d3e6b790"}, - {file = "coverage-7.2.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a063aad9f7b4c9f9da7b2550eae0a582ffc7623dca1c925e50c3fbde7a579771"}, - {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c0a497a000d50491055805313ed83ddba069353d102ece8aef5d11b5faf045"}, - {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b3b05e22a77bb0ae1a3125126a4e08535961c946b62f30985535ed40e26614"}, - {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0342a28617e63ad15d96dca0f7ae9479a37b7d8a295f749c14f3436ea59fdcb3"}, - {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf97ed82ca986e5c637ea286ba2793c85325b30f869bf64d3009ccc1a31ae3fd"}, - {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c2c41c1b1866b670573657d584de413df701f482574bad7e28214a2362cb1fd1"}, - {file = "coverage-7.2.5-cp38-cp38-win32.whl", hash = "sha256:10b15394c13544fce02382360cab54e51a9e0fd1bd61ae9ce012c0d1e103c813"}, - {file = "coverage-7.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:a0b273fe6dc655b110e8dc89b8ec7f1a778d78c9fd9b4bda7c384c8906072212"}, - {file = "coverage-7.2.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c587f52c81211d4530fa6857884d37f514bcf9453bdeee0ff93eaaf906a5c1b"}, - {file = "coverage-7.2.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4436cc9ba5414c2c998eaedee5343f49c02ca93b21769c5fdfa4f9d799e84200"}, - {file = "coverage-7.2.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6599bf92f33ab041e36e06d25890afbdf12078aacfe1f1d08c713906e49a3fe5"}, - {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:857abe2fa6a4973f8663e039ead8d22215d31db613ace76e4a98f52ec919068e"}, - {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f5cab2d7f0c12f8187a376cc6582c477d2df91d63f75341307fcdcb5d60303"}, - {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa387bd7489f3e1787ff82068b295bcaafbf6f79c3dad3cbc82ef88ce3f48ad3"}, - {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:156192e5fd3dbbcb11cd777cc469cf010a294f4c736a2b2c891c77618cb1379a"}, - {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd3b4b8175c1db502adf209d06136c000df4d245105c8839e9d0be71c94aefe1"}, - {file = "coverage-7.2.5-cp39-cp39-win32.whl", hash = "sha256:ddc5a54edb653e9e215f75de377354e2455376f416c4378e1d43b08ec50acc31"}, - {file = "coverage-7.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:338aa9d9883aaaad53695cb14ccdeb36d4060485bb9388446330bef9c361c252"}, - {file = "coverage-7.2.5-pp37.pp38.pp39-none-any.whl", hash = "sha256:8877d9b437b35a85c18e3c6499b23674684bf690f5d96c1006a1ef61f9fdf0f3"}, - {file = "coverage-7.2.5.tar.gz", hash = "sha256:f99ef080288f09ffc687423b8d60978cf3a465d3f404a18d1a05474bd8575a47"}, + {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"}, ] [package.dependencies] @@ -767,31 +761,31 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "40.0.2" +version = "41.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b"}, - {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440"}, - {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d"}, - {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288"}, - {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2"}, - {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b"}, - {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9"}, - {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c"}, - {file = "cryptography-40.0.2-cp36-abi3-win32.whl", hash = "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9"}, - {file = "cryptography-40.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b"}, - {file = "cryptography-40.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b"}, - {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e"}, - {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a"}, - {file = "cryptography-40.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958"}, - {file = "cryptography-40.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b"}, - {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636"}, - {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e"}, - {file = "cryptography-40.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404"}, - {file = "cryptography-40.0.2.tar.gz", hash = "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99"}, + {file = "cryptography-41.0.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699"}, + {file = "cryptography-41.0.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3"}, + {file = "cryptography-41.0.1-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db"}, + {file = "cryptography-41.0.1-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31"}, + {file = "cryptography-41.0.1-cp37-abi3-win32.whl", hash = "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5"}, + {file = "cryptography-41.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5"}, + {file = "cryptography-41.0.1.tar.gz", hash = "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006"}, ] [package.dependencies] @@ -800,12 +794,12 @@ cffi = ">=1.12" [package.extras] docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "check-manifest", "mypy", "ruff"] -sdist = ["setuptools-rust (>=0.11.4)"] +nox = ["nox"] +pep8test = ["black", "check-sdist", "mypy", "ruff"] +sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist"] +test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] -tox = ["tox"] [[package]] name = "cycler" @@ -821,52 +815,53 @@ files = [ [[package]] name = "cython" -version = "0.29.34" +version = "0.29.35" 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.*" files = [ - {file = "Cython-0.29.34-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742544024ddb74314e2d597accdb747ed76bd126e61fcf49940a5b5be0a8f381"}, - {file = "Cython-0.29.34-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:03daae07f8cbf797506446adae512c3dd86e7f27a62a541fa1ee254baf43e32c"}, - {file = "Cython-0.29.34-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5a8de3e793a576e40ca9b4f5518610cd416273c7dc5e254115656b6e4ec70663"}, - {file = "Cython-0.29.34-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:60969d38e6a456a67e7ef8ae20668eff54e32ba439d4068ccf2854a44275a30f"}, - {file = "Cython-0.29.34-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:21b88200620d80cfe193d199b259cdad2b9af56f916f0f7f474b5a3631ca0caa"}, - {file = "Cython-0.29.34-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:308c8f1e58bf5e6e8a1c4dcf8abbd2d13d0f9b1e582f4d9ae8b89857342d8bb5"}, - {file = "Cython-0.29.34-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:d8f822fb6ecd5d88c42136561f82960612421154fc5bf23c57103a367bb91356"}, - {file = "Cython-0.29.34-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56866323f1660cecb4d5ff3a1fba92a56b91b7cfae0a8253777aa4bdb3bdf9a8"}, - {file = "Cython-0.29.34-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e971db8aeb12e7c0697cefafe65eefcc33ff1224ae3d8c7f83346cbc42c6c270"}, - {file = "Cython-0.29.34-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4401270b0dc464c23671e2e9d52a60985f988318febaf51b047190e855bbe7d"}, - {file = "Cython-0.29.34-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:dce0a36d163c05ae8b21200059511217d79b47baf2b7b0f926e8367bd7a3cc24"}, - {file = "Cython-0.29.34-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dbd79221869ee9a6ccc4953b2c8838bb6ae08ab4d50ea4b60d7894f03739417b"}, - {file = "Cython-0.29.34-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a0f4229df10bc4545ebbeaaf96ebb706011d8b333e54ed202beb03f2bee0a50e"}, - {file = "Cython-0.29.34-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd1ea21f1cebf33ae288caa0f3e9b5563a709f4df8925d53bad99be693fc0d9b"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d7ef5f68f4c5baa93349ea54a352f8716d18bee9a37f3e93eff38a5d4e9b7262"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:459994d1de0f99bb18fad9f2325f760c4b392b1324aef37bcc1cd94922dfce41"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:1d6c809e2f9ce5950bbc52a1d2352ef3d4fc56186b64cb0d50c8c5a3c1d17661"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f674ceb5f722d364395f180fbac273072fc1a266aab924acc9cfd5afc645aae1"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9489de5b2044dcdfd9d6ca8242a02d560137b3c41b1f5ae1c4f6707d66d6e44d"}, - {file = "Cython-0.29.34-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5c121dc185040f4333bfded68963b4529698e1b6d994da56be32c97a90c896b6"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:b6149f7cc5b31bccb158c5b968e5a8d374fdc629792e7b928a9b66e08b03fca5"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0ab3cbf3d62b0354631a45dc93cfcdf79098663b1c65a6033af4a452b52217a7"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:4a2723447d1334484681d5aede34184f2da66317891f94b80e693a2f96a8f1a7"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e40cf86aadc29ecd1cb6de67b0d9488705865deea4fc185c7ad56d7a6fc78703"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8c3cd8bb8e880a3346f5685601004d96e0a2221e73edcaeea57ea848618b4ac6"}, - {file = "Cython-0.29.34-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9032cd650b0cb1d2c2ef2623f5714c14d14c28d7647d589c3eeed0baf7428e"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bdb3285660e3068438791ace7dd7b1efd6b442a10b5c8d7a4f0c9d184d08c8ed"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a8ad755f9364e720f10a36734a1c7a5ced5c679446718b589259261438a517c9"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:7595d29eaee95633dd8060f50f0e54b27472d01587659557ebcfe39da3ea946b"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6ef7879668214d80ea3914c17e7d4e1ebf4242e0dd4dabe95ca5ccbe75589a5"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ccb223b5f0fd95d8d27561efc0c14502c0945f1a32274835831efa5d5baddfc1"}, - {file = "Cython-0.29.34-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:11b1b278b8edef215caaa5250ad65a10023bfa0b5a93c776552248fc6f60098d"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5718319a01489688fdd22ddebb8e2fcbbd60be5f30de4336ea7063c3ae29fbe5"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:cfb2302ef617d647ee590a4c0a00ba3c2da05f301dcefe7721125565d2e51351"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:67b850cf46b861bc27226d31e1d87c0e69869a02f8d3cc5d5bef549764029879"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0963266dad685812c1dbb758fcd4de78290e3adc7db271c8664dcde27380b13e"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7879992487d9060a61393eeefe00d299210256928dce44d887b6be313d342bac"}, - {file = "Cython-0.29.34-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:44733366f1604b0c327613b6918469284878d2f5084297d10d26072fc6948d51"}, - {file = "Cython-0.29.34-py2.py3-none-any.whl", hash = "sha256:be4f6b7be75a201c290c8611c0978549c60353890204573078e865423dbe3c83"}, - {file = "Cython-0.29.34.tar.gz", hash = "sha256:1909688f5d7b521a60c396d20bba9e47a1b2d2784bfb085401e1e1e7d29a29a8"}, + {file = "Cython-0.29.35-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fb8c11cd3e2d5ab7c2da78c5698e527ecbe469437326811562a3fbf4c5780ae4"}, + {file = "Cython-0.29.35-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9e54b4bee55fec952333126147b89c195ebe1d60e8e492ec778916ca5ca03151"}, + {file = "Cython-0.29.35-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba534e07543b44fb5ae37e56e61072ed1021b2d6ed643dbb92afa8239a04aa83"}, + {file = "Cython-0.29.35-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c1d7a9ff809fa9b4a9fe04df86c9f7f574ca31c2ad896462a97ea89523db286a"}, + {file = "Cython-0.29.35-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:247d585d8e49f002e522f3420751a4b3da0cf8532ef64d382e0bc9b4c840642c"}, + {file = "Cython-0.29.35-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ef2fc6f81aa8fb512535b01199fbe0d0ecafb8a29f261055e4b3f103c7bd6c75"}, + {file = "Cython-0.29.35-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:be7e1f98a359408186025f84d28d243e4527acb976f06b8ae8441dc5db204280"}, + {file = "Cython-0.29.35-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e1e5d62f15ea4fa4a8bc76e4fcc2ea313a8afe70488b7b870716bcfb12b8246"}, + {file = "Cython-0.29.35-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:75541567a2de1f893d247a7f9aa300dff5662fb33822a5fb75bc9621369b8ef0"}, + {file = "Cython-0.29.35-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:99477c1d4a105a562c05d43cc01905b6711f0a6a558d90f20c7aee0fb23d59d5"}, + {file = "Cython-0.29.35-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:c44bb47b314abc743705c7d038d351ffc3a34b95ab59b04b8cb27cf781b44ae8"}, + {file = "Cython-0.29.35-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:94859c3fd90767995b33d803edecad21e73749823db468d34f21e80451a11a99"}, + {file = "Cython-0.29.35-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a47974f3ebccf25702ffdd569904f7807ea1ef0830987c133877fabefdc4bab"}, + {file = "Cython-0.29.35-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:520c50d1875627c111900d7184fd658e32967a3ef807dc2fbc252e384839cbcf"}, + {file = "Cython-0.29.35-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:516abc754f15b84d6a8e71c8abd90e10346ea86001563480f0be1b349d09c6b8"}, + {file = "Cython-0.29.35-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:c38e2c1e94b596132454b29757536d5afa810011d8bcb86918cc6693d2302940"}, + {file = "Cython-0.29.35-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:511f3adfb2db4db2eb882f892525db18a3a21803830474d2fa8b7a1a0f406985"}, + {file = "Cython-0.29.35-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:445e092708c26b357c97b3c68ea3eab31846fc9c1360bb150225f340c20322ec"}, + {file = "Cython-0.29.35-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3da42ef5b71674e4864b6afbe1bcacba75807684e22b6337f753cf297ae4e2d2"}, + {file = "Cython-0.29.35-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:db695a19968a54b9ac53048c723234b4f0db7409def0a5c5517237202e7a9b92"}, + {file = "Cython-0.29.35-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:156ae92bedcd8261b5259724e2dc4d8eb12ac29159359e34c8358b65d24430ac"}, + {file = "Cython-0.29.35-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:ea1c166336188630cd3e48aea4bbe06ea1bab444624e31c78973fffcae1cf708"}, + {file = "Cython-0.29.35-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e7b1901b03c37a082ba405e2cf73a57091e835c7af35f664f9dd1d855a992ad5"}, + {file = "Cython-0.29.35-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:27f58d0dd53a8ffb614814c725d3ee3f136e53178611f7f769ff358f69e50502"}, + {file = "Cython-0.29.35-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c19e2ba027d2e9e2d88a08aa6007344be781ed99bc0924deb237ec52ca14c09"}, + {file = "Cython-0.29.35-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b63ea04db03190dc8b25d167598989be5c1fe9fc3121d7802c0aafc8a4ec383f"}, + {file = "Cython-0.29.35-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5cdd65f7d85e15f1662c75d85d837c20d5c68acdd1029bfd08fb44c4422d7d9b"}, + {file = "Cython-0.29.35-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:c17c876db737e1183d18d23db9cc31a9f565c113a32523c672af72f6497e382f"}, + {file = "Cython-0.29.35-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:2a2f2fb9b1c0a4a3890713127fba55a38d2cf1619b2570c43c92a93fee80111a"}, + {file = "Cython-0.29.35-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:a1ad51612ff6cfe05cd58f584f01373d64906bb0c860a067c6441359ff10464f"}, + {file = "Cython-0.29.35-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3cd717eee52072be8244bb07f0e4126f893214d2dfd1ba8b38b533e1ffec4f8a"}, + {file = "Cython-0.29.35-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:acab11c834cbe8fb7b71f9f7b4c4655afd82ffadb1be93d5354a67702fcee69d"}, + {file = "Cython-0.29.35-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8841158f274896702afe732571d37be22868a301275f952f6280547b25280538"}, + {file = "Cython-0.29.35-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:0a9334d137bd42fca34b6b413063e19c194ba760846f34804ea1fb477cbe9a88"}, + {file = "Cython-0.29.35-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c4cd7de707938b8385cd1f88e1446228fbfe09af7822fa13877a4374c4881198"}, + {file = "Cython-0.29.35-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:05b7ede0b0eb1c6b9bd748fa67c5ebf3c3560d04d7c8a1486183ddd099de5a00"}, + {file = "Cython-0.29.35-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:537bc1e0ed9bf7289c80f39a9a9359f5649068647631996313f77ba57afde40b"}, + {file = "Cython-0.29.35-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:402307ad6fd209816cf539680035ef79cce171288cb98f81f3f11ea8ef3afd99"}, + {file = "Cython-0.29.35-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:563a02ea675ed6321d6257df067c89f17b89a63487ef8b9ce0d598e88e7ff0bd"}, + {file = "Cython-0.29.35-py2.py3-none-any.whl", hash = "sha256:417703dc67c447089258ab4b3d217f9c03894574e4a0d6c50648a208bc8352bb"}, + {file = "Cython-0.29.35.tar.gz", hash = "sha256:6e381fa0bf08b3c26ec2f616b19ae852c06f5750f4290118bf986b6f85c8c527"}, ] [[package]] @@ -886,30 +881,30 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", [[package]] name = "dearpygui" -version = "1.9.0" +version = "1.9.1" description = "DearPyGui: A simple Python GUI Toolkit" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "dearpygui-1.9.0-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:0634cc8edbed199a1b76a6b8b92fe20c848649d14a13561c9043fb845f07cb13"}, - {file = "dearpygui-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:85bbccf1e55e75d78783ce85a00937f95a974b1fb2a6522dd8217b9926ab7bf8"}, - {file = "dearpygui-1.9.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:99ad6c07dc8243152d65bbfab4d1afa7e4157b76f70134e7c515990a5718bb2d"}, - {file = "dearpygui-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:5c1e89cda2c34a3bb75caa4b36c3318c307af9592ea341b231260d739cc838a7"}, - {file = "dearpygui-1.9.0-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:eae0e458d49570f00da52e2e08511a37af81e4cc72736ae92ae335ba9cf779c4"}, - {file = "dearpygui-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:253fbc867faceebee907ee66685079a69043fb14c4878e1df4916e9fc2e53fe3"}, - {file = "dearpygui-1.9.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:a9e99b87f60d19a59c2eac8bf910fb6418ff0eed0242a88f47839c17e1f064fb"}, - {file = "dearpygui-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:2a32cc4b688950b9295cb2c867824d5514a5cf9a87a19981c2cd386881deaf34"}, - {file = "dearpygui-1.9.0-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:9586f8905f645744c034538f851abeb53a7311048d9daf9734228d95f8d75ce5"}, - {file = "dearpygui-1.9.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:532a16aed78d7151b93d849d3587c28e1c6bc592c0831b25ea77f52637e54a41"}, - {file = "dearpygui-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:70e717976d58ff961608c2e926a3eb05feb8716d2e7320084935b824bc87635e"}, - {file = "dearpygui-1.9.0-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:6f51153f044fbbaa17645647c79725c3f3f5b11ea982e9cf00773ebed56d26c8"}, - {file = "dearpygui-1.9.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:94b62a219e6b73f0ac8625f30c1635d3c24823e83c4449ee50862ab860c0ba04"}, - {file = "dearpygui-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:1daad9f62cba3835bbd2cd87a5d5c3bf062b21aee575f34666e21071ef74e934"}, - {file = "dearpygui-1.9.0-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:3faa1a34f82a792afbe998b9bf7f21378c774b84a8945072ffdcaad9bf3867f8"}, - {file = "dearpygui-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc36060b330970346bfcc2a019640e827c62877bab3a119078f78b416c52b3fb"}, - {file = "dearpygui-1.9.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3fea90197da90fa44af26a82a462556079ae1171a4a2e3406c6da8892f01ad34"}, - {file = "dearpygui-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:73111349e1eceac8cd647fca68921ef3804e8517818a657d6ed71013799efdee"}, + {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"}, ] [[package]] @@ -966,21 +961,21 @@ files = [ [[package]] name = "deprecated" -version = "1.2.13" +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 = [ - {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, - {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, + {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, ] [package.dependencies] wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] [[package]] name = "dill" @@ -1025,7 +1020,7 @@ files = [ name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1068,14 +1063,14 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] [[package]] name = "fastjsonschema" -version = "2.16.3" +version = "2.17.1" description = "Fastest Python implementation of JSON schema" category = "main" optional = true python-versions = "*" files = [ - {file = "fastjsonschema-2.16.3-py3-none-any.whl", hash = "sha256:04fbecc94300436f628517b05741b7ea009506ce8f946d40996567c669318490"}, - {file = "fastjsonschema-2.16.3.tar.gz", hash = "sha256:4a30d6315a68c253cfa8f963b9697246315aa3db89f98b97235e345dedfb0b8e"}, + {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, + {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, ] [package.extras] @@ -1083,19 +1078,19 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.12.0" +version = "3.12.2" description = "A platform independent file lock." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "filelock-3.12.0-py3-none-any.whl", hash = "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9"}, - {file = "filelock-3.12.0.tar.gz", hash = "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"}, + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, ] [package.extras] -docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +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)"] [[package]] name = "flake8" @@ -1244,14 +1239,46 @@ flake8 = ">=3.7" [[package]] name = "fonttools" -version = "4.39.3" +version = "4.40.0" description = "Tools to manipulate font files" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.39.3-py3-none-any.whl", hash = "sha256:64c0c05c337f826183637570ac5ab49ee220eec66cf50248e8df527edfa95aeb"}, - {file = "fonttools-4.39.3.zip", hash = "sha256:9234b9f57b74e31b192c3fc32ef1a40750a8fbc1cd9837a7b7bfc4ca4a5c51d7"}, + {file = "fonttools-4.40.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b802dcbf9bcff74672f292b2466f6589ab8736ce4dcf36f48eb994c2847c4b30"}, + {file = "fonttools-4.40.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f6e3fa3da923063c286320e728ba2270e49c73386e3a711aa680f4b0747d692"}, + {file = "fonttools-4.40.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdf60f8a5c6bcce7d024a33f7e4bc7921f5b74e8ea13bccd204f2c8b86f3470"}, + {file = "fonttools-4.40.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91784e21a1a085fac07c6a407564f4a77feb471b5954c9ee55a4f9165151f6c1"}, + {file = "fonttools-4.40.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:05171f3c546f64d78569f10adc0de72561882352cac39ec7439af12304d8d8c0"}, + {file = "fonttools-4.40.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7449e5e306f3a930a8944c85d0cbc8429cba13503372a1a40f23124d6fb09b58"}, + {file = "fonttools-4.40.0-cp310-cp310-win32.whl", hash = "sha256:bae8c13abbc2511e9a855d2142c0ab01178dd66b1a665798f357da0d06253e0d"}, + {file = "fonttools-4.40.0-cp310-cp310-win_amd64.whl", hash = "sha256:425b74a608427499b0e45e433c34ddc350820b6f25b7c8761963a08145157a66"}, + {file = "fonttools-4.40.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:00ab569b2a3e591e00425023ade87e8fef90380c1dde61be7691cb524ca5f743"}, + {file = "fonttools-4.40.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:18ea64ac43e94c9e0c23d7a9475f1026be0e25b10dda8f236fc956188761df97"}, + {file = "fonttools-4.40.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:022c4a16b412293e7f1ce21b8bab7a6f9d12c4ffdf171fdc67122baddb973069"}, + {file = "fonttools-4.40.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530c5d35109f3e0cea2535742d6a3bc99c0786cf0cbd7bb2dc9212387f0d908c"}, + {file = "fonttools-4.40.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5e00334c66f4e83535384cb5339526d01d02d77f142c23b2f97bd6a4f585497a"}, + {file = "fonttools-4.40.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb52c10fda31159c22c7ed85074e05f8b97da8773ea461706c273e31bcbea836"}, + {file = "fonttools-4.40.0-cp311-cp311-win32.whl", hash = "sha256:6a8d71b9a5c884c72741868e845c0e563c5d83dcaf10bb0ceeec3b4b2eb14c67"}, + {file = "fonttools-4.40.0-cp311-cp311-win_amd64.whl", hash = "sha256:15abb3d055c1b2dff9ce376b6c3db10777cb74b37b52b78f61657634fd348a0d"}, + {file = "fonttools-4.40.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14037c31138fbd21847ad5e5441dfdde003e0a8f3feb5812a1a21fd1c255ffbd"}, + {file = "fonttools-4.40.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:94c915f6716589f78bc00fbc14c5b8de65cfd11ee335d32504f1ef234524cb24"}, + {file = "fonttools-4.40.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37467cee0f32cada2ec08bc16c9c31f9b53ea54b2f5604bf25a1246b5f50593a"}, + {file = "fonttools-4.40.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56d4d85f5374b45b08d2f928517d1e313ea71b4847240398decd0ab3ebbca885"}, + {file = "fonttools-4.40.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8c4305b171b61040b1ee75d18f9baafe58bd3b798d1670078efe2c92436bfb63"}, + {file = "fonttools-4.40.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a954b90d1473c85a22ecf305761d9fd89da93bbd31dae86e7dea436ad2cb5dc9"}, + {file = "fonttools-4.40.0-cp38-cp38-win32.whl", hash = "sha256:1bc4c5b147be8dbc5df9cc8ac5e93ee914ad030fe2a201cc8f02f499db71011d"}, + {file = "fonttools-4.40.0-cp38-cp38-win_amd64.whl", hash = "sha256:8a917828dbfdb1cbe50cf40eeae6fbf9c41aef9e535649ed8f4982b2ef65c091"}, + {file = "fonttools-4.40.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:882983279bf39afe4e945109772c2ffad2be2c90983d6559af8b75c19845a80a"}, + {file = "fonttools-4.40.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c55f1b4109dbc3aeb496677b3e636d55ef46dc078c2a5e3f3db4e90f1c6d2907"}, + {file = "fonttools-4.40.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec468c022d09f1817c691cf884feb1030ef6f1e93e3ea6831b0d8144c06480d1"}, + {file = "fonttools-4.40.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d5adf4ba114f028fc3f5317a221fd8b0f4ef7a2e5524a2b1e0fd891b093791a"}, + {file = "fonttools-4.40.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa83b3f151bc63970f39b2b42a06097c5a22fd7ed9f7ba008e618de4503d3895"}, + {file = "fonttools-4.40.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97d95b8301b62bdece1af943b88bcb3680fd385f88346a4a899ee145913b414a"}, + {file = "fonttools-4.40.0-cp39-cp39-win32.whl", hash = "sha256:1a003608400dd1cca3e089e8c94973c6b51a4fb1ef00ff6d7641617b9242e637"}, + {file = "fonttools-4.40.0-cp39-cp39-win_amd64.whl", hash = "sha256:7961575221e3da0841c75da53833272c520000d76f7f71274dbf43370f8a1065"}, + {file = "fonttools-4.40.0-py3-none-any.whl", hash = "sha256:200729d12461e2038700d31f0d49ad5a7b55855dec7525074979a06b46f88505"}, + {file = "fonttools-4.40.0.tar.gz", hash = "sha256:337b6e83d7ee73c40ea62407f2ce03b07c3459e213b6f332b94a69923b9e1cb9"}, ] [package.extras] @@ -1480,14 +1507,14 @@ files = [ [[package]] name = "ipykernel" -version = "6.22.0" +version = "6.23.2" description = "IPython Kernel for Jupyter" category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "ipykernel-6.22.0-py3-none-any.whl", hash = "sha256:1ae6047c1277508933078163721bbb479c3e7292778a04b4bacf0874550977d6"}, - {file = "ipykernel-6.22.0.tar.gz", hash = "sha256:302558b81f1bc22dc259fb2a0c5c7cf2f4c0bdb21b50484348f7bafe7fb71421"}, + {file = "ipykernel-6.23.2-py3-none-any.whl", hash = "sha256:7ccb6e2d32fd958c21453db494c914f3474908a2fdefd99ab548a5375b548d1f"}, + {file = "ipykernel-6.23.2.tar.gz", hash = "sha256:fcfb67c5b504aa1bfcda1c5b3716636239e0f7b9290958f1c558c79b4c0e7ed5"}, ] [package.dependencies] @@ -1652,14 +1679,14 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.9.11" +version = "0.9.14" description = "A Python implementation of the JSON5 data format." category = "main" optional = true python-versions = "*" files = [ - {file = "json5-0.9.11-py2.py3-none-any.whl", hash = "sha256:1aa54b80b5e507dfe31d12b7743a642e2ffa6f70bf73b8e3d7d1d5fba83d99bd"}, - {file = "json5-0.9.11.tar.gz", hash = "sha256:4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b"}, + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, ] [package.extras] @@ -1779,14 +1806,14 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= [[package]] name = "jupyter-server" -version = "2.5.0" +version = "2.6.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.5.0-py3-none-any.whl", hash = "sha256:e6bc1e9e96d7c55b9ce9699ff6cb9a910581fe7349e27c40389acb67632e24c0"}, - {file = "jupyter_server-2.5.0.tar.gz", hash = "sha256:9fde612791f716fd34d610cd939704a9639643744751ba66e7ee8fdc9cead07e"}, + {file = "jupyter_server-2.6.0-py3-none-any.whl", hash = "sha256:19525a1515b5999618a91b3e99ec9f6869aa8c5ba73e0b6279fcda918b54ba36"}, + {file = "jupyter_server-2.6.0.tar.gz", hash = "sha256:ae4af349f030ed08dd78cb7ac1a03a92d886000380c9ea6283f3c542a81f4b06"}, ] [package.dependencies] @@ -1795,10 +1822,11 @@ argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" -jupyter-events = ">=0.4.0" +jupyter-events = ">=0.6.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" nbformat = ">=5.3.0" +overrides = "*" packaging = "*" prometheus-client = "*" pywinpty = {version = "*", markers = "os_name == \"nt\""} @@ -1810,7 +1838,7 @@ traitlets = ">=5.6.0" 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", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] [[package]] @@ -1895,14 +1923,14 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we [[package]] name = "jupyterlab" -version = "3.6.3" +version = "3.6.4" description = "JupyterLab computational environment" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.6.3-py3-none-any.whl", hash = "sha256:6aba0caa771697d02fbf409f9767b2fdb4ee32ce935940e3b9a0d5d48d994d0f"}, - {file = "jupyterlab-3.6.3.tar.gz", hash = "sha256:373e9cfb8a72edd294be14f16662563a220cecf0fb26de7aab1af9a29b689b82"}, + {file = "jupyterlab-3.6.4-py3-none-any.whl", hash = "sha256:8a4e495a096ae2315af2b07acaac9d38917b6927ebd891834ddf83b28f53e881"}, + {file = "jupyterlab-3.6.4.tar.gz", hash = "sha256:862fb4a06c759a9b0a12de6bf434a8681a42e52fff0593c120e3fbad6847889f"}, ] [package.dependencies] @@ -1911,7 +1939,7 @@ jinja2 = ">=2.1" jupyter-core = "*" jupyter-server = ">=1.16.0,<3" jupyter-server-ydoc = ">=0.8.0,<0.9.0" -jupyter-ydoc = ">=0.2.3,<0.3.0" +jupyter-ydoc = ">=0.2.4,<0.3.0" jupyterlab-server = ">=2.19,<3.0" nbclassic = "*" notebook = "<7" @@ -1936,14 +1964,14 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.22.1" +version = "2.23.0" 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.22.1-py3-none-any.whl", hash = "sha256:1c8eb55c7cd70a50a51fef42a7b4e26ef2f7fc48728f0290604bd89b1dd156e6"}, - {file = "jupyterlab_server-2.22.1.tar.gz", hash = "sha256:dfaaf898af84b9d01ae9583b813f378b96ee90c3a66f24c5186ea5d1bbdb2089"}, + {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, + {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, ] [package.dependencies] @@ -1957,7 +1985,7 @@ packaging = ">=21.3" requests = ">=2.28" [package.extras] -docs = ["autodoc-traits", "docutils (<0.20)", "jinja2 (<3.2.0)", "mistune (<3)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] +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.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] @@ -2213,62 +2241,62 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {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-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"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] [[package]] @@ -2470,14 +2498,14 @@ glcontext = ">=2.3.6,<3" [[package]] name = "moderngl-window" -version = "2.4.3" +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 = [ - {file = "moderngl-window-2.4.3.tar.gz", hash = "sha256:6e80cbba4102ab8e33902603d9dda0bb52ac9e34d1f565edf61182003373c327"}, - {file = "moderngl_window-2.4.3-py3-none-any.whl", hash = "sha256:a52db1880522c48dcf696172defa97001c3839d6159613b552581d5baba45601"}, + {file = "moderngl-window-2.4.4.tar.gz", hash = "sha256:66a9c5412b5eb0a5ca7cda351e4484ce02a167cf87eb4dc59bb82439c58130b5"}, + {file = "moderngl_window-2.4.4-py3-none-any.whl", hash = "sha256:fddbca24afc3c7faaf98af7d1d45aa6b812a9a12e66401cb26284d645c4bb026"}, ] [package.dependencies] @@ -2629,42 +2657,42 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p [[package]] name = "nbclient" -version = "0.7.4" +version = "0.8.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "main" optional = true -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, - {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, + {file = "nbclient-0.8.0-py3-none-any.whl", hash = "sha256:25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548"}, + {file = "nbclient-0.8.0.tar.gz", hash = "sha256:f9b179cd4b2d7bca965f900a2ebf0db4a12ebff2f36a711cb66861e4ae158e55"}, ] [package.dependencies] jupyter-client = ">=6.1.12" jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" nbformat = ">=5.1" -traitlets = ">=5.3" +traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.3.1" +version = "7.5.0" description = "Converting Jupyter Notebooks" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "nbconvert-7.3.1-py3-none-any.whl", hash = "sha256:d2e95904666f1ff77d36105b9de4e0801726f93b862d5b28f69e93d99ad3b19c"}, - {file = "nbconvert-7.3.1.tar.gz", hash = "sha256:78685362b11d2e8058e70196fe83b09abed8df22d3e599cf271f4d39fdc48b9e"}, + {file = "nbconvert-7.5.0-py3-none-any.whl", hash = "sha256:852e44392d5650ef217a5ce3a8050747051d4e6ba75f0574cb5435049ee6c0d9"}, + {file = "nbconvert-7.5.0.tar.gz", hash = "sha256:f78fd22fd2410b960d5d9bcecf3e1d6c7bdc5fec2c865964c84aa4e74e6e88da"}, ] [package.dependencies] beautifulsoup4 = "*" -bleach = "*" +bleach = "!=5.0.0" defusedxml = "*" importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" @@ -2673,12 +2701,12 @@ jupyterlab-pygments = "*" markupsafe = ">=2.0" mistune = ">=2.0.3,<3" nbclient = ">=0.5.0" -nbformat = ">=5.1" +nbformat = ">=5.7" packaging = "*" pandocfilters = ">=1.4.1" pygments = ">=2.4.1" tinycss2 = "*" -traitlets = ">=5.0" +traitlets = ">=5.1" [package.extras] all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] @@ -2691,14 +2719,14 @@ webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.8.0" +version = "5.9.0" description = "The Jupyter Notebook format" category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "nbformat-5.8.0-py3-none-any.whl", hash = "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162"}, - {file = "nbformat-5.8.0.tar.gz", hash = "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f"}, + {file = "nbformat-5.9.0-py3-none-any.whl", hash = "sha256:8c8fa16d6d05062c26177754bfbfac22de644888e2ef69d27ad2a334cf2576e5"}, + {file = "nbformat-5.9.0.tar.gz", hash = "sha256:e98ebb6120c3efbafdee2a40af2a140cadee90bb06dd69a2a63d9551fcc7f976"}, ] [package.dependencies] @@ -2744,14 +2772,14 @@ test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "nodeenv" -version = "1.7.0" +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 = [ - {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, - {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, ] [package.dependencies] @@ -2848,6 +2876,18 @@ files = [ {file = "numpy-1.24.3.tar.gz", hash = "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155"}, ] +[[package]] +name = "overrides" +version = "7.3.1" +description = "A decorator to automatically detect mismatch when overriding a method." +category = "main" +optional = true +python-versions = ">=3.6" +files = [ + {file = "overrides-7.3.1-py3-none-any.whl", hash = "sha256:6187d8710a935d09b0bcef8238301d6ee2569d2ac1ae0ec39a8c7924e27f58ca"}, + {file = "overrides-7.3.1.tar.gz", hash = "sha256:8b97c6c1e1681b78cbc9424b138d880f0803c2254c5ebaabdde57bb6c62093f2"}, +] + [[package]] name = "packaging" version = "23.1" @@ -3021,19 +3061,19 @@ files = [ [[package]] name = "platformdirs" -version = "3.5.0" +version = "3.5.3" 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 = [ - {file = "platformdirs-3.5.0-py3-none-any.whl", hash = "sha256:47692bc24c1958e8b0f13dd727307cff1db103fca36399f457da8e05f222fdc4"}, - {file = "platformdirs-3.5.0.tar.gz", hash = "sha256:7954a68d0ba23558d753f73437c55f89027cf8f5108c19844d4b82e5af396335"}, + {file = "platformdirs-3.5.3-py3-none-any.whl", hash = "sha256:0ade98a4895e87dc51d47151f7d2ec290365a585151d97b4d8d6312ed6132fed"}, + {file = "platformdirs-3.5.3.tar.gz", hash = "sha256:e48fabd87db8f3a7df7150a4a5ea22c546ee8bc39bc2473244730d4b56d2cc4e"}, ] [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -3072,14 +3112,14 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.16.0" +version = "0.17.0" description = "Python client for the Prometheus monitoring system." category = "main" optional = true python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.16.0-py3-none-any.whl", hash = "sha256:0836af6eb2c8f4fed712b2f279f6c0a8bbab29f9f4aa15276b91c7cb0d1616ab"}, - {file = "prometheus_client-0.16.0.tar.gz", hash = "sha256:a03e35b359f14dd1630898543e2120addfdeacd1a6069c1367ae90fd93ad3f48"}, + {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, + {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, ] [package.extras] @@ -3281,14 +3321,14 @@ files = [ [[package]] name = "pygithub" -version = "1.58.1" +version = "1.58.2" description = "Use the full Github API v3" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "PyGithub-1.58.1-py3-none-any.whl", hash = "sha256:4e7fe9c3ec30d5fde5b4fbb97f18821c9dbf372bf6df337fe66f6689a65e0a83"}, - {file = "PyGithub-1.58.1.tar.gz", hash = "sha256:7d528b4ad92bc13122129fafd444ce3d04c47d2d801f6446b6e6ee2d410235b3"}, + {file = "PyGithub-1.58.2-py3-none-any.whl", hash = "sha256:f435884af617c6debaa76cbc355372d1027445a56fbc39972a3b9ed4968badc8"}, + {file = "PyGithub-1.58.2.tar.gz", hash = "sha256:1e6b1b7afe31f75151fb81f7ab6b984a7188a852bdb123dbb9ae90023c3ce60f"}, ] [package.dependencies] @@ -3299,14 +3339,14 @@ requests = ">=2.14.0" [[package]] name = "pyglet" -version = "2.0.6" +version = "2.0.7" description = "Cross-platform windowing and multimedia library" category = "main" optional = false python-versions = "*" files = [ - {file = "pyglet-2.0.6-py3-none-any.whl", hash = "sha256:c4df16436c6656a5120e49162012314c29696dc0ede9b89b36072c57a2a9ff93"}, - {file = "pyglet-2.0.6.zip", hash = "sha256:6f93f2bde6df818087e1b5d91033086cb2fb689c1220b632c46d1fc4a6685a00"}, + {file = "pyglet-2.0.7-py3-none-any.whl", hash = "sha256:a442acca40613b793c70a68c86be35fafff87691f7ac967daf0283329d3d5b36"}, + {file = "pyglet-2.0.7.zip", hash = "sha256:9282f9497c1c0cdcb2cc39d8c05090cf686dedb9ebbef4a8de49af22a0ae0e8f"}, ] [[package]] @@ -3326,14 +3366,14 @@ plugins = ["importlib-metadata"] [[package]] name = "pyjwt" -version = "2.6.0" +version = "2.7.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"}, + {file = "PyJWT-2.7.0-py3-none-any.whl", hash = "sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1"}, + {file = "PyJWT-2.7.0.tar.gz", hash = "sha256:bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074"}, ] [package.dependencies] @@ -3347,14 +3387,14 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "2.17.3" +version = "2.17.4" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.17.3-py3-none-any.whl", hash = "sha256:a6cbb4c6e96eab4a3c7de7c6383c512478f58f88d95764507d84c899d656a89a"}, - {file = "pylint-2.17.3.tar.gz", hash = "sha256:761907349e699f8afdcd56c4fe02f3021ab5b3a0fc26d19a9bfdc66c7d0d5cd5"}, + {file = "pylint-2.17.4-py3-none-any.whl", hash = "sha256:7a1145fb08c251bdb5cca11739722ce64a63db479283d10ce718b2460e54123c"}, + {file = "pylint-2.17.4.tar.gz", hash = "sha256:5dcf1d9e19f41f38e4e85d10f511e5b9c35e1aa74251bf95cdd8cb23584e2db1"}, ] [package.dependencies] @@ -3404,40 +3444,42 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] [[package]] name = "pyobjc-core" -version = "9.1.1" +version = "9.2" description = "Python<->ObjC Interoperability Module" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pyobjc-core-9.1.1.tar.gz", hash = "sha256:4b6cb9053b5fcd3c0e76b8c8105a8110786b20f3403c5643a688c5ec51c55c6b"}, - {file = "pyobjc_core-9.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4bd07049fd9fe5b40e4b7c468af9cf942508387faf383a5acb043d20627bad2c"}, - {file = "pyobjc_core-9.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1a8307527621729ff2ab67860e7ed84f76ad0da881b248c2ef31e0da0088e4ba"}, - {file = "pyobjc_core-9.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:083004d28b92ccb483a41195c600728854843b0486566aba2d6e63eef51f80e6"}, - {file = "pyobjc_core-9.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d61e9517d451bc062a7fae8b3648f4deba4fa54a24926fa1cf581b90ef4ced5a"}, - {file = "pyobjc_core-9.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1626909916603a3b04c07c721cf1af0e0b892cec85bb3db98d05ba024f1786fc"}, - {file = "pyobjc_core-9.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2dde96462b52e952515d142e2afbb6913624a02c13582047e06211e6c3993728"}, + {file = "pyobjc-core-9.2.tar.gz", hash = "sha256:d734b9291fec91ff4e3ae38b9c6839debf02b79c07314476e87da8e90b2c68c3"}, + {file = "pyobjc_core-9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fa674a39949f5cde8e5c7bbcd24496446bfc67592b028aedbec7f81dc5fc4daa"}, + {file = "pyobjc_core-9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bbc8de304ee322a1ee530b4d2daca135a49b4a49aa3cedc6b2c26c43885f4842"}, + {file = "pyobjc_core-9.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0fa950f092673883b8bd28bc18397415cabb457bf410920762109b411789ade9"}, + {file = "pyobjc_core-9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:586e4cae966282eaa61b21cae66ccdcee9d69c036979def26eebdc08ddebe20f"}, + {file = "pyobjc_core-9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41189c2c680931c0395a55691763c481fc681f454f21bb4f1644f98c24a45954"}, + {file = "pyobjc_core-9.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:2d23ee539f2ba5e9f5653d75a13f575c7e36586fc0086792739e69e4c2617eda"}, + {file = "pyobjc_core-9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b9809cf96678797acb72a758f34932fe8e2602d5ab7abec15c5ac68ddb481720"}, ] [[package]] name = "pyobjc-framework-cocoa" -version = "9.1.1" +version = "9.2" description = "Wrappers for the Cocoa frameworks on macOS" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pyobjc-framework-Cocoa-9.1.1.tar.gz", hash = "sha256:345c32b6d1f3db45f635e400f2d0d6c0f0f7349d45ec823f76fc1df43d13caeb"}, - {file = "pyobjc_framework_Cocoa-9.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9176a4276f3b4b4758e9b9ca10698be5341ceffaeaa4fa055133417179e6bc37"}, - {file = "pyobjc_framework_Cocoa-9.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5e1e96fb3461f46ff951413515f2029e21be268b0e033db6abee7b64ec8e93d3"}, - {file = "pyobjc_framework_Cocoa-9.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:083b195c496d30c6b9dd86126a6093c4b95e0138e9b052b13e54103fcc0b4872"}, - {file = "pyobjc_framework_Cocoa-9.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a1b3333b1aa045608848bd68bbab4c31171f36aeeaa2fabeb4527c6f6f1e33cd"}, - {file = "pyobjc_framework_Cocoa-9.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:54c017354671f0d955432986c42218e452ca69906a101c8e7acde8510432303a"}, - {file = "pyobjc_framework_Cocoa-9.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:10c0075688ce95b92caf59e368585fffdcc98c919bc345067af070222f5d01d2"}, + {file = "pyobjc-framework-Cocoa-9.2.tar.gz", hash = "sha256:efd78080872d8c8de6c2b97e0e4eac99d6203a5d1637aa135d071d464eb2db53"}, + {file = "pyobjc_framework_Cocoa-9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9e02d8a7cc4eb7685377c50ba4f17345701acf4c05b1e7480d421bff9e2f62a4"}, + {file = "pyobjc_framework_Cocoa-9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3b1e6287b3149e4c6679cdbccd8e9ef6557a4e492a892e80a77df143f40026d2"}, + {file = "pyobjc_framework_Cocoa-9.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:312977ce2e3989073c6b324c69ba24283de206fe7acd6dbbbaf3e29238a22537"}, + {file = "pyobjc_framework_Cocoa-9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aae7841cf40c26dd915f4dd828f91c6616e6b7998630b72e704750c09e00f334"}, + {file = "pyobjc_framework_Cocoa-9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:739a421e14382a46cbeb9a883f192dceff368ad28ec34d895c48c0ad34cf2c1d"}, + {file = "pyobjc_framework_Cocoa-9.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:32d9ac1033fac1b821ddee8c68f972a7074ad8c50bec0bea9a719034c1c2fb94"}, + {file = "pyobjc_framework_Cocoa-9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b236bb965e41aeb2e215d4e98a5a230d4b63252c6d26e00924ea2e69540a59d6"}, ] [package.dependencies] -pyobjc-core = ">=9.1.1" +pyobjc-core = ">=9.2" [[package]] name = "pyparsing" @@ -3509,14 +3551,14 @@ files = [ [[package]] name = "pytest" -version = "7.3.1" +version = "7.3.2" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"}, - {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"}, + {file = "pytest-7.3.2-py3-none-any.whl", hash = "sha256:cdcbd012c9312258922f8cd3f1b62a6580fdced17db6014896053d47cddf9295"}, + {file = "pytest-7.3.2.tar.gz", hash = "sha256:ee990a3cc55ba808b80795a79944756f315c67c12b56abd3ac993a7b8c17030b"}, ] [package.dependencies] @@ -3528,7 +3570,7 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" @@ -3718,89 +3760,89 @@ files = [ [[package]] name = "pyzmq" -version = "25.0.2" +version = "25.1.0" description = "Python bindings for 0MQ" category = "main" optional = true python-versions = ">=3.6" files = [ - {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ac178e666c097c8d3deb5097b58cd1316092fc43e8ef5b5fdb259b51da7e7315"}, - {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:659e62e1cbb063151c52f5b01a38e1df6b54feccfa3e2509d44c35ca6d7962ee"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8280ada89010735a12b968ec3ea9a468ac2e04fddcc1cede59cb7f5178783b9c"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b5eeb5278a8a636bb0abdd9ff5076bcbb836cd2302565df53ff1fa7d106d54"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a2e5fe42dfe6b73ca120b97ac9f34bfa8414feb15e00e37415dbd51cf227ef6"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:827bf60e749e78acb408a6c5af6688efbc9993e44ecc792b036ec2f4b4acf485"}, - {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7b504ae43d37e282301da586529e2ded8b36d4ee2cd5e6db4386724ddeaa6bbc"}, - {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb1f69a0a2a2b1aae8412979dd6293cc6bcddd4439bf07e4758d864ddb112354"}, - {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b9c9cc965cdf28381e36da525dcb89fc1571d9c54800fdcd73e3f73a2fc29bd"}, - {file = "pyzmq-25.0.2-cp310-cp310-win32.whl", hash = "sha256:24abbfdbb75ac5039205e72d6c75f10fc39d925f2df8ff21ebc74179488ebfca"}, - {file = "pyzmq-25.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6a821a506822fac55d2df2085a52530f68ab15ceed12d63539adc32bd4410f6e"}, - {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9af0bb0277e92f41af35e991c242c9c71920169d6aa53ade7e444f338f4c8128"}, - {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:54a96cf77684a3a537b76acfa7237b1e79a8f8d14e7f00e0171a94b346c5293e"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88649b19ede1cab03b96b66c364cbbf17c953615cdbc844f7f6e5f14c5e5261c"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:715cff7644a80a7795953c11b067a75f16eb9fc695a5a53316891ebee7f3c9d5"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:312b3f0f066b4f1d17383aae509bacf833ccaf591184a1f3c7a1661c085063ae"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d488c5c8630f7e782e800869f82744c3aca4aca62c63232e5d8c490d3d66956a"}, - {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:38d9f78d69bcdeec0c11e0feb3bc70f36f9b8c44fc06e5d06d91dc0a21b453c7"}, - {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3059a6a534c910e1d5d068df42f60d434f79e6cc6285aa469b384fa921f78cf8"}, - {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6526d097b75192f228c09d48420854d53dfbc7abbb41b0e26f363ccb26fbc177"}, - {file = "pyzmq-25.0.2-cp311-cp311-win32.whl", hash = "sha256:5c5fbb229e40a89a2fe73d0c1181916f31e30f253cb2d6d91bea7927c2e18413"}, - {file = "pyzmq-25.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:ed15e3a2c3c2398e6ae5ce86d6a31b452dfd6ad4cd5d312596b30929c4b6e182"}, - {file = "pyzmq-25.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:032f5c8483c85bf9c9ca0593a11c7c749d734ce68d435e38c3f72e759b98b3c9"}, - {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:374b55516393bfd4d7a7daa6c3b36d6dd6a31ff9d2adad0838cd6a203125e714"}, - {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:08bfcc21b5997a9be4fefa405341320d8e7f19b4d684fb9c0580255c5bd6d695"}, - {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1a843d26a8da1b752c74bc019c7b20e6791ee813cd6877449e6a1415589d22ff"}, - {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b48616a09d7df9dbae2f45a0256eee7b794b903ddc6d8657a9948669b345f220"}, - {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d4427b4a136e3b7f85516c76dd2e0756c22eec4026afb76ca1397152b0ca8145"}, - {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:26b0358e8933990502f4513c991c9935b6c06af01787a36d133b7c39b1df37fa"}, - {file = "pyzmq-25.0.2-cp36-cp36m-win32.whl", hash = "sha256:c8fedc3ccd62c6b77dfe6f43802057a803a411ee96f14e946f4a76ec4ed0e117"}, - {file = "pyzmq-25.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2da6813b7995b6b1d1307329c73d3e3be2fd2d78e19acfc4eff2e27262732388"}, - {file = "pyzmq-25.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a35960c8b2f63e4ef67fd6731851030df68e4b617a6715dd11b4b10312d19fef"}, - {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2a0b880ab40aca5a878933376cb6c1ec483fba72f7f34e015c0f675c90b20"}, - {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85762712b74c7bd18e340c3639d1bf2f23735a998d63f46bb6584d904b5e401d"}, - {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:64812f29d6eee565e129ca14b0c785744bfff679a4727137484101b34602d1a7"}, - {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:510d8e55b3a7cd13f8d3e9121edf0a8730b87d925d25298bace29a7e7bc82810"}, - {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b164cc3c8acb3d102e311f2eb6f3c305865ecb377e56adc015cb51f721f1dda6"}, - {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:28fdb9224a258134784a9cf009b59265a9dde79582fb750d4e88a6bcbc6fa3dc"}, - {file = "pyzmq-25.0.2-cp37-cp37m-win32.whl", hash = "sha256:dd771a440effa1c36d3523bc6ba4e54ff5d2e54b4adcc1e060d8f3ca3721d228"}, - {file = "pyzmq-25.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:9bdc40efb679b9dcc39c06d25629e55581e4c4f7870a5e88db4f1c51ce25e20d"}, - {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:1f82906a2d8e4ee310f30487b165e7cc8ed09c009e4502da67178b03083c4ce0"}, - {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:21ec0bf4831988af43c8d66ba3ccd81af2c5e793e1bf6790eb2d50e27b3c570a"}, - {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbce982a17c88d2312ec2cf7673985d444f1beaac6e8189424e0a0e0448dbb3"}, - {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9e1d2f2d86fc75ed7f8845a992c5f6f1ab5db99747fb0d78b5e4046d041164d2"}, - {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e92ff20ad5d13266bc999a29ed29a3b5b101c21fdf4b2cf420c09db9fb690e"}, - {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edbbf06cc2719889470a8d2bf5072bb00f423e12de0eb9ffec946c2c9748e149"}, - {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:77942243ff4d14d90c11b2afd8ee6c039b45a0be4e53fb6fa7f5e4fd0b59da39"}, - {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ab046e9cb902d1f62c9cc0eca055b1d11108bdc271caf7c2171487298f229b56"}, - {file = "pyzmq-25.0.2-cp38-cp38-win32.whl", hash = "sha256:ad761cfbe477236802a7ab2c080d268c95e784fe30cafa7e055aacd1ca877eb0"}, - {file = "pyzmq-25.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8560756318ec7c4c49d2c341012167e704b5a46d9034905853c3d1ade4f55bee"}, - {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:ab2c056ac503f25a63f6c8c6771373e2a711b98b304614151dfb552d3d6c81f6"}, - {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cca8524b61c0eaaa3505382dc9b9a3bc8165f1d6c010fdd1452c224225a26689"}, - {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb9f7eae02d3ac42fbedad30006b7407c984a0eb4189a1322241a20944d61e5"}, - {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5eaeae038c68748082137d6896d5c4db7927e9349237ded08ee1bbd94f7361c9"}, - {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a31992a8f8d51663ebf79df0df6a04ffb905063083d682d4380ab8d2c67257c"}, - {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6a979e59d2184a0c8f2ede4b0810cbdd86b64d99d9cc8a023929e40dce7c86cc"}, - {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1f124cb73f1aa6654d31b183810febc8505fd0c597afa127c4f40076be4574e0"}, - {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:65c19a63b4a83ae45d62178b70223adeee5f12f3032726b897431b6553aa25af"}, - {file = "pyzmq-25.0.2-cp39-cp39-win32.whl", hash = "sha256:83d822e8687621bed87404afc1c03d83fa2ce39733d54c2fd52d8829edb8a7ff"}, - {file = "pyzmq-25.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:24683285cc6b7bf18ad37d75b9db0e0fefe58404e7001f1d82bf9e721806daa7"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a4b4261eb8f9ed71f63b9eb0198dd7c934aa3b3972dac586d0ef502ba9ab08b"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:62ec8d979f56c0053a92b2b6a10ff54b9ec8a4f187db2b6ec31ee3dd6d3ca6e2"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:affec1470351178e892121b3414c8ef7803269f207bf9bef85f9a6dd11cde264"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffc71111433bd6ec8607a37b9211f4ef42e3d3b271c6d76c813669834764b248"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6fadc60970714d86eff27821f8fb01f8328dd36bebd496b0564a500fe4a9e354"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:269968f2a76c0513490aeb3ba0dc3c77b7c7a11daa894f9d1da88d4a0db09835"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f7c8b8368e84381ae7c57f1f5283b029c888504aaf4949c32e6e6fb256ec9bf0"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25e6873a70ad5aa31e4a7c41e5e8c709296edef4a92313e1cd5fc87bbd1874e2"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b733076ff46e7db5504c5e7284f04a9852c63214c74688bdb6135808531755a3"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a6f6ae12478fdc26a6d5fdb21f806b08fa5403cd02fd312e4cb5f72df078f96f"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:67da1c213fbd208906ab3470cfff1ee0048838365135a9bddc7b40b11e6d6c89"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531e36d9fcd66f18de27434a25b51d137eb546931033f392e85674c7a7cea853"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34a6fddd159ff38aa9497b2e342a559f142ab365576284bc8f77cb3ead1f79c5"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b491998ef886662c1f3d49ea2198055a9a536ddf7430b051b21054f2a5831800"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5d496815074e3e3d183fe2c7fcea2109ad67b74084c254481f87b64e04e9a471"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:56a94ab1d12af982b55ca96c6853db6ac85505e820d9458ac76364c1998972f4"}, - {file = "pyzmq-25.0.2.tar.gz", hash = "sha256:6b8c1bbb70e868dc88801aa532cae6bd4e3b5233784692b786f17ad2962e5149"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, + {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, + {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, + {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, + {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, + {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, + {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, + {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, + {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, + {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, + {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, + {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, ] [package.dependencies] @@ -3825,14 +3867,14 @@ sphinx = ">=1.3.1" [[package]] name = "requests" -version = "2.30.0" +version = "2.31.0" description = "Python HTTP for Humans." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "requests-2.30.0-py3-none-any.whl", hash = "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294"}, - {file = "requests-2.30.0.tar.gz", hash = "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] @@ -3888,18 +3930,18 @@ files = [ [[package]] name = "rich" -version = "13.3.5" +version = "13.4.2" 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.3.5-py3-none-any.whl", hash = "sha256:69cdf53799e63f38b95b9bf9c875f8c90e78dd62b2f00c13a911c7a3b9fa4704"}, - {file = "rich-13.3.5.tar.gz", hash = "sha256:2d11b9b8dd03868f09b4fffadc84a6a8cda574e40dc90821bd845720ebb8e89c"}, + {file = "rich-13.4.2-py3-none-any.whl", hash = "sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec"}, + {file = "rich-13.4.2.tar.gz", hash = "sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898"}, ] [package.dependencies] -markdown-it-py = ">=2.2.0,<3.0.0" +markdown-it-py = ">=2.2.0" pygments = ">=2.13.0,<3.0.0" typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} @@ -3980,19 +4022,19 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "67.7.2" +version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, - {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, + {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, + {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, ] [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 (<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 = ["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"] [[package]] @@ -4343,14 +4385,14 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "svgelements" -version = "1.9.3" +version = "1.9.5" description = "Svg Elements Parsing" category = "main" optional = false python-versions = "*" files = [ - {file = "svgelements-1.9.3-py2.py3-none-any.whl", hash = "sha256:43ef1a704c6daa444ae0670b46802db39afba6f5bdf260bdbafec838227ea82a"}, - {file = "svgelements-1.9.3.tar.gz", hash = "sha256:631220a228acc0c3e5f72e1f0e13c4b86786c93561dd326213ebed42c70f28ee"}, + {file = "svgelements-1.9.5-py2.py3-none-any.whl", hash = "sha256:32b583484a627eb19d66a4da923856336fa512698eac75540915446fd1ab28ff"}, + {file = "svgelements-1.9.5.tar.gz", hash = "sha256:e192648ab7e07a67a355ce19b7f1d8a1497d62feca6debe3ddbd92d8617ef3be"}, ] [[package]] @@ -4419,23 +4461,23 @@ files = [ [[package]] name = "tornado" -version = "6.3.1" +version = "6.3.2" 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.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:db181eb3df8738613ff0a26f49e1b394aade05034b01200a63e9662f347d4415"}, - {file = "tornado-6.3.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b4e7b956f9b5e6f9feb643ea04f07e7c6b49301e03e0023eedb01fa8cf52f579"}, - {file = "tornado-6.3.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9661aa8bc0e9d83d757cd95b6f6d1ece8ca9fd1ccdd34db2de381e25bf818233"}, - {file = "tornado-6.3.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81c17e0cc396908a5e25dc8e9c5e4936e6dfd544c9290be48bd054c79bcad51e"}, - {file = "tornado-6.3.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a27a1cfa9997923f80bdd962b3aab048ac486ad8cfb2f237964f8ab7f7eb824b"}, - {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d7117f3c7ba5d05813b17a1f04efc8e108a1b811ccfddd9134cc68553c414864"}, - {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:ffdce65a281fd708da5a9def3bfb8f364766847fa7ed806821a69094c9629e8a"}, - {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:90f569a35a8ec19bde53aa596952071f445da678ec8596af763b9b9ce07605e6"}, - {file = "tornado-6.3.1-cp38-abi3-win32.whl", hash = "sha256:3455133b9ff262fd0a75630af0a8ee13564f25fb4fd3d9ce239b8a7d3d027bf8"}, - {file = "tornado-6.3.1-cp38-abi3-win_amd64.whl", hash = "sha256:1285f0691143f7ab97150831455d4db17a267b59649f7bd9700282cba3d5e771"}, - {file = "tornado-6.3.1.tar.gz", hash = "sha256:5e2f49ad371595957c50e42dd7e5c14d64a6843a3cf27352b69c706d1b5918af"}, + {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"}, ] [[package]] @@ -4489,14 +4531,14 @@ files = [ [[package]] name = "types-docutils" -version = "0.19.1.9" +version = "0.20.0.1" description = "Typing stubs for docutils" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-docutils-0.19.1.9.tar.gz", hash = "sha256:1d029567e67c52992fd42aa968778bc10a5e445c8450fc751d672d6f50330a4a"}, - {file = "types_docutils-0.19.1.9-py3-none-any.whl", hash = "sha256:556fb7ee19248aa482caa142a830c940b776b0f8c7577a98abe0977574546a1d"}, + {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"}, ] [[package]] @@ -4525,14 +4567,14 @@ files = [ [[package]] name = "types-pygments" -version = "2.15.0.0" +version = "2.15.0.1" description = "Typing stubs for Pygments" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-Pygments-2.15.0.0.tar.gz", hash = "sha256:b5909267fe258dd00f3e65da8f098be30c0f7262805bef54e54eb69d75e2bc11"}, - {file = "types_Pygments-2.15.0.0-py3-none-any.whl", hash = "sha256:40b0cc6925cdbafbec46c5b2d994a1219e264e9d44ea6ab5c76cb8b87e8257e1"}, + {file = "types-Pygments-2.15.0.1.tar.gz", hash = "sha256:4fef924a4be98e4b0a3701f2822c33186cacd7dc317267853eaf451c3f361a97"}, + {file = "types_Pygments-2.15.0.1-py3-none-any.whl", hash = "sha256:3a356cef78d667f55d3a27f5f73aa82994187dc93fcd93d970ba7479ed3f8534"}, ] [package.dependencies] @@ -4541,18 +4583,18 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.29.0.0" +version = "2.31.0.1" description = "Typing stubs for requests" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-requests-2.29.0.0.tar.gz", hash = "sha256:c86f4a955d943d2457120dbe719df24ef0924e11177164d10a0373cf311d7b4d"}, - {file = "types_requests-2.29.0.0-py3-none-any.whl", hash = "sha256:4cf6e323e856c779fbe8815bb977a5bf5d6c5034713e4c17ff2a9a20610f5b27"}, + {file = "types-requests-2.31.0.1.tar.gz", hash = "sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac"}, + {file = "types_requests-2.31.0.1-py3-none-any.whl", hash = "sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3"}, ] [package.dependencies] -types-urllib3 = "<1.27" +types-urllib3 = "*" [[package]] name = "types-setuptools" @@ -4568,26 +4610,26 @@ files = [ [[package]] name = "types-urllib3" -version = "1.26.25.12" +version = "1.26.25.13" description = "Typing stubs for urllib3" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-urllib3-1.26.25.12.tar.gz", hash = "sha256:a1557355ce8d350a555d142589f3001903757d2d36c18a66f588d9659bbc917d"}, - {file = "types_urllib3-1.26.25.12-py3-none-any.whl", hash = "sha256:3ba3d3a8ee46e0d5512c6bd0594da4f10b2584b47a470f8422044a2ab462f1df"}, + {file = "types-urllib3-1.26.25.13.tar.gz", hash = "sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5"}, + {file = "types_urllib3-1.26.25.13-py3-none-any.whl", hash = "sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c"}, ] [[package]] name = "typing-extensions" -version = "4.5.0" +version = "4.6.3" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, + {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, + {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, ] [[package]] @@ -4607,14 +4649,14 @@ dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas [[package]] name = "urllib3" -version = "2.0.2" +version = "2.0.3" 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.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"}, - {file = "urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"}, + {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, + {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, ] [package.extras] @@ -4727,14 +4769,14 @@ files = [ [[package]] name = "websocket-client" -version = "1.5.1" +version = "1.5.3" description = "WebSocket client for Python with low level API options" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "websocket-client-1.5.1.tar.gz", hash = "sha256:3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40"}, - {file = "websocket_client-1.5.1-py3-none-any.whl", hash = "sha256:cdf5877568b7e83aa7cf2244ab56a3213de587bbe0ce9d8b9600fc77b455d89e"}, + {file = "websocket-client-1.5.3.tar.gz", hash = "sha256:b96f3bce3e54e3486ebe6504bc22bd4c140392bd2eb71764db29be8f2639aa65"}, + {file = "websocket_client-1.5.3-py3-none-any.whl", hash = "sha256:3566f8467cd350874c4913816355642a4942f6c1ed1e9406e3d42fae6d6c072a"}, ] [package.extras] From bc6ff341d78cd03ef30b61f88a362abc904f81e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Jun 2023 09:17:24 +0200 Subject: [PATCH 245/555] Bump tornado from 6.3.1 to 6.3.2 (#3253) Bumps [tornado](https://github.com/tornadoweb/tornado) from 6.3.1 to 6.3.2. - [Changelog](https://github.com/tornadoweb/tornado/blob/master/docs/releases.rst) - [Commits](https://github.com/tornadoweb/tornado/compare/v6.3.1...v6.3.2) --- updated-dependencies: - dependency-name: tornado dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- poetry.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 06535fb991..96820f8be2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4464,7 +4464,7 @@ name = "tornado" version = "6.3.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." category = "main" -optional = true +optional = false python-versions = ">= 3.8" files = [ {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, From 7dd9bb6eb9f9a641645e49ff6fba68b6fdf61cab Mon Sep 17 00:00:00 2001 From: Abulafia <44573666+abul4fia@users.noreply.github.com> Date: Tue, 20 Jun 2023 09:17:47 +0200 Subject: [PATCH 246/555] Minor fix, return self (#3236) * Small fix in the code of ArcBrace Avoiding the creation of an Arc object at import time * Replace last `os.path` occurrencies by `pathlib` (#3224) This resolves [last comment](https://github.com/ManimCommunity/manim/issues/485#issuecomment-1523016291) of #485. Removes one line of dead code. Co-authored-by: Benjamin Hackl * Made docbuild errors easier to debug + fixed error from changed exception class (#3229) * Make errors during docbuild somewhat easier to debug * fix an issue with docbuild under py3.10+ * Make set_resampling_algorithm() return self --------- Co-authored-by: Benjamin Hackl Co-authored-by: Adrien ANTON LUDWIG <42720099+Adrien-ANTON-LUDWIG@users.noreply.github.com> --- manim/mobject/types/image_mobject.py | 1 + 1 file changed, 1 insertion(+) diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index 091c60a195..25ff084d2a 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -84,6 +84,7 @@ def set_resampling_algorithm(self, resampling_algorithm: int): "Available algorithms: 'bicubic', 'nearest', 'box', 'bilinear', " "'hamming', 'lanczos'.", ) + return self def reset_points(self): # Corresponding corners of image are fixed to these 3 points From 96eba4ca2cd59cc0edf5bc96fb211fe570d0f76c Mon Sep 17 00:00:00 2001 From: Sujal Singh Date: Tue, 20 Jun 2023 12:48:14 +0530 Subject: [PATCH 247/555] add latex installation instructions for fedora (#3251) Co-authored-by: Benjamin Hackl --- docs/source/installation/linux.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/source/installation/linux.rst b/docs/source/installation/linux.rst index f0af5c8fd3..e07ae9e5b0 100644 --- a/docs/source/installation/linux.rst +++ b/docs/source/installation/linux.rst @@ -145,6 +145,12 @@ installed by running: sudo apt install texlive texlive-latex-extra +For Fedora (see `docs `__): + +.. code-block:: bash + + sudo dnf install texlive-scheme-full + Should you choose to work with some smaller TeX distribution like `TinyTeX `__ , the full list of LaTeX packages which Manim interacts with in some way (a subset might From 44ab4397a467b29ab725b9aff4fdc30e61151608 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jul 2023 10:56:48 +0900 Subject: [PATCH 248/555] Bump docker/build-push-action from 3 to 4 (#3272) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3 to 4. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v3...v4) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/publish-docker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml index d34e3ac4b4..fdd67c2a77 100644 --- a/.github/workflows/publish-docker.yml +++ b/.github/workflows/publish-docker.yml @@ -25,7 +25,7 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v4 with: platforms: linux/arm64,linux/amd64 push: true @@ -61,7 +61,7 @@ jobs: print(f"tag_name={ref_tag}", file=f) - name: Build and push - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v4 with: platforms: linux/arm64,linux/amd64 push: true From f56723a0258ce66080b762ae4f5a0115b7fb7daa Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 4 Jul 2023 02:17:09 +0000 Subject: [PATCH 249/555] [pre-commit.ci] pre-commit autoupdate (#3227) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v3.3.1 → v3.7.0](https://github.com/asottile/pyupgrade/compare/v3.3.1...v3.7.0) - [github.com/asottile/blacken-docs: 1.13.0 → 1.14.0](https://github.com/asottile/blacken-docs/compare/1.13.0...1.14.0) - [github.com/pre-commit/mirrors-mypy: v1.2.0 → v1.3.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.2.0...v1.3.0) - [github.com/codespell-project/codespell: v2.2.4 → v2.2.5](https://github.com/codespell-project/codespell/compare/v2.2.4...v2.2.5) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d2e5f3b414..96d5bdbe52 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v3.3.1 + rev: v3.8.0 hooks: - id: pyupgrade name: Update code to new python versions @@ -39,7 +39,7 @@ repos: hooks: - id: black - repo: https://github.com/asottile/blacken-docs - rev: 1.13.0 + rev: 1.14.0 hooks: - id: blacken-docs additional_dependencies: [black==22.3.0] @@ -58,7 +58,7 @@ repos: flake8-simplify==0.14.1, ] - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.2.0 + rev: v1.4.1 hooks: - id: mypy additional_dependencies: @@ -71,7 +71,7 @@ repos: ] - repo: https://github.com/codespell-project/codespell - rev: v2.2.4 + rev: v2.2.5 hooks: - id: codespell files: ^.*\.(py|md|rst)$ From 0d3464cff224de0249a2e04d78ebf95363de124c Mon Sep 17 00:00:00 2001 From: Alex Kempen <89172296+AlexKempen@users.noreply.github.com> Date: Mon, 3 Jul 2023 22:13:15 -0500 Subject: [PATCH 250/555] Bugfix: Fix arc start angle type (#3205) * Fixed animation misspelling in Mobject's add_animation_override * Corrected angle types of Arc --- manim/mobject/geometry/arc.py | 4 ++-- manim/mobject/mobject.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index 3b8e228597..395ae60292 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -282,8 +282,8 @@ def construct(self): def __init__( self, radius: float = 1.0, - start_angle=0, - angle=TAU / 4, + start_angle: float = 0, + angle: float = TAU / 4, num_components=9, arc_center=ORIGIN, **kwargs, diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index b9ef39af88..72382a622f 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -160,7 +160,7 @@ def add_animation_override( The animation type to be overridden override_func The function returning an animation replacing the default animation. It gets - passed the parameters given to the animnation constructor. + passed the parameters given to the animation constructor. Raises ------ From a3b1d9f2ff84b8a87611a3f3fc9b84ef4123f2c6 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Wed, 5 Jul 2023 00:02:11 +0900 Subject: [PATCH 251/555] replace mentions of Python 3.7 as the minimally required version with 3.8 (#3274) --- docs/source/installation.rst | 2 +- docs/source/installation/linux.rst | 2 +- docs/source/installation/windows.rst | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 9669ca6aaf..7e91a63c30 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -59,7 +59,7 @@ in order for Manim to work properly, some additional system dependencies need to be installed first. The following pages have operating system specific instructions for you to follow. -Manim requires Python version ``3.7`` or above to run. +Manim requires Python version ``3.8`` or above to run. .. hint:: diff --git a/docs/source/installation/linux.rst b/docs/source/installation/linux.rst index e07ae9e5b0..4b565e8fee 100644 --- a/docs/source/installation/linux.rst +++ b/docs/source/installation/linux.rst @@ -5,7 +5,7 @@ The installation instructions depend on your particular operating system and package manager. If you happen to know exactly what you are doing, you can also simply ensure that your system has: -- a reasonably recent version of Python 3 (3.7–3.10), +- a reasonably recent version of Python 3 (3.8 or above), - with working Cairo bindings in the form of `pycairo `__, - FFmpeg accessible from the command line as ``ffmpeg``, diff --git a/docs/source/installation/windows.rst b/docs/source/installation/windows.rst index 810d8e968a..fdb7e5814b 100644 --- a/docs/source/installation/windows.rst +++ b/docs/source/installation/windows.rst @@ -6,7 +6,7 @@ package manager like `Chocolatey `__ or `Scoop `__. If you are not afraid of editing your System's ``PATH``, a manual installation is also possible. In fact, if you already have an existing Python -installation (3.7-3.10), it might be the easiest way to get +installation (3.8 or above), it might be the easiest way to get everything up and running. If you choose to use one of the package managers, please follow @@ -19,7 +19,7 @@ to make one of them available on your system. Required Dependencies --------------------- -Manim requires a recent version of Python (3.7–3.10) and ``ffmpeg`` +Manim requires a recent version of Python (3.8 or above) and ``ffmpeg`` in order to work. Chocolatey @@ -80,10 +80,10 @@ Manual Installation ******************* As mentioned above, Manim needs a reasonably recent version of -Python 3 (3.7–3.10) and FFmpeg. +Python 3 (3.8 or above) and FFmpeg. **Python:** Head over to https://www.python.org, download an installer -for Python (3.7–3.10), and follow its instructions to get Python +for a recent version of Python, and follow its instructions to get Python installed on your system. .. note:: From 124ed9d1a414b430bea014552096193fc44c0c9b Mon Sep 17 00:00:00 2001 From: Uwe Zimmermann Date: Thu, 13 Jul 2023 01:38:23 +0200 Subject: [PATCH 252/555] fix: prevent vector position array from being modified (#3273) (#3282) changed from np.asarray(point) to nd.array(point) in order to make sure that a copy of the array is created even if func is the identity function lambda pos: pos Co-authored-by: Uwe Zimmermann --- manim/mobject/vector_field.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index 14f2f64f32..88388bd717 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -613,7 +613,7 @@ def get_vector(self, point: np.ndarray): The root point of the vector. """ - output = np.asarray(self.func(point)) + output = np.array(self.func(point)) norm = np.linalg.norm(output) if norm != 0: output *= self.length_func(norm) / norm From e84547f36df1b5601a2229717d2d7e8bd5938d11 Mon Sep 17 00:00:00 2001 From: Adhyyan Sekhsaria Date: Sun, 16 Jul 2023 13:48:01 +0530 Subject: [PATCH 253/555] Update dependencies for apple silicon in macos.rst (#3290) According to https://pypi.org/project/ManimPango/ manim pango also needs pkg-config --- docs/source/installation/macos.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/installation/macos.rst b/docs/source/installation/macos.rst index a3a4021ad8..13141beaea 100644 --- a/docs/source/installation/macos.rst +++ b/docs/source/installation/macos.rst @@ -34,7 +34,7 @@ are required, namely: .. code-block:: bash - brew install pango scipy + brew install pango pkg-config scipy After all required dependencies are installed, simply run: From e6632776ff6236f58700775f724a853c0eef16ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Jul 2023 10:21:00 +0200 Subject: [PATCH 254/555] Bump cryptography from 41.0.1 to 41.0.2 (#3287) Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.1 to 41.0.2. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/41.0.1...41.0.2) --- updated-dependencies: - dependency-name: cryptography dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 279 ++++++---------------------------------------------- 1 file changed, 30 insertions(+), 249 deletions(-) diff --git a/poetry.lock b/poetry.lock index 96820f8be2..c0c6614ac8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.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 = [ @@ -44,7 +41,6 @@ files = [ name = "anyio" version = "3.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -66,7 +62,6 @@ trio = ["trio (<0.22)"] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "main" optional = true python-versions = "*" files = [ @@ -78,7 +73,6 @@ files = [ name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -98,7 +92,6 @@ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] 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 +129,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 +143,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 +154,6 @@ files = [ name = "astroid" version = "2.15.5" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -183,7 +173,6 @@ wrapt = [ name = "asttokens" version = "2.2.1" description = "Annotate AST trees with source code positions" -category = "main" optional = true python-versions = "*" files = [ @@ -201,7 +190,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 +208,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 +222,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 +233,6 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -266,7 +251,6 @@ lxml = ["lxml"] name = "black" version = "23.3.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -316,7 +300,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 = [ @@ -335,7 +318,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "certifi" version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -347,7 +329,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = "*" files = [ @@ -424,7 +405,6 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -436,7 +416,6 @@ files = [ name = "charset-normalizer" version = "3.1.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 = [ @@ -521,7 +500,6 @@ files = [ name = "click" version = "8.1.3" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -536,7 +514,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-default-group" version = "1.2.2" description = "Extends click.Group to invoke a command without explicit subcommand name" -category = "main" optional = false python-versions = "*" files = [ @@ -550,7 +527,6 @@ click = "*" 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 +542,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 +553,6 @@ files = [ name = "colour" version = "0.1.5" description = "converts and manipulates various color representation (HSL, RVB, web, X11, ...)" -category = "main" optional = false python-versions = "*" files = [ @@ -593,7 +567,6 @@ test = ["nose"] name = "comm" version = "0.1.3" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -613,7 +586,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 = [ @@ -628,7 +600,6 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] name = "contourpy" version = "1.1.0" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -687,7 +658,6 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -761,31 +731,34 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.1" +version = "41.0.2" 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.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699"}, - {file = "cryptography-41.0.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a"}, - {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca"}, - {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43"}, - {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b"}, - {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3"}, - {file = "cryptography-41.0.1-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db"}, - {file = "cryptography-41.0.1-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31"}, - {file = "cryptography-41.0.1-cp37-abi3-win32.whl", hash = "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5"}, - {file = "cryptography-41.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c"}, - {file = "cryptography-41.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb"}, - {file = "cryptography-41.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3"}, - {file = "cryptography-41.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039"}, - {file = "cryptography-41.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc"}, - {file = "cryptography-41.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485"}, - {file = "cryptography-41.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c"}, - {file = "cryptography-41.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a"}, - {file = "cryptography-41.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5"}, - {file = "cryptography-41.0.1.tar.gz", hash = "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006"}, + {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711"}, + {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83"}, + {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5"}, + {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58"}, + {file = "cryptography-41.0.2-cp37-abi3-win32.whl", hash = "sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76"}, + {file = "cryptography-41.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0"}, + {file = "cryptography-41.0.2.tar.gz", hash = "sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c"}, ] [package.dependencies] @@ -805,7 +778,6 @@ test-randomorder = ["pytest-randomly"] name = "cycler" version = "0.11.0" description = "Composable style cycles" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -817,7 +789,6 @@ files = [ name = "cython" version = "0.29.35" 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.*" files = [ @@ -868,7 +839,6 @@ files = [ 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 = [ @@ -883,7 +853,6 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", name = "dearpygui" version = "1.9.1" description = "DearPyGui: A simple Python GUI Toolkit" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -911,7 +880,6 @@ files = [ name = "debugpy" version = "1.6.7" description = "An implementation of the Debug Adapter Protocol for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -939,7 +907,6 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -951,7 +918,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 = [ @@ -963,7 +929,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 = [ @@ -981,7 +946,6 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "dill" version = "0.3.6" description = "serialize all of python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -996,7 +960,6 @@ graph = ["objgraph (>=1.7.2)"] name = "distlib" version = "0.3.6" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -1008,7 +971,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 = [ @@ -1020,7 +982,6 @@ files = [ name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1035,7 +996,6 @@ test = ["pytest (>=6)"] name = "execnet" version = "1.9.0" 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 = [ @@ -1050,7 +1010,6 @@ testing = ["pre-commit"] 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 = [ @@ -1065,7 +1024,6 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "fastjsonschema" version = "2.17.1" description = "Fastest Python implementation of JSON schema" -category = "main" optional = true python-versions = "*" files = [ @@ -1080,7 +1038,6 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "filelock" version = "3.12.2" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1096,7 +1053,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p 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 = [ @@ -1113,7 +1069,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 = [ @@ -1132,7 +1087,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 = [ @@ -1150,7 +1104,6 @@ test = ["coverage", "coveralls", "mock", "pytest", "pytest-cov"] name = "flake8-comprehensions" version = "3.12.0" description = "A flake8 plugin to help you write better list/set/dict comprehensions." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1165,7 +1118,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 = [ @@ -1181,7 +1133,6 @@ pydocstyle = ">=2.1" name = "flake8-plugin-utils" version = "1.3.2" description = "The package provides base classes and utils for flake8 plugin writing" -category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1193,7 +1144,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 = [ @@ -1208,7 +1158,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 = [ @@ -1225,7 +1174,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 = [ @@ -1241,7 +1189,6 @@ flake8 = ">=3.7" name = "fonttools" version = "4.40.0" description = "Tools to manipulate font files" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1299,7 +1246,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 = [ @@ -1311,7 +1257,6 @@ files = [ name = "furo" version = "2022.9.29" description = "A clean customisable Sphinx documentation theme." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1329,7 +1274,6 @@ sphinx-basic-ng = "*" name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1344,7 +1288,6 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.31" description = "GitPython is a Python library used to interact with Git repositories" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1359,7 +1302,6 @@ gitdb = ">=4.0.1,<5" name = "glcontext" version = "2.3.7" description = "Portable OpenGL Context" -category = "main" optional = false python-versions = "*" files = [ @@ -1419,7 +1361,6 @@ files = [ name = "identify" version = "2.5.24" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1434,7 +1375,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1446,7 +1386,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 = [ @@ -1458,7 +1397,6 @@ files = [ name = "importlib-metadata" version = "6.6.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1478,7 +1416,6 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag name = "importlib-resources" version = "5.12.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1497,7 +1434,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1509,7 +1445,6 @@ files = [ name = "ipykernel" version = "6.23.2" description = "IPython Kernel for Jupyter" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1523,7 +1458,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 = "*" @@ -1543,7 +1478,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 = [ @@ -1583,7 +1517,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 = [ @@ -1595,7 +1528,6 @@ files = [ name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1610,7 +1542,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 = [ @@ -1628,7 +1559,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 = [ @@ -1643,7 +1573,6 @@ numpy = "*" name = "jedi" version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -1663,7 +1592,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 = [ @@ -1681,7 +1609,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 = [ @@ -1696,7 +1623,6 @@ dev = ["hypothesis"] name = "jsonpointer" version = "2.3" 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 = [ @@ -1708,7 +1634,6 @@ files = [ name = "jsonschema" version = "4.17.3" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1738,7 +1663,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jupyter-client" version = "8.2.0" description = "Jupyter protocol implementation and client libraries" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1748,7 +1672,7 @@ files = [ [package.dependencies] importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" @@ -1762,7 +1686,6 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt name = "jupyter-core" version = "5.3.0" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1783,7 +1706,6 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyter-events" version = "0.6.3" description = "Jupyter Event System library" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1808,7 +1730,6 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= name = "jupyter-server" version = "2.6.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1821,7 +1742,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" @@ -1845,7 +1766,6 @@ test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", " name = "jupyter-server-fileid" version = "0.9.0" description = "" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1865,7 +1785,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 = [ @@ -1885,7 +1804,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 = [ @@ -1905,7 +1823,6 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes name = "jupyter-ydoc" version = "0.2.4" description = "Document structures for collaborative editing using Ypy" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1925,7 +1842,6 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we name = "jupyterlab" version = "3.6.4" description = "JupyterLab computational environment" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1954,7 +1870,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 = [ @@ -1966,7 +1881,6 @@ files = [ name = "jupyterlab-server" version = "2.23.0" description = "A set of server components for JupyterLab and JupyterLab like applications." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1993,7 +1907,6 @@ test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-valida name = "kiwisolver" version = "1.4.4" description = "A fast implementation of the Cassowary constraint solver" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2071,7 +1984,6 @@ files = [ 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 = [ @@ -2117,7 +2029,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 = [ @@ -2143,7 +2054,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 = [ @@ -2218,7 +2128,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 = [ @@ -2243,7 +2152,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 = [ @@ -2303,7 +2211,6 @@ files = [ name = "matplotlib" version = "3.7.1" description = "Python plotting package" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2366,7 +2273,6 @@ python-dateutil = ">=2.7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2381,7 +2287,6 @@ traitlets = "*" name = "mccabe" version = "0.6.1" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = "*" files = [ @@ -2393,7 +2298,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 = [ @@ -2413,7 +2317,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 = [ @@ -2425,7 +2328,6 @@ files = [ name = "mistune" version = "2.0.5" description = "A sane Markdown parser with useful plugins and renderers" -category = "main" optional = true python-versions = "*" files = [ @@ -2437,7 +2339,6 @@ files = [ name = "moderngl" version = "5.8.2" description = "ModernGL: High performance rendering for Python 3" -category = "main" optional = false python-versions = "*" files = [ @@ -2500,7 +2401,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 = [ @@ -2529,7 +2429,6 @@ trimesh = ["scipy (>=1.3.2)", "trimesh (>=3.2.6,<4)"] name = "multipledispatch" version = "0.6.0" description = "Multiple dispatch" -category = "main" optional = false python-versions = "*" files = [ @@ -2545,7 +2444,6 @@ six = "*" name = "mypy" version = "0.931" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2584,7 +2482,6 @@ python2 = ["typed-ast (>=1.4.0,<2)"] 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 = [ @@ -2596,7 +2493,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 = [ @@ -2623,7 +2519,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 = [ @@ -2659,7 +2554,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 = [ @@ -2669,7 +2563,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" @@ -2682,7 +2576,6 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= name = "nbconvert" version = "7.5.0" description = "Converting Jupyter Notebooks" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2721,7 +2614,6 @@ webpdf = ["pyppeteer (>=1,<1.1)"] name = "nbformat" version = "5.9.0" description = "The Jupyter Notebook format" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2743,7 +2635,6 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.5.6" description = "Patch asyncio to allow nested event loops" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2755,7 +2646,6 @@ files = [ 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 = [ @@ -2774,7 +2664,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 = [ @@ -2789,7 +2678,6 @@ setuptools = "*" name = "notebook" version = "6.5.4" description = "A web-based notebook environment for interactive computing" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2824,7 +2712,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 = [ @@ -2842,7 +2729,6 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" name = "numpy" version = "1.24.3" description = "Fundamental package for array computing in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2880,7 +2766,6 @@ files = [ name = "overrides" version = "7.3.1" description = "A decorator to automatically detect mismatch when overriding a method." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2892,7 +2777,6 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2904,7 +2788,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 = [ @@ -2916,7 +2799,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2932,7 +2814,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2944,7 +2825,6 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = true python-versions = "*" files = [ @@ -2959,7 +2839,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 = [ @@ -2971,7 +2850,6 @@ files = [ name = "pillow" version = "9.5.0" description = "Python Imaging Library (Fork)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3051,7 +2929,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 = [ @@ -3063,7 +2940,6 @@ files = [ name = "platformdirs" version = "3.5.3" 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 = [ @@ -3079,7 +2955,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3095,7 +2970,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 = [ @@ -3114,7 +2988,6 @@ virtualenv = ">=20.10.0" name = "prometheus-client" version = "0.17.0" description = "Python client for the Prometheus monitoring system." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3129,7 +3002,6 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.38" description = "Library for building powerful interactive command lines in Python" -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -3144,7 +3016,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 = [ @@ -3171,7 +3042,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 = [ @@ -3197,7 +3067,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 = [ @@ -3209,7 +3078,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "main" optional = true python-versions = "*" files = [ @@ -3224,7 +3092,6 @@ tests = ["pytest"] name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3236,7 +3103,6 @@ files = [ name = "pycairo" version = "1.23.0" description = "Python interface for cairo" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3257,7 +3123,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 = [ @@ -3269,7 +3134,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 = [ @@ -3281,7 +3145,6 @@ files = [ name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3299,7 +3162,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 = [ @@ -3311,7 +3173,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 = [ @@ -3323,7 +3184,6 @@ files = [ name = "pygithub" version = "1.58.2" description = "Use the full Github API v3" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3341,7 +3201,6 @@ requests = ">=2.14.0" name = "pyglet" version = "2.0.7" description = "Cross-platform windowing and multimedia library" -category = "main" optional = false python-versions = "*" files = [ @@ -3353,7 +3212,6 @@ files = [ name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3368,7 +3226,6 @@ plugins = ["importlib-metadata"] name = "pyjwt" version = "2.7.0" description = "JSON Web Token implementation in Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3389,7 +3246,6 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] name = "pylint" version = "2.17.4" description = "python code static checker" -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -3419,7 +3275,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 = [ @@ -3446,7 +3301,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 = [ @@ -3464,7 +3318,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 = [ @@ -3485,7 +3338,6 @@ pyobjc-core = ">=9.2" name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" optional = false python-versions = ">=3.6.8" files = [ @@ -3500,7 +3352,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyrr" version = "0.10.3" description = "3D mathematical functions using NumPy" -category = "main" optional = false python-versions = "*" files = [ @@ -3516,7 +3367,6 @@ numpy = "*" name = "pyrsistent" version = "0.19.3" description = "Persistent/Functional/Immutable data structures" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3553,7 +3403,6 @@ files = [ name = "pytest" version = "7.3.2" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3576,7 +3425,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 = [ @@ -3595,7 +3443,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 = [ @@ -3611,7 +3458,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 = [ @@ -3633,7 +3479,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 = [ @@ -3648,7 +3493,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 = [ @@ -3660,7 +3504,6 @@ files = [ name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -3672,7 +3515,6 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = true python-versions = "*" files = [ @@ -3696,7 +3538,6 @@ files = [ name = "pywinpty" version = "2.0.10" description = "Pseudo terminal support for Windows from Python." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3712,7 +3553,6 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3762,7 +3602,6 @@ files = [ name = "pyzmq" version = "25.1.0" description = "Python bindings for 0MQ" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3852,7 +3691,6 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} 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 = [ @@ -3869,7 +3707,6 @@ sphinx = ">=1.3.1" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3891,7 +3728,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 = [ @@ -3905,7 +3741,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 = [ @@ -3920,7 +3755,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 = [ @@ -3932,7 +3766,6 @@ files = [ name = "rich" version = "13.4.2" 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 = [ @@ -3952,7 +3785,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] 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 = [ @@ -3991,7 +3823,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 = [ @@ -4007,7 +3838,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 = [ @@ -4024,7 +3854,6 @@ win32 = ["pywin32"] name = "setuptools" version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4041,7 +3870,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( 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 = [ @@ -4053,7 +3881,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 = [ @@ -4109,7 +3936,6 @@ testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4121,7 +3947,6 @@ files = [ 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 = [ @@ -4133,7 +3958,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 = [ @@ -4145,7 +3969,6 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4157,7 +3980,6 @@ files = [ name = "sphinx" version = "4.5.0" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4193,7 +4015,6 @@ test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] name = "sphinx-basic-ng" version = "1.0.0b1" description = "A modern skeleton for Sphinx themes." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4211,7 +4032,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 = [ @@ -4230,7 +4050,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 = [ @@ -4246,7 +4065,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 = [ @@ -4262,7 +4080,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 = [ @@ -4278,7 +4095,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 = [ @@ -4293,7 +4109,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 = [ @@ -4308,7 +4123,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 = [ @@ -4324,7 +4138,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 = [ @@ -4340,7 +4153,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 = [ @@ -4356,7 +4168,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 = [ @@ -4367,7 +4178,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 = [ @@ -4387,7 +4197,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "svgelements" version = "1.9.5" description = "Svg Elements Parsing" -category = "main" optional = false python-versions = "*" files = [ @@ -4399,7 +4208,6 @@ files = [ 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 = [ @@ -4420,7 +4228,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 = [ @@ -4439,7 +4246,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 = [ @@ -4451,7 +4257,6 @@ files = [ name = "tomlkit" version = "0.11.8" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4463,8 +4268,7 @@ files = [ name = "tornado" version = "6.3.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "main" -optional = false +optional = true python-versions = ">= 3.8" files = [ {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, @@ -4484,7 +4288,6 @@ files = [ name = "tqdm" version = "4.65.0" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4505,7 +4308,6 @@ telegram = ["requests"] name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4521,7 +4323,6 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "types-decorator" version = "0.1.7" description = "Typing stubs for decorator" -category = "dev" optional = false python-versions = "*" files = [ @@ -4533,7 +4334,6 @@ files = [ name = "types-docutils" version = "0.20.0.1" description = "Typing stubs for docutils" -category = "dev" optional = false python-versions = "*" files = [ @@ -4545,7 +4345,6 @@ files = [ name = "types-pillow" version = "8.3.11" description = "Typing stubs for Pillow" -category = "dev" optional = false python-versions = "*" files = [ @@ -4557,7 +4356,6 @@ files = [ name = "types-protobuf" version = "3.20.4.6" description = "Typing stubs for protobuf" -category = "dev" optional = false python-versions = "*" files = [ @@ -4569,7 +4367,6 @@ files = [ name = "types-pygments" version = "2.15.0.1" description = "Typing stubs for Pygments" -category = "dev" optional = false python-versions = "*" files = [ @@ -4585,7 +4382,6 @@ types-setuptools = "*" name = "types-requests" version = "2.31.0.1" description = "Typing stubs for requests" -category = "dev" optional = false python-versions = "*" files = [ @@ -4600,7 +4396,6 @@ types-urllib3 = "*" name = "types-setuptools" version = "57.4.18" description = "Typing stubs for setuptools" -category = "dev" optional = false python-versions = "*" files = [ @@ -4612,7 +4407,6 @@ files = [ name = "types-urllib3" version = "1.26.25.13" description = "Typing stubs for urllib3" -category = "dev" optional = false python-versions = "*" files = [ @@ -4624,7 +4418,6 @@ files = [ name = "typing-extensions" version = "4.6.3" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4636,7 +4429,6 @@ files = [ name = "uri-template" version = "1.2.0" description = "RFC 6570 URI Template Processor" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -4651,7 +4443,6 @@ dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas name = "urllib3" version = "2.0.3" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4669,7 +4460,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "virtualenv" version = "20.23.0" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4690,7 +4480,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess name = "watchdog" version = "2.3.1" description = "Filesystem events monitoring" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -4731,7 +4520,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 = [ @@ -4743,7 +4531,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 = [ @@ -4759,7 +4546,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 = [ @@ -4771,7 +4557,6 @@ files = [ name = "websocket-client" version = "1.5.3" description = "WebSocket client for Python with low level API options" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4788,7 +4573,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 = [ @@ -4873,7 +4657,6 @@ files = [ name = "y-py" version = "0.5.9" description = "Python bindings for the Y-CRDT built from yrs (Rust)" -category = "main" optional = true python-versions = "*" files = [ @@ -4949,7 +4732,6 @@ files = [ name = "ypy-websocket" version = "0.8.2" description = "WebSocket connector for Ypy" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4969,7 +4751,6 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.7" files = [ From 8c344477bad37ad7b1423ff6f0a49c6c63ce2e04 Mon Sep 17 00:00:00 2001 From: Uwe Zimmermann Date: Sun, 16 Jul 2023 10:22:31 +0200 Subject: [PATCH 255/555] fixed the use of the LinearTransformationSceneExample in Jupyter notebooks (#3284) * fix: prevent vector position array from being modified (#3273) changed from np.asarray(point) to nd.array(point) in order to make sure that a copy of the array is created even if func is the identity function lambda pos: pos * fix: using the example for LinearTransformationScene in Jupyter notebooks The Manim magic in Jupyter notebooks adds a "renderer=" parameter to the __init__ call of the scene, but in its current form the example scene LinearTransformationSceneExample does not accept any **kwargs and thus creates an exception. Added the handling of **kwargs in the example scene. --------- Co-authored-by: Uwe Zimmermann --- manim/scene/vector_space_scene.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manim/scene/vector_space_scene.py b/manim/scene/vector_space_scene.py index 339beb1c05..edea12354a 100644 --- a/manim/scene/vector_space_scene.py +++ b/manim/scene/vector_space_scene.py @@ -558,11 +558,12 @@ class LinearTransformationScene(VectorScene): .. manim:: LinearTransformationSceneExample class LinearTransformationSceneExample(LinearTransformationScene): - def __init__(self): + def __init__(self, **kwargs): LinearTransformationScene.__init__( self, show_coordinates=True, leave_ghost_vectors=True, + *kwargs ) def construct(self): From 7c9f98c090d62a54e4c435b583e65e41974bda91 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 16 Jul 2023 10:22:57 +0200 Subject: [PATCH 256/555] [pre-commit.ci] pre-commit autoupdate (#3280) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v3.8.0 → v3.9.0](https://github.com/asottile/pyupgrade/compare/v3.8.0...v3.9.0) - [github.com/asottile/blacken-docs: 1.14.0 → 1.15.0](https://github.com/asottile/blacken-docs/compare/1.14.0...1.15.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 96d5bdbe52..6955bd0232 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/asottile/pyupgrade - rev: v3.8.0 + rev: v3.9.0 hooks: - id: pyupgrade name: Update code to new python versions @@ -39,7 +39,7 @@ repos: hooks: - id: black - repo: https://github.com/asottile/blacken-docs - rev: 1.14.0 + rev: 1.15.0 hooks: - id: blacken-docs additional_dependencies: [black==22.3.0] From e00c780b58b4609f99e0875a75c6819a688a789d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Manr=C3=ADquez=20Novoa?= <49853152+chopan050@users.noreply.github.com> Date: Sun, 16 Jul 2023 13:04:03 -0400 Subject: [PATCH 257/555] Optimized :meth:`.Axes.coords_to_point` (#3286) * Optimized Axes.coords_to_point * Changed variable name to are_coordinates_transposed and added more commentaries * Added some commas to the tuple in the last comment in Axes.coords_to_pointC --- manim/mobject/graphing/coordinate_systems.py | 67 +++++++++++--------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 1a55c644ba..581e20d506 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -1995,40 +1995,47 @@ def construct(self): self.add(plane, dot_scene, ax, dot_axes, lines) """ + coords = np.asarray(coords) origin = self.x_axis.number_to_point( self._origin_shift([self.x_axis.x_min, self.x_axis.x_max]), ) - coords = np.asarray(coords) - - # if called like coords_to_point(1, 2, 3), then coords is a 1x3 array - transposed = False - if coords.ndim == 1: - # original implementation of coords_to_point for performance in the legacy case - result = np.array(origin) - for axis, number in zip(self.get_axes(), coords): - result += axis.number_to_point(number) - origin - return result - # if called like coords_to_point([1, 2, 3],[4, 5, 6]), then it shall be used as [1,4], [2,5], [3,6] and return the points as ([x_0,x_1],[y_0,y_1],[z_0,z_1]) - elif coords.ndim == 2: - coords = coords.T - transposed = True - # if called like coords_to_point(np.array([[1, 2, 3],[4,5,6]])), reduce dimension by 1 - elif coords.ndim == 3: - coords = np.squeeze(coords) - # else the coords is a Nx1, Nx2, Nx3 array so we do not need to modify the array - - points = origin + np.sum( - [ - axis.number_to_point(number) - origin - for number, axis in zip(coords.T, self.get_axes()) - ], - axis=0, - ) - # if called with single coord, then return a point instead of a list of points - if transposed: - return points.T - return points + # Is coords in the format ([[x1 y1 z1] [x2 y2 z2] ...])? (True) + # Or is coords in the format (x, y, z) or ([x1 x2 ...], [y1 y2 ...], [z1 z2 ...])? (False) + # The latter is preferred. + are_coordinates_transposed = False + + # If coords is in the format ([[x1 y1 z1] [x2 y2 z2] ...]): + if coords.ndim == 3: + # Extract from original tuple: now coords looks like [[x y z]] or [[x1 y1 z1] [x2 y2 z2] ...]. + coords = coords[0] + # If there's a single coord (coords = [[x y z]]), extract it so that + # coords = [x y z] and coords_to_point returns a single point. + if coords.shape[0] == 1: + coords = coords[0] + # Else, if coords looks more like [[x1 y1 z1] [x2 y2 z2] ...], transform them (by + # transposing) into the format [[x1 x2 ...] [y1 y2 ...] [z1 z2 ...]] for later processing. + else: + coords = coords.T + are_coordinates_transposed = True + # Otherwise, coords already looked like (x, y, z) or ([x1 x2 ...], [y1 y2 ...], [z1 z2 ...]), + # so no further processing is needed. + + # Now coords should either look like [x y z] or [[x1 x2 ...] [y1 y2 ...] [z1 z2 ...]], + # so it can be iterated directly. Each element is either a float representing a single + # coordinate, or a float ndarray of coordinates corresponding to a single axis. + # Although "points" and "nums" are in plural, there might be a single point or number. + points = self.x_axis.number_to_point(coords[0]) + other_axes = self.axes.submobjects[1:] + for axis, nums in zip(other_axes, coords[1:]): + points += axis.number_to_point(nums) - origin + + # Return points as is, except if coords originally looked like + # ([x1 x2 ...], [y1 y2 ...], [z1 z2 ...]), which is determined by the conditions below. In + # that case, the current implementation requires that the results have to be transposed. + if are_coordinates_transposed or points.ndim == 1: + return points + return points.T def point_to_coords(self, point: Sequence[float]) -> np.ndarray: """Accepts a point from the scene and returns its coordinates with respect to the axes. From 1cd0f43982dc1f851a21c17e0af8e967822a570a Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Tue, 18 Jul 2023 14:36:20 -0700 Subject: [PATCH 258/555] Fixed expand animation for :class:`.ManimBanner` (#3298) * fixed "a" appearing before shapes * added animation test for ManimBanner * added xelatex to linux pipeline * xelatex -> xetex --- .github/workflows/ci.yml | 2 +- manim/mobject/logo.py | 2 +- .../control_data/logo/banner.npz | Bin 0 -> 41218 bytes tests/test_graphical_units/test_banner.py | 13 +++++++++++++ 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 tests/test_graphical_units/control_data/logo/banner.npz create mode 100644 tests/test_graphical_units/test_banner.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 125be255cf..c234a6e885 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,7 +68,7 @@ jobs: uses: teatimeguest/setup-texlive-action@v2 with: cache: true - packages: scheme-basic fontspec inputenc fontenc tipa mathrsfs calligra xcolor standalone preview doublestroke ms everysel setspace rsfs relsize ragged2e fundus-calligra microtype wasysym physics dvisvgm jknapltx wasy cm-super babel-english gnu-freefont mathastext cbfonts-fd + packages: scheme-basic fontspec inputenc fontenc tipa mathrsfs calligra xcolor standalone preview doublestroke ms everysel setspace rsfs relsize ragged2e fundus-calligra microtype wasysym physics dvisvgm jknapltx wasy cm-super babel-english gnu-freefont mathastext cbfonts-fd xetex - name: Start virtual display (Linux) if: runner.os == 'Linux' diff --git a/manim/mobject/logo.py b/manim/mobject/logo.py index 429641e67e..dcb87bde2e 100644 --- a/manim/mobject/logo.py +++ b/manim/mobject/logo.py @@ -209,7 +209,7 @@ def slide_and_uncover(mob, alpha): for letter in mob.anim: if mob.square.get_center()[0] > letter.get_center()[0]: letter.set_opacity(1) - self.add(letter) + self.add_to_back(letter) # Finish animation if alpha == 1: diff --git a/tests/test_graphical_units/control_data/logo/banner.npz b/tests/test_graphical_units/control_data/logo/banner.npz new file mode 100644 index 0000000000000000000000000000000000000000..c9d765ece3097a2635844fbb629688ea41ca8e78 GIT binary patch literal 41218 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 p<=^VRq#z%JMg Date: Thu, 20 Jul 2023 05:02:31 +0100 Subject: [PATCH 259/555] Improve Arrow Tip Showcase example in docstring of class ArrowTip (#3297) --- manim/mobject/geometry/tips.py | 41 +++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/manim/mobject/geometry/tips.py b/manim/mobject/geometry/tips.py index 39d802b474..e002c89b49 100644 --- a/manim/mobject/geometry/tips.py +++ b/manim/mobject/geometry/tips.py @@ -76,23 +76,34 @@ class ArrowTip(VMobject, metaclass=ConvertToOpenGL): .. manim:: ArrowTipsShowcase :save_last_frame: - from manim.mobject.geometry.tips import ArrowTriangleTip,\ - ArrowSquareTip, ArrowSquareFilledTip,\ - ArrowCircleTip, ArrowCircleFilledTip class ArrowTipsShowcase(Scene): def construct(self): - a00 = Arrow(start=[-2, 3, 0], end=[2, 3, 0], color=YELLOW) - a11 = Arrow(start=[-2, 2, 0], end=[2, 2, 0], tip_shape=ArrowTriangleTip) - a12 = Arrow(start=[-2, 1, 0], end=[2, 1, 0]) - a21 = Arrow(start=[-2, 0, 0], end=[2, 0, 0], tip_shape=ArrowSquareTip) - a22 = Arrow([-2, -1, 0], [2, -1, 0], tip_shape=ArrowSquareFilledTip) - a31 = Arrow([-2, -2, 0], [2, -2, 0], tip_shape=ArrowCircleTip) - a32 = Arrow([-2, -3, 0], [2, -3, 0], tip_shape=ArrowCircleFilledTip) - b11 = a11.copy().scale(0.5, scale_tips=True).next_to(a11, RIGHT) - b12 = a12.copy().scale(0.5, scale_tips=True).next_to(a12, RIGHT) - b21 = a21.copy().scale(0.5, scale_tips=True).next_to(a21, RIGHT) - self.add(a00, a11, a12, a21, a22, a31, a32, b11, b12, b21) - + tip_names = [ + 'Default (YELLOW)', 'ArrowTriangleTip', 'Default', 'ArrowSquareTip', + 'ArrowSquareFilledTip', 'ArrowCircleTip', 'ArrowCircleFilledTip', 'StealthTip' + ] + + big_arrows = [ + Arrow(start=[-4, 3.5, 0], end=[2, 3.5, 0], color=YELLOW), + Arrow(start=[-4, 2.5, 0], end=[2, 2.5, 0], tip_shape=ArrowTriangleTip), + Arrow(start=[-4, 1.5, 0], end=[2, 1.5, 0]), + Arrow(start=[-4, 0.5, 0], end=[2, 0.5, 0], tip_shape=ArrowSquareTip), + + Arrow([-4, -0.5, 0], [2, -0.5, 0], tip_shape=ArrowSquareFilledTip), + Arrow([-4, -1.5, 0], [2, -1.5, 0], tip_shape=ArrowCircleTip), + Arrow([-4, -2.5, 0], [2, -2.5, 0], tip_shape=ArrowCircleFilledTip), + Arrow([-4, -3.5, 0], [2, -3.5, 0], tip_shape=StealthTip) + ] + + small_arrows = ( + arrow.copy().scale(0.5, scale_tips=True).next_to(arrow, RIGHT) for arrow in big_arrows + ) + + labels = ( + Text(tip_names[i], font='monospace', font_size=20, color=BLUE).next_to(big_arrows[i], LEFT) for i in range(len(big_arrows)) + ) + + self.add(*big_arrows, *small_arrows, *labels) """ def __init__(self, *args, **kwargs): From 1c75a919fd85014650f94e555721702314703271 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 19 Jul 2023 21:03:33 -0700 Subject: [PATCH 260/555] [pre-commit.ci] pre-commit autoupdate (#3296) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 23.3.0 → 23.7.0](https://github.com/psf/black/compare/23.3.0...23.7.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6955bd0232..8f4cdd49fb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -35,7 +35,7 @@ repos: - id: python-check-blanket-noqa name: Precision flake ignores - repo: https://github.com/psf/black - rev: 23.3.0 + rev: 23.7.0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs From 56bc8add6166c62425ded1adac1c4e1c6667983c Mon Sep 17 00:00:00 2001 From: Zachary Winkeler Date: Mon, 24 Jul 2023 06:46:07 -0400 Subject: [PATCH 261/555] fix: changed minor typo in OpenGLVMobject (#3302) A conditional in interpolate() was previously checking the same triangulation twice. --- manim/mobject/opengl/opengl_vectorized_mobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index d270ec6d40..6365c1aeda 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -1301,7 +1301,7 @@ def interpolate(self, mobject1, mobject2, alpha, *args, **kwargs): if self.has_fill(): tri1 = mobject1.get_triangulation() tri2 = mobject2.get_triangulation() - if len(tri1) != len(tri1) or not np.all(tri1 == tri2): + if len(tri1) != len(tri2) or not np.all(tri1 == tri2): self.refresh_triangulation() return self From 8ba210ff6176f9e773cd3a86ca19202ee336a31e Mon Sep 17 00:00:00 2001 From: Andres Berejnoi Date: Mon, 31 Jul 2023 17:16:28 -0400 Subject: [PATCH 262/555] Two New Classes in geometry module: :class:`.LabeledLine` and :class:`.LabeledArrow` (#3264) * feat: added two new classes LabeledLine and LabeledArrow * test: added tests for new LabeledLine and LabeledArrow for the geometry module testing suite * feat: added new class names to '__all__' module attribute * fix: added missing import line for new classes * fix: removed import lines causing cyclic import error * new file containing two new classes * modified files to correctly load new classes when manim is imported * commented out new classes in line.py * created control frames for LabeledLine and LabeledArrow * removed commented out classes * removed unused import of 'Colors' * Update manim/mobject/geometry/labeled_shapes.py Co-authored-by: Jason Villanueva * Update manim/mobject/geometry/labeled_shapes.py Co-authored-by: Jason Villanueva * Update manim/mobject/geometry/labeled_shapes.py Co-authored-by: Jason Villanueva * Update manim/mobject/geometry/labeled_shapes.py Co-authored-by: Jason Villanueva * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update __init__.py will change name of labeled_shapes.py to labeled.py * Rename labeled_shapes.py to labeled.py * Update __init__.py Changed name of file from labeled_shapes.py to labeled.py and updated __init__.py to import from the correct location. * Update manim/mobject/geometry/labeled.py Removed color import line because of redundancy. Co-authored-by: Jason Villanueva * Update labeled.py default label_color parameter is now set to `None` instead of `WHITE`. * Update manim/mobject/geometry/labeled.py Co-authored-by: Jason Villanueva * Update tests/test_graphical_units/test_geometry.py Co-authored-by: Jason Villanueva * Revert changes related to WHITE and it's import SurroundingRectangle uses label_color as well and using a default of None removes the rectangle. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: Jason Villanueva Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/__init__.py | 1 + manim/mobject/geometry/__init__.py | 1 + manim/mobject/geometry/labeled.py | 153 ++++++++++++++++++ .../control_data/geometry/LabeledArrow.npz | Bin 0 -> 2884 bytes .../control_data/geometry/LabeledLine.npz | Bin 0 -> 2669 bytes tests/test_graphical_units/test_geometry.py | 22 +++ 6 files changed, 177 insertions(+) create mode 100644 manim/mobject/geometry/labeled.py create mode 100644 tests/test_graphical_units/control_data/geometry/LabeledArrow.npz create mode 100644 tests/test_graphical_units/control_data/geometry/LabeledLine.npz diff --git a/manim/__init__.py b/manim/__init__.py index a697122752..cae45fcc42 100644 --- a/manim/__init__.py +++ b/manim/__init__.py @@ -46,6 +46,7 @@ from .mobject.frame import * from .mobject.geometry.arc import * from .mobject.geometry.boolean_ops import * +from .mobject.geometry.labeled import * from .mobject.geometry.line import * from .mobject.geometry.polygram import * from .mobject.geometry.shape_matchers import * diff --git a/manim/mobject/geometry/__init__.py b/manim/mobject/geometry/__init__.py index abae9c0da0..cf3283bc69 100644 --- a/manim/mobject/geometry/__init__.py +++ b/manim/mobject/geometry/__init__.py @@ -8,6 +8,7 @@ ~arc ~boolean_ops + ~labeled ~line ~polygram ~shape_matchers diff --git a/manim/mobject/geometry/labeled.py b/manim/mobject/geometry/labeled.py new file mode 100644 index 0000000000..91f8cb0912 --- /dev/null +++ b/manim/mobject/geometry/labeled.py @@ -0,0 +1,153 @@ +r"""Mobjects that inherit from lines and contain a label along the length.""" + +from __future__ import annotations + +__all__ = ["LabeledLine", "LabeledArrow"] + +from manim.constants import * +from manim.mobject.geometry.line import Arrow, Line +from manim.mobject.geometry.shape_matchers import ( + BackgroundRectangle, + SurroundingRectangle, +) +from manim.mobject.text.tex_mobject import MathTex, Tex +from manim.mobject.text.text_mobject import Text +from manim.utils.color import WHITE, Color + + +class LabeledLine(Line): + """Constructs a line containing a label box somewhere along its length. + + Parameters + ---------- + label : str | Tex | MathTex | Text + Label that will be displayed on the line. + label_position : float | optional + A ratio in the range [0-1] to indicate the position of the label with respect to the length of the line. Default value is 0.5. + font_size : float | optional + Control font size for the label. This parameter is only used when `label` is of type `str`. + label_color: numpy.ndarray | optional + The color of the label's text. This parameter is only used when `label` is of type `str`. + label_frame : Bool | optional + Add a `SurroundingRectangle` frame to the label box. + frame_fill_color : numpy.ndarray | optional + Background color to fill the label box. If no value is provided, the background color of the canvas will be used. + frame_fill_opacity : float | optional + Determine the opacity of the label box by passing a value in the range [0-1], where 0 indicates complete transparency and 1 means full opacity. + + .. seealso:: + :class:`LabeledArrow` + + Examples + -------- + .. manim:: LabeledLineExample + :save_last_frame: + + class LabeledLineExample(Scene): + def construct(self): + line = LabeledLine( + label = '0.5', + label_position = 0.8, + font_size = 20, + label_color = WHITE, + label_frame = True, + + start=LEFT+DOWN, + end=RIGHT+UP) + + + line.set_length(line.get_length() * 2) + self.add(line) + """ + + def __init__( + self, + label: str | Tex | MathTex | Text, + label_position: float = 0.5, + font_size: float = DEFAULT_FONT_SIZE, + label_color: Color | str | None = WHITE, + label_frame: bool = True, + frame_fill_color: Color | str | None = None, + frame_fill_opacity: float = 1, + *args, + **kwargs, + ) -> None: + if isinstance(label, str): + from manim import MathTex + + rendered_label = MathTex(label, color=label_color, font_size=font_size) + else: + rendered_label = label + + super().__init__(*args, **kwargs) + + # calculating the vector for the label position + line_start, line_end = self.get_start_and_end() + new_vec = (line_end - line_start) * label_position + label_coords = line_start + new_vec + + # rendered_label.move_to(self.get_vector() * label_position) + rendered_label.move_to(label_coords) + + box = BackgroundRectangle( + rendered_label, + buff=0.05, + color=frame_fill_color, + fill_opacity=frame_fill_opacity, + stroke_width=0.5, + ) + self.add(box) + + if label_frame: + box_frame = SurroundingRectangle( + rendered_label, buff=0.05, color=label_color, stroke_width=0.5 + ) + + self.add(box_frame) + + self.add(rendered_label) + + +class LabeledArrow(LabeledLine, Arrow): + """Constructs an arrow containing a label box somewhere along its length. + This class inherits its label properties from `LabeledLine`, so the main parameters controlling it are the same. + + Parameters + ---------- + label : str | Tex | MathTex | Text + Label that will be displayed on the line. + label_position : float | optional + A ratio in the range [0-1] to indicate the position of the label with respect to the length of the line. Default value is 0.5. + font_size : float | optional + Control font size for the label. This parameter is only used when `label` is of type `str`. + label_color: numpy.ndarray | optional + The color of the label's text. This parameter is only used when `label` is of type `str`. + label_frame : Bool | optional + Add a `SurroundingRectangle` frame to the label box. + frame_fill_color : numpy.ndarray | optional + Background color to fill the label box. If no value is provided, the background color of the canvas will be used. + frame_fill_opacity : float | optional + Determine the opacity of the label box by passing a value in the range [0-1], where 0 indicates complete transparency and 1 means full opacity. + + + .. seealso:: + :class:`LabeledLine` + + Examples + -------- + .. manim:: LabeledArrowExample + :save_last_frame: + + class LabeledArrowExample(Scene): + def construct(self): + l_arrow = LabeledArrow("0.5", start=LEFT*3, end=RIGHT*3 + UP*2, label_position=0.5) + + self.add(l_arrow) + """ + + def __init__( + self, + *args, + **kwargs, + ) -> None: + super().__init__(*args, **kwargs) diff --git a/tests/test_graphical_units/control_data/geometry/LabeledArrow.npz b/tests/test_graphical_units/control_data/geometry/LabeledArrow.npz new file mode 100644 index 0000000000000000000000000000000000000000..43baefcbc5e09386f61e3ae344937d6f5f47c08d GIT binary patch literal 2884 zcmWIWW@Zs#U|`??Vnv1tqE1^jaWOD7uu3xUF^Djv6(#1T#-}8fB*&^vO2Ob`g7gVac!0IZ(#JGK`jFy_x-VT8(gKaLV8G^h*n?pE!J93$p ziSkzo@;iN0c=cbQ!l+tMWKYFsosI?dP3*!ouX8+SsLXnn9ae7so5v=_$k->X`1gkQ zd*0jc=lOHze|Gk1m(w914}Dm=@Z+O?*`xda-HCtmN@JSa@&6L`|9?Mt@uT(On;-tq z-Sv3uZR%cb|D1eSzW#q+eYpGgh4QglH@#>Sg-bHwXfg3^V_?3@9If+mFxXMZZesie7rC8sT|0`8DUpntO7=H zHqgZjGIigr>XkNMmb7ukwe|7)pWJd<81Qpv<>zNxGA}Rt`S|<$``3X!b+~-0{OYx} z(U-4W3Aweewt839*Q}`Rd3T$#-{0Fid!9|@q;)YnCq+d^Kkt9O+Y1yPXVvb9Ha9n~ zT)%$(CVNA}jVX3ri{1O{KFLLfgF(He^D~;?Qyu7^p^1HjcFQ1)l zF22Wo>1v=gTeDQNzdqZoHTmrPedX`(sTMP)ndRJ=0L+QgZ{4~jCUZR$m}jCkO`3M< zd}rO`W4)pOePclpuq(s+>2sI$Zo)6MfZi8eyKL#F?aZ*~^zN!DWJX>hsf2i?pVCtqjn( z@@FS7uwEUVrW<`}clrAoePHNr;Nq9Fxc~~b)djDvXeR#wvPQvZ2#kgR-Vj*f{huko pn~_O`8CdRMZSx|uHvlso16m6>z?+o~B+3YcHbD9luy$c!002d)o)Q26 literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/control_data/geometry/LabeledLine.npz b/tests/test_graphical_units/control_data/geometry/LabeledLine.npz new file mode 100644 index 0000000000000000000000000000000000000000..b431dde19b4b915df5eb27a98e189f5d79088cc5 GIT binary patch literal 2669 zcmWIWW@Zs#U|`??Vnqh&%4DD0oD2*Ntdb0T3?d9^MTxno@hOQViF$bjm5dAmU>TrN z29PQcczf3|J0x7@*uyKW9;~9J%QFO0q&R{O9=Ku9t>GpT&1K{v7G<)mEO53(S=X|+ z_m&2fJZ2Y&*%cJCQ;3tXSN=f1f=Wv5E7=zUZzNu8o2J$1*%X{teSUuKQ~or+f4|oK zeEVHEp68F*hw8VFu3SAC_ICEcTk>z4w>~_0tN-%a_~_^LKNEMA7OtwYtNZtSb@2N6 z@qb_bIdkRp*KqcBcK)mT<>c1%%T(2xo7nt#{-8Q8o{xtI{TmCeektlZht+q?FsH6u`w_$)3428HD- zfl7)fWj36T+#9EVHqH22*49&Z?!-h!L}+~e{CVl!yz;blU!OBEF#L${n`^aIFAd17 zSydv+z;K}b^^p`RT#I=66*!HG6ET zzPyO9_M2l7=r`Z)Zftn9nwnY_%(RT-eX>taPFBBL`gQMt*VosVzbk)tC-U37ySI1F zpE>j89LXQ&@9(YnxQK_B_bWJz-UGu(JA7TqyxjZy_5z)DNt)KT;)&IS=HhS*w zRr~c~c3gP5=Ja&^>DkxUt+f(nU|2B!Yu18SJ^Rc5#y{|#ZB|-WA3AsIzj#o*d|CZ} zaU&>dK3HB11*Qu5WpV4Lhpi5M_UzfILx-GZ&Y!RUwrsb_?6VQ3#cS=wfl+we$jT~8 zOkCW%R99br`o@hLP3zTxLH*S!7?{AGm;jA(@Ec_gpKv(PK6CEew Date: Fri, 4 Aug 2023 16:42:55 -0700 Subject: [PATCH 263/555] Fixed IPython terminal history and embedded shell instatiation for interactive_embed scenes (#3306) * Fixed IPython sqlite errors/history for interactive_embed scenes * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Add config to instance method --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Tristan Schulz --- manim/scene/scene.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 69f0f95848..0fe5996bd9 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -1317,12 +1317,20 @@ def get_embedded_method(method_name): # Allow for calling scene methods without prepending 'self.'. local_namespace[method] = embedded_method + from sqlite3 import connect + + from IPython.core.getipython import get_ipython from IPython.terminal.embed import InteractiveShellEmbed from traitlets.config import Config cfg = Config() cfg.TerminalInteractiveShell.confirm_exit = False - shell = InteractiveShellEmbed(config=cfg) + if get_ipython() is None: + shell = InteractiveShellEmbed.instance(config=cfg) + else: + shell = InteractiveShellEmbed(config=cfg) + hist = get_ipython().history_manager + hist.db = connect(hist.hist_file, check_same_thread=False) keyboard_thread = threading.Thread( target=ipython, From efd6474b7660c3aa9712359aee244872664488cd Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 5 Aug 2023 11:03:09 +0200 Subject: [PATCH 264/555] Added new ``manim checkhealth`` CLI subcommand (#3299) * added new checkhealth subcommand * basic checkhealth tests * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * check -> healthcheck * more helpful test output on checkhealth fail * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * callable -> Callable * fix executable check for windows * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed type * shutil already returns .exe in case it is there * debug commit ... * do proper debug commit for windows ... * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix failing test if executable is batch file * added more helpful (?) recommendations on failed tests * allow rendering ManimBanner from prerendered SVG path * improved test scene, actually test text / latex * added debug info on python executable * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove debug test again * move SCALE_FACTOR_PER_FONT_POINT to constants * access constants via module in logo.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * replaced other occurrence of 48 / 960 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- manim/__main__.py | 2 + manim/cli/checkhealth/__init__.py | 0 manim/cli/checkhealth/checks.py | 173 ++++++++++++++++++++++++++++++ manim/cli/checkhealth/commands.py | 81 ++++++++++++++ manim/constants.py | 2 + manim/mobject/logo.py | 128 ++++++++++++++++++---- manim/mobject/text/tex_mobject.py | 2 - tests/interface/test_commands.py | 26 ++++- 8 files changed, 390 insertions(+), 24 deletions(-) create mode 100644 manim/cli/checkhealth/__init__.py create mode 100644 manim/cli/checkhealth/checks.py create mode 100644 manim/cli/checkhealth/commands.py diff --git a/manim/__main__.py b/manim/__main__.py index d1b0fff204..c90d24bfac 100644 --- a/manim/__main__.py +++ b/manim/__main__.py @@ -7,6 +7,7 @@ from . import __version__, cli_ctx_settings, console from .cli.cfg.group import cfg +from .cli.checkhealth.commands import checkhealth from .cli.default_group import DefaultGroup from .cli.init.commands import init from .cli.new.group import new @@ -48,6 +49,7 @@ def main(ctx): pass +main.add_command(checkhealth) main.add_command(cfg) main.add_command(plugins) main.add_command(init) diff --git a/manim/cli/checkhealth/__init__.py b/manim/cli/checkhealth/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/manim/cli/checkhealth/checks.py b/manim/cli/checkhealth/checks.py new file mode 100644 index 0000000000..600784337b --- /dev/null +++ b/manim/cli/checkhealth/checks.py @@ -0,0 +1,173 @@ +"""Auxiliary module for the checkhealth subcommand, contains +the actual check implementations.""" + +from __future__ import annotations + +import os +import shutil +import subprocess +from typing import Callable + +from ..._config import config + +HEALTH_CHECKS = [] + + +def healthcheck( + description: str, + recommendation: str, + skip_on_failed: list[Callable | str] | None = None, + post_fail_fix_hook: Callable | None = None, +): + """Decorator used for declaring health checks. + + This decorator attaches some data to a function, + which is then added to a list containing all checks. + + Parameters + ---------- + description + A brief description of this check, displayed when + the checkhealth subcommand is run. + recommendation + Help text which is displayed in case the check fails. + skip_on_failed + A list of check functions which, if they fail, cause + the current check to be skipped. + post_fail_fix_hook + A function that is supposed to (interactively) help + to fix the detected problem, if possible. This is + only called upon explicit confirmation of the user. + + Returns + ------- + A check function, as required by the checkhealth subcommand. + """ + if skip_on_failed is None: + skip_on_failed = [] + skip_on_failed = [ + skip.__name__ if callable(skip) else skip for skip in skip_on_failed + ] + + def decorator(func): + func.description = description + func.recommendation = recommendation + func.skip_on_failed = skip_on_failed + func.post_fail_fix_hook = post_fail_fix_hook + HEALTH_CHECKS.append(func) + return func + + return decorator + + +@healthcheck( + description="Checking whether manim is on your PATH", + recommendation=( + "The command is currently not on your system's PATH.\n\n" + "You can work around this by calling the manim module directly " + "via instead of just .\n\n" + "To fix the PATH issue properly: " + "Usually, the Python package installer pip issues a warning " + "during the installation which contains more information. " + "Consider reinstalling manim via " + "followed by to see the warning again, " + "then consult the internet on how to modify your system's " + "PATH variable." + ), +) +def is_manim_on_path(): + path_to_manim = shutil.which("manim") + return path_to_manim is not None + + +@healthcheck( + description="Checking whether the executable belongs to manim", + recommendation=( + "The command does not belong to your installed version " + "of this library, it likely belongs to manimgl / manimlib.\n\n" + "Run manim via or via , or uninstall " + "and reinstall manim via to fix this." + ), + skip_on_failed=[is_manim_on_path], +) +def is_manim_executable_associated_to_this_library(): + path_to_manim = shutil.which("manim") + with open(path_to_manim, "rb") as f: + manim_exec = f.read() + + # first condition below corresponds to the executable being + # some sort of python script. second condition happens when + # the executable is actually a Windows batch file. + return b"manim.__main__" in manim_exec or b'"%~dp0\\manim"' in manim_exec + + +@healthcheck( + description="Checking whether ffmpeg is available", + recommendation=( + "Manim does not work without ffmpeg. Please follow our " + "installation instructions " + "at https://docs.manim.community/en/stable/installation.html " + "to download ffmpeg. Then, either ...\n\n" + "(a) ... make the ffmpeg executable available to your system's PATH,\n" + "(b) or, alternatively, use to create a " + "custom configuration and set the ffmpeg_executable variable to the " + "full absolute path to the ffmpeg executable." + ), +) +def is_ffmpeg_available(): + path_to_ffmpeg = shutil.which(config.ffmpeg_executable) + return path_to_ffmpeg is not None and os.access(path_to_ffmpeg, os.X_OK) + + +@healthcheck( + description="Checking whether ffmpeg is working", + recommendation=( + "Your installed version of ffmpeg does not support x264 encoding, " + "which manim requires. Please follow our installation instructions " + "at https://docs.manim.community/en/stable/installation.html " + "to download and install a newer version of ffmpeg." + ), + skip_on_failed=[is_ffmpeg_available], +) +def is_ffmpeg_working(): + ffmpeg_version = subprocess.run( + [config.ffmpeg_executable, "-version"], + stdout=subprocess.PIPE, + ).stdout.decode() + return ( + ffmpeg_version.startswith("ffmpeg version") + and "--enable-libx264" in ffmpeg_version + ) + + +@healthcheck( + description="Checking whether latex is available", + recommendation=( + "Manim cannot find on your system's PATH. " + "You will not be able to use Tex and MathTex mobjects " + "in your scenes.\n\n" + "Consult our installation instructions " + "at https://docs.manim.community/en/stable/installation.html " + "or search the web for instructions on how to install a " + "LaTeX distribution on your operating system." + ), +) +def is_latex_available(): + path_to_latex = shutil.which("latex") + return path_to_latex is not None and os.access(path_to_latex, os.X_OK) + + +@healthcheck( + description="Checking whether dvisvgm is available", + recommendation=( + "Manim could find , but not on your system's " + "PATH. Make sure your installed LaTeX distribution comes with " + "dvisvgm and consider installing a larger distribution if it " + "does not." + ), + skip_on_failed=[is_latex_available], +) +def is_dvisvgm_available(): + path_to_dvisvgm = shutil.which("dvisvgm") + return path_to_dvisvgm is not None and os.access(path_to_dvisvgm, os.X_OK) diff --git a/manim/cli/checkhealth/commands.py b/manim/cli/checkhealth/commands.py new file mode 100644 index 0000000000..5386f5e7e7 --- /dev/null +++ b/manim/cli/checkhealth/commands.py @@ -0,0 +1,81 @@ +"""A CLI utility helping to diagnose problems with +your Manim installation. + +""" + +from __future__ import annotations + +import sys + +import click +import cloup + +from .checks import HEALTH_CHECKS + + +@cloup.command( + context_settings=None, +) +def checkhealth(): + """This subcommand checks whether Manim is installed correctly + and has access to its required (and optional) system dependencies. + """ + click.echo(f"Python executable: {sys.executable}\n") + click.echo("Checking whether your installation of Manim Community is healthy...") + failed_checks = [] + + for check in HEALTH_CHECKS: + click.echo(f"- {check.description} ... ", nl=False) + if any( + failed_check.__name__ in check.skip_on_failed + for failed_check in failed_checks + ): + click.secho("SKIPPED", fg="blue") + continue + check_result = check() + if check_result: + click.secho("PASSED", fg="green") + else: + click.secho("FAILED", fg="red") + failed_checks.append(check) + + click.echo() + + if failed_checks: + click.echo( + "There are problems with your installation, " + "here are some recommendations to fix them:" + ) + for ind, failed_check in enumerate(failed_checks): + click.echo(failed_check.recommendation) + if ind + 1 < len(failed_checks): + click.confirm("Continue with next recommendation?") + + else: # no problems detected! + click.echo("No problems detected, your installation seems healthy!") + render_test_scene = click.confirm( + "Would you like to render and preview a test scene?" + ) + if render_test_scene: + import manim as mn + + class CheckHealthDemo(mn.Scene): + def construct(self): + banner = mn.ManimBanner().shift(mn.UP * 0.5) + self.play(banner.create()) + self.wait(0.5) + self.play(banner.expand()) + self.wait(0.5) + text_left = mn.Text("All systems operational!") + formula_right = mn.MathTex(r"\oint_{\gamma} f(z)~dz = 0") + text_tex_group = mn.VGroup(text_left, formula_right) + text_tex_group.arrange(mn.RIGHT, buff=1).next_to(banner, mn.DOWN) + self.play(mn.Write(text_tex_group)) + self.wait(0.5) + self.play( + mn.FadeOut(banner, shift=mn.UP), + mn.FadeOut(text_tex_group, shift=mn.DOWN), + ) + + with mn.tempconfig({"preview": True, "disable_caching": True}): + CheckHealthDemo().render() diff --git a/manim/constants.py b/manim/constants.py index d81d85902c..1f6a8684e6 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -62,6 +62,7 @@ "DEFAULT_POINT_DENSITY_1D", "DEFAULT_STROKE_WIDTH", "DEFAULT_FONT_SIZE", + "SCALE_FACTOR_PER_FONT_POINT", "PI", "TAU", "DEGREES", @@ -183,6 +184,7 @@ DEFAULT_POINT_DENSITY_1D: int = 10 DEFAULT_STROKE_WIDTH: int = 4 DEFAULT_FONT_SIZE: float = 48 +SCALE_FACTOR_PER_FONT_POINT: float = 1 / 960 # Mathematical constants PI: float = np.pi diff --git a/manim/mobject/logo.py b/manim/mobject/logo.py index dcb87bde2e..6242a4c645 100644 --- a/manim/mobject/logo.py +++ b/manim/mobject/logo.py @@ -4,19 +4,100 @@ __all__ = ["ManimBanner"] +import svgelements as se + from manim.animation.updaters.update import UpdateFromAlphaFunc from manim.mobject.geometry.arc import Circle from manim.mobject.geometry.polygram import Square, Triangle -from manim.mobject.text.tex_mobject import MathTex, Tex +from .. import constants as cst from ..animation.animation import override_animation from ..animation.composition import AnimationGroup, Succession from ..animation.creation import Create, SpiralIn from ..animation.fading import FadeIn -from ..constants import DOWN, LEFT, ORIGIN, RIGHT, TAU, UP +from ..mobject.svg.svg_mobject import VMobjectFromSVGPath from ..mobject.types.vectorized_mobject import VGroup -from ..utils.rate_functions import ease_in_out_cubic, ease_out_sine, smooth -from ..utils.tex_templates import TexFontTemplates +from ..utils.rate_functions import ease_in_out_cubic, smooth + +MANIM_SVG_PATHS: list[se.Path] = [ + se.Path( # double stroke letter M + "M4.64259-2.092154L2.739726-6.625156C2.660025-6.824408 2.650062-6.824408 " + "2.381071-6.824408H.52802C.348692-6.824408 .199253-6.824408 .199253-6.645" + "081C.199253-6.475716 .37858-6.475716 .428394-6.475716C.547945-6.475716 ." + "816936-6.455791 1.036115-6.37609V-1.05604C1.036115-.846824 1.036115-.408" + "468 .358655-.348692C.169365-.328767 .169365-.18929 .169365-.179328C.1693" + "65 0 .328767 0 .508095 0H2.052304C2.231631 0 2.381071 0 2.381071-.179328" + "C2.381071-.268991 2.30137-.33873 2.221669-.348692C1.454545-.408468 1.454" + "545-.826899 1.454545-1.05604V-6.017435L1.464508-6.027397L3.895392-.20921" + "5C3.975093-.029888 4.044832 0 4.104608 0C4.224159 0 4.254047-.079701 4.3" + "03861-.199253L6.744707-6.027397L6.75467-6.017435V-1.05604C6.75467-.84682" + "4 6.75467-.408468 6.07721-.348692C5.88792-.328767 5.88792-.18929 5.88792" + "-.179328C5.88792 0 6.047323 0 6.22665 0H8.886675C9.066002 0 9.215442 0 9" + ".215442-.179328C9.215442-.268991 9.135741-.33873 9.05604-.348692C8.28891" + "7-.408468 8.288917-.826899 8.288917-1.05604V-5.768369C8.288917-5.977584 " + "8.288917-6.41594 8.966376-6.475716C9.066002-6.485679 9.155666-6.535492 9" + ".155666-6.645081C9.155666-6.824408 9.006227-6.824408 8.826899-6.824408H6" + ".90411C6.645081-6.824408 6.625156-6.824408 6.535492-6.615193L4.64259-2.0" + "92154ZM4.343711-1.912827C4.423412-1.743462 4.433375-1.733499 4.552927-1." + "693649L4.11457-.637609H4.094645L1.823163-6.057285C1.77335-6.1868 1.69364" + "9-6.356164 1.554172-6.475716H2.420922L4.343711-1.912827ZM1.334994-.34869" + "2H1.165629C1.185554-.37858 1.205479-.408468 1.225405-.428394C1.235367-.4" + "38356 1.235367-.448319 1.24533-.458281L1.334994-.348692ZM7.103362-6.4757" + "16H8.159402C7.940224-6.22665 7.940224-5.967621 7.940224-5.788294V-1.0361" + "15C7.940224-.856787 7.940224-.597758 8.169365-.348692H6.884184C7.103362-" + ".597758 7.103362-.856787 7.103362-1.036115V-6.475716Z" + ), + se.Path( # letter a + "M1.464508-4.024907C1.464508-4.234122 1.743462-4.393524 2.092154-4.393524" + "C2.669988-4.393524 2.929016-4.124533 2.929016-3.516812V-2.789539C1.77335" + "-2.440847 .249066-2.042341 .249066-.916563C.249066-.308842 .71731 .13947" + "7 1.354919 .139477C1.92279 .139477 2.381071-.059776 2.929016-.557908C3.0" + "38605-.049813 3.257783 .139477 3.745953 .139477C4.174346 .139477 4.48318" + "8-.019925 4.861768-.428394L4.712329-.637609L4.612702-.537983C4.582814-.5" + "08095 4.552927-.498132 4.503113-.498132C4.363636-.498132 4.293898-.58779" + "6 4.293898-.747198V-3.347447C4.293898-4.184309 3.536737-4.712329 2.32129" + "5-4.712329C1.195517-4.712329 .438356-4.204234 .438356-3.457036C.438356-3" + ".048568 .67746-2.799502 1.085928-2.799502C1.484433-2.799502 1.763387-3.0" + "38605 1.763387-3.377335C1.763387-3.676214 1.464508-3.88543 1.464508-4.02" + "4907ZM2.919054-.996264C2.650062-.687422 2.450809-.56787 2.211706-.56787C" + "1.912827-.56787 1.703611-.836862 1.703611-1.235367C1.703611-1.8132 2.122" + "042-2.231631 2.919054-2.440847V-.996264Z" + ), + se.Path( # letter n + "M2.948941-4.044832C3.297634-4.044832 3.466999-3.775841 3.466999-3.217933" + "V-.806974C3.466999-.438356 3.337484-.278954 2.998755-.239103V0H5.339975V" + "-.239103C4.951432-.268991 4.851806-.388543 4.851806-.806974V-3.307597C4." + "851806-4.164384 4.323786-4.712329 3.506849-4.712329C2.909091-4.712329 2." + "450809-4.433375 2.082192-3.845579V-4.592777H.179328V-4.353674C.617684-4." + "283935 .707347-4.184309 .707347-3.765878V-.836862C.707347-.418431 .62764" + "6-.328767 .179328-.239103V0H2.580324V-.239103C2.211706-.288917 2.092154-" + ".438356 2.092154-.806974V-3.466999C2.092154-3.576588 2.530511-4.044832 2" + ".948941-4.044832Z" + ), + se.Path( # letter i + "M2.15193-4.592777H.239103V-4.353674C.67746-4.26401 .767123-4.174346 .767" + "123-3.765878V-.836862C.767123-.428394 .697385-.348692 .239103-.239103V0H" + "2.6401V-.239103C2.291407-.288917 2.15193-.428394 2.15193-.806974V-4.5927" + "77ZM1.454545-6.884184C1.026152-6.884184 .67746-6.535492 .67746-6.117061C" + ".67746-5.668742 1.006227-5.339975 1.444583-5.339975S2.221669-5.668742 2." + "221669-6.107098C2.221669-6.535492 1.882939-6.884184 1.454545-6.884184Z" + ), + se.Path( # letter m + "M2.929016-4.044832C3.317559-4.044832 3.466999-3.815691 3.466999-3.217933" + "V-.806974C3.466999-.398506 3.35741-.268991 2.988792-.239103V0H5.32005V-." + "239103C4.971357-.278954 4.851806-.428394 4.851806-.806974V-3.466999C4.85" + "1806-3.576588 5.310087-4.044832 5.69863-4.044832C6.07721-4.044832 6.2266" + "5-3.805729 6.22665-3.217933V-.806974C6.22665-.388543 6.117061-.268991 5." + "738481-.239103V0H8.109589V-.239103C7.721046-.259029 7.611457-.37858 7.61" + "1457-.806974V-3.307597C7.611457-4.164384 7.083437-4.712329 6.266501-4.71" + "2329C5.69863-4.712329 5.32005-4.483188 4.801993-3.845579C4.503113-4.4732" + "25 4.154421-4.712329 3.526775-4.712329S2.440847-4.443337 2.062267-3.8455" + "79V-4.592777H.179328V-4.353674C.617684-4.293898 .707347-4.174346 .707347" + "-3.765878V-.836862C.707347-.428394 .617684-.318804 .179328-.239103V0H2.5" + "50436V-.239103C2.201743-.288917 2.092154-.428394 2.092154-.806974V-3.466" + "999C2.092154-3.58655 2.530511-4.044832 2.929016-4.044832Z" + ), +] class ManimBanner(VGroup): @@ -67,27 +148,32 @@ def __init__(self, dark_theme: bool = True): self.font_color = "#ece6e2" if dark_theme else "#343434" self.scale_factor = 1 - self.M = MathTex(r"\mathbb{M}").scale(7).set_color(self.font_color) - self.M.shift(2.25 * LEFT + 1.5 * UP) + self.M = VMobjectFromSVGPath(MANIM_SVG_PATHS[0]).flip(cst.RIGHT).center() + self.M.set(stroke_width=0).scale( + 7 * cst.DEFAULT_FONT_SIZE * cst.SCALE_FACTOR_PER_FONT_POINT + ) + self.M.set_fill(color=self.font_color, opacity=1).shift( + 2.25 * cst.LEFT + 1.5 * cst.UP + ) - self.circle = Circle(color=logo_green, fill_opacity=1).shift(LEFT) - self.square = Square(color=logo_blue, fill_opacity=1).shift(UP) - self.triangle = Triangle(color=logo_red, fill_opacity=1).shift(RIGHT) + self.circle = Circle(color=logo_green, fill_opacity=1).shift(cst.LEFT) + self.square = Square(color=logo_blue, fill_opacity=1).shift(cst.UP) + self.triangle = Triangle(color=logo_red, fill_opacity=1).shift(cst.RIGHT) self.shapes = VGroup(self.triangle, self.square, self.circle) self.add(self.shapes, self.M) - self.move_to(ORIGIN) + self.move_to(cst.ORIGIN) anim = VGroup() - for i, ch in enumerate("anim"): - tex = Tex( - "\\textbf{" + ch + "}", - tex_template=TexFontTemplates.gnu_freeserif_freesans, + for ind, path in enumerate(MANIM_SVG_PATHS[1:]): + tex = VMobjectFromSVGPath(path).flip(cst.RIGHT).center() + tex.set(stroke_width=0).scale( + cst.DEFAULT_FONT_SIZE * cst.SCALE_FACTOR_PER_FONT_POINT ) - if i != 0: + if ind > 0: tex.next_to(anim, buff=0.01) - tex.align_to(self.M, DOWN) + tex.align_to(self.M, cst.DOWN) anim.add(tex) - anim.set_color(self.font_color) + anim.set_fill(color=self.font_color, opacity=1) anim.height = m_height_over_anim_height * self.M.height # Note: "anim" is only shown in the expanded state @@ -181,7 +267,7 @@ def construct(self): m_shape_offset = 6.25 * self.scale_factor shape_sliding_overshoot = self.scale_factor * 0.8 m_anim_buff = 0.06 - self.anim.next_to(self.M, buff=m_anim_buff).align_to(self.M, DOWN) + self.anim.next_to(self.M, buff=m_anim_buff).align_to(self.M, cst.DOWN) self.anim.set_opacity(0) self.shapes.save_state() m_clone = self.anim[-1].copy() @@ -193,7 +279,7 @@ def construct(self): def shift(vector): self.shapes.restore() - left_group.align_to(self.M.saved_state, LEFT) + left_group.align_to(self.M.saved_state, cst.LEFT) if direction == "right": self.shapes.shift(vector) elif direction == "center": @@ -203,7 +289,7 @@ def shift(vector): left_group.shift(-vector) def slide_and_uncover(mob, alpha): - shift(alpha * (m_shape_offset + shape_sliding_overshoot) * RIGHT) + shift(alpha * (m_shape_offset + shape_sliding_overshoot) * cst.RIGHT) # Add letters when they are covered for letter in mob.anim: @@ -225,7 +311,7 @@ def slide_back(mob, alpha): m_clone.move_to(mob.anim[-1]) mob.anim.set_opacity(1) - shift(alpha * shape_sliding_overshoot * LEFT) + shift(alpha * shape_sliding_overshoot * cst.LEFT) if alpha == 1: mob.remove(m_clone) diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index b92b5459e5..e265642ff0 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -38,8 +38,6 @@ from manim.utils.tex import TexTemplate from manim.utils.tex_file_writing import tex_to_svg_file -SCALE_FACTOR_PER_FONT_POINT = 1 / 960 - tex_string_to_mob_map = {} diff --git a/tests/interface/test_commands.py b/tests/interface/test_commands.py index 5f6f0dcb75..995daf2c37 100644 --- a/tests/interface/test_commands.py +++ b/tests/interface/test_commands.py @@ -1,13 +1,15 @@ from __future__ import annotations +import shutil import sys from pathlib import Path from textwrap import dedent from click.testing import CliRunner -from manim import __version__, capture +from manim import __version__, capture, tempconfig from manim.__main__ import main +from manim.cli.checkhealth.checks import HEALTH_CHECKS def test_manim_version(): @@ -62,6 +64,28 @@ def test_manim_plugins_subcommand(): assert dedent(expected_output) == result.output +def test_manim_checkhealth_subcommand(): + command = ["checkhealth"] + runner = CliRunner() + result = runner.invoke(main, command) + output_lines = result.output.split("\n") + num_passed = len([line for line in output_lines if "PASSED" in line]) + assert num_passed == len( + HEALTH_CHECKS + ), f"Some checks failed! Full output:\n{result.output}" + assert "No problems detected, your installation seems healthy!" in output_lines + + +def test_manim_checkhealth_failing_subcommand(): + command = ["checkhealth"] + runner = CliRunner() + with tempconfig({"ffmpeg_executable": "/path/to/nowhere"}): + result = runner.invoke(main, command) + output_lines = result.output.split("\n") + assert "- Checking whether ffmpeg is available ... FAILED" in output_lines + assert "- Checking whether ffmpeg is working ... SKIPPED" in output_lines + + def test_manim_init_subcommand(): command = ["init"] runner = CliRunner() From 9561896d9e65e581d4a80ca6b274f94044aff45b Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Sun, 6 Aug 2023 11:36:18 +0200 Subject: [PATCH 265/555] Fix random complaint about list (#3315) --- manim/scene/scene.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 0fe5996bd9..5f3fb99247 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -1530,8 +1530,10 @@ def construct(self): subtitle = srt.Subtitle( index=len(self.renderer.file_writer.subcaptions), content=content, - start=datetime.timedelta(seconds=self.renderer.time + offset), - end=datetime.timedelta(seconds=self.renderer.time + offset + duration), + start=datetime.timedelta(seconds=float(self.renderer.time + offset)), + end=datetime.timedelta( + seconds=float(self.renderer.time + offset + duration) + ), ) self.renderer.file_writer.subcaptions.append(subtitle) From 59ff3271a5db7414fe50f590ebce570f4d0a0f71 Mon Sep 17 00:00:00 2001 From: Jason Grace <110117391+JasonGrace2282@users.noreply.github.com> Date: Sun, 6 Aug 2023 18:11:39 -0400 Subject: [PATCH 266/555] Added Docstring/Example for :meth:`always_redraw` (#3312) * Added docstring & example for always_redraw * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * made more descriptive names for vars in example * Change runtime 10s->3s Co-authored-by: Jason Villanueva * change Create -> add Co-authored-by: Benjamin Hackl * Added typehint for always_redraw * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Changed description of :meth:`always_redraw` Co-authored-by: Benjamin Hackl * Added return type to :meth:`always_redraw` Co-authored-by: Benjamin Hackl --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Jason Villanueva Co-authored-by: Benjamin Hackl --- .../updaters/mobject_update_utils.py | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/manim/animation/updaters/mobject_update_utils.py b/manim/animation/updaters/mobject_update_utils.py index c77174c89c..698dc03d56 100644 --- a/manim/animation/updaters/mobject_update_utils.py +++ b/manim/animation/updaters/mobject_update_utils.py @@ -15,6 +15,7 @@ import inspect +from collections.abc import Callable import numpy as np @@ -55,9 +56,46 @@ def updater(mob): return mobject -def always_redraw(func): +def always_redraw(func: Callable[[], Mobject]) -> Mobject: + """Redraw the mobject constructed by a function every frame. + + This function returns a mobject with an attached updater that + continuously regenerates the mobject according to the + specified function. + + Parameters + ---------- + func + A function without (required) input arguments that returns + a mobject. + + Examples + -------- + + .. manim:: TangentAnimation + + class TangentAnimation(Scene): + def construct(self): + ax = Axes() + sine = ax.plot(np.sin, color=RED) + alpha = ValueTracker(0) + point = always_redraw( + lambda: Dot( + sine.point_from_proportion(alpha.get_value()), + color=BLUE) + ) + tangent = always_redraw( + lambda: TangentLine( + sine, + alpha=alpha.get_value(), + color=YELLOW, + length=4) + ) + self.add(ax, sine, point, tangent) + self.play(alpha.animate.set_value(1), rate_func=linear, run_time=2) + """ mob = func() - mob.add_updater(lambda m: mob.become(func())) + mob.add_updater(lambda _: mob.become(func())) return mob From 82e55b5da2cc3e12915f0ba9fccbf830a49aca7d Mon Sep 17 00:00:00 2001 From: Tristan Schulz Date: Tue, 8 Aug 2023 14:47:00 +0200 Subject: [PATCH 267/555] Adding :class: ManimColor to manim and converting all types (#3020) * first draft of color class + starting library conversion * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * changed everything to Manim color todo: figure out circular dependency in utils * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * first working draft of new color version * resolving conflicts * resolving conflicts * resolving conflicts * resolving conflicts * resolving conflicts * changed default internal value of ManimColor to np.ndarray[float] * starting to fix tests * fixed more tests and changed precision of manim color * removed premature color conversion * fixed some more tests * final test changes * fix doctests * fix for 3.8 * fixing ManimColor string representation * removing some unneccesary conversions * moved community constants to manim_colors.py and added more color standards * broke some too long lines * added fallback: check whether passed object has get_hex method * actually fix _internal_from_string * added hsv support * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove dependency on colour * fixed DARK_EARTH being assigned twice * fixed double assignment * remove more duplicated colour names * raise NotImplementedError for ManimColor.gradient * removed unused import * remove superfluous ManimColor import * fix circular import, remove dependency of space_ops on config * one more Color -> ParseableManimColor * removed one *-import * somewhat unrelated fixed type hint * -1 *-import * fixed change of logic in CoordinateSystem.get_graph_label * removed debug print; fixed type hint in mobject.py * some fixes and improvements to text_mobject.py * update three_dimensions * fixes for rendered documentation of utils.color.* * substantial improvements to documentation, including new Sphinx directive Co-authored-by: MrDiver * Rewrite of the sphinx directive to use docutils nodes and 2 column design * I just had to do it * Improve the color table * minor cleanup * fixed ColorOverview example * documentation improvements * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update manim/mobject/mobject.py Co-authored-by: Benjamin Hackl * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix flake8 errors * Removed test in test_text_mobject * Improved Documentation of core.py and added private members in sphinx so that internal methods can be documented * Change color types of labeled.py * removed some unused imports * turned docstring into comment * _colors -> _all_manim_colors; move to manim_color module * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed typing * rewrite import --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl Co-authored-by: Naveen M K --- .mypy.ini | 3 + docs/source/_templates/autosummary/class.rst | 2 + docs/source/conf.py | 1 + manim/_config/utils.py | 4 +- manim/animation/changing.py | 13 +- manim/animation/creation.py | 4 +- manim/animation/indication.py | 5 +- manim/camera/camera.py | 15 +- manim/communitycolors.py | 9 - manim/mobject/geometry/arc.py | 5 +- manim/mobject/geometry/labeled.py | 16 +- manim/mobject/geometry/line.py | 6 +- manim/mobject/geometry/polygram.py | 3 +- manim/mobject/geometry/shape_matchers.py | 8 +- manim/mobject/graphing/coordinate_systems.py | 47 +- manim/mobject/graphing/probability.py | 4 +- manim/mobject/mobject.py | 65 +- manim/mobject/opengl/opengl_mobject.py | 14 +- .../opengl/opengl_vectorized_mobject.py | 22 +- manim/mobject/table.py | 28 +- manim/mobject/text/tex_mobject.py | 6 +- manim/mobject/text/text_mobject.py | 49 +- manim/mobject/three_d/three_dimensions.py | 49 +- manim/mobject/types/image_mobject.py | 5 +- manim/mobject/types/point_cloud_mobject.py | 4 +- manim/mobject/types/vectorized_mobject.py | 73 +- manim/mobject/vector_field.py | 28 +- manim/plugins/import_plugins.py | 2 +- manim/scene/vector_space_scene.py | 21 +- manim/utils/color.py | 552 ------ manim/utils/color/AS2700.py | 234 +++ manim/utils/color/BS381.py | 315 +++ manim/utils/color/X11.py | 530 +++++ manim/utils/color/XKCD.py | 949 +++++++++ manim/utils/color/__init__.py | 58 + manim/utils/color/core.py | 998 ++++++++++ manim/utils/color/manim_colors.py | 220 +++ manim/utils/docbuild/autocolor_directive.py | 92 + manim/utils/docbuild/manim_directive.py | 2 +- manim/utils/space_ops.py | 51 +- poetry.lock | 1697 +++++++++-------- pyproject.toml | 1 - tests/module/mobject/svg/test_svg_mobject.py | 16 +- tests/module/mobject/text/test_numbers.py | 6 +- .../module/mobject/text/test_text_mobject.py | 10 - .../types/vectorized_mobject/test_stroke.py | 8 +- tests/module/utils/test_color.py | 12 +- tests/module/utils/test_manim_color.py | 22 + tests/opengl/test_color_opengl.py | 121 +- tests/opengl/test_stroke_opengl.py | 6 +- tests/opengl/test_svg_mobject_opengl.py | 16 +- tests/test_graphical_units/test_text.py | 13 +- 52 files changed, 4730 insertions(+), 1710 deletions(-) delete mode 100644 manim/communitycolors.py delete mode 100644 manim/utils/color.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 create mode 100644 manim/utils/color/core.py create mode 100644 manim/utils/color/manim_colors.py create mode 100644 manim/utils/docbuild/autocolor_directive.py create mode 100644 tests/module/utils/test_manim_color.py 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/docs/source/_templates/autosummary/class.rst b/docs/source/_templates/autosummary/class.rst index 8a0027edd4..8709ccced9 100644 --- a/docs/source/_templates/autosummary/class.rst +++ b/docs/source/_templates/autosummary/class.rst @@ -7,6 +7,8 @@ Qualified name: ``{{ fullname | escape }}`` .. autoclass:: {{ objname }} :show-inheritance: :members: + :private-members: + {% block methods %} {%- if methods %} diff --git a/docs/source/conf.py b/docs/source/conf.py index 2121352c5c..5fdcf60b79 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -43,6 +43,7 @@ "sphinx.ext.viewcode", "sphinxext.opengraph", "manim.utils.docbuild.manim_directive", + "manim.utils.docbuild.autocolor_directive", "sphinx.ext.graphviz", "sphinx.ext.inheritance_diagram", "sphinxcontrib.programoutput", diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 67522906fa..a96440ba3b 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,7 @@ 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(val)), doc="Background color of the scene (-c).", ) diff --git a/manim/animation/changing.py b/manim/animation/changing.py index fbe3a4c0d2..0354a1c002 100644 --- a/manim/animation/changing.py +++ b/manim/animation/changing.py @@ -6,12 +6,17 @@ 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.color import ( + BLUE_B, + BLUE_D, + BLUE_E, + GREY_BROWN, + WHITE, + ParsableManimColor, +) from manim.utils.rate_functions import smooth @@ -140,7 +145,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 2c8cae1424..a2e7f8a362 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 ManimColor 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..fa3d801b24 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, ParsableManimColor from ..utils.deprecation import deprecated from ..utils.rate_functions import smooth, there_and_back, wiggle from ..utils.space_ops import normalize @@ -609,7 +608,7 @@ 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 diff --git a/manim/camera/camera.py b/manim/camera/camera.py index d5ebdc30a1..b26e4aec0e 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 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.parse(config["background_color"]) + else: + self._background_color = ManimColor.parse(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/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/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index 395ae60292..5672907187 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,7 +491,7 @@ def construct(self): def __init__( self, radius: float | None = None, - color: Color | str = RED, + color: ParsableManimColor = RED, **kwargs, ): super().__init__( @@ -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__( diff --git a/manim/mobject/geometry/labeled.py b/manim/mobject/geometry/labeled.py index 91f8cb0912..1a39ee2771 100644 --- a/manim/mobject/geometry/labeled.py +++ b/manim/mobject/geometry/labeled.py @@ -12,7 +12,7 @@ ) from manim.mobject.text.tex_mobject import MathTex, Tex from manim.mobject.text.text_mobject import Text -from manim.utils.color import WHITE, Color +from manim.utils.color import WHITE, ManimColor, ParsableManimColor class LabeledLine(Line): @@ -26,11 +26,11 @@ class LabeledLine(Line): A ratio in the range [0-1] to indicate the position of the label with respect to the length of the line. Default value is 0.5. font_size : float | optional Control font size for the label. This parameter is only used when `label` is of type `str`. - label_color: numpy.ndarray | optional + label_color: ParsableManimColor | optional The color of the label's text. This parameter is only used when `label` is of type `str`. label_frame : Bool | optional Add a `SurroundingRectangle` frame to the label box. - frame_fill_color : numpy.ndarray | optional + frame_fill_color : ParsableManimColor | optional Background color to fill the label box. If no value is provided, the background color of the canvas will be used. frame_fill_opacity : float | optional Determine the opacity of the label box by passing a value in the range [0-1], where 0 indicates complete transparency and 1 means full opacity. @@ -65,13 +65,15 @@ def __init__( label: str | Tex | MathTex | Text, label_position: float = 0.5, font_size: float = DEFAULT_FONT_SIZE, - label_color: Color | str | None = WHITE, + label_color: ParsableManimColor = WHITE, label_frame: bool = True, - frame_fill_color: Color | str | None = None, + frame_fill_color: ParsableManimColor = None, frame_fill_opacity: float = 1, *args, **kwargs, ) -> None: + label_color = ManimColor(label_color) + frame_fill_color = ManimColor(frame_fill_color) if isinstance(label, str): from manim import MathTex @@ -120,11 +122,11 @@ class LabeledArrow(LabeledLine, Arrow): A ratio in the range [0-1] to indicate the position of the label with respect to the length of the line. Default value is 0.5. font_size : float | optional Control font size for the label. This parameter is only used when `label` is of type `str`. - label_color: numpy.ndarray | optional + label_color: ParsableManimColor | optional The color of the label's text. This parameter is only used when `label` is of type `str`. label_frame : Bool | optional Add a `SurroundingRectangle` frame to the label box. - frame_fill_color : numpy.ndarray | optional + frame_fill_color : ParsableManimColor | optional Background color to fill the label box. If no value is provided, the background color of the canvas will be used. frame_fill_opacity : float | optional Determine the opacity of the label box by passing a value in the range [0-1], where 0 indicates complete transparency and 1 means full opacity. diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index 695881ae9b..ce556081f4 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: ParsableManimColor = WHITE, elbow: bool = False, **kwargs, ): diff --git a/manim/mobject/geometry/polygram.py b/manim/mobject/geometry/polygram.py index daaa67534d..5064ff737e 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -19,7 +19,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 @@ -597,7 +596,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, diff --git a/manim/mobject/geometry/shape_matchers.py b/manim/mobject/geometry/shape_matchers.py index b2eec1c724..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, Color, Colors +from manim.utils.color import BLACK, RED, YELLOW, 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): @@ -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/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 581e20d506..a4da38dcac 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, ) @@ -431,7 +432,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. @@ -467,7 +468,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) @@ -823,7 +824,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, ): @@ -992,7 +995,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: @@ -1044,7 +1047,8 @@ def construct(self): if dot_config is None: dot_config = {} - color = color or graph.get_color() + if color is None: + color = graph.get_color() label = self.x_axis._create_label_tex(label).set_color(color) if x_val is None: @@ -1074,9 +1078,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, @@ -1175,11 +1179,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, tuple)): + color = [ManimColor(c) for c in color] else: - colors = color_gradient(color, len(x_range)) + color = [ManimColor(color)] + + colors = color_gradient(color, len(x_range)) for x, color in zip(x_range, colors): if input_sample_type == "left": @@ -1234,7 +1239,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, @@ -1383,7 +1388,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. @@ -1491,12 +1496,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 @@ -1670,11 +1675,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. @@ -2153,7 +2158,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, diff --git a/manim/mobject/graphing/probability.py b/manim/mobject/graphing/probability.py index f0e3a2c3f3..92fb7355e1 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 72382a622f..bd356f0884 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,14 @@ 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: ParsableManimColor | list[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 self.target = target @@ -100,7 +108,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 = ManimColor.parse(color) self.reset_points() self.generate_points() @@ -201,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: @@ -1687,7 +1695,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. @@ -1739,7 +1747,9 @@ 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 + ) -> 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 @@ -1748,19 +1758,30 @@ 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]): + """Set the color of this mobject's submobjects along the specified + gradient. + + 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 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, @@ -1770,7 +1791,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: @@ -1786,9 +1807,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() @@ -1805,7 +1826,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) @@ -1814,13 +1835,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 @@ -2169,7 +2190,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) -> list[Mobject]: return [m for m in self.get_family() if m.get_num_points() > 0] def arrange( @@ -2760,7 +2781,7 @@ def set_z_index( self, z_index_value: float, family: bool = True, - ) -> VMobject: + ) -> T: """Sets the :class:`~.Mobject`'s :attr:`z_index` to the value specified in `z_index_value`. Parameters diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 583dd4ef7e..c02ddd5c72 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -10,13 +10,11 @@ import moderngl import numpy as np -from colour import Color from manim import config, logger 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 @@ -146,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.parse(color) self.init_colors() self.shader_indices = None @@ -203,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: @@ -1971,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: @@ -2037,7 +2035,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 diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 6365c1aeda..d486dc5c76 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, @@ -146,10 +145,10 @@ def __init__( super().__init__(**kwargs) self.refresh_unit_normal() - if fill_color: - self.fill_color = Color(fill_color) - if stroke_color: - self.stroke_color = Color(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) def get_group_class(self): return OpenGLVGroup @@ -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: @@ -350,14 +349,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.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 [Color(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] @@ -1881,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 04e47b6663..ff0c0f0bd9 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,7 +80,7 @@ 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.color import BLACK, YELLOW, ManimColor, ParsableManimColor from .utils import get_vectorized_mobject_class @@ -197,9 +195,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, @@ -218,9 +216,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(entries_background_color) self.include_background_rectangle = include_background_rectangle - self.background_rectangle_color = 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 @@ -504,7 +502,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 @@ -533,7 +531,7 @@ def construct(self): column.set_color(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 @@ -752,10 +750,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(color)) return self def get_cell(self, pos: Sequence[int] = (1, 1), **kwargs) -> Polygon: @@ -816,7 +814,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. @@ -848,11 +846,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(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`. @@ -882,7 +880,7 @@ 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(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 e265642ff0..71a31a72c4 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 @@ -253,7 +253,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 a39400f31c..497f03e560 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,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 Colors, color_gradient +from manim.utils.color import ManimColor, ParsableManimColor, color_gradient from manim.utils.deprecation import deprecated TEXT_MOB_SCALE_FACTOR = 0.05 @@ -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 @@ -413,7 +412,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 = "", @@ -482,7 +481,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(color) if color else VMobject().color file_name = self._text2svg(color) PangoUtils.remove_last_M(file_name) super().__init__( @@ -643,10 +642,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: Color): + def _text2hash(self, color: ManimColor): """Generates ``sha256`` hash for file name.""" settings = ( - "PANGO" + self.font + self.slant + self.weight + color.hex_l + "PANGO" + self.font + self.slant + self.weight + str(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) @@ -691,7 +690,9 @@ def _get_settings_from_t2xs( t2xwords = set(chain(*([*t2x.keys()] for t2x, _ in t2xs))) for word in t2xwords: setting_args = { - arg: t2x[word] if word in t2x else default_args[arg] + arg: str(t2x[word]) if word in t2x else default_args[arg] + # NOTE: when t2x[word] is a ManimColor, str will yield the + # hex representation for t2x, arg in t2xs } @@ -707,13 +708,13 @@ 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(): if isinstance(gradient, str) or len(gradient) == 1: color = gradient if isinstance(gradient, str) else gradient[0] - gradient = [Color(color)] + gradient = [ManimColor(color)] colors = ( color_gradient(gradient, len(word)) if len(gradient) != 1 @@ -721,11 +722,11 @@ 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 - def _text2settings(self, color: Color): + def _text2settings(self, color: str): """Converts the texts and styles to a setting for parsing.""" t2xs = [ (self.t2f, "font"), @@ -734,6 +735,7 @@ def _text2settings(self, color: Color): (self.t2c, "color"), ] # setting_args requires values to be strings + default_args = { arg: getattr(self, arg) if arg != "color" else str(color) for _, arg in t2xs } @@ -791,7 +793,7 @@ def _text2settings(self, color: Color): return settings - def _text2svg(self, color: Color): + def _text2svg(self, color: ManimColor): """Convert the text to SVG using Pango.""" size = self._font_size line_spacing = self.line_spacing @@ -1136,7 +1138,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 = "", @@ -1189,7 +1191,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(color) if color else VMobject().color file_name = self._text2svg(color) PangoUtils.remove_last_M(file_name) @@ -1305,10 +1307,14 @@ def font_size(self, font_val): else: self.scale(font_val / self.font_size) - def _text2hash(self, color: Color): + def _text2hash(self, color: ManimColor): """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(color).to_hex().lower() ) # to differentiate from classical Pango Text settings += str(self.line_spacing) + str(self._font_size) settings += str(self.disable_ligatures) @@ -1318,7 +1324,7 @@ def _text2hash(self, color: Color): hasher.update(id_str.encode()) return hasher.hexdigest()[:16] - def _text2svg(self, color: Color | None): + def _text2svg(self, color: ManimColor): """Convert the text to SVG using Pango.""" size = self._font_size line_spacing = self.line_spacing @@ -1326,15 +1332,16 @@ def _text2svg(self, color: Color | None): line_spacing /= TEXT2SVG_ADJUSTMENT_FACTOR dir_name = config.get_dir("text_dir") - if not dir_name.exists(): + if not dir_name.is_dir(): dir_name.mkdir(parents=True) hash_name = self._text2hash(color) file_name = dir_name / (hash_name + ".svg") + if file_name.exists(): svg_file = str(file_name.resolve()) else: final_text = ( - f'{self.text}' + f'{self.text}' if color is not None else self.text ) @@ -1412,7 +1419,7 @@ def _parse_color(self, col): if re.match("#[0-9a-f]{6}", col): return col else: - return Colors[col.lower()].value + 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 57f0939c36..1ff7df118d 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -16,7 +16,7 @@ "Torus", ] -from typing import TYPE_CHECKING +from typing import Callable, Sequence import numpy as np @@ -28,15 +28,19 @@ 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 ( + BLUE, + BLUE_D, + BLUE_E, + LIGHT_GREY, + WHITE, + ManimColor, + ParsableManimColor, + interpolate_color, +) from manim.utils.iterables import tuplify from manim.utils.space_ops import normalize, perpendicular_bisector, z_to_vector -if TYPE_CHECKING: - from typing import * - - from colour import Color - class ThreeDVMobject(VMobject, metaclass=ConvertToOpenGL): def __init__(self, shade_in_3d: bool = True, **kwargs): @@ -102,10 +106,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] | bool = [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, @@ -116,10 +120,15 @@ 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(fill_color) self.fill_opacity = fill_opacity - self.checkerboard_colors = checkerboard_colors - self.stroke_color = stroke_color + 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 self.pre_function_handle_to_anchor_scale_factor = ( @@ -188,7 +197,7 @@ def _setup_in_uv_space(self): self.set_fill_by_checkerboard(*self.checkerboard_colors) def set_fill_by_checkerboard( - self, *colors: Sequence[Color], opacity: float = None + self, *colors: Sequence[ParsableManimColor], opacity: float = None ) -> Mobject: """Sets the fill_color of each face of :class:`Surface` in an alternating pattern. @@ -215,7 +224,7 @@ def set_fill_by_checkerboard( 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, ) -> Mobject: @@ -449,8 +458,8 @@ def __init__( self, point: list | np.ndarray = ORIGIN, radius: float = DEFAULT_DOT_RADIUS, - color: Color = WHITE, - resolution: Sequence[int] = (8, 8), + color: ParsableManimColor = WHITE, + resolution=(8, 8), **kwargs, ) -> None: super().__init__(center=point, radius=radius, resolution=resolution, **kwargs) @@ -491,7 +500,7 @@ def __init__( self, side_length: float = 2, fill_opacity: float = 0.75, - fill_color: Color = BLUE, + fill_color: ParsableManimColor = BLUE, stroke_width: float = 0, **kwargs, ) -> None: @@ -901,7 +910,7 @@ def __init__( start: np.ndarray = LEFT, end: np.ndarray = RIGHT, thickness: float = 0.02, - color: Color = None, + color: ParsableManimColor = None, **kwargs, ): self.thickness = thickness @@ -1124,7 +1133,7 @@ def __init__( thickness: float = 0.02, height: float = 0.3, base_radius: float = 0.08, - color: Color = WHITE, + color: ParsableManimColor = WHITE, **kwargs, ) -> None: super().__init__( diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index 25ff084d2a..5cefb1ac93 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 @@ -17,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 @@ -277,7 +276,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 354dff2e59..43e2ff08e2 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(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 12b6a85b6e..da8e560b59 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -15,9 +15,8 @@ import itertools as it import sys import typing -from typing import Callable, Optional, Sequence, Union +from typing import Callable, Sequence -import colour import numpy as np from PIL.Image import Image @@ -38,8 +37,7 @@ partial_bezier_points, proportions_along_bezier_curve_for_point, ) -from ...utils.color import BLACK, WHITE, 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 @@ -81,12 +79,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, @@ -105,7 +103,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( + background_stroke_color + ) self.background_stroke_opacity = background_stroke_opacity self.background_stroke_width = background_stroke_width self.sheen_factor = sheen_factor @@ -123,11 +124,16 @@ 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 - if stroke_color: - self.stroke_color = 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 @@ -172,7 +178,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. @@ -180,10 +186,12 @@ def generate_rgbas_array(self, color, 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] = [ + 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( - [color_to_rgba(c, o) 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() @@ -194,7 +202,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) @@ -217,7 +227,7 @@ def update_rgbas_array(self, array_name, color=None, opacity=None): def set_fill( self, - color: str | None = None, + color: ParsableManimColor | None = None, opacity: float | None = None, family: bool = True, ): @@ -266,7 +276,7 @@ def construct(self): def set_stroke( self, - color=None, + color: ParsableManimColor = None, width=None, opacity=None, background=False, @@ -289,7 +299,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 = color + if isinstance(color, (list, tuple)): + self.background_stroke_color = color + else: + self.background_stroke_color = ManimColor(color) return self def set_background_stroke(self, **kwargs): @@ -299,12 +312,12 @@ def set_background_stroke(self, **kwargs): def set_style( self, - fill_color=None, - fill_opacity=None, - stroke_color=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=None, + background_stroke_color: ParsableManimColor = None, background_stroke_width=None, background_stroke_opacity=None, sheen_factor=None, @@ -341,10 +354,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() 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() else: ret["fill_color"] = self.get_fill_colors() ret["fill_opacity"] = self.get_fill_opacities() @@ -373,7 +387,7 @@ 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): self.set_fill(color, family=family) self.set_stroke(color, family=family) return self @@ -417,9 +431,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(rgba[:3]) if rgba.any() else None for rgba in self.get_fill_rgbas() ] @@ -455,7 +470,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 88388bd717..67bdd5e6a2 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/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"): diff --git a/manim/scene/vector_space_scene.py b/manim/scene/vector_space_scene.py index edea12354a..f651c2c86a 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 @@ -581,8 +590,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(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 deleted file mode 100644 index 6356fb3f04..0000000000 --- a/manim/utils/color.py +++ /dev/null @@ -1,552 +0,0 @@ -"""Colors and utility functions for conversion between different color models.""" - -from __future__ import annotations - -__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", -] - -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: - - 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 - - >>> 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" - -__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: Color | str) -> np.ndarray: - if isinstance(color, str): - return hex_to_rgb(color) - elif isinstance(color, Color): - return np.array(color.get_rgb()) - else: - raise ValueError("Invalid color type: " + str(color)) - - -def color_to_rgba(color: Color | str, 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 rgba_to_color(rgba: Iterable[float]) -> Color: - return rgb_to_color(rgba[:3]) - - -def rgb_to_hex(rgb: Iterable[float]) -> str: - return "#" + "".join("%02x" % round(255 * x) for x in rgb) - - -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 invert_color(color: Color) -> Color: - return rgb_to_color(1.0 - color_to_rgb(color)) - - -def color_to_int_rgb(color: Color) -> np.ndarray: - return (255 * color_to_rgb(color)).astype("uint8") - - -def color_to_int_rgba(color: Color, 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], - length_of_output: int, -) -> list[Color]: - if length_of_output == 0: - return 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") - alphas_mod1 = alphas % 1 - # End edge case - alphas_mod1[-1] = 1 - floors[-1] = len(rgbs) - 2 - return [ - rgb_to_color(interpolate(rgbs[i], rgbs[i + 1], alpha)) - for i, alpha in zip(floors, alphas_mod1) - ] - - -def interpolate_color(color1: Color, color2: Color, alpha: float) -> Color: - rgb = interpolate(color_to_rgb(color1), color_to_rgb(color2), alpha) - return rgb_to_color(rgb) - - -def average_color(*colors: Color) -> Color: - 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: - 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) - - -def random_color() -> Color: - return random.choice([c.value for c in list(Colors)]) - - -def get_shaded_rgb( - rgb: np.ndarray, - point: np.ndarray, - unit_normal_vect: np.ndarray, - light_source: np.ndarray, -) -> np.ndarray: - to_sun = normalize(light_source - point) - factor = 0.5 * np.dot(unit_normal_vect, to_sun) ** 3 - if factor < 0: - factor *= 0.5 - result = rgb + factor - return result diff --git a/manim/utils/color/AS2700.py b/manim/utils/color/AS2700.py new file mode 100644 index 0000000000..83a3e6abd0 --- /dev/null +++ b/manim/utils/color/AS2700.py @@ -0,0 +1,234 @@ +"""Australian Color Standard + +In 1985 the Australian Independent Color Standard AS 2700 was created. In +this standard, all colors can be identified via a category code (one of +B -- Blue, G -- Green, N -- Neutrals (grey), P -- Purple, R -- Red, T -- Blue/Green, +X -- Yellow/Red, Y -- Yellow) and a number. The colors also have (natural) names. + +To use the colors from this list, access them directly from the module (which +is exposed to Manim's global name space): + +.. code:: pycon + + >>> from manim import AS2700 + >>> AS2700.B23_BRIGHT_BLUE + ManimColor('#174F90') + +List of Color Constants +----------------------- + +These hex values (taken from https://www.w3schools.com/colors/colors_australia.asp) +are non official approximate values intended to simulate AS 2700 colors: + +.. automanimcolormodule:: manim.utils.color.AS2700 + +""" + +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..5d09a6f1b3 --- /dev/null +++ b/manim/utils/color/BS381.py @@ -0,0 +1,315 @@ +"""British Color Standard + +This module contains colors defined in one of the British Standards +for colors, BS381C. This standard specifies colors used in identification, +coding, and other special purposes. See https://www.britishstandardcolour.com/ +for more information. + +To use the colors from this list, access them directly from the module (which +is exposed to Manim's global name space): + +.. code:: pycon + + >>> from manim import BS381 + >>> BS381.OXFORD_BLUE + ManimColor('#1F3057') + +List of Color Constants +----------------------- + +These hex values (taken from https://www.w3schools.com/colors/colors_british.asp) +are non official approximate values intended to simulate the ones defined +in the standard: + +.. automanimcolormodule:: manim.utils.color.BS381 + +""" +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_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_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_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_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..06d7c7575f --- /dev/null +++ b/manim/utils/color/X11.py @@ -0,0 +1,530 @@ +# from https://www.w3schools.com/colors/colors_x11.asp + +"""X11 Colors + +These color and their names (taken from +https://www.w3schools.com/colors/colors_x11.asp) were developed at the +Massachusetts Intitute of Technology (MIT) during +the development of color based computer display system. + +To use the colors from this list, access them directly from the module (which +is exposed to Manim's global name space): + +.. code:: pycon + + >>> from manim import X11 + >>> X11.BEIGE + ManimColor('#F5F5DC') + + +List of Color Constants +----------------------- + +.. automanimcolormodule:: manim.utils.color.X11 +""" +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..d8ee93bac5 --- /dev/null +++ b/manim/utils/color/XKCD.py @@ -0,0 +1,949 @@ +"""Colors from the XKCD Color Name Survey + +XKCD is a popular `web comic `__ created by Randall Munroe. +His "`Color Name Survey `__" (with +200000 participants) resulted in a list of nearly 1000 color names. + +While the ``XKCD`` module is exposed to Manim's global name space, the colors included +in it are not. This means that in order to use the colors, access them via the module name: + +.. code:: pycon + + >>> from manim import XKCD + >>> XKCD.MANGO + ManimColor('#FFA62B') + + +List of Color Constants +----------------------- + +These hex values are non official approximate values intended to simulate the colors in HTML, +taken from https://www.w3schools.com/colors/colors_xkcd.asp. + +.. automanimcolormodule:: manim.utils.color.XKCD + +""" +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..6e0f36ff44 --- /dev/null +++ b/manim/utils/color/__init__.py @@ -0,0 +1,58 @@ +"""Utilities for working with colors and predefined color constants. + +Color data structure +-------------------- + +.. autosummary:: + :toctree: ../reference + + core + + +Predefined colors +----------------- + +There are several predefined colors available in Manim: + +- The colors listed in :mod:`.color.manim_colors` are loaded into + Manim's global name space. +- The colors in :mod:`.color.AS2700`, :mod:`.color.BS381`, :mod:`.color.X11`, + and :mod:`.color.XKCD` need to be accessed via their module (which are available + in Manim's global name space), or imported separately. For example: + + .. code:: pycon + + >>> from manim import XKCD + >>> XKCD.AVOCADO + ManimColor('#90B134') + + Or, alternatively: + + .. code:: pycon + + >>> from manim.utils.color.XKCD import AVOCADO + >>> AVOCADO + ManimColor('#90B134') + +The following modules contain the predefined color constants: + +.. autosummary:: + :toctree: ../reference + + manim_colors + AS2700 + BS381 + XKCD + X11 + +""" + +from typing import Dict, List + +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) +} diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py new file mode 100644 index 0000000000..2994504ce5 --- /dev/null +++ b/manim/utils/color/core.py @@ -0,0 +1,998 @@ +"""Manim's (internal) color data structure and some utilities for +color conversion. + +This module contains the implementation of :class:`.ManimColor`, +the data structure internally used to represent colors. +""" + + +from __future__ import annotations + +# logger = _config.logger +import colorsys +import random +from typing import Any, Sequence, Union + +import numpy as np +from typing_extensions import Literal, TypeAlias + +from ...utils.space_ops import normalize + +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]" + +HSV_Array_Float: TypeAlias = RGB_Array_Float +HSV_Tuple_Float: TypeAlias = RGB_Tuple_Float + +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: + """Internal representation of a color. + + The ManimColor class is the main class for the representation of a color. + It's internal representation is a 4 element array of floats corresponding + to a [r,g,b,a] value where r,g,b,a can be between 0 to 1. + + This is done in order to reduce the amount of color inconsitencies by constantly + casting between integers and floats which introduces errors. + + The class can accept any value of type :class:`ParsableManimColor` i.e. + + 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 + + ManimColor itself only accepts singular values and will directly interpret them into a single color if possible + Be careful when passing strings to ManimColor it can create a big overhead for the color processing. + + If you want to parse a list of colors use the function :meth:`parse` in :class:`ManimColor` which assumes that + you are going to pass a list of color so arrays will not bei interpreted as a single color. + + .. warning:: + If you pass an array of numbers to :meth:`parse` it will interpret the r,g,b,a numbers in that array as colors + so instead of the expect singular color you get and array with 4 colors. + + For conversion behaviors see the _internal functions for further documentation + + Parameters + ---------- + value + Some representation of a color (e.g., a string or + a suitable tuple). + alpha + The opacity of the color. By default, colors are + fully opaque (value 1.0). + """ + + def __init__( + self, + value: ParsableManimColor, + alpha: float = 1.0, + ) -> None: + if value is None: + self._internal_value = np.array((0, 0, 0, alpha), dtype=ManimColorDType) + elif isinstance(value, ManimColor): + # 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) + elif isinstance(value, str): + 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 + 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( + value, alpha # type: ignore + ) + 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}" + ) + elif hasattr(value, "get_hex") and callable(value.get_hex): + result = re_hex.search(value.get_hex()) + if result is None: + raise ValueError(f"Failed to parse a color from {value}") + + self._internal_value = ManimColor._internal_from_hex_string( + result.group(), alpha + ) + else: + # logger.error(f"Invalid color value: {value}") + raise TypeError( + "ManimColor only accepts int, str, list[int, int, int], " + "list[int, int, int, int], list[float, float, float], " + f"list[float, float, float, float], not {type(value)}" + ) + + @property + def _internal_value(self) -> ManimColorInternal: + """Returns the internal value of the current Manim color [r,g,b,a] float array + + Returns + ------- + ManimColorInternal + internal color representation + """ + return self.__value + + @_internal_value.setter + def _internal_value(self, value: ManimColorInternal) -> None: + """Overwrites the internal color value of the ManimColor object + + Parameters + ---------- + value : ManimColorInternal + The value which will overwrite the current color + + Raises + ------ + TypeError + Raises a TypeError if an invalid array is passed + """ + if not isinstance(value, np.ndarray): + raise TypeError("value must be a numpy array") + if value.shape[0] != 4: + raise TypeError("Array must have 4 values exactly") + self.__value: ManimColorInternal = value + + @staticmethod + def _internal_from_integer(value: int, alpha: float) -> ManimColorInternal: + return np.asarray( + ( + ((value >> 16) & 0xFF) / 255, + ((value >> 8) & 0xFF) / 255, + ((value >> 0) & 0xFF) / 255, + alpha, + ), + dtype=ManimColorDType, + ) + + # TODO: Maybe make 8 nibble hex also convertible ? + @staticmethod + def _internal_from_hex_string(hex: str, alpha: float) -> ManimColorInternal: + """Internal function for converting a hex string into the internal representation of a ManimColor. + + .. warning:: + This does not accept any prefixes like # or similar in front of the hex string. + This is just intended for the raw hex part + + *For internal use only* + + Parameters + ---------- + hex : str + hex string to be parsed + alpha : float + alpha value used for the color + + Returns + ------- + ManimColorInternal + Internal color representation + """ + if len(hex) == 6: + hex += "00" + 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: + """Internal function for converting a rgb tuple of integers into the internal representation of a ManimColor. + + *For internal use only* + + Parameters + ---------- + rgb : RGB_Tuple_Int + integer rgb tuple to be parsed + alpha : float, optional + optional alpha value, by default 1.0 + + Returns + ------- + ManimColorInternal + Internal color representation + + """ + 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: + """Internal function for converting a rgb tuple of floats into the internal representation of a ManimColor. + + *For internal use only* + + Parameters + ---------- + rgb : RGB_Tuple_Float + float rgb tuple to be parsed + + alpha : float, optional + optional alpha value, by default 1.0 + + Returns + ------- + ManimColorInternal + Internal color representation + """ + 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: + """Internal function for converting a rgba tuple of integers into the internal representation of a ManimColor. + + *For internal use only* + + Parameters + ---------- + rgba : RGBA_Tuple_Int + int rgba tuple to be parsed + + Returns + ------- + ManimColorInternal + Internal color representation + """ + return np.asarray(rgba, dtype=ManimColorDType) / 255 + + @staticmethod + def _internal_from_rgba(rgba: RGBA_Tuple_Float) -> ManimColorInternal: + """Internal function for converting a rgba tuple of floats into the internal representation of a ManimColor. + + *For internal use only* + + Parameters + ---------- + rgba : RGBA_Tuple_Float + int rgba tuple to be parsed + + Returns + ------- + ManimColorInternal + Internal color representation + """ + return np.asarray(rgba, dtype=ManimColorDType) + + @staticmethod + def _internal_from_string(name: str) -> ManimColorInternal: + """Internal function for converting a string into the internal representation of a ManimColor. + This is not used for hex strings, please refer to :meth:`_internal_from_hex` for this functionality. + + *For internal use only* + + Parameters + ---------- + name : str + The color name to be parsed into a color. Refer to the different color Modules in the documentation Page to + find the corresponding Color names. + + Returns + ------- + ManimColorInternal + Internal color representation + + Raises + ------ + ValueError + Raises a ValueError if the color name is not present with manim + """ + from . import _all_color_dict + + upper_name = name.upper() + + if upper_name in _all_color_dict: + return _all_color_dict[upper_name]._internal_value + else: + raise ValueError(f"Color {name} not found") + + def to_integer(self) -> int: + """Converts the current ManimColor into an integer + + Returns + ------- + int + integer representation of the color + + .. warning:: + This will return only the rgb part of the color + """ + return int.from_bytes( + (self._internal_value[:3] * 255).astype(int).tobytes(), "big" + ) + + def to_rgb(self) -> RGB_Array_Float: + """Converts the current ManimColor into a rgb array of floats + + Returns + ------- + RGB_Array_Float + rgb array with 3 elements of type float + """ + return self._internal_value[:3] + + def to_int_rgb(self) -> RGB_Array_Int: + """Converts the current ManimColor into a rgb array of int + + Returns + ------- + RGB_Array_Int + rgb array with 3 elements of type int + """ + return (self._internal_value[:3] * 255).astype(int) + + def to_rgba(self) -> RGBA_Array_Float: + """Converts the current ManimColor into a rgba array of floats + + Returns + ------- + RGBA_Array_Float + rgba array with 4 elements of type float + """ + return self._internal_value + + def to_int_rgba(self) -> RGBA_Array_Int: + """Converts the current ManimColor into a rgba array of int + + + Returns + ------- + RGBA_Array_Int + rgba array with 4 elements of type int + """ + return (self._internal_value * 255).astype(int) + + def to_rgba_with_alpha(self, alpha: float) -> RGBA_Array_Float: + """Converts the current ManimColor into a rgba array of float as :meth:`to_rgba` but you can change the alpha + value. + + Parameters + ---------- + alpha : float + alpha value to be used in the return value + + Returns + ------- + RGBA_Array_Float + rgba array with 4 elements of type float + """ + return np.fromiter((*self._internal_value[:3], alpha), dtype=ManimColorDType) + + def to_int_rgba_with_alpha(self, alpha: float) -> RGBA_Array_Int: + """Converts the current ManimColor into a rgba array of integers as :meth:`to_int_rgba` but you can change the alpha + value. + + Parameters + ---------- + alpha : float + alpha value to be used for the return value. (Will automatically be scaled from 0-1 to 0-255 so just pass 0-1) + + Returns + ------- + RGBA_Array_Int + rgba array with 4 elements of type int + """ + tmp = self._internal_value * 255 + tmp[3] = alpha * 255 + return tmp.astype(int) + + def to_hex(self, with_alpha: bool = False) -> str: + """Converts the manim color to a hexadecimal representation of the color + + Parameters + ---------- + with_alpha : bool, optional + Changes the result from 6 to 8 values where the last 2 nibbles represent the alpha value of 0-255, + by default False + + Returns + ------- + str + A hex string starting with a # with either 6 or 8 nibbles depending on your input, by default 6 i.e #XXXXXX + """ + 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 to_hsv(self) -> HSV_Array_Float: + """Converts the Manim Color to HSV array. + + .. note:: + Be careful this returns an array in the form `[h, s, v]` where the elements are floats. + This might be confusing because rgb can also be an array of floats so you might want to annotate the usage + of this function in your code by typing the variables with :class:`HSV_Array_Float` in order to differentiate + between rgb arrays and hsv arrays + + Returns + ------- + HSV_Array_Float + A hsv array containing 3 elements of type float ranging from 0 to 1 + """ + return colorsys.rgb_to_hsv(*self.to_rgb()) + + def invert(self, with_alpha=False) -> ManimColor: + """Returns an linearly inverted version of the color (no inplace changes) + + Parameters + ---------- + with_alpha : bool, optional + if true the alpha value will be inverted too, by default False + + .. note:: + This can result in unintended behavior where objects are not displayed because their alpha + value is suddenly 0 or very low. Please keep that in mind when setting this to true + + Returns + ------- + ManimColor + The linearly inverted ManimColor + """ + return ManimColor(1.0 - self._internal_value, with_alpha) + + def interpolate(self, other: ManimColor, alpha: float) -> ManimColor: + """Interpolates between the current and the given ManimColor an returns the interpolated color + + Parameters + ---------- + other : ManimColor + The other ManimColor to be used for interpolation + alpha : float + A point on the line in rgba colorspace connecting the two colors i.e. the interpolation point + + 0 corresponds to the current ManimColor and 1 corresponds to the other ManimColor + + Returns + ------- + ManimColor + The interpolated ManimColor + """ + return ManimColor( + self._internal_value * (1 - alpha) + other._internal_value * alpha + ) + + @classmethod + def from_rgb( + cls, + rgb: RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tuple_Int, + alpha: float = 1.0, + ) -> ManimColor: + """Creates a ManimColor from an RGB Array. Automagically decides which type it is int/float + + .. warning:: + Please make sure that your elements are not floats if you want integers. A 5.0 will result in the input + being interpreted as if it was a float rgb array with the value 5.0 and not the integer 5 + + + Parameters + ---------- + rgb : RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tuple_Int + Any 3 Element Iterable + alpha : float, optional + alpha value to be used in the color, by default 1.0 + + Returns + ------- + ManimColor + Returns the ManimColor object + """ + return cls(rgb, alpha) + + @classmethod + def from_rgba( + cls, rgba: RGBA_Array_Float | RGBA_Tuple_Float | RGBA_Array_Int | RGBA_Tuple_Int + ) -> ManimColor: + """Creates a ManimColor from an RGBA Array. Automagically decides which type it is int/float + + .. warning:: + Please make sure that your elements are not floats if you want integers. A 5.0 will result in the input + being interpreted as if it was a float rgb array with the value 5.0 and not the integer 5 + + Parameters + ---------- + rgba : RGBA_Array_Float | RGBA_Tuple_Float | RGBA_Array_Int | RGBA_Tuple_Int + Any 4 Element Iterable + + Returns + ------- + ManimColor + Returns the ManimColor object + """ + return cls(rgba) + + @classmethod + def from_hex(cls, hex: str, alpha: float = 1.0) -> ManimColor: + """Creates a Manim Color from a hex string, prefixes allowed # and 0x + + Parameters + ---------- + hex : str + The hex string to be converted (currently only supports 6 nibbles) + alpha : float, optional + alpha value to be used for the hex string, by default 1.0 + + Returns + ------- + ManimColor + The ManimColor represented by the hex string + """ + return cls(hex, alpha) + + @classmethod + def from_hsv( + cls, hsv: HSV_Array_Float | HSV_Tuple_Float, alpha: float = 1.0 + ) -> ManimColor: + """Creates a ManimColor from an HSV Array + + Parameters + ---------- + hsv : HSV_Array_Float | HSV_Tuple_Float + Any 3 Element Iterable containing floats from 0-1 + alpha : float, optional + the alpha value to be used, by default 1.0 + + Returns + ------- + ManimColor + The ManimColor with the corresponding RGB values to the HSV + """ + rgb = colorsys.hsv_to_rgb(*hsv) + return cls(rgb, 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. + + Returns + ------- + ManimColor + Either a list of colors or a singular color depending on the input + """ + if isinstance(color, (list, tuple)): + return [cls(c, alpha) for c in color] # type: ignore + return cls(color, alpha) # type: ignore + + @staticmethod + def gradient(colors: list[ManimColor], length: int): + """This is not implemented by now refer to :func:`color_gradient` for a working implementation for now""" + # TODO: implement proper gradient, research good implementation for this or look at 3b1b implementation + raise NotImplementedError + + def __repr__(self) -> str: + return f"{self.__class__.__name__}('{self.to_hex()}')" + + def __str__(self) -> str: + return f"{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 np.allclose(self._internal_value, other._internal_value) + + 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 = 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, +] +"""ParsableManimColor is the representation for all types that are parsable to a color in manim""" + + +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` + + Parameters + ---------- + color : ParsableManimColor + A color + + Returns + ------- + RGB_Array_Float + the corresponding rgb array + """ + return ManimColor(color).to_rgb() + + +def color_to_rgba(color: ParsableManimColor, alpha: float = 1) -> RGBA_Array_Float: + """Helper function for use in functional style programming refer to :meth:`to_rgba_with_alpha` in :class:`ManimColor` + + Parameters + ---------- + color : ParsableManimColor + A color + alpha : float, optional + alpha value to be used in the color, by default 1 + + Returns + ------- + RGBA_Array_Float + the corresponding rgba array + """ + return ManimColor(color).to_rgba_with_alpha(alpha) + + +def color_to_int_rgb(color: ManimColor) -> RGB_Array_Int: + """Helper function for use in functional style programming refer to :meth:`to_int_rgb` in :class:`ManimColor` + + Parameters + ---------- + color : ManimColor + A color + + Returns + ------- + RGB_Array_Int + the corresponding int rgb array + """ + return ManimColor(color).to_int_rgb() + + +def color_to_int_rgba(color: ManimColor, 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 + A color + alpha : float, optional + alpha value to be used in the color, by default 1.0 + + Returns + ------- + RGBA_Array_Int + the corresponding int rgba array + """ + return ManimColor(color).to_int_rgba_with_alpha(alpha) + + +def rgb_to_color(rgb: RGB_Array_Float | RGB_Tuple_Float) -> ManimColor: + """Helper function for use in functional style programming refer to :meth:`from_rgb` in :class:`ManimColor` + + Parameters + ---------- + rgb : RGB_Array_Float | RGB_Tuple_Float + A 3 element iterable + + Returns + ------- + ManimColor + A ManimColor with the corresponding value + """ + return ManimColor.from_rgb(rgb) + + +def rgba_to_color(rgba: RGBA_Array_Float | RGBA_Tuple_Float) -> ManimColor: + """Helper function for use in functional style programming refer to :meth:`from_rgba` in :class:`ManimColor` + + Parameters + ---------- + rgba : RGBA_Array_Float | RGBA_Tuple_Float + A 4 element iterable + + Returns + ------- + ManimColor + A ManimColor with the corresponding value + """ + return ManimColor.from_rgba(rgba) + + +def rgb_to_hex(rgb: RGB_Array_Float | RGB_Tuple_Float) -> str: + """Helper function for use in functional style programming refer to :meth:`from_rgb` in :class:`ManimColor` + + Parameters + ---------- + rgb : RGB_Array_Float | RGB_Tuple_Float + A 3 element iterable + + Returns + ------- + str + A hex representation of the color, refer to :meth:`to_hex` in :class:`ManimColor` + """ + return ManimColor.from_rgb(rgb).to_hex() + + +def hex_to_rgb(hex_code: str) -> RGB_Array_Float: + """Helper function for use in functional style programming refer to :meth:`to_hex` in :class:`ManimColor` + + Parameters + ---------- + hex_code : str + A hex string representing a color + + Returns + ------- + RGB_Array_Float + RGB array representing the color + """ + return ManimColor(hex_code).to_rgb() + + +def invert_color(color: ManimColor) -> ManimColor: + """Helper function for use in functional style programming refer to :meth:`invert` in :class:`ManimColor` + + Parameters + ---------- + color : ManimColor + A ManimColor + + Returns + ------- + ManimColor + The linearly inverted ManimColor + """ + return color.invert() + + +def interpolate_arrays( + arr1: np.ndarray[Any, Any], arr2: np.ndarray[Any, Any], alpha: float +) -> np.ndarray: + """Helper function used in Manim to fade between two objects smoothly + + Parameters + ---------- + arr1 : np.ndarray[Any, Any] + The first array of colors + arr2 : np.ndarray[Any, Any] + The second array of colors + alpha : float + The alpha value corresponding to the interpolation point between the two inputs + + Returns + ------- + np.ndarray + The interpolated value of the to arrays + """ + return (1 - alpha) * arr1 + alpha * arr2 + + +def color_gradient( + reference_colors: Sequence[ParsableManimColor], + 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 + length_of_output : int + The number of colors that the output should have, ideally more than the input + + Returns + ------- + list[ManimColor] | ManimColor + A list of ManimColor's which has the interpolated colors + """ + 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") + alphas_mod1 = alphas % 1 + # End edge case + alphas_mod1[-1] = 1 + floors[-1] = len(rgbs) - 2 + return [ + rgb_to_color((rgbs[i] * (1 - alpha)) + (rgbs[i + 1] * alpha)) + for i, alpha in zip(floors, alphas_mod1) + ] + + +def interpolate_color( + color1: ManimColor, color2: ManimColor, alpha: float +) -> ManimColor: + """Standalone function to interpolate two ManimColors and get the result refer to :meth:`interpolate` in :class:`ManimColor` + + Parameters + ---------- + color1 : ManimColor + First ManimColor + color2 : ManimColor + Second ManimColor + alpha : float + The alpha value determining the point of interpolation between the colors + + Returns + ------- + ManimColor + The interpolated ManimColor + """ + return color1.interpolate(color2, alpha) + + +def average_color(*colors: ManimColor) -> ManimColor: + """Determines the Average color of the given parameters + + Returns + ------- + ManimColor + The average color of the input + """ + 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() -> ManimColor: + """Returns you a random bright color + + .. warning:: + This operation is very expensive please keep in mind the performance loss. + + Returns + ------- + ManimColor + A bright ManimColor + """ + color = random_color() + curr_rgb = color_to_rgb(color) + new_rgb = interpolate_arrays(curr_rgb, np.ones(len(curr_rgb)), 0.5) + return ManimColor(new_rgb) + + +def random_color() -> ManimColor: + """Return you a random ManimColor + + .. warning:: + This operation is very expensive please keep in mind the performance loss. + + Returns + ------- + ManimColor + _description_ + """ + import manim.utils.color.manim_colors as manim_colors + + return random.choice(manim_colors._all_manim_colors) + + +def get_shaded_rgb( + rgb: np.ndarray, + point: np.ndarray, + unit_normal_vect: np.ndarray, + light_source: 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: + 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..f36925e035 --- /dev/null +++ b/manim/utils/color/manim_colors.py @@ -0,0 +1,220 @@ +"""Colors included in the global name space. + +These colors form Manim's default color space. + +.. manim:: ColorsOverview + :save_last_frame: + :hide_source: + + import manim.utils.color.manim_colors as Colors + + class ColorsOverview(Scene): + def construct(self): + def color_group(color): + group = VGroup( + *[ + Line(ORIGIN, RIGHT * 1.5, stroke_width=35, color=getattr(Colors, name.upper())) + 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=getattr(Colors, color.upper()), + ) + 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) + +.. automanimcolormodule:: manim.utils.color.manim_colors + +""" + +from typing import List + +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") + +# Colors used for Manim Community's logo and banner + +LOGO_WHITE = ManimColor("#ECE7E2") +LOGO_GREEN = ManimColor("#87C2A5") +LOGO_BLUE = ManimColor("#525893") +LOGO_RED = ManimColor("#E07A5F") +LOGO_BLACK = ManimColor("#343434") + +_all_manim_colors: List[ManimColor] = [ + x for x in globals().values() if isinstance(x, ManimColor) +] diff --git a/manim/utils/docbuild/autocolor_directive.py b/manim/utils/docbuild/autocolor_directive.py new file mode 100644 index 0000000000..cdd906f164 --- /dev/null +++ b/manim/utils/docbuild/autocolor_directive.py @@ -0,0 +1,92 @@ +from __future__ import annotations + +import inspect + +from docutils import nodes +from docutils.parsers.rst import Directive +from sphinx.application import Sphinx + +from manim import ManimColor + + +def setup(app: Sphinx) -> None: + app.add_directive("automanimcolormodule", ManimColorModuleDocumenter) + + +class ManimColorModuleDocumenter(Directive): + objtype = "automanimcolormodule" + required_arguments = 1 + has_content = True + + def add_directive_header(self, sig: str) -> None: + super().add_directive_header(sig) + + def run( + self, + ) -> None: + module_name = self.arguments[0] + try: + import importlib + + module = importlib.import_module(module_name) + except ImportError: + return [ + nodes.error( + None, + nodes.paragraph(text="Failed to import module '%s'" % module_name), + ) + ] + + # Number of Colors displayed in one row + num_color_cols = 2 + table = nodes.table(align="center") + + tgroup = nodes.tgroup(cols=num_color_cols * 2) + table += tgroup + for _ in range(num_color_cols * 2): + tgroup += nodes.colspec(colwidth=1) + + # Create header rows for the table + thead = nodes.thead() + row = nodes.row() + for _ in range(num_color_cols): + col1 = nodes.paragraph(text="Color Name") + col2 = nodes.paragraph(text="RGB Hex Code") + row += nodes.entry("", col1) + row += nodes.entry("", col2) + thead += row + tgroup += thead + + color_elements = [] + for member_name, member_obj in inspect.getmembers(module): + if isinstance(member_obj, ManimColor): + r, g, b = member_obj.to_rgb() + luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b + + # Choose the font color based on the background luminance + if luminance > 0.5: + font_color = "black" + else: + font_color = "white" + + color_elements.append((member_name, member_obj.to_hex(), font_color)) + + tbody = nodes.tbody() + + for base_i in range(0, len(color_elements), num_color_cols): + row = nodes.row() + for member_name, hex_code, font_color in color_elements[ + base_i : base_i + num_color_cols + ]: + col1 = nodes.literal(text=member_name) + col2 = nodes.raw( + "", + f'

    PjB4}zlLIj*I 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 YZ{oAKSC;)=y2Q7}_>TX0=l84s22mcJumAu6 literal 8487 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 UBbP0ITe`%zNBFKIzkU1kpZeEzjsO4v diff --git a/tests/test_graphical_units/control_data/img_and_svg/HalfEllipse.npz b/tests/test_graphical_units/control_data/img_and_svg/HalfEllipse.npz index 644b7324479a3066239305266de01309e379aa2b..f7cd4bd2d3f01a6b4a6402b06bb555f68a36fe46 100644 GIT binary patch literal 6412 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 Qg|{&1afkk!e%xmKH%B0mp8x;= literal 4606 zcmeHLYgkiP)?OhBwF*@6hH|OXsiXsfKm~$8c#6QZ2$E7|KqXRy(57582m&Ugqa(E- zc%f=Q2$QIw+*Cl6TWG5y5t1mE7zBa?AwUR$gd~Q9WDd-a@B4my|K?}UdCob{-h1tR z)_K>v-m~`(4?(Zm2ml`-*A56oS6Te99)Pym8Z2NVB%F**iYFY8O^bC-PR&HYM=LFe zDJ)wpAF^Rew;;aFY|gUq)AGP$-KOVOk4+}NI2#{KEdDCi?o_h=T~_LTfA@fZhFyiP ze*dcP@@_}7nq31owqMx9jC$?%wC1-SCo(s|Bk8xVKCqIXZZ8nD$GyhZ|K3ZH@j9OHUX7Nt2EoLeWF z^7nSL&+prZ`p;MWasLB>{~7|cfX3K>qOXBAqOKx{C4SHrx3s9giJ~RX zE}k_^n(iUjlkI6ECwRVEEE%bNguvcC{4keUbYEJQ{K;Even~63rJ%Qx3F4eNh=+6 zVizUZ47^`0s3f6?Rl=lUUJz=bC~vBU=`aYK(WI*o*A329d-I%dB0RfZB4O3k+` zlt`~GUQQW94huC{@_))RLao-qU$o7`iKCWjtye+mvA2&f0q4ghdx0Y7?p2aM0PkOI zGsY#}fPG$A_%I`dx*6raw<;=2(WQN2;a`?L+r|3?5{V)sm0E_rB<+hRX}>R|uL46o}^C#A>mtK{oocqk_DhHqci`D7v^^S^ptK z3(uQ}CL~Baphj90!CY7vCvJuYrtMzl{+l-#0%&L_)pqfAL1LhCLM-_lWMiE;F3%Yf zKgBKLseWjFOqh==C&Wce+zJhU-*uRozwH+W4;mQO?#vkxgAosx?k2qZ2SNfjkddZd z>wVC){UO)JC9WV#;+JEj0ts;&96vpN8FSW5vRo^-mH(uesn-fkfiguWGS}IcF@A@% zf~-TGkCL?3WoWjfPY7WB7E$nQ*97&s=cJPN(`I!xm%RIR&=bs1N-!vQ_;Ud+lGT&L$m~ zi+!*hB~L>93k**^+rrvka*dG-sSP7qE@r#OIMES?#g~Jb`8IUMSxBw!i+S|&nwW?n z5UW*8oOw2*M?l$~5>s@vMWNhG<9?%y=xc8fW|~2pth%20gYXKY4brZ$mv(WUNG2pU zu<(m(9Mfkpk!p(OTTjQ_d&N>J&0#Tmn5^or^A6Zb`=lu&rO1Wy8Ha|_J~0J47wf}J#vK8BQJ%`7Hw zbKo-OO;G+zD1C#t%RyO>P*?HP3cvFJm-iVYZaHfftmQ-&7#4euJmr4VG|K;>hznprVp@N0l z=CFUxHui9BVe%W5)4M_UIeX&^9t8?&1TiEvo{og9-8KD(BHirEIuv+$3{+omOW03s zN7Tz(-iqP*TqRgS>hZE{XU;O;*Faj!SOIC^;>-}8U=OK@-xGem9l}~?Tg>attsjZ+RV_z@5R44k zQ^M+|_vZHqwE#Bl&B^T9w&|&^I!9;@wawn*QgHIOHQG$1sqGbus8Z-7>Txf)j2cD!Alb01kx}KJPP*j0LHOI#c6#XMJY;7o&V#0Tx&fHv|ATAVvKWR$f!nu7t zC{sVL&str6Fllh3_)18zt9$m4DMY`e69;ovr`~TKku&pJ51=5ouAR_t__2|gnjVVg z3#Q*h>U5O3v)VCN;2TCX?HDBYg!K+=E^0DKRn7J$;wV{$_iG`o4AH~tzpcMr;lQ3n zc@0dzIm8RM$NA;7t_E+>TajJ7L6321y+klW+0-Dyr#~-6R}94Oi7hlzF;vF742c{Rui=RZ<4osv1mP>lH#A zsx(EX#)$L@?&{-(IRKr5hedbQf3~rI>t6$GppZbo=9n|APl!e@iOnHdD%A?=NKzf0I@(7Bt2MQ)Om0dyRTxQ6s6uHzFW+qR#4L>OcNh#IyRpcJw*eZbB+Oms#$O%Q899QUn z_zO>AE0&`W+Q%%Y6{dY$(5wA$$ba>tmEhZg&~#+eaJ$dFF+fq zuQDO@Yniw@XRi%?&~oWrE~}eiA3yU(FWCk(pT-T@~&M)pHy=4w%5Q=zbc5>d&Yk7z-GGYe}(|adS ztCy6h!WJL*P9gHGct6(TcUQ?PbW033AhQC0B6jxioq<->0H(wvP}t(hwm8qi%ij@< z-W&njPTZ<2KJ`F|Ot4@${>}XfU(zdPf?w6_7_au~JCU$WcTroJHSl)sotB3zYHWTO z?MN6tCM!IYZJs<_ObG5Bj-fPWO6ueW6%V?DQNT~0HdOb9<(=%=gKyWgVGvna)`RF0 z?lEn7f+&YRX!Gnp(A$*XbDP-HHYK z8B>)zb@oY4X|DIwExiu$+xyw29eBUFA2G^_K<#tS;wLpYBbH-W(#p{`Ws7uQ;~Ay3 zGm>+&LzoK2$by2`&I2glZf<8I?u%e`7x#Cc=!-emc>NJMU)fJim+B*AT}^4WMM6s8DA2FGq8cSIbeWa+msWy#=;Bky} zt#e{6Wog|*IU0G9=H}^d>ucu}FIi4U-gH;!N6qkd*-o6bE}s)$B(Up`R|(2v^0Gpw z8}AA#W2&-xrW?0o-Hc>}uF;Xcx=Qu_8-Bi=XInfasg(J=WnMk}{$LTq&_J)qoPVZ{ zCco+JZFTIIx6P*9!-Xu-lb?LbslW~Et5w8WTsE7kWgt%Qea~B5RLo`s(>-=^gv4Mv zwqB^*LkugD*5)bx;j%BP)r-@_9$xUO)^%7^$`emnzDAXJ?8$y=;q_kBZ&Z(p4zmv} z6{|?1Gvp#^UCN?=pD|;}Zd&7p=>CJa61l6+`;P_We{J3L$3XuJfsO|YxbP5^$wu`5 gw_Ec+#-5~x6G=trnwF=5Fb<^|@QIcLt9|N5t2PLlK9yYIexfA@Fq z{m%3EG5W*|f}o|~yA`_3TuTUA1wm=X7SKw_42n!R6%#@D=G4VgcCi=8i=b8WD?k)7 zNEx2-L29)i!ouW3KFRINo`c)?Ymn{B;PmvX(U~3e{gWFxcM5rdWvjye*n0TSo2$Y| zuEBy3H1T@a-h9`P_o&F9(HDI+RuQLvb#chPMOp5!)v2>kQRMoIGwT_-NRr&CqV{3m zzN5!aNIA8*RFSTeB*M9kkHNGX#K6WcsU)>=hPso0)s;vuZ6HH1y;#hj7zUw*Ge?=596 zTJY-Q??(jwA_QhfURdGvt=0kIb=#12wgDWiJTH#sjv(!L>@b~)o4&zpY7`6I0!z~a z+H;A5v$js0BXPG|#`g7R)LD0(Glrnwgb(9wSfs;z=Ru}iG*^_+In&RZc-3QAJmOF+o0mVnvzmQ zng9-Ry)U%A>2b#H!;k9GoH+=3{F+IRhcS08hUa1i^W@RxPVAv>KemoO>L&8Jyz%MV_h%*N;P!D5W_4R=>JIGNLGqZ{|;gPI2*Gy?H zsaT*!XG_%UhEXz$)Aq?Jrp-efj&jD7R}YtY#Dr=KfH5gaAD-B-!^~NmmsAz_Vu_u< zOECzOIj0c;L4kV4Cd*~@>N{c{JZC3WjKEneO9(2C6t^;2G%VKI@#&k=xD%5lKZDG&iiJ<8Qvs z<4r@oRl`DI6iLE^S3^)>kgA}IHMfbiJnxjC8Y9K%l}wW*Vxb_))WcsS;R7gm?z(B^ zq1QW+mY#{3q2zPg#ykYgy27#sif_74(qW^HfFU2>+`1~k%WGaEO_k0A@m^YwMUZDN z6Ak?|T=?+&y9r1wh}KntA3D3~=l0x9T_nK%pf^HumT}(rjh`;{YI3-(?DGEWyE0g| zK<_V3=fosWTc#pm|Fm1^yVFQK2s*%JD8NDr2s?LO;5Mt<{t3lX!-I<8j8y}nv27wasalU+HqX; zDsGU0&ci&z7T2t8$@43<&3gU1)A&e6*ik6k!~qZw36 zXnDhR?P3WaL*+??Zy29>epRVj45jTj#_`arSR=>o?_4nV`pzpfeYxxUT~}FvTovD; zVY*>F(vh(+4yhNj=As$HjQ@<2xbBAi8=URt_wTqLlL14Hf{fifcpWhKrFur@n#K!# zV3%48&^Q>|;)FGMeT=J5)E)=8WgkzDrmQT!%csH%5tH}BJPEW>if3J2h|{vQViJ@Y zl)MoW43Kg1^H|L?j-t11$ylHVARuhy$jfx*!E3>BU3C#MavD#`4;D+70dJ$!(@GD| zGn*0v=lK$ZQAbg}I2ol^3ze=0@1>Jju)1&j#l}&oJlJfZ5M-z=o6=?fsxnAoFOK>S05%X&Sw$)IJ`f&Q!^!fW^%XNzGQst}rqBlepRGZX2#{e15)1 z(oSH&tDF0CIA-%DOvjg0?~SFyYkEN4ud(hTfz2yAwJI6;yFBugSOSI{niIUREpq_PYGBC*^)cWu2m)*aibRdq=KvKZR3KDXq>%Bmgvp9+)I5Odt{|EYLVc@?0Dc^YF{? z=T;qp8c@y5L?Ca9ojS4Z*q`W*7>tYxJP4JhTZ-#nc*~|(Z3;lFsFtJ_Tciz@1#f#c zcqXe<+nK~O%wKjOMe=uZH?e%vs}f>$%dA@!pypj}IJu94wW#fM-_4-`LZm!=U#X<; z8JJeIDLwc^dIzMdWLUEV#4<<0aYj1whtWPwZ|k-r3NDTVO!G`p zzwkOsboh#xbE$!v!nZCo6M@QD+)|i$l<%IzBmQ~`Kl=wAE!F_ER+v($GS{-f=~S?22 znFOlrn>QzT^A#c#D?W7mi3xrS4x2g$0Q~tKX7X$Dvvg&3_YOKK}kvI9xEu{`Pb)d{D>yRprmH}fs|-97E5jey zVbLwwnn^$M(;t*NAl#S#4^v-NQHr>}o1=YaYJ*Df)?xu`$KZV?rIg`JnZ?$H$%>+<^ zJ<&{3pRhVQyi7ef8L-9Kj$=sZ$oFH1RPuI9*6rFyUm&%$N;NnsGy=R35vYlysm#)I)j&gi-xC?kUbxf`lH0D};Y;3yDO3_%crCg=v5gw+*fxD=y^ zB2f_#&_o9j1429i$7l#a5IGVQDg+2a2#0AvV82GIc5AElzxmTnC8@99d%ySI?;S}K z2|DvuLJ;%=c&~#lB6-C)JqSveZvg2*E1}Snha)M$M-MX&Z;Og%&ViQBN`NYaX<^r& zvWW9nD2BR2?K?9|R{9;vzeqe*Kq)YKd?@=O?sl3u^Frgk@`srpe9AeG#hd@$w{!P_ zWk=)BFT7*1dmZx!ucB28map^V-t0Jssd3L75Y@Gc$`-mUV>mDs`9sh zpryzDxWLgjcVkXXaI}9C?362fS)sBD4vuB37?EV~U8^9-h1x4~P!#zFbY|H}15Y?6 z>6P_dZjXwHPwTZ;9Rwi68{{gVsAKL-)%&`hl)Ul&5)SpPn}F&yHWz|qFBMsZPnqR}B14Ci)YML6+Y7@l&fTE%17(=B*gE=<%3zT zKt8w5nj{{6=`-DP9X)>H4qxcW>?LCG;`>Ooa#G!muYJggFmgJG#Y^9!ZvQg06S)#b zcpp|XX&Y0b4?%bR#}RM5e9>uhg{h#l-Ur0pU@U5-iy5Ii1MZV$6FFuWo>bJ@CC$E7 zWg6#!LERf(-0_FfI>wJFf0vx2B9_O_ffB+m$BA~((j^N`#-y%h+JPc61l=4F=NNF8 z8B!(~7|e~59NB}I2m}t}SO^`bv-Q5lAb)gB(|S`HRYk(Um8}of!TMGQ?Hqz;X@2tY z4Cg14-z4+X{KM_lju=jJz=O5$3O~iIq^3m>WK(l}74nBT)mh~CYI{=C%At$^c8 z<(=u0IacojXtnB95Y+VAh*qP73`^cx#qt41o>$D1F)_j7o7mT@_P@nF^=X(m$4)Z~ ze)8Quja@?BH7hgLto5FZS#V0$H|xH_SHN2J=v|j~Aq4e@N^((imk`c@J?a&}x3plN zhM7>exinS2351qM<)%q=tm^QRny+F|3Lw5}Z_VO@(9#o^03xmG&gs|9ioG*T&D3%e z?vK4!xvaecssxRn3nf$>6l{m}8!Rb_(ztmb{m;*IG=hY5!OS%31jP16mVd*<`avs& zuAmgB+aK3bb=s(tpV6r~5ah#}9!C+ENprHX&>2uKY6-@1e+uKOcqyGY2wJPSvysq`s3`T@P1}kVa*AY$ad5WxXfD`6uXda~ zDoWC;rRt_fHr+*?08Bcq_BV9kne^viQz3}#8Sc8RCF~r{XdxS6XP0(l*d0my7#;A~ zHoyc-bLQ(y-Sl}$mE%1q=qad;_taweQKrxb1N9+`K4qsRG9T|jrd zJl+QOZIU^tYt+DB14} zv^xH`Mn`{t)1?IS#7G|>>887##?#1O0>Lt<_pL7uDBA+3F!aH$>L}U&^{#aoQRFI z>#cCPRb^vduN~l29QisE9ca9_mv&pJ13^~8OP+hjtF&Esk5cALywVTw8+lq}W=3mW z&ZS)2-M72XeKZg_1^lNz9pbe%d zqkAEPMQt4dP5c6&Q$9JEB7sTS&d$|Bkd2e$L>RIl{E@3^vKp)wqJ@{^GVVFU{HEnH zFW@-0N1P(rWl|RAjo?5PV&jIMqsN=binhE-;E?$CT603+PTzyJmt z=(Zgh_`ng)z%XGdv<3WzrlqJsGdxRPv%_4$7p6=66o#U*U0Oi&O{aQCyh41vdwX*s zx4qq-84VUmwkqfr)No0HlsBFTXe(8Dz zbEG)Fj>O#2e0%qO{;D9b*Ih`W14`$a4%CChQr>abjDZp}5((SfneC73D8(iYKBi9g z)!P6-J)_RRj8B$nJjxF5R0+;X$AJG`o2i7SUrtWqn^pY6j&d3T#uk!>N<5h}(~p%! z!|XSbUBRF%E_ef*ZHgNXGq%3*+8|L&;0iW2(c-&^XSn!U2(@^a1{1($iAJj8%Hgxc zjw$`x?EYGPU%2lMssicvZi#xbP62veUb;yE)&d`EldXo^?~q1g0MPgAI|F|?11|VU p3nF38+?6{2?*a2aE)&4qK>zc&NhHh%8wi5tfR`iq4%Wj?{|4+&tW^L2 diff --git a/tests/test_graphical_units/control_data/img_and_svg/Line.npz b/tests/test_graphical_units/control_data/img_and_svg/Line.npz index 30c355c8ce2022b53b8b66318f463be2c40fd427..a5a03f0b626b881911adc01b2c06123b9464ad80 100644 GIT binary patch delta 354 zcmew(FkMh2z?+#xgn@y91BewF%&vy?v2silQK@GI2>`*{TN|?`2TC+NT(UTPqAr)D zPKZWa!|X?o9;h62lQ}ZYB{pPIb-{}%_p;8|i>#UaQP$~!<%a{7>A$W`FRt5L_4(7+ z+aF)te)0QD*2b#+bL{5()YsU~Kc{w?|N3eD(?6e=Uq8M2Xu19sQ&o@c?tBq#=nIp49uGej`?8b}kOcNilyUCocu(A8a19aW;tj#yy zynFYqEImEleLgD#!-Fe4zNP!Oh%zu7NNn3*fBS9O_vcdQZgBx+?(^oBR#*RCuy#*0 zBLjns+vbhTd`y!kFh}d$y%2Ew?Kj70-scN<_Ss4U^{)K!`)=0WIQd#N28M><;`?E< lKqmbE`I{Z$1~#b!8~?Hecr!AIFr$awWCsp2Hdk=)0RUQDpH~0? delta 309 zcmbO(_(wn_z?+#xgn@y91BewF7>_SK_=zWZ;o^;7qU*bz zxY*q!Wa1_s^V_&_!=wi;I!7kD=q{>jt)Df)O6@cIu5N({cCkCvt1iE@Uw?mJ)#rB? zpB#Vk{7c@>e;a1)lUTNYU%YSn;V+N>zPg?D@#){cuktEy?T@L6)9?TNb@|cjPe1;D zl4TZi-)1(ifcg3L{p*)+e)#=E|K|#$nKBzMdN56Vz-ioYdh^X3zQ-2x{_-&}GALO4Y%LQ q-OAd0bIxBmh<^l%3 diff --git a/tests/test_graphical_units/control_data/img_and_svg/ManimLogo.npz b/tests/test_graphical_units/control_data/img_and_svg/ManimLogo.npz index 618857d4e7329922d7f39d29b196e7d9f42ff60f..977be514617570b7483a727d85686e9c798b29fc 100644 GIT binary patch literal 9433 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 literal 3413 zcmeHKX;4#H7Jd*B6#*@_Q4pH8Xd1Ky2M7`Zp%Dc{Xp{*-!XkqZ0Yg}gvItJI6e3Hj zG>Q^nWKkX%St3gejL;3y5rUWmXu=W}**7615Wu;RR87r~`91T)mrCm0d(QpNcfND( z%YCj+h+V1>1nmJ|U8vesp3u4Ozi>?Kon#D>uT#%7IW|>9 zuFlr5NCl5_eYvPu>Zvso{ru`ePV|pGXPy!=e-Mv!f5>vyWQaD7+7r%eT7|srUjFq2 zDwcn*gpfHtr{lXq3-GUs@5|N5H&JI{qQ>q9)nq-g@c-kaeMhE!YRALXj3Ckyp%8|T z$w+eg`ukOZ{|^P|r$gej48Bo-Ae)T9%&gSp+p?blGj`xRk%(_xmxu-f+LX3VB(?JEjyNTN5XkB1>FBEcV!3Z?_HM^L`@RIr_G{|u)2D-{5C0N z0DH?_LTX$rJK-as8W%~JtX-L`kV7|0X(>NGJ&(;*m8@!3YQPOhQ~3eh6Zg99laPsH z2r6~Su#wa;1T3mkm1K|$LVY$nzFSH=E2UGwozU0;L{=_(Fd5V9Qs%L`!gA*#swA=n zGKwop@v_kdy8SUmOH5GU%F05}Y~w--52h$?O0?>@P*kJ7SStnKgVc=_n83~TsS^;< zC?#GR^>iyYo6fl>^&^8o7!3(Mh0_!3YBf@~H!lr9fm)?*2+l>peNq9M{M;OZ zE)Qo)Ik$8*6>x@!%cKcynTC(tKUvD|5nc_Zt?y&*0@CC@cVlH%SrN?8aW_YIax+1p z^3I-}Pir@Dez+JnJ$HnNRso4QM^N*uH`$YaF=|_mQ%vWae07)wTG}<82M2cKpFR#dW9YyPR9E9a6Ijk#y>}9fWFoUog zg1&$ISWrHjq%waezJH*+8ADa(l`ZiAxsu*TJ~>Coyn(6&!r=59_D2)i(kz(Q>+SQ& z>BtwS-f*Vl1*_KDrREeJ5FvKV1;uG%rMl{#OHff z=8gyq+Hl>AivdgZ98m)>n)=~lu-AWA6P64P5=Qz5rB2}-e&~I z_IL|z@+^ffCNCyrX-%0m(#=cWyczoKMmQQ{{km+41@_gjz?1`DpY>S&ROupK_`-ze ze-?OVrQln}`FD+vd0@an%@j`Zp)sOoki~jVq0Vll8>Whin+AUlRU)x#P+N!Q_nIe@ zQuX+5{NBae#$BQba8!F8o5O{xv9LSwpAQuGkF7n+N;<c0s&ytbX%2u)#4Vw}=pVWr&TfTi? zfJwlYR@4bI8sA?ICR6-d9G?%+JDujt{)S5qAwN~)zYF_aBo4?;p=RN=JNr6E!njJ- z7)tZn7tjn}udfRHPZb!9-$J-L$;hfA{@Y8?zv(6JH0*!A61h6bfoB#3$$-!HVGIHG HIt2X-{!6qP diff --git a/tests/test_graphical_units/control_data/img_and_svg/Penrose.npz b/tests/test_graphical_units/control_data/img_and_svg/Penrose.npz index b5fa1e02df58d7c37a1a86bd7fee9c7c4a24d0bb..0b30f2a70e4c7004c762119922f0e34567f8f216 100644 GIT binary patch literal 6903 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 a+|T`jtE194 z2Otp0cJR@H7-xs-C?AACZhm_ZvKw*$5_%&rDkLB{FfQ;!^tFU7kng@e0Yf2*QHmFj ziG7f>9;o|?U3f6%U|_TIE#Cv*xP4=1ci`Kj+XIh&Q{vuw>42S9@#F2q2aL~tr#*MO z`iH)smO@?fikv1-ox5-5G<@o6Q~s~~(eE+)Bl1e~D{J#cE>xfWM5ar2uLX}ERW_lm zJUR#~TC=ogzr-Yy;hRNl9G;%zxY*b7nREJv*A05NxzUB>52X8a&BRrz;ebs--@E&2 z({0NGA?8zN0%3@`k)AARV^?~v@mYM^=HlU;6KCa;2PR!Rq1e|4gHoKo$D=o5N;-E^ zV?OSc#h$;Xv*pjT{q_A90{>nFG7NBAQ-jwrwyQ6T;xm@A<*i`-X=8J|l@4L&itjU6 zuZCG#6wLo0=k+s$v7k#{%tQiH6;b(KqX#z z{p$-cT@3>Hp`4hP6`7bIm3Pf?l!7k*ihRkisA2symIKCsTzNrPF zf}7hfw|<}*zfBduPFa0InL`titR7O=UCMEXig5Q<$&aG-zXA5tv2SKY;*Fx~Ind?@ z%rZyh_|w@gH!Pzmini0#v}=(T4PtbPo>C_x{3u4fMWzwR5obne{I)ZEE=ad)-0MeL zSI0H$5e(k0bGaOMbf!jQphP$}S?a}`mgfHy{C0eEY!3jdMMYW5d%eGzPCVvYxL|zY z)3&Igs=O(jXlyOO76A6qEHD~mecWZZ&eO9;!z#}A%9U|eIUwLvbMIP!y<&)mH*@^f zWg&4cOnG?u^po%S6akH#P+>6nbe7G5tx70?EtJNQdnwBXIMw<5=M`N)Vv{ zOj}#@_1SLifjxhgTgI5JyPJ0pe=O$0cq6ypHxX%TRWaL6@5ke|KyD7y#(S|if)1Rg zsj%H!cJC;mw+vyLF!L|ylWQ}u)1czaPA2?w%DIt0(TTZKHc@iMsk;$jYAN50SPKXP zWe`gw{=K_g?Sqi`!TCf;ZgzHRV+3J}C2ZsT1qUuvhYla*wJ}2eB(CBNUji5u=Q|ve`M!!TkIum@KFa-t z_w)NE=|4U%nON8e$6ZPmogdwZm3EF@eVR?Q{R zp(0}C3!kRV2#dvs{$c@$@!g8AD0s@*GzOak4eBg(qtIJW@a+o=cUcn#2b2RD#2CAN zg0<+*rU*dt@xs=kL-#gtKrH#Esw2n>x=P!HJh^J4r~o~Qx4N>aTW~EDFi+En2J=h* z=dCkrnlV7B>pDB&4M^ox{~Rbj*>A)d^*)LaVBNUjhvo)0M7QMek}YuDj`p6Jc#Ve=AU zfn_XgFmh8=I>gFd?n^cc>P)Mo#Yi{sJ5^Nt)>yiL71F#$gXoGD3D;Zr>)&Hb&;|YZ z0m=*pboac-`F3cAv9vW_Fw?$AuE!Bjzs!Y*1^WR+u=UDa-NLasA@Oo(o}ah3x|Hg! z=6lVyVFiDJ(dyO6#FCmSB1Rh6H#bE)fGFUjHvpul4sCB?NN(+&$*9p9vBXvHf%;p` zeC5=iEG5$3T>MdvfF|3hSY-ix9^(#LozU4O`G6w&#iW!vBK0XQgja#=0rO&19_S;l z-~OR?s8{=Iv$A*=FKdd||!bv)k22JV5#mW!O>>`>Gv*Qnm3}7#|mQOYpa{gc+ zrd-T}UVbAkV>>=;=^H4N@7)kWWiQ9mMXS_DiDZA|NW*6~1;tfwicGK!Cm(_*JIf@1 zNAuOI53_894b9Z>cOTu+D-xG#FT8PhrueNrKgLXksuFQL><9z0fsrcm8Fl)HOnGeO z@w&ii32?;o?A1n4Lp%bVr0e4UE=7H@d1N+@cud<7Utd#WQ{yLz8@cXxqZ=m{XhR@b znK0Yaq_w-vR3et;jz%J##-A^BR7w{LV(YG$$?D59O1+?m4+)yjzOHmrvr`{?MR58C zsFDF$HU@fMXQ8(c=>B>+ILy!-^C{rkAf|s-lGMUgx{qUTirTYJyCe%+NI?VYeQk##o_9-45I}k61C^Bx$H+yyslFV zOfChYJL!qa%!*7r2|5wx^4FeQ<0HCN30;^=&ow_RAN7c^Mh@nZ`Y!KDvz-1)`VP|p zECDEOQ|$T&fc|F7aqPzDGB@j2v2N*QkcA+}7k35Y8_^@z)!+dSB`}}^ zQ6=bK&T@pEe|BdgR-aP7IR0t=J}qt1Wx(P?dw(ZfTcyDZs+k9)SX_RSP=?jLe3ud* zW-phuud!l)8EOj&$N*h?)yZ4fnqXawCaM_9R=B8?25guyhb_~P1y1>!&b1!LFZ9qdChZpoaC3f(YrzJKCe`*0%Z?{r z7;|hi5BV!S;zw~4|Ij9ZDm+g`+a?$PJJ?oM3M$oP;6FWJSPwJ?&eff+|$WaHI=b+wGb z7>nmR2vM(&&>p5u)JFG_>S?m7$~6kNu6_Zp0a~iINwPC&sk4OB?s|qHUHDA?w5v~2 z*vejd!xui2?EWl~A@cyL@8m=?i>I&DY|;VquEnPj7}(FcpyjNX+`fv|;(3Z#^1@17 z5NQ6j4`Wt}K0l<_phG9r0$Oc2Hkt|ZVpq38Q~4T@omR3V|L*&$oMippwweDpT#UZ^ zUwVA;Br9(uz3L$|{E9xMwbe2H%dF;^Lc#9`4Oij7V|&>yW` z8_8ICsf2YP7)DB4(+{#70p@BUVns{hw6f{-f6hrYOFDh_(Da?Lsx&&)z`$`rx>5K& zhclfvYLq7O|NV%i{@kW+`Oph{E|R8vSJ3V7`g&L4zOUjeQi$`4n4ks(;nMBXXZdpH zsW4;(UayzNYl7d|=nI{FEuY%T{bXMSK*|Z7h-Jg}qGY0J3C~rJ?>)^1Cgn@*xiw%T zP;@hN<0t z#XwR@{Al}aN!p2JK&U-bbpl2j;$>a}2G5#3Ig`mZ|)DKY6YnqR}PCz>O z6vzuM){g(Htq^eYME9ziu`F^Vy79`OX45TGC9vj5rT%rGVa$M-%_En5D7rl8p5;4S zK27vl?tbTAR=$DID@(#yA-bP#r2XfN#^K5R+Px$Wu1q|^?? z++x-1|8!(M}y4q@7FfL_;WZf1?-l^E}j$Teun2cTyE4YpHf6JSb{&>B=?c2 zmzA`LhxS@tJm7wA> zy86z9f9-`8MkSLo89`oD+-x70SkLxlEz6u_)Y1|k(fO95+e%z3Qve><@qLE3qTi4lbee%_Xg%3TMN@LkGhsUcQh;~tTox=LQx_nK3i`2 z4diA9XUcF*@MB@O;>O~ia0!=MG3@}bkRYHA6U>(Nzx$Be_BHwxqDITa1bYzj6@zNq z)sHT#U`~G@E2e3H3%H3KtRO8f4dGvh}F6sY$8AJKX*ucEb{18$F1v<*PTi&8{CIuMo!9>QU7{$9p1)yqwEZUHaWWIkfCqaqg_F)kx3Es>{Jhs9=EydoX z2`zsHW%DDZ^s)>O6VTeqs5Ri$m2XBJ=lGijb;eMDk-BElQkwj*hjRGc4FX-brlfgc zoans%R-2xhHitV_YlQ$qPUSsP46v%m5t3Z>b^zyC-$CX4ZW7w~X(#9s=T@^lrkOW$ zu&`51O7hUT{kFF4*7j3X{1$G6k&QLbsuH&fHih3WIiY@tGY6y|z2#mg_Yzg)ElRME^OD#Ey8mA~!z)J7!Sn6~*L zl~L6cg*A;6Oq0K5gFa{R+y{|>QMy=xziMn~Slu3!DP4wQ8Nkmz|5O9eO!d?_#A?r1 z?2?R?ze!;Gt<@EBo}?D-3JFm$vH-V_mlTSgA_~;N30}w(*X`AwxHXKBcrvJ*{ONbF zf`GT9s+F?ENOYQ5^E?;aq&&e*N-jqck2=blZ-)V2VPVsbh$;ITrG1066=d?3l|l?$ zeX#C31{BRWSi@<7x$DXcTvc=#b$PJFERrR=I9i=75NU+ZJ_4I$oOj}McuY%g=DaWB zvHKnwIu?enE#{s^p)yqqfRTS3qFTPn-}-zYYslZz!y{##OW1M$SbxNHU=-14^rO8?(~ jDgV3WO;Gia|MSm^tK+x86G0$bz#CWthyy5m2;@Hjf$s0p diff --git a/tests/test_graphical_units/control_data/img_and_svg/PixelizedText.npz b/tests/test_graphical_units/control_data/img_and_svg/PixelizedText.npz index ad38f70345775a5ace2d2534d58a55b955a10a76..c2c2dc6370feb19b6c8c2a92eb8832a1c8af2737 100644 GIT binary patch literal 4378 zcmeHLYfuwc6b@QzMHD(HRw~er52j2d!yv{=AUakUMXHrTMnZ^GF#`hyMpF^wgd))ePKPmg*{vvJ@>2w40e3pa@b?k~5W>DFj;o9(g; z-|&h3n$^gqTNl`FcCbzQ>PO^~)9!HB@9P{+va}0G{mcby<{(q)%^nwmhLaccaOJh3 z&3zM-%1pZH0iSNJXVEp|O7pVFRBC@2R3odf;OO*UEhnfGxQ%9McO(WmnyV-g7<$Ge z^qR2&HQa1amspYp>(Wt^7C3vu9erW9*>qpnZSE^{Gpo__M ztSilM@m-(NUy$3^*NJDlP{(_7Goda70bGF|v0l;z~)1aLTDO^tt(xBZ#hUc%H8MckUj~QO9)T2ObV8#mOF-yIa=<1(3rVwv!>5)4JX1dCUC92{6Hq4)rDxz`? zkNC3o_g13V50Uuz;YIgbAWjR{~ zS6&Kwh;L#~-AxwZdi<-n(sp{AR1_D)eRJO_i*?{QWEwtEqGI3Lnsjc)_{Ay8SlVZ_CbARORYb|BB=3t?)knv?7Syp-qR;i5k0+AMd^@~w}ElOHddfi`wkS7 zm#>z5L(Y1mdyjL|jsLz1mys%_=|MrOl1&$ijNNog(@+C2FgB=AizY^81UE8RTU)Er zbn+b=P>QnADv2wx_fa-;lBV_e?yUz+MvY!z1Xb;5oQnV&m01upxBBF6st{I9iXAae z=yy&^o8dLcBs3J!+}s?J+%9d%i_!AJWvAxbTazGn|LYn&1#^Gn^U$ZMGgKtC5AS;~ zNw|%jp?J|%<}pH@ufE!QBwT^@0Z}MFLUeR*ma;--(dc}CYDy4$VXCgHDoq_xc{oarw__v8M+Tq*`K6hF4DiAyz_WMj z>+1_8roKEvN4{}#NIb>pGOng*j}Lg+I%g08cB$ixqZoN8M$l0#;&X1uXHd1q3Mb=T zcpK+fFmxF_vdc-qZZpN4v3CQ@DcrKs(*5Wd!wh})HD&};E35&lRark>m?_*r@wWJ0 z`65N~?nC8y2ttM@PFTH`7b)17SQ01U#mfXV5j0^$KqKc#A=5m)aO2RdFbjfp#-0V? zlLethKrx!fls~}Edzpa^5cH9MmS)XQBe02YnX@a%X3mni|F@Fy4yofdQ}VypHFgEf S`+Ta`#=0Y|*QVEN8~*^WgYI|$ literal 4893 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 literal 5358 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 diff --git a/tests/test_graphical_units/control_data/img_and_svg/RotateTransform.npz b/tests/test_graphical_units/control_data/img_and_svg/RotateTransform.npz index f78c6532155f6722b2c49abc06ccfb4536db337b..00a74c7abbfdbcba1b96076f46d0755fe6f8181a 100644 GIT binary patch literal 4289 zcmeHLeKZv48h?j|#rEY6QxSV}R0@5Xp+vW>9CuVUZ6#z#tZ1eh42>P;R;LfE)>R5E zTeh!_43UT{h=#)VgzVfN92OE2;>_8VKtYp81aC#K3m&i9 zg73A*Cfs^`*(rnbYEJDqr#wcGin2xhVtIhEccz7De(3S_7rnhj8yo&{=G^fgzV)~s z7}r%jJ^qJn+Mf-#Z;MD-xM<>t#NKAjbT5uw22$|r(Vh(yfUbiIohN=`{_k2Gxl6I^+X=wR7?TG*ew><78m)kCWQyJA-9aNfdBi*X5FE=># zP@}%7kIx?w`0EgmKiCtY%~Ka_brYX}ghE@KfT!0r`)7Nt!Ju+ujTBzE!} zU;dhbO?**RQ`?(YRAE03p}G^XY0Bl#?$j&IdpL{(0V@zvo#gR42iKMz;Fu@_*;WX# z8Sc|`L4GGluym-gw)doepJxXgHRP{6I=s=}baWY%u>9D@#bXw_HO0qe_lLjaeJ+yW zx?cxP)wMOGWSey>l3l1dcqNk;(K)z!Ub96@wuAFm>g;U_nc_-#R7sV;ze;E$r@4$aP)|Gs}JX``fueJrc;sWy}oNpy4Jcx;WlU|SFZJ2^Az{b zp6N51o!jVGX={lSRa@w$zuDpx!;0T3;(vnfUwUR&?Y37FEh?BgKk~S4sv5uJGet_8 z(t25ZrM&smA>U3(L+CC{kN9HyG|0OYK=PVVEvh?r+o_{UodH1&tK6YakVoGHcx`l< zHKRJV7`Std!aJFJHUH#o70EK6>`YTGJ^{&vqBev~hgNhly(U)q0f=R`>eKKf&?*PtF(Jy{itP2HYMFkl3>|Xq`qkoV2Hlyx`Vmc+U+Q28qORW zx$mCB5r_&XX!TD^p`@3l7!CSLA-Dg@j|KwRe(3}1pd+S5ixpz83_c8mDQOrbCTv&5 zm*mUa5wd$Lgv1_DX5#$5>^x&*)9CSN{@EtQ?ON_p8*51HF%1}NH6sE3D*X1)0Niot zD(PDROY2yP*)l>?8b;ETR?A$Q@}0y?zd& zS_+A00Dbfi$$4lNtw??e+jmL*x3ak?dGgnuz(}qWM#y6d6tIt421vh9hY{8S*<2%c zVzl4MS^b_IE!k71Z)^})Q*9_Ilehcq_6GMe^nu)Opkq(4&qE*~G*(|~DIsAyCP8cm z7K&8d$}aje|__w8|y#gM)yCs$+f_hN>&MZ z{i&*zEnR}yryTRb``LQq#CSnX!aNMb>zkm)z#u)=?$D+u zCxcAIW6;kky?jrSp5K6c--5fWxfyh#mN5c-Jz!^h2w?oJqFCNS;LR4x+|Y&uUg>#T z3hch_0bLwX6MseHsO-hp)_vj-^nxHHN`0!0LwA^q*pfAk#e*Zdu8R{};Xa(s*{oH^E( zkKON=Pp~+r$3j0*`CyPzu=}aRS>?t0K@tvn7?py!ouK`RmP8tJv&M+Tig0V}B%&D_ z32Y)`s~In=Hp6lmohpMsU9oX%=f5)Fg%@NkntO)0AD>bGiNZH3yZ zV=Q99c~1xN0z(f%8ZnaV!MZ30<7$>p%~A|zrKc$!O4N4LfiSrtvA7H@PR);I;5&pT zCnsvut*`Z5vC>Iw<>%A$AcqiJ22+=YKPN&iWSNv5hUVYJQP=7D^Hg}Gqq>JN-2O-+N z=Bm9kU#?y70hK7c&R$V$P=Aefl1$07kQF@@1e7p`oi(9?vt;%m_U<)8+xQ^ufI1^Q zn76nuJIuj#Gdmce&*}?Ztg;IfSJdt5_)f_k$Al!&bbP7VGLyNJ&fqBq!ui^w_%{;n zGaa?nG};KEdq$G|X73aRt#Ab_7!0`XLS^8W897@yCbn}mSMZyw97_YP3rwYc`2VoO z!I90ky4%cq95p?7TV0qXzK4CGT88g~rwcGRwyCGDRQ@D?hhtOjR#e%aPUMyq%b(#y zn|)FeSVO*|dSkdcUf`PW7Ym+tb4> literal 2353 zcmWIWW@Zs#U|`??Vnv4Tz?<^(fy@S0Nd`U!5r(v)#N5>Ql*E!my}W`-Mg{?}3{WWp zNEHaYy=b^ffVv5*-S92mCf}+%PFYNo>)i6}?>f{CW|Ox#W!Qe&&&x zG4tEMuSdh@*Z=%l&A;FF&%ZCPzTVEiZ&Um0$Cu;l&(EJ{YghaI^6dC~d;WZ!J^$XG zs=x35Z=P$kxCsRT#VU$WqgazU$6797 z3OW>u0x|`JY6hY}*_Hw-a*<3}xYQK~RJp8FC<>H)?>Q{Xe(aw=DS>cu&i9_@JkRr< z^z-)8f0soFS;+jZCO4;+E6*<`;=}CtM^5OGrI2At39X`^ z;T~aQPNYSHdi0JeD_it&cI0^UpHKF0+_U$Q^+&07M&Zepjj_c`V_bG-EMBmcwfgMp zh1ZxL%jBiph>Xn0vlj~YMapdV?(lK!itkc=S|TeG-z_V)HxDtae&#Zu(9Sdr^!Imn zJZ(9xOKHiu!@4N%=!or(e_&iu;u3S>ab{>><^JKZYATk>evT{$DFce8)P+W!r#M5=Ksz!@b(z^ zYxW4=ffv^E`=B8qJ1Tu$S+A!g4hbu)0^aBol2l@o;Gx@0c&=ZS{P@a%kT-YNk7?ce zVxwtron0VU%Y;1Fz@bnT^Zcv06VFG5^;NgpRuOWE@28HSVP}Xr7qU_}`fPUxZS_jM zh2~sppmbzVIo_z4O;HP^QHAb=v^G4Y;W3|lCfLxUC)Z@iW=;F#%DgXygyf~ac1$&0 zbnqZ%A1bA^SeoyA{Rz`|uhY>M=DsL(7)X5srH)h=Qxwwt$t~E&Y7M1M zYeuDXMiEjzXqQH3SHz<1`I9?A_I$ydT18;7MC7R!EaKJwO zp)(iFJ!-9^y&ZIWhJulGz*%)0<<+_NwNOfUI@hrrH2VOUosDMiA5ER|pV%Oe0=ZlfnuRbWd$br(3QMsOH4`2jTP zMNLLQlXmQ$X4jicEt771a;^_uVsUoJIlFw)6F9#r@WPY&>A}Z%c`~|XT1}qjLi&I7|6jw@s=yMw|{w5D5H)CU0fz0M-E`U^nfhe$%?5?DtE z<@fQl=I^M{5;uZPA1lnX-v0>l9HAbUPIWW8P}SC%#OF>NXTDB|M{vz<#Up=~d%LfcrC7)v&__iewE^Cc{wT&#oR?UdW?ccLMWWxZv;#c(2(uIG zb15SxWvp-Ug2YmjI9DP;rPeDU%ZPyxciEyCu0ghlsvDL>^C7Ct{AZqlx68nw%H7*b l?;V!@|Gm`w+wP1W{r|tOINn|h;B`Qc=n+>Y+YYZee*+DEE-nB7 literal 2395 zcmWIWW@Zs#U|`??Vnv3I6jzm#KxPB0Bm*CV2t!&?Vs2`DN@7W(US2^ZBZB}~2B?$) zqzVMyUNT%I!6M*#G5@tz-FML-i4K97hPg?}iK+)(bdGo|GJB;J^TAl};H!gsj0+Od zUj06Q{eIoov*q%(e?ESAe)+Ze`}&ISUyeS$9KYYbzUteLFOP4R@84Vf_4N1r`+Ms? z-~WF)+XE*=t<>%%8*ZrCQ`Qzck&JY)k zlA|F&#SpmGa`{#*Bg28Ff~ej43=9zhe%aqy85p<^Wxn0Vz>wf*vG%Sw1A`97@~yv_ zfVt!0ma=#Th7AgHuD#=CU=SPCJQ`r5iG<1-gNnI()Tq%A0EWPVhw%a4j7%cTxSB$U bP-VgUs#7K*FTiBt&524ca) zDJY02Q709o)^I6Q3V{;CMJ`q@trV#jM4@~Lg+Ya#(=J)|WB>fKg!85O^7eh7_dL(@ ze&@?a@iY0x0sycK{x$&urn{qC4nP`i9asS@K=hdi*2&{1A~+E{;@Q6#fmQkpECr|v ztucjv<|`UOhB=?=8F&)%pg9sddH$w%hD(0rAImoH$MLJ5HMakLIhwsGXA5(!ecNM2 z1GQ4r=9`(h>WBRn`*DGR4)#y2Lw(DhR35nU;(gFUv7LYPyEf&brsKRRiLIgE{9Gtc z-gSKbO_%Mhxv8-Ep!vy0+id{^a?Qk$u95bX%YH4@HFi%v+ga$Lt@$nQ5a~?hejyLMuLb|Y7rP<46EOfq}U)g5E8={cL$WDv$Kg}1$;>sjQ_|jT(;Hx^|RiBzj z(ptKk0U&j_!J(4sxZ6Y29mX-n0OZ^4qnQ_FzO8;B?T4F2H?-C=Cq%Q1^v^~B9G>x| zySiI`#&vuL07cFhGl%=RF5^G4!{MQ1zU-l9)XO5<@b0?-@WNYvC~e49v(rT;5Lj`& z{6_WaxWq&0dtuj0r$lsD?$(gum&VDkt<}B+n)$};65Kc}bz+6esTm0^>BcjN&b6}f z(k#p2gG%}k41ZHl$Enn}kt~D_@ z-O~u9y^7h!kq`A^UB(5_h1%8tNT7xrm(D`Dh;2#orsgAjnq{9A0Db*QOq%(^T0h}^ z=}Snq<4F&scZFLa9Ym2R6i$g*$lq<*M}Wn9l7iuUv#xTf>0e;4{wix&{Qii;gefdO zt!Rf91=LkZLlMCPG|3y^hs__&>Y&w5p&a>QihV$fBW@7Z=9`O02YA*tJ10nR*s0>t zxsH}vv${3#xyUOQ3;l%aA8nrqhbd1n^UIDVET1?L4LJw5uaWmCVpugO!)N}L^0 zZQlw_wx$Xzh*^&et)Rafj@1eIDw5&=GGD>!CJ?b(Zafp#x5)m3t=3VF<&{`yEKyHt zV9uvm3+;7(L~=|hgTdokQoCDW9&>*s^hToSQ#-UHvG^x;X0 z?lE8GYkeDOWol(X9$m78d()k0lGNm8W>~zss%IKWC>DRg%G`Kl$!Y{_yJ(BeyYYM^ zh3L76eLaHtAPVHTr4M>z?FSww%teahW}9E&6tw}frrlU)(EGpc(x5ew^qdjQWt zi#S8!97R`$(I0QmQVm$G?2Jxe$Ue%JS1S#e z3`~MN2ImM_WCKE7=}uUTH?WWh*U}0Q=Ml_HS78AEEVNquo8*{q^>YJB^%yp-?*m&c yttAJ(q63xP7mO%=M#dH<|Mm6!&t_@x5WxfXuWxCJ9}d3b0WgA>2fTZjq3ADkS>mVw literal 2395 zcmWIWW@Zs#U|`??Vnv3I6jzm#KxPB0Bm*CV2t!&?Vs2`DN@7W(US2^ZBZB}~2B?$) zqzVMyUNT%I!6M*#G5@tz-FML-i4K97hPg?}iK+)(bdGo|GJB;J^TAl};H!gsj0+Od zUj06Q{eIoov*q%(e?ESAe)+Ze`}&ISUyeS$9KYYbzUteLFOP4R@84Vf_4N1r`+Ms? z-~WF)+XE*=t<>%%8*ZrCQ`Qzck&JY)k zlA|F&#SpmGa`{#*Bg28Ff~ej43=9zhe%aqy85p<^Wxn0Vz>wf*vG%Sw1A`97@~yv_ zfVt!0ma=#Th7AgHuD#=CU=SPCJQ`r5iG<1-gNnI()Tq%A0EWPVhw%a4j7%cTxSB$U bP-^X7!5y%}5zx00W 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 PAQj*P1%A7>u0Q_^8)uHr literal 5583 zcmeHLSy<9(+eaIhGn=O#BIvd z0YjY-ccGC3= zH#&MjG6{}Q0)4w70hWT+SFJw_ z{ffq? zZBr31B$mIc|M44LH|&1kaqn;c7GD?S{-VB@CI5*NOsjagH|ob!&V1==6oHQQU$mbj z(jn5;WqV52vOHA`{`fI=jz0*YIiHtbqk3W2ZeATpcDj%^lBybQjF7pRRoU>{s0EO@ z-&R+}r~z>LU$T|8Yt@{JLl87tuAQoy&O%7-H-Y)hkyly=%CEL+-Cmju++U;pPeT8G z{)@nW0Rkg|5!9yGwKSwsDG<%+X3t@>a-#-y$mUzW#OPtvCpCBFR`--E3pRm3%@KZf zHdk;&+3vUt<3_r<3mR>fz!64|*>!UT-PehEW7q*Am9SXL2b4f_NW@YiQLkR@x?eS#y zz9k?84$#n4ka_d;@Q2UXDu|DCzENt!IBG;aS z$+6JT(*%OL(@+089lC9NbY{_0ME;Ojp_pS&qG*^?!;i8r0WJdc+iM-nF2`dHdi*Rd z*dKQEHRd_u zb&Yws-?x*U=qCY9P?ZPet+f!*Us#{lp{MIO`bj&h=j(cBIfL zFTP`%C0m)$UtxDH5>hdLWIG;caU0%msOPD!NkyyHno(*Ws z=Bo0;|yLQ*oDxF$MhJ)1C)H!x%gj?XHtmb_z!v+t=ZpH&#VCyULHnLHJCS^;Z^NT-? zG{Usaa(6YOAwWs-uSBrQ$5s9=#dk*S4ibcPW3iC3x68@`UZK9m>({o4(?uS@$Ha8)yBu zq9$%(KLx_zld2h18oL?pk(uCHEPE3k3I^Le9g#RGgR);HbiS>)$@c@)+n&)d7sBY) zX1?8fjZR`cPxdIL89pd=@xATfqpDJn!DJH%2yWL?j7UG zGH%aZ3VVom-d0%mS3DFk5H~i|h?t(vcPByA_8$o} z8)7cKeQ3x(7dwLF(qJOnFp4OCPq#&n8r9T^`GA5+erBZ$0zJj9Q8_(*8h}Ro|VJaJNDPL#w7HCHjTYA4s>75BPRZbTSeCcFw-tYGaftV1uuq z5@(CmdHGzuMs14gb>=0xeLly5#;S}Th6mG1nbXdts*SJLOnm8DEf_B)Q1%y6@@%nc zS-~vPpq873tK8)Hrx*XH&uFb=?u|o{!So7g$`uMnl4|u=SEVgcB-H?cZddu|CY@^< zIE`7f#c?4MYfFR({!qgsX~FPgKU!6l0&LD2v^F}LQ$j)~ueO8HOG`Ui{ z>Jk&X;u6;xCK*X9uWE59F3Ww5?2UHASLOwGi%?rYps&oYo(#=HCCX+EONyC{yd-yz z@g-psinmIv=em~cEczjBrWUVuKBHWK@~2yx>;i$_dO4+1z^PA!<-ETUlq*PG7GV*;(Q$Ux=j0>5`nW| zTW3Ikin^1*UZ%|Ix+l?I?BK$gwFbvsz)*DWY;u)=n2Lx%WkNvepbw*TKr!3niF4;*|;}vSoUtmR7#!oJ-}-*K5P{ z1m%oHP3evzfI#&Qtd2j4dxg2=uyi9i#jA5XkWTu3*N0N$#ru*iAK{?}MxGv4%hj6w z-vE27!*(#PVqnnglhl)wGnY$Ci$%uVQckg$OznyEn(~-?3T*E;?o?wRVtQKOdY{RD z7i1Q^)43wl0OAi_E1i2dlu8($P8;g-BgF!YlVrjw$BuHV-5Onhll5DreuEdI3muD{ zKqN_$>Lg#TEA44_q0?2u?N_<*LEDXO_dOPzS@Av zAut7(LJcHv3=eWT8)@RfL&WSe_0bFP6ZEW=)8-fG7Xa=#A?Sp*)<#<@bgs+EzYogh zwnrd&hyw!Qt*2`kttZk z%cj8B?MF8s{ThX3O6&?qth}}A0hM&Q_0ypBoe|zd=xOwULe~~j6v=4vB6nR0;}+0b z!$MTy%TUkCM>UQA*SVnZeE^3W38B9Nz!tJ$(27jUF}tp zM})%9nJ-C@b}MQn-)Aj%!QG0u=du^jGEhiqvQ+aUb$bf4ySr}jL$2T_t z28=U1cRh)=L??0k9Qu~oEO>^Q1vE1M_|sDy#j-kIJ&dVOojm^?MVkSZFYE59#$huiv3NN* zG3IatLy|2SrTt1eS4nE}o`a8AM>j~!y&#UqwY+0!af zk15(-1Fz%4PWvkQTC9QSk3ZlH`qxGmWF1#3)iXApZRhhXOmqMcU@84D`Gg*3*E}C!y!~Jmna{3*D#_I1)Q{t1zVVPahU2B;@bjN z^;9K{;g|8Ng=YV8umC%K7oMVY4#;IU4<{3rm}Z#1d59aY%{SXF@A8Xx_)CXUnrG+m_IARZ-5TFFLsceiHoZ* z%$ZY}I{!kxSN513-Z|o9ZA8bLW%+6HHcVK zPVum{(#)u>t;PCp7@a2QJC^~nJa(zd6xLkZl@Uro%o}gUY`_yfl|m6&15Veze`9IF zj4EN)7}fX5{%Z2ypnG583{2$yo3TSij*~{ejsA2NcJdz9VOh*Rp)$4J%X%NN-@yjN zLS`f&E}arHk>VJ#y>Aw1Y@H!)6GD27q1IxB>-z)ng9&?*xcbccp4<&pNu-HvpRKLS zgnK3t2pT5MK_PpEYdEA)(?T!^mnu_t?y2J1b06${t%iocP4Bno8z+^0-zk9my%ysGaGi0H$moMdJix5cT-mwX_qhiv^vE9L8 zAzPOZnoM4NYEYm>*`4Asd3w1TsF5UQ07h8YLTF5K^PT*1g2bWC+PP3L?!9wUKza=oJ@)K|=7fAvc-ui={>6od zc+TcNiLAXq@_NaN-O)VX0b7Pd{5;&2{ROZbP}%hpDR~8!X<`vH7KJDr5B?miH?b|$ zI9-c=njt?+bvkBuz|q22Dq7rAaGFv1BFvRBIt=H$MC;1;CqSPM1Al#P!y5h+q-OKg zA?oh$1-z<90&>@C7D0MysdSzUk6kH)iT=2_K23speHJtBFlz+z&RsQe1KbIlXC1f$ z5RSNWDSwF!cf}7q@jLL*0l>F+42eUM`MwcJc8-6hpdtviAPOQZC!LiBH;h1pB_?q~Aw?cBJc2B56^P*xECD3XJ(t?qZrh#dAN_-!Niw;a-@U(c z&M*0$-{*esIarMDd!_(@jqvju@VA(goL9R5@NVA=wg6Lb?z3o8Y*b8iQZzd8!X*?i zS-S#V0pf+c=0>_O!yUWECyK|9nip-H&#pJ=&iqPR;QuV$q}{eS@jbnd&}WV77xqOG zusfq{w`Ywj%65PC_O_TCdXZs-HVYFR4{FZeY#bTzX|sg2iX9;hXe@VVq-V2Y8OnSw zk@`-%O2KeeEsd#_Ga9wDn;WK4&M?r<`&?8+dP;PheXeR{g3+ZuvXT!kYnEzThZ%H@ z3%i;@UP@|E5B4tQYX%mh@S1Q<{S!@)>J8r-^S%LSB9UP6cuNaQ%SA6@e0)*u zrnH`Hx41KBY-i`@(xqeEYt~-$D?>v=3kwS-bhUCvVqzjsrJ|`~QXr109?k8^xolIiqaa)qK;s+abn_t~>sUcT%Hfj4VvYK{g52Fg58 z*zi#fP0^Sn5wa-KBI%~I7YE$ktAfDp>Y^gs&d$y&Gcz;6lz1}vcYnm;e8xTit>yRc z@0p#S=aikw_oNwESy>5JfcKk@?vQ_m*A)172?W>b>gvSA4FyRJjg97g6&wynOw=!E zXkaqU`YO7+yVtB3DL&2&I1&>R(Pcpq5fQ=xL+`ja5@}yq5Sz_jvm9mhX6HvA|Cw_R z`1xMCbSWex#Gxz*gTbuwTO*HvRu@I)*CLT9L%r>D0)bEb0x0e3s2}j#+IZ7~{6$I- zTgJ*cF!<7V%NE|NS21O^wKq8j0sZ{Q$VfCCl@a`cD3@i=Cf;go{e-X&7~H;F*v98C zuBbW7hC$zi5*Z9H&Ew?cWFY}~H~aYdwltm}qaV+|cY9=7%rOD?>ey^6X5h`b0ll*V zoix|`Jr$Falj3?{bF#c4J~nob+!-7TbgKT>^XFfBZU#NsewChd<#yUOP;$Hy9J`A{ z-8x*YW0M@F=PhY4Nb7_DMtQFjI9(b9O8kG$0S=I0^^kz_zH>S*=b{-15JK-+$_o5@S6A0sV8~c?K3~sg<4_AbzaRW`Tz^}ek1Q12 zvPVvZ+MS{JRf5mEP|9+((?4F-#3$=MPImp&0kj~yPks?H!rWL z*}`Np3m-oGt)~9L1AF-$;BYcD%ii9eH#!>mR;{AGee=?{iOn`LHa4Ds#WFE9Wj{PN zHqGF&SRES06_KTrYVfaPTxTGFrXZ zM?AbFmPnjj-P}Gw@GvQkB7?^TrGjlp74J3U^Wvav8y%`)bWB`>){is?p zGn0W30fWcmp*1_3xn?bMa$rT(O-)T*4(splH=}id?7u=fKx=5oa?LvGg?}^E^$!F; zN!hu%*V5C|FNZN38nPMTvrJvAvQBU;fka}9&woK7lOJ!}_{7VWb?{FK3C^i%n669@*oSPQ<(l{|^t{(A5^eJj2q-4QoH`pC8X{f1hBz^R z_dfxbkVK=YF!F4VfMu1xot<4_bMs-jA$Uvc6N#=C78dUJ@UVjE=H z$H+K^e2IumWj>!DO`#mDs;asYjyBiduwiM_dM@F06&w98T6vWOysM7w(OD^W=+PqgwxD^IkmC%+O-fL5Mp y<%w3F{9nowheH}`EC!`xs{6lo$^Qe1w6%@p|K2mlV)XP84-|a6!|&bJi1lwNLdD4d literal 7884 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 bMoUIBAHRvVx0cxmM@WHhQ}8!J@;3VKY6MTq diff --git a/tests/test_graphical_units/control_data/vector_scene/vector_to_coords.npz b/tests/test_graphical_units/control_data/vector_scene/vector_to_coords.npz index 3115797f5a86a8e65144417040c53b0e71a44fec..b85482146528b4f72053a4c423ac7defb374a647 100644 GIT binary patch literal 235257 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Ⓢq#3)<&U%<7xYHgV{&+5wQxbnwB=$b$%^&7~l| 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∋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 F{}00Gibenc diff --git a/tests/test_graphical_units/img_svg_resources/curve.svg b/tests/test_graphical_units/img_svg_resources/curve.svg index 6aba8bdc20..049d480e90 100644 --- a/tests/test_graphical_units/img_svg_resources/curve.svg +++ b/tests/test_graphical_units/img_svg_resources/curve.svg @@ -46,7 +46,7 @@ 7.65*(t-sin(t)), 7.65*(cos(t)-1) - + **WARNING:** These instructions are for the community version _only_. Trying to use these instructions to install [3b1b/manim](https://github.com/3b1b/manim) or instructions there to install this version will cause problems. Read [this](https://docs.manim.community/en/stable/installation/versions.html) and decide which version you wish to install, then only follow the instructions for your desired version. +> **WARNING:** These instructions are for the community version _only_. Trying to use these instructions to install [3b1b/manim](https://github.com/3b1b/manim) or instructions there to install this version will cause problems. Read [this](https://docs.manim.community/en/stable/faq/installation.html#why-are-there-different-versions-of-manim) and decide which version you wish to install, then only follow the instructions for your desired version. Manim requires a few dependencies that must be installed prior to using it. If you want to try it out first before installing it locally, you can do so @@ -92,7 +92,7 @@ Some other useful flags include: - `-n ` to skip ahead to the `n`'th animation of a scene. - `-f` show the file in the file browser. -For a thorough list of command line arguments, visit the [documentation](https://docs.manim.community/en/stable/tutorials/configuration.html). +For a thorough list of command line arguments, visit the [documentation](https://docs.manim.community/en/stable/guides/configuration.html). ## Documentation From 6283d7e47d4ba2c03b7bb40735a4bcfae93f2669 Mon Sep 17 00:00:00 2001 From: Taxo Rubio Date: Mon, 3 Oct 2022 11:03:04 +0200 Subject: [PATCH 127/555] Fix: Allow rendering of empty text strings (#2977) * Fix: Allow rendering of empty text strings * added test for Write-ing an empty mobject Co-authored-by: Benjamin Hackl --- manim/animation/creation.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/manim/animation/creation.py b/manim/animation/creation.py index 2d0cab6326..46c5ad9fae 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -302,6 +302,15 @@ def construct(self): class ShowWriteReversed(Scene): def construct(self): self.play(Write(Text("Hello", font_size=144), reverse=True)) + + Tests + ----- + + Check that creating empty :class:`.Write` animations works:: + + >>> from manim import Write, Text + >>> Write(Text('')) + Write(Text('')) """ def __init__( @@ -343,7 +352,7 @@ def _set_default_config_from_length( else: run_time = 2 if lag_ratio is None: - lag_ratio = min(4.0 / length, 0.2) + lag_ratio = min(4.0 / max(1.0, length), 0.2) return run_time, lag_ratio def reverse_submobjects(self) -> None: From 4643f306273a56edacaaa39cfa34f9078dcc843b Mon Sep 17 00:00:00 2001 From: mostly documentation Date: Sat, 8 Oct 2022 12:32:00 -0700 Subject: [PATCH 128/555] Fix formatting and grammar issues in :doc:`/contributing/development` (#2904) * Formatting, capitalization, 404 reference Re-format list element for consistency, capitalize Manim where necessary, remove reference to 404'd flowchart * Fix incorrect grammar w.r.t. Graphviz * is->are * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * each commit are -> is Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Benjamin Hackl --- docs/source/contributing/development.rst | 27 ++++++++++-------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/docs/source/contributing/development.rst b/docs/source/contributing/development.rst index 42cf68033a..828b6c2c87 100644 --- a/docs/source/contributing/development.rst +++ b/docs/source/contributing/development.rst @@ -9,9 +9,11 @@ For first-time contributors For instructions see https://git-scm.com/. -#. Fork the project. Go to https://github.com/ManimCommunity/manim and - click the "fork" button to create a copy of the project for you to work on. You will - need a GitHub account. This will allow you to make a "Pull Request" (PR) +#. Fork the project: + + Go to https://github.com/ManimCommunity/manim and click the "fork" button + to create a copy of the project for you to work on. You will need a + GitHub account. This will allow you to make a "Pull Request" (PR) to the ManimCommunity repo later on. #. Clone your fork to your local computer: @@ -92,7 +94,7 @@ For first-time contributors formatted against our linter and formatters, ``black``, ``flake8``, ``isort`` and ``codespell``. -You are now ready to work on manim! +You are now ready to work on Manim! Develop your contribution ------------------------- @@ -217,7 +219,7 @@ generates any merge conflicts, you need to resolve them and push an updated version of the branch to your fork of the repository. Our pipeline consists of a series of different tests that ensure -that manim still works as intended and that the code you added +that Manim still works as intended and that the code you added sticks to our coding conventions. - **Code style**: We use the code style imposed @@ -229,7 +231,7 @@ sticks to our coding conventions. To fix code style problems, run ``flake8 `` for a style report, and then fix the problems manually that were detected by ``flake8``. -- **Tests**: The pipeline runs manim's test suite on different operating systems +- **Tests**: The pipeline runs Manim's test suite on different operating systems (the latest versions of Ubuntu, macOS, and Windows) for different versions of Python. The test suite consists of two different kinds of tests: integration tests and doctests. You can run them locally by executing ``poetry run pytest`` @@ -240,8 +242,8 @@ sticks to our coding conventions. to your pull request. Make sure not to introduce any Sphinx errors, and have a look at the built HTML files to see whether the formatting of the documentation you added looks as you intended. You can build the documentation locally - by running ``make html`` from the ``docs`` directory. Since the inheritance diagrams - require you to have `Graphviz `_ installed locally. + by running ``make html`` from the ``docs`` directory. Make sure you have `Graphviz `_ + installed locally in order to build the inheritance diagrams. Finally, if the pipeline passes and you are satisfied with your changes: wait for feedback and iterate over any requested changes. You will likely be asked to @@ -255,7 +257,7 @@ Further useful guidelines #. When submitting a PR, please mention explicitly if it includes breaking changes. #. When submitting a PR, make sure that your proposed changes are as general as - possible, and ready to be taken advantage of by all of manim's users. In + possible, and ready to be taken advantage of by all of Manim's users. In particular, leave out any machine-specific configurations, or any personal information it may contain. @@ -280,11 +282,4 @@ You can find examples for the ``docs`` in several places: the :doc:`Example Gallery <../examples>`, :doc:`Tutorials <../tutorials/index>`, and :doc:`Reference Classes <../reference>`. -In case you are contributing, please have a look at this flowchart: - -.. raw:: html - -

    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